Lines Matching full:pdu
169 snmp_pdu_create_response(const struct snmp_pdu *pdu, struct snmp_pdu *resp) in snmp_pdu_create_response() argument
172 strcpy(resp->community, pdu->community); in snmp_pdu_create_response()
173 resp->version = pdu->version; in snmp_pdu_create_response()
174 if (pdu->flags & SNMP_MSG_AUTODISCOVER) in snmp_pdu_create_response()
178 resp->request_id = pdu->request_id; in snmp_pdu_create_response()
179 resp->version = pdu->version; in snmp_pdu_create_response()
184 memcpy(&resp->engine, &pdu->engine, sizeof(pdu->engine)); in snmp_pdu_create_response()
185 memcpy(&resp->user, &pdu->user, sizeof(pdu->user)); in snmp_pdu_create_response()
187 resp->identifier = pdu->identifier; in snmp_pdu_create_response()
188 resp->security_model = pdu->security_model; in snmp_pdu_create_response()
189 resp->context_engine_len = pdu->context_engine_len; in snmp_pdu_create_response()
190 memcpy(resp->context_engine, pdu->context_engine, in snmp_pdu_create_response()
192 strlcpy(resp->context_name, pdu->context_name, in snmp_pdu_create_response()
198 * Build the response PDU on the fly. If the return code is SNMP_RET_ERR
199 * the pdu error status and index will be set.
202 snmp_get(struct snmp_pdu *pdu, struct asn_buf *resp_b, in snmp_get() argument
215 snmp_pdu_create_response(pdu, resp); in snmp_get()
221 for (i = 0; i < pdu->nbindings; i++) { in snmp_get()
222 resp->bindings[i].var = pdu->bindings[i].var; in snmp_get()
223 if ((tp = find_node(&pdu->bindings[i], &except)) == NULL) { in snmp_get()
224 if (pdu->version == SNMP_V1) { in snmp_get()
227 pdu->error_status = SNMP_ERR_NOSUCHNAME; in snmp_get()
228 pdu->error_index = i + 1; in snmp_get()
245 if (pdu->version == SNMP_V1) { in snmp_get()
246 pdu->error_status = SNMP_ERR_NOSUCHNAME; in snmp_get()
247 pdu->error_index = i + 1; in snmp_get()
256 pdu->error_status = SNMP_ERR_GENERR; in snmp_get()
257 pdu->error_index = i + 1; in snmp_get()
267 pdu->error_status = SNMP_ERR_TOOBIG; in snmp_get()
268 pdu->error_index = 0; in snmp_get()
275 pdu->error_status = SNMP_ERR_GENERR; in snmp_get()
276 pdu->error_index = i + 1; in snmp_get()
283 snmp_debug("get: failed to encode PDU"); in snmp_get()
336 struct snmp_value *outb, struct snmp_pdu *pdu) in do_getnext() argument
385 if (pdu->version == SNMP_V1) { in do_getnext()
386 pdu->error_status = SNMP_ERR_NOSUCHNAME; in do_getnext()
392 pdu->error_status = SNMP_ERR_GENERR; in do_getnext()
401 * Build the response PDU on the fly. The return is:
404 snmp_getnext(struct snmp_pdu *pdu, struct asn_buf *resp_b, in snmp_getnext() argument
415 snmp_pdu_create_response(pdu, resp); in snmp_getnext()
420 for (i = 0; i < pdu->nbindings; i++) { in snmp_getnext()
421 result = do_getnext(&context, &pdu->bindings[i], in snmp_getnext()
422 &resp->bindings[i], pdu); in snmp_getnext()
425 pdu->error_index = i + 1; in snmp_getnext()
435 pdu->error_status = SNMP_ERR_TOOBIG; in snmp_getnext()
436 pdu->error_index = 0; in snmp_getnext()
443 pdu->error_status = SNMP_ERR_GENERR; in snmp_getnext()
444 pdu->error_index = i + 1; in snmp_getnext()
451 snmp_debug("getnext: failed to encode PDU"); in snmp_getnext()
459 snmp_getbulk(struct snmp_pdu *pdu, struct asn_buf *resp_b, in snmp_getbulk() argument
473 snmp_pdu_create_response(pdu, resp); in snmp_getbulk()
479 if ((non_rep = pdu->error_status) > pdu->nbindings) in snmp_getbulk()
480 non_rep = pdu->nbindings; in snmp_getbulk()
484 result = do_getnext(&context, &pdu->bindings[i], in snmp_getbulk()
485 &resp->bindings[resp->nbindings], pdu); in snmp_getbulk()
488 pdu->error_index = i + 1; in snmp_getbulk()
502 pdu->error_status = SNMP_ERR_GENERR; in snmp_getbulk()
503 pdu->error_index = i + 1; in snmp_getbulk()
509 if (non_rep == pdu->nbindings) in snmp_getbulk()
513 for (cnt = 0; cnt < pdu->error_index; cnt++) { in snmp_getbulk()
515 for (i = non_rep; i < pdu->nbindings; i++) { in snmp_getbulk()
518 /* PDU is full */ in snmp_getbulk()
522 result = do_getnext(&context, &pdu->bindings[i], in snmp_getbulk()
523 &resp->bindings[resp->nbindings], pdu); in snmp_getbulk()
527 (pdu->nbindings - non_rep)], in snmp_getbulk()
528 &resp->bindings[resp->nbindings], pdu); in snmp_getbulk()
531 pdu->error_index = i + 1; in snmp_getbulk()
548 pdu->error_status = SNMP_ERR_GENERR; in snmp_getbulk()
549 pdu->error_index = i + 1; in snmp_getbulk()
560 snmp_debug("getnext: failed to encode PDU"); in snmp_getbulk()
571 rollback(struct context *context, struct snmp_pdu *pdu, u_int i) in rollback() argument
578 b = &pdu->bindings[i]; in rollback()
589 if (pdu->version != SNMP_V1) { in rollback()
590 pdu->error_status = SNMP_ERR_UNDO_FAILED; in rollback()
591 pdu->error_index = 0; in rollback()
675 snmp_set(struct snmp_pdu *pdu, struct asn_buf *resp_b, in snmp_set() argument
690 snmp_pdu_create_response(pdu, resp); in snmp_set()
699 for (i = 0; i < pdu->nbindings; i++) { in snmp_set()
700 b = &pdu->bindings[i]; in snmp_set()
707 if (pdu->version == SNMP_V1) { in snmp_set()
708 pdu->error_index = i + 1; in snmp_set()
709 pdu->error_status = SNMP_ERR_NOSUCHNAME; in snmp_set()
712 pdu->error_index = i + 1; in snmp_set()
713 pdu->error_status = SNMP_ERR_NOT_WRITEABLE; in snmp_set()
715 pdu->error_index = i + 1; in snmp_set()
716 pdu->error_status = SNMP_ERR_NO_ACCESS; in snmp_set()
718 pdu->error_index = i + 1; in snmp_set()
719 pdu->error_status = SNMP_ERR_NO_CREATION; in snmp_set()
733 if (pdu->version == SNMP_V1) { in snmp_set()
734 pdu->error_index = i + 1; in snmp_set()
735 pdu->error_status = SNMP_ERR_NOSUCHNAME; in snmp_set()
737 pdu->error_index = i + 1; in snmp_set()
738 pdu->error_status = SNMP_ERR_NOT_WRITEABLE; in snmp_set()
747 if (pdu->version == SNMP_V1) { in snmp_set()
748 pdu->error_index = i + 1; in snmp_set()
749 pdu->error_status = SNMP_ERR_BADVALUE; /* v2: wrongType */ in snmp_set()
751 pdu->error_index = i + 1; in snmp_set()
752 pdu->error_status = SNMP_ERR_WRONG_TYPE; in snmp_set()
761 pdu->error_index = i + 1; in snmp_set()
762 pdu->error_status = SNMP_ERR_GENERR; in snmp_set()
768 pdu->error_index = i + 1; in snmp_set()
769 pdu->error_status = SNMP_ERR_TOOBIG; in snmp_set()
773 pdu->error_index = i + 1; in snmp_set()
774 pdu->error_status = SNMP_ERR_GENERR; in snmp_set()
787 for (i = 0; i < pdu->nbindings; i++) { in snmp_set()
788 b = &pdu->bindings[i]; in snmp_set()
800 if (pdu->version == SNMP_V1) { in snmp_set()
847 pdu->error_index = i + 1; in snmp_set()
848 pdu->error_status = ret; in snmp_set()
850 rollback(&context, pdu, i); in snmp_set()
866 pdu->error_status = ret; in snmp_set()
867 pdu->error_index = context.ctx.var_index; in snmp_set()
870 if (pdu->version != SNMP_V1) { in snmp_set()
871 pdu->error_status = SNMP_ERR_UNDO_FAILED; in snmp_set()
872 pdu->error_index = 0; in snmp_set()
875 rollback(&context, pdu, i); in snmp_set()
891 for (i = 0; i < pdu->nbindings; i++) { in snmp_set()
971 * Make an error response from a PDU. We do this without decoding the
976 snmp_make_errresp(const struct snmp_pdu *pdu, struct asn_buf *pdu_b, in snmp_make_errresp() argument
985 snmp_pdu_create_response(pdu, &resp); in snmp_make_errresp()
990 if (pdu->version == SNMP_V3) { in snmp_make_errresp()
994 snmp_error("cannot decode encrypted pdu"); in snmp_make_errresp()
999 snmp_error("cannot decode scoped pdu header"); in snmp_make_errresp()
1021 snmp_error("cannot get pdu header"); in snmp_make_errresp()
1027 snmp_error("bad pdu header tag"); in snmp_make_errresp()
1039 resp.error_status = pdu->error_status; in snmp_make_errresp()
1040 resp.error_index = pdu->error_index; in snmp_make_errresp()