Lines Matching refs:request

163 static err_t snmp_process_get_request(struct snmp_request *request);
164 static err_t snmp_process_getnext_request(struct snmp_request *request);
165 static err_t snmp_process_getbulk_request(struct snmp_request *request);
166 static err_t snmp_process_set_request(struct snmp_request *request);
168 static err_t snmp_parse_inbound_frame(struct snmp_request *request);
169 static err_t snmp_prepare_outbound_frame(struct snmp_request *request);
170 static err_t snmp_complete_outbound_frame(struct snmp_request *request);
171 static void snmp_execute_write_callbacks(struct snmp_request *request);
182 struct snmp_request request; in snmp_receive() local
184 memset(&request, 0, sizeof(request)); in snmp_receive()
185 request.handle = handle; in snmp_receive()
186 request.source_ip = source_ip; in snmp_receive()
187 request.source_port = port; in snmp_receive()
188 request.inbound_pbuf = p; in snmp_receive()
192 err = snmp_parse_inbound_frame(&request); in snmp_receive()
194 err = snmp_prepare_outbound_frame(&request); in snmp_receive()
197 if (request.error_status == SNMP_ERR_NOERROR) { in snmp_receive()
199 if (request.request_type == SNMP_ASN1_CONTEXT_PDU_GET_REQ) { in snmp_receive()
200 err = snmp_process_get_request(&request); in snmp_receive()
201 } else if (request.request_type == SNMP_ASN1_CONTEXT_PDU_GET_NEXT_REQ) { in snmp_receive()
202 err = snmp_process_getnext_request(&request); in snmp_receive()
203 } else if (request.request_type == SNMP_ASN1_CONTEXT_PDU_GET_BULK_REQ) { in snmp_receive()
204 err = snmp_process_getbulk_request(&request); in snmp_receive()
205 } else if (request.request_type == SNMP_ASN1_CONTEXT_PDU_SET_REQ) { in snmp_receive()
206 err = snmp_process_set_request(&request); in snmp_receive()
211 err = snmp_complete_outbound_frame(&request); in snmp_receive()
214 … err = snmp_sendto(request.handle, request.outbound_pbuf, request.source_ip, request.source_port); in snmp_receive()
216 if ((request.request_type == SNMP_ASN1_CONTEXT_PDU_SET_REQ) in snmp_receive()
217 && (request.error_status == SNMP_ERR_NOERROR) in snmp_receive()
220 snmp_execute_write_callbacks(&request); in snmp_receive()
226 if (request.outbound_pbuf != NULL) { in snmp_receive()
227 pbuf_free(request.outbound_pbuf); in snmp_receive()
248 snmp_process_varbind(struct snmp_request *request, struct snmp_varbind *vb, u8_t get_next) in snmp_process_varbind() argument
256request->error_status = snmp_get_next_node_instance_from_oid(vb->oid.id, vb->oid.len, snmp_msg_get… in snmp_process_varbind()
258 if (request->error_status == SNMP_ERR_NOERROR) { in snmp_process_varbind()
262request->error_status = snmp_get_node_instance_from_oid(vb->oid.id, vb->oid.len, &node_instance); in snmp_process_varbind()
264 if (request->error_status == SNMP_ERR_NOERROR) { in snmp_process_varbind()
266 request->error_status = snmp_msg_getnext_validate_node_inst(&node_instance, request); in snmp_process_varbind()
268 if (request->error_status != SNMP_ERR_NOERROR) { in snmp_process_varbind()
276 if (request->error_status != SNMP_ERR_NOERROR) { in snmp_process_varbind()
277 if (request->error_status >= SNMP_VARBIND_EXCEPTION_OFFSET) { in snmp_process_varbind()
278 if ((request->version == SNMP_VERSION_2c) || request->version == SNMP_VERSION_3) { in snmp_process_varbind()
280 …vb->type = (SNMP_ASN1_CONTENTTYPE_PRIMITIVE | SNMP_ASN1_CLASS_CONTEXT | (request->error_status & S… in snmp_process_varbind()
283 err = snmp_append_outbound_varbind(&(request->outbound_pbuf_stream), vb); in snmp_process_varbind()
286 request->error_status = SNMP_ERR_NOERROR; in snmp_process_varbind()
288 request->error_status = SNMP_ERR_TOOBIG; in snmp_process_varbind()
290 request->error_status = SNMP_ERR_GENERROR; in snmp_process_varbind()
295 request->error_status = SNMP_ERR_GENERROR; in snmp_process_varbind()
305 err = snmp_append_outbound_varbind(&request->outbound_pbuf_stream, vb); in snmp_process_varbind()
308 request->error_status = SNMP_ERR_TOOBIG; in snmp_process_varbind()
310 request->error_status = SNMP_ERR_GENERROR; in snmp_process_varbind()
313 request->error_status = SNMP_ERR_GENERROR; in snmp_process_varbind()
329 snmp_process_get_request(struct snmp_request *request) in snmp_process_get_request() argument
333 vb.value = request->value_buffer; in snmp_process_get_request()
337 while (request->error_status == SNMP_ERR_NOERROR) { in snmp_process_get_request()
338 err = snmp_vb_enumerator_get_next(&request->inbound_varbind_enumerator, &vb); in snmp_process_get_request()
341 snmp_process_varbind(request, &vb, 0); in snmp_process_get_request()
343 request->error_status = SNMP_ERR_GENERROR; in snmp_process_get_request()
352 request->error_status = SNMP_ERR_GENERROR; in snmp_process_get_request()
365 snmp_process_getnext_request(struct snmp_request *request) in snmp_process_getnext_request() argument
369 vb.value = request->value_buffer; in snmp_process_getnext_request()
373 while (request->error_status == SNMP_ERR_NOERROR) { in snmp_process_getnext_request()
374 err = snmp_vb_enumerator_get_next(&request->inbound_varbind_enumerator, &vb); in snmp_process_getnext_request()
377 snmp_process_varbind(request, &vb, 1); in snmp_process_getnext_request()
379 request->error_status = SNMP_ERR_GENERROR; in snmp_process_getnext_request()
388 request->error_status = SNMP_ERR_GENERROR; in snmp_process_getnext_request()
401 snmp_process_getbulk_request(struct snmp_request *request) in snmp_process_getbulk_request() argument
404 s32_t non_repeaters = request->non_repeaters; in snmp_process_getbulk_request()
409 vb.value = request->value_buffer; in snmp_process_getbulk_request()
412 repetitions = LWIP_MIN(request->max_repetitions, SNMP_LWIP_GETBULK_MAX_REPETITIONS); in snmp_process_getbulk_request()
414 repetitions = request->max_repetitions; in snmp_process_getbulk_request()
420 while (request->error_status == SNMP_ERR_NOERROR) { in snmp_process_getbulk_request()
422 repetition_offset = request->outbound_pbuf_stream.offset; in snmp_process_getbulk_request()
431 err = snmp_vb_enumerator_get_next(&request->inbound_varbind_enumerator, &vb); in snmp_process_getbulk_request()
439 request->error_status = SNMP_ERR_GENERROR; in snmp_process_getbulk_request()
441 snmp_process_varbind(request, &vb, 1); in snmp_process_getbulk_request()
447 …while ((request->error_status == SNMP_ERR_NOERROR) && (repetitions > 0) && (request->outbound_pbuf… in snmp_process_getbulk_request()
451 …vb_enumerator_init(&repetition_varbind_enumerator, request->outbound_pbuf, repetition_offset, requ… in snmp_process_getbulk_request()
452 repetition_offset = request->outbound_pbuf_stream.offset; /* for next loop */ in snmp_process_getbulk_request()
454 while (request->error_status == SNMP_ERR_NOERROR) { in snmp_process_getbulk_request()
458 vb.value = request->value_buffer; in snmp_process_getbulk_request()
459 snmp_process_varbind(request, &vb, 1); in snmp_process_getbulk_request()
461 if (request->error_status != SNMP_ERR_NOERROR) { in snmp_process_getbulk_request()
463request->error_index = request->non_repeaters + repetition_varbind_enumerator.varbind_count; in snmp_process_getbulk_request()
472 request->error_status = SNMP_ERR_GENERROR; in snmp_process_getbulk_request()
473request->error_index = request->non_repeaters + repetition_varbind_enumerator.varbind_count; in snmp_process_getbulk_request()
477 if ((request->error_status == SNMP_ERR_NOERROR) && all_endofmibview) { in snmp_process_getbulk_request()
485 if (request->error_status == SNMP_ERR_TOOBIG) { in snmp_process_getbulk_request()
487 request->error_status = SNMP_ERR_NOERROR; in snmp_process_getbulk_request()
499 snmp_process_set_request(struct snmp_request *request) in snmp_process_set_request() argument
503 vb.value = request->value_buffer; in snmp_process_set_request()
508 while (request->error_status == SNMP_ERR_NOERROR) { in snmp_process_set_request()
509 err = snmp_vb_enumerator_get_next(&request->inbound_varbind_enumerator, &vb); in snmp_process_set_request()
514request->error_status = snmp_get_node_instance_from_oid(vb.oid.id, vb.oid.len, &node_instance); in snmp_process_set_request()
515 if (request->error_status == SNMP_ERR_NOERROR) { in snmp_process_set_request()
517 request->error_status = SNMP_ERR_WRONGTYPE; in snmp_process_set_request()
519 request->error_status = SNMP_ERR_NOTWRITABLE; in snmp_process_set_request()
522 request->error_status = node_instance.set_test(&node_instance, vb.value_len, vb.value); in snmp_process_set_request()
534 request->error_status = SNMP_ERR_WRONGLENGTH; in snmp_process_set_request()
539 request->error_status = SNMP_ERR_GENERROR; in snmp_process_set_request()
544 if (request->error_status == SNMP_ERR_NOERROR) { in snmp_process_set_request()
545 …snmp_vb_enumerator_init(&request->inbound_varbind_enumerator, request->inbound_pbuf, request->inbo… in snmp_process_set_request()
546 while (request->error_status == SNMP_ERR_NOERROR) { in snmp_process_set_request()
547 err = snmp_vb_enumerator_get_next(&request->inbound_varbind_enumerator, &vb); in snmp_process_set_request()
551request->error_status = snmp_get_node_instance_from_oid(vb.oid.id, vb.oid.len, &node_instance); in snmp_process_set_request()
552 if (request->error_status == SNMP_ERR_NOERROR) { in snmp_process_set_request()
554 if (request->inbound_varbind_enumerator.varbind_count == 1) { in snmp_process_set_request()
555 request->error_status = SNMP_ERR_COMMITFAILED; in snmp_process_set_request()
558 request->error_status = SNMP_ERR_UNDOFAILED; in snmp_process_set_request()
571 request->error_status = SNMP_ERR_GENERROR; in snmp_process_set_request()
611 snmp_parse_inbound_frame(struct snmp_request *request) in snmp_parse_inbound_frame() argument
619 …IF_PARSE_EXEC(snmp_pbuf_stream_init(&pbuf_stream, request->inbound_pbuf, 0, request->inbound_pbuf-… in snmp_parse_inbound_frame()
644 request->version = (u8_t)s32_value; in snmp_parse_inbound_frame()
647 if (request->version == SNMP_VERSION_3) { in snmp_parse_inbound_frame()
653 strcpy((char*)request->community, snmp_community); in snmp_parse_inbound_frame()
654 request->community_strlen = (u16_t)strlen(snmp_community); in snmp_parse_inbound_frame()
669 request->msg_id = s32_value; in snmp_parse_inbound_frame()
678 request->msg_max_size = s32_value; in snmp_parse_inbound_frame()
687 request->msg_flags = (u8_t)s32_value; in snmp_parse_inbound_frame()
696 request->msg_security_model = s32_value; in snmp_parse_inbound_frame()
722 … IF_PARSE_EXEC(snmp_asn1_dec_raw(&pbuf_stream, tlv.value_len, request->msg_authoritative_engine_id, in snmp_parse_inbound_frame()
724 request->msg_authoritative_engine_id_len = (u8_t)u16_value; in snmp_parse_inbound_frame()
731 …IF_PARSE_EXEC(snmp_asn1_dec_s32t(&pbuf_stream, tlv.value_len, &request->msg_authoritative_engine_b… in snmp_parse_inbound_frame()
738 …IF_PARSE_EXEC(snmp_asn1_dec_s32t(&pbuf_stream, tlv.value_len, &request->msg_authoritative_engine_t… in snmp_parse_inbound_frame()
747 IF_PARSE_EXEC(snmp_asn1_dec_raw(&pbuf_stream, tlv.value_len, request->msg_user_name, in snmp_parse_inbound_frame()
749 request->msg_user_name_len = (u8_t)u16_value; in snmp_parse_inbound_frame()
751 IF_PARSE_EXEC(snmpv3_get_user((char*)request->msg_user_name, NULL, NULL, NULL, NULL)); in snmp_parse_inbound_frame()
754 memset(request->msg_authentication_parameters, 0, SNMP_V3_MAX_AUTH_PARAM_LENGTH); in snmp_parse_inbound_frame()
764 …IF_PARSE_EXEC(snmp_asn1_dec_raw(&pbuf_stream, tlv.value_len, request->msg_authentication_parameter… in snmp_parse_inbound_frame()
768 if (request->msg_flags & SNMP_V3_AUTH_FLAG) { in snmp_parse_inbound_frame()
776 …IF_PARSE_EXEC(snmp_pbuf_stream_init(&pbuf_stream, request->inbound_pbuf, 0, request->inbound_pbuf-… in snmp_parse_inbound_frame()
782 …IF_PARSE_EXEC(snmp_pbuf_stream_init(&auth_stream, request->inbound_pbuf, 0, request->inbound_pbuf-… in snmp_parse_inbound_frame()
784 IF_PARSE_EXEC(snmpv3_get_user((char*)request->msg_user_name, &algo, key, NULL, NULL)); in snmp_parse_inbound_frame()
785 IF_PARSE_EXEC(snmpv3_auth(&auth_stream, request->inbound_pbuf->tot_len, key, algo, hmac)); in snmp_parse_inbound_frame()
787 …IF_PARSE_EXEC(memcmp(request->msg_authentication_parameters, hmac, SNMP_V3_MAX_AUTH_PARAM_LENGTH)); in snmp_parse_inbound_frame()
793 IF_PARSE_ASSERT(!(request->msg_flags & (SNMP_V3_AUTH_FLAG | SNMP_V3_PRIV_FLAG))); in snmp_parse_inbound_frame()
797 memset(request->msg_privacy_parameters, 0, SNMP_V3_MAX_PRIV_PARAM_LENGTH); in snmp_parse_inbound_frame()
803 IF_PARSE_EXEC(snmp_asn1_dec_raw(&pbuf_stream, tlv.value_len, request->msg_privacy_parameters, in snmp_parse_inbound_frame()
808 if (request->msg_flags & SNMP_V3_PRIV_FLAG) { in snmp_parse_inbound_frame()
817 IF_PARSE_EXEC(snmpv3_get_user((char*)request->msg_user_name, NULL, NULL, &algo, key)); in snmp_parse_inbound_frame()
819 request->msg_privacy_parameters, request->msg_authoritative_engine_boots, in snmp_parse_inbound_frame()
820 request->msg_authoritative_engine_time, algo, SNMP_V3_PRIV_MODE_DECRYPT)); in snmp_parse_inbound_frame()
838 IF_PARSE_EXEC(snmp_asn1_dec_raw(&pbuf_stream, tlv.value_len, request->context_engine_id, in snmp_parse_inbound_frame()
840 request->context_engine_id_len = (u8_t)u16_value; in snmp_parse_inbound_frame()
848 IF_PARSE_EXEC(snmp_asn1_dec_raw(&pbuf_stream, tlv.value_len, request->context_name, in snmp_parse_inbound_frame()
850 request->context_name_len = (u8_t)u16_value; in snmp_parse_inbound_frame()
860 …err = snmp_asn1_dec_raw(&pbuf_stream, tlv.value_len, request->community, &request->community_strle… in snmp_parse_inbound_frame()
863 request->community_strlen = 0; in snmp_parse_inbound_frame()
869 request->community[request->community_strlen] = 0; in snmp_parse_inbound_frame()
875 request->inbound_padding_len = pbuf_stream.length - tlv.value_len; in snmp_parse_inbound_frame()
890 if (request->version < SNMP_VERSION_2c) { in snmp_parse_inbound_frame()
905 request->request_type = tlv.type & SNMP_ASN1_DATATYPE_MASK; in snmp_parse_inbound_frame()
908 if (request->community_strlen == 0) { in snmp_parse_inbound_frame()
913 } else if (request->request_type == SNMP_ASN1_CONTEXT_PDU_SET_REQ) { in snmp_parse_inbound_frame()
916 request->error_status = SNMP_ERR_NOTWRITABLE; in snmp_parse_inbound_frame()
917 request->error_index = 1; in snmp_parse_inbound_frame()
918 …} else if (strncmp(snmp_community_write, (const char*)request->community, SNMP_MAX_COMMUNITY_STR_L… in snmp_parse_inbound_frame()
925 if (strncmp(snmp_community, (const char*)request->community, SNMP_MAX_COMMUNITY_STR_LEN) != 0) { in snmp_parse_inbound_frame()
939 IF_PARSE_EXEC(snmp_asn1_dec_s32t(&pbuf_stream, tlv.value_len, &request->request_id)); in snmp_parse_inbound_frame()
947 if (request->request_type == SNMP_ASN1_CONTEXT_PDU_GET_BULK_REQ) { in snmp_parse_inbound_frame()
948 IF_PARSE_EXEC(snmp_asn1_dec_s32t(&pbuf_stream, tlv.value_len, &request->non_repeaters)); in snmp_parse_inbound_frame()
949 if (request->non_repeaters < 0) { in snmp_parse_inbound_frame()
951 request->non_repeaters = 0; in snmp_parse_inbound_frame()
965 if (request->request_type == SNMP_ASN1_CONTEXT_PDU_GET_BULK_REQ) { in snmp_parse_inbound_frame()
966 IF_PARSE_EXEC(snmp_asn1_dec_s32t(&pbuf_stream, tlv.value_len, &request->max_repetitions)); in snmp_parse_inbound_frame()
967 if (request->max_repetitions < 0) { in snmp_parse_inbound_frame()
969 request->max_repetitions = 0; in snmp_parse_inbound_frame()
972 IF_PARSE_EXEC(snmp_asn1_dec_s32t(&pbuf_stream, tlv.value_len, &request->error_index)); in snmp_parse_inbound_frame()
980 request->inbound_varbind_offset = pbuf_stream.offset; in snmp_parse_inbound_frame()
981 request->inbound_varbind_len = pbuf_stream.length - request->inbound_padding_len; in snmp_parse_inbound_frame()
982 …snmp_vb_enumerator_init(&(request->inbound_varbind_enumerator), request->inbound_pbuf, request->in… in snmp_parse_inbound_frame()
990 snmp_prepare_outbound_frame(struct snmp_request *request) in snmp_prepare_outbound_frame() argument
993 struct snmp_pbuf_stream* pbuf_stream = &(request->outbound_pbuf_stream); in snmp_prepare_outbound_frame()
996 request->outbound_pbuf = pbuf_alloc(PBUF_TRANSPORT, 1472, PBUF_RAM); in snmp_prepare_outbound_frame()
997 if (request->outbound_pbuf == NULL) { in snmp_prepare_outbound_frame()
1001 snmp_pbuf_stream_init(pbuf_stream, request->outbound_pbuf, 0, request->outbound_pbuf->tot_len); in snmp_prepare_outbound_frame()
1009 snmp_asn1_enc_s32t_cnt(request->version, &tlv.value_len); in snmp_prepare_outbound_frame()
1011 OF_BUILD_EXEC( snmp_asn1_enc_s32t(pbuf_stream, tlv.value_len, request->version) ); in snmp_prepare_outbound_frame()
1014 if (request->version < SNMP_VERSION_3) { in snmp_prepare_outbound_frame()
1017 SNMP_ASN1_SET_TLV_PARAMS(tlv, SNMP_ASN1_TYPE_OCTET_STRING, 0, request->community_strlen); in snmp_prepare_outbound_frame()
1019 OF_BUILD_EXEC( snmp_asn1_enc_raw(pbuf_stream, request->community, request->community_strlen) ); in snmp_prepare_outbound_frame()
1025 request->outbound_msg_global_data_offset = pbuf_stream->offset; in snmp_prepare_outbound_frame()
1031 snmp_asn1_enc_s32t_cnt(request->msg_id, &tlv.value_len); in snmp_prepare_outbound_frame()
1033 OF_BUILD_EXEC(snmp_asn1_enc_s32t(pbuf_stream, tlv.value_len, request->msg_id)); in snmp_prepare_outbound_frame()
1037 snmp_asn1_enc_s32t_cnt(request->msg_max_size, &tlv.value_len); in snmp_prepare_outbound_frame()
1039 OF_BUILD_EXEC(snmp_asn1_enc_s32t(pbuf_stream, tlv.value_len, request->msg_max_size)); in snmp_prepare_outbound_frame()
1044 OF_BUILD_EXEC(snmp_asn1_enc_raw(pbuf_stream, &request->msg_flags, 1)); in snmp_prepare_outbound_frame()
1048 snmp_asn1_enc_s32t_cnt(request->msg_security_model, &tlv.value_len); in snmp_prepare_outbound_frame()
1050 OF_BUILD_EXEC(snmp_asn1_enc_s32t(pbuf_stream, tlv.value_len, request->msg_security_model)); in snmp_prepare_outbound_frame()
1053 request->outbound_msg_global_data_end = pbuf_stream->offset; in snmp_prepare_outbound_frame()
1056 request->outbound_msg_security_parameters_str_offset = pbuf_stream->offset; in snmp_prepare_outbound_frame()
1060 request->outbound_msg_security_parameters_seq_offset = pbuf_stream->offset; in snmp_prepare_outbound_frame()
1065 snmpv3_get_engine_id(&id, &request->msg_authoritative_engine_id_len); in snmp_prepare_outbound_frame()
1066 MEMCPY(request->msg_authoritative_engine_id, id, request->msg_authoritative_engine_id_len); in snmp_prepare_outbound_frame()
1067 …SNMP_ASN1_SET_TLV_PARAMS(tlv, SNMP_ASN1_TYPE_OCTET_STRING, 0, request->msg_authoritative_engine_id… in snmp_prepare_outbound_frame()
1069 …OF_BUILD_EXEC(snmp_asn1_enc_raw(pbuf_stream, request->msg_authoritative_engine_id, request->msg_au… in snmp_prepare_outbound_frame()
1071 request->msg_authoritative_engine_time = snmpv3_get_engine_time(); in snmp_prepare_outbound_frame()
1072 request->msg_authoritative_engine_boots = snmpv3_get_engine_boots(); in snmp_prepare_outbound_frame()
1076 snmp_asn1_enc_s32t_cnt(request->msg_authoritative_engine_boots, &tlv.value_len); in snmp_prepare_outbound_frame()
1078 …OF_BUILD_EXEC(snmp_asn1_enc_s32t(pbuf_stream, tlv.value_len, request->msg_authoritative_engine_boo… in snmp_prepare_outbound_frame()
1082 snmp_asn1_enc_s32t_cnt(request->msg_authoritative_engine_time, &tlv.value_len); in snmp_prepare_outbound_frame()
1084 …OF_BUILD_EXEC(snmp_asn1_enc_s32t(pbuf_stream, tlv.value_len, request->msg_authoritative_engine_tim… in snmp_prepare_outbound_frame()
1087 SNMP_ASN1_SET_TLV_PARAMS(tlv, SNMP_ASN1_TYPE_OCTET_STRING, 0, request->msg_user_name_len); in snmp_prepare_outbound_frame()
1089 … OF_BUILD_EXEC(snmp_asn1_enc_raw(pbuf_stream, request->msg_user_name, request->msg_user_name_len)); in snmp_prepare_outbound_frame()
1093 if (request->msg_flags & SNMP_V3_AUTH_FLAG) { in snmp_prepare_outbound_frame()
1094 memset(request->msg_authentication_parameters, 0, SNMP_V3_MAX_AUTH_PARAM_LENGTH); in snmp_prepare_outbound_frame()
1095 request->outbound_msg_authentication_parameters_offset = pbuf_stream->offset; in snmp_prepare_outbound_frame()
1098 …OF_BUILD_EXEC(snmp_asn1_enc_raw(pbuf_stream, request->msg_authentication_parameters, SNMP_V3_MAX_A… in snmp_prepare_outbound_frame()
1108 if (request->msg_flags & SNMP_V3_PRIV_FLAG) { in snmp_prepare_outbound_frame()
1109 snmpv3_build_priv_param(request->msg_privacy_parameters); in snmp_prepare_outbound_frame()
1113 …OF_BUILD_EXEC(snmp_asn1_enc_raw(pbuf_stream, request->msg_privacy_parameters, SNMP_V3_MAX_PRIV_PAR… in snmp_prepare_outbound_frame()
1122 request->outbound_msg_security_parameters_end = pbuf_stream->offset; in snmp_prepare_outbound_frame()
1126 if (request->msg_flags & SNMP_V3_PRIV_FLAG) { in snmp_prepare_outbound_frame()
1127 request->outbound_scoped_pdu_string_offset = pbuf_stream->offset; in snmp_prepare_outbound_frame()
1135 request->outbound_scoped_pdu_seq_offset = pbuf_stream->offset; in snmp_prepare_outbound_frame()
1140 snmpv3_get_engine_id(&id, &request->context_engine_id_len); in snmp_prepare_outbound_frame()
1141 MEMCPY(request->context_engine_id, id, request->context_engine_id_len); in snmp_prepare_outbound_frame()
1142 SNMP_ASN1_SET_TLV_PARAMS(tlv, SNMP_ASN1_TYPE_OCTET_STRING, 0, request->context_engine_id_len); in snmp_prepare_outbound_frame()
1144 …OF_BUILD_EXEC(snmp_asn1_enc_raw(pbuf_stream, request->context_engine_id, request->context_engine_i… in snmp_prepare_outbound_frame()
1147 SNMP_ASN1_SET_TLV_PARAMS(tlv, SNMP_ASN1_TYPE_OCTET_STRING, 0, request->context_name_len); in snmp_prepare_outbound_frame()
1149 OF_BUILD_EXEC(snmp_asn1_enc_raw(pbuf_stream, request->context_name, request->context_name_len)); in snmp_prepare_outbound_frame()
1154 request->outbound_pdu_offset = pbuf_stream->offset; in snmp_prepare_outbound_frame()
1160 snmp_asn1_enc_s32t_cnt(request->request_id, &tlv.value_len); in snmp_prepare_outbound_frame()
1162 OF_BUILD_EXEC( snmp_asn1_enc_s32t(pbuf_stream, tlv.value_len, request->request_id) ); in snmp_prepare_outbound_frame()
1167 request->outbound_error_status_offset = pbuf_stream->offset; in snmp_prepare_outbound_frame()
1173 request->outbound_error_index_offset = pbuf_stream->offset; in snmp_prepare_outbound_frame()
1180 request->outbound_varbind_offset = pbuf_stream->offset; in snmp_prepare_outbound_frame()
1320 snmp_complete_outbound_frame(struct snmp_request *request) in snmp_complete_outbound_frame() argument
1326 if (request->version == SNMP_VERSION_1) { in snmp_complete_outbound_frame()
1327 if (request->error_status != SNMP_ERR_NOERROR) { in snmp_complete_outbound_frame()
1329 switch (request->error_status) { in snmp_complete_outbound_frame()
1336 request->error_status = SNMP_ERR_NOSUCHNAME; in snmp_complete_outbound_frame()
1344 request->error_status = SNMP_ERR_BADVALUE; in snmp_complete_outbound_frame()
1351 request->error_status = SNMP_ERR_NOSUCHNAME; in snmp_complete_outbound_frame()
1357 request->error_status = SNMP_ERR_GENERROR; in snmp_complete_outbound_frame()
1362 if (request->request_type == SNMP_ASN1_CONTEXT_PDU_SET_REQ) { in snmp_complete_outbound_frame()
1364 switch (request->error_status) { in snmp_complete_outbound_frame()
1368 request->error_status = SNMP_ERR_NOTWRITABLE; in snmp_complete_outbound_frame()
1375 if (request->error_status >= SNMP_VARBIND_EXCEPTION_OFFSET) { in snmp_complete_outbound_frame()
1382 …if ((request->error_status != SNMP_ERR_NOERROR) || (request->request_type == SNMP_ASN1_CONTEXT_PDU… in snmp_complete_outbound_frame()
1385 …EXEC( snmp_pbuf_stream_init(&inbound_stream, request->inbound_pbuf, request->inbound_varbind_offse… in snmp_complete_outbound_frame()
1386 …eam_init(&(request->outbound_pbuf_stream), request->outbound_pbuf, request->outbound_varbind_offse… in snmp_complete_outbound_frame()
1387 snmp_pbuf_stream_writeto(&inbound_stream, &(request->outbound_pbuf_stream), 0); in snmp_complete_outbound_frame()
1390 frame_size = request->outbound_pbuf_stream.offset; in snmp_complete_outbound_frame()
1394 if (request->version == SNMP_VERSION_3 && (request->msg_flags & SNMP_V3_PRIV_FLAG)) { in snmp_complete_outbound_frame()
1396 …outbound_padding = (8 - (u8_t)((frame_size - request->outbound_scoped_pdu_seq_offset) & 0x07)) & 0… in snmp_complete_outbound_frame()
1398 snmp_pbuf_stream_write(&request->outbound_pbuf_stream, 0); in snmp_complete_outbound_frame()
1405 …OF_BUILD_EXEC( snmp_pbuf_stream_init(&(request->outbound_pbuf_stream), request->outbound_pbuf, 0, in snmp_complete_outbound_frame()
1406 OF_BUILD_EXEC( snmp_ans1_enc_tlv(&(request->outbound_pbuf_stream), &tlv) ); in snmp_complete_outbound_frame()
1409 if (request->version == SNMP_VERSION_3) { in snmp_complete_outbound_frame()
1412 SNMP_ASN1_SET_TLV_PARAMS(tlv, SNMP_ASN1_TYPE_SEQUENCE, 1, request->outbound_msg_global_data_end in snmp_complete_outbound_frame()
1413 - request->outbound_msg_global_data_offset - 1 - 1); in snmp_complete_outbound_frame()
1414 …OF_BUILD_EXEC(snmp_pbuf_stream_seek_abs(&(request->outbound_pbuf_stream), request->outbound_msg_gl… in snmp_complete_outbound_frame()
1415 OF_BUILD_EXEC(snmp_ans1_enc_tlv(&(request->outbound_pbuf_stream), &tlv)); in snmp_complete_outbound_frame()
1418 …SNMP_ASN1_SET_TLV_PARAMS(tlv, SNMP_ASN1_TYPE_OCTET_STRING, 1, request->outbound_msg_security_param… in snmp_complete_outbound_frame()
1419 - request->outbound_msg_security_parameters_str_offset - 1 - 1); in snmp_complete_outbound_frame()
1420 …OF_BUILD_EXEC(snmp_pbuf_stream_seek_abs(&(request->outbound_pbuf_stream), request->outbound_msg_se… in snmp_complete_outbound_frame()
1421 OF_BUILD_EXEC(snmp_ans1_enc_tlv(&(request->outbound_pbuf_stream), &tlv)); in snmp_complete_outbound_frame()
1423 …SNMP_ASN1_SET_TLV_PARAMS(tlv, SNMP_ASN1_TYPE_SEQUENCE, 1, request->outbound_msg_security_parameter… in snmp_complete_outbound_frame()
1424 - request->outbound_msg_security_parameters_seq_offset - 1 - 1); in snmp_complete_outbound_frame()
1425 …OF_BUILD_EXEC(snmp_pbuf_stream_seek_abs(&(request->outbound_pbuf_stream), request->outbound_msg_se… in snmp_complete_outbound_frame()
1426 OF_BUILD_EXEC(snmp_ans1_enc_tlv(&(request->outbound_pbuf_stream), &tlv)); in snmp_complete_outbound_frame()
1429 …SNMP_ASN1_SET_TLV_PARAMS(tlv, SNMP_ASN1_TYPE_SEQUENCE, 3, frame_size - request->outbound_scoped_pd… in snmp_complete_outbound_frame()
1430 …OF_BUILD_EXEC(snmp_pbuf_stream_seek_abs(&(request->outbound_pbuf_stream), request->outbound_scoped… in snmp_complete_outbound_frame()
1431 OF_BUILD_EXEC(snmp_ans1_enc_tlv(&(request->outbound_pbuf_stream), &tlv)); in snmp_complete_outbound_frame()
1437 …frame_size - request->outbound_pdu_offset - 1 - 3); /* - type - length_len(fixed, see snmp_prepare… in snmp_complete_outbound_frame()
1438 …OF_BUILD_EXEC( snmp_pbuf_stream_seek_abs(&(request->outbound_pbuf_stream), request->outbound_pdu_o… in snmp_complete_outbound_frame()
1439 OF_BUILD_EXEC( snmp_ans1_enc_tlv(&(request->outbound_pbuf_stream), &tlv) ); in snmp_complete_outbound_frame()
1442 if (request->error_status != 0) { in snmp_complete_outbound_frame()
1444 snmp_asn1_enc_s32t_cnt(request->error_status, &len); in snmp_complete_outbound_frame()
1449 …OF_BUILD_EXEC( snmp_pbuf_stream_seek_abs(&(request->outbound_pbuf_stream), request->outbound_error… in snmp_complete_outbound_frame()
1450 … OF_BUILD_EXEC( snmp_asn1_enc_s32t(&(request->outbound_pbuf_stream), len, request->error_status) ); in snmp_complete_outbound_frame()
1453 switch (request->error_status) { in snmp_complete_outbound_frame()
1469 if (request->error_status == SNMP_ERR_TOOBIG) { in snmp_complete_outbound_frame()
1470 request->error_index = 0; /* defined by RFC 1157 */ in snmp_complete_outbound_frame()
1471 } else if (request->error_index == 0) { in snmp_complete_outbound_frame()
1473 request->error_index = request->inbound_varbind_enumerator.varbind_count; in snmp_complete_outbound_frame()
1476 if (request->request_type == SNMP_ASN1_CONTEXT_PDU_SET_REQ) { in snmp_complete_outbound_frame()
1477 snmp_stats.intotalsetvars += request->inbound_varbind_enumerator.varbind_count; in snmp_complete_outbound_frame()
1479 snmp_stats.intotalreqvars += request->inbound_varbind_enumerator.varbind_count; in snmp_complete_outbound_frame()
1484 if (request->error_index != 0) { in snmp_complete_outbound_frame()
1486 snmp_asn1_enc_s32t_cnt(request->error_index, &len); in snmp_complete_outbound_frame()
1491 …OF_BUILD_EXEC( snmp_pbuf_stream_seek_abs(&(request->outbound_pbuf_stream), request->outbound_error… in snmp_complete_outbound_frame()
1492 … OF_BUILD_EXEC( snmp_asn1_enc_s32t(&(request->outbound_pbuf_stream), len, request->error_index) ); in snmp_complete_outbound_frame()
1496 …SNMP_ASN1_SET_TLV_PARAMS(tlv, SNMP_ASN1_TYPE_SEQUENCE, 3, frame_size - request->outbound_varbind_o… in snmp_complete_outbound_frame()
1497 …OF_BUILD_EXEC( snmp_pbuf_stream_seek_abs(&(request->outbound_pbuf_stream), request->outbound_varbi… in snmp_complete_outbound_frame()
1498 OF_BUILD_EXEC( snmp_ans1_enc_tlv(&(request->outbound_pbuf_stream), &tlv) ); in snmp_complete_outbound_frame()
1503 if (request->version == SNMP_VERSION_3 && (request->msg_flags & SNMP_V3_PRIV_FLAG)) { in snmp_complete_outbound_frame()
1508 …OF_BUILD_EXEC(snmp_pbuf_stream_init(&request->outbound_pbuf_stream, request->outbound_pbuf, 0, req… in snmp_complete_outbound_frame()
1509 …OF_BUILD_EXEC(snmp_pbuf_stream_seek_abs(&(request->outbound_pbuf_stream), request->outbound_scoped… in snmp_complete_outbound_frame()
1511 - request->outbound_scoped_pdu_string_offset - 1 - 3); in snmp_complete_outbound_frame()
1512 OF_BUILD_EXEC(snmp_ans1_enc_tlv(&(request->outbound_pbuf_stream), &tlv)); in snmp_complete_outbound_frame()
1514 OF_BUILD_EXEC(snmpv3_get_user((char*)request->msg_user_name, NULL, NULL, &algo, key)); in snmp_complete_outbound_frame()
1516 OF_BUILD_EXEC(snmpv3_crypt(&request->outbound_pbuf_stream, tlv.value_len, key, in snmp_complete_outbound_frame()
1517 request->msg_privacy_parameters, request->msg_authoritative_engine_boots, in snmp_complete_outbound_frame()
1518 request->msg_authoritative_engine_time, algo, SNMP_V3_PRIV_MODE_ENCRYPT)); in snmp_complete_outbound_frame()
1521 if (request->version == SNMP_VERSION_3 && (request->msg_flags & SNMP_V3_AUTH_FLAG)) { in snmp_complete_outbound_frame()
1526 OF_BUILD_EXEC(snmpv3_get_user((char*)request->msg_user_name, &algo, key, NULL, NULL)); in snmp_complete_outbound_frame()
1527 OF_BUILD_EXEC(snmp_pbuf_stream_init(&(request->outbound_pbuf_stream), in snmp_complete_outbound_frame()
1528 request->outbound_pbuf, 0, request->outbound_pbuf->tot_len)); in snmp_complete_outbound_frame()
1529 …OF_BUILD_EXEC(snmpv3_auth(&request->outbound_pbuf_stream, frame_size + outbound_padding, key, algo… in snmp_complete_outbound_frame()
1531 MEMCPY(request->msg_authentication_parameters, hmac, SNMP_V3_MAX_AUTH_PARAM_LENGTH); in snmp_complete_outbound_frame()
1532 OF_BUILD_EXEC(snmp_pbuf_stream_init(&request->outbound_pbuf_stream, in snmp_complete_outbound_frame()
1533 request->outbound_pbuf, 0, request->outbound_pbuf->tot_len)); in snmp_complete_outbound_frame()
1534 OF_BUILD_EXEC(snmp_pbuf_stream_seek_abs(&request->outbound_pbuf_stream, in snmp_complete_outbound_frame()
1535 request->outbound_msg_authentication_parameters_offset)); in snmp_complete_outbound_frame()
1538 OF_BUILD_EXEC(snmp_ans1_enc_tlv(&request->outbound_pbuf_stream, &tlv)); in snmp_complete_outbound_frame()
1539 OF_BUILD_EXEC(snmp_asn1_enc_raw(&request->outbound_pbuf_stream, in snmp_complete_outbound_frame()
1540 request->msg_authentication_parameters, SNMP_V3_MAX_AUTH_PARAM_LENGTH)); in snmp_complete_outbound_frame()
1544 pbuf_realloc(request->outbound_pbuf, frame_size + outbound_padding); in snmp_complete_outbound_frame()
1553 snmp_execute_write_callbacks(struct snmp_request *request) in snmp_execute_write_callbacks() argument
1558 …enumerator_init(&inbound_varbind_enumerator, request->inbound_pbuf, request->inbound_varbind_offse… in snmp_execute_write_callbacks()