Lines Matching refs:pdu

277 snmp_output(struct snmp_pdu *pdu, u_char *sndbuf, size_t *sndlen,
285 if (snmp_pdu_encode(pdu, &resp_b) != 0) {
291 snmp_pdu_dump(pdu);
300 snmp_pdu_auth_user(struct snmp_pdu *pdu)
306 if (pdu->engine.engine_len == 0 && strlen(pdu->user.sec_name) == 0) {
307 pdu->engine.engine_len = snmpd_engine.engine_len;
308 memcpy(pdu->engine.engine_id, snmpd_engine.engine_id,
310 pdu->engine.engine_boots = snmpd_engine.engine_boots;
311 pdu->engine.engine_time = snmpd_engine.engine_time;
312 pdu->flags |= SNMP_MSG_AUTODISCOVER;
316 if ((usm_user = usm_find_user(pdu->engine.engine_id,
317 pdu->engine.engine_len, pdu->user.sec_name)) == NULL ||
326 pdu->user.priv_proto = usm_user->suser.priv_proto;
327 memcpy(pdu->user.priv_key, usm_user->suser.priv_key,
328 sizeof(pdu->user.priv_key));
331 if ((pdu->flags & SNMP_MSG_AUTH_FLAG) != 0) {
341 pdu->user.auth_proto = usm_user->suser.auth_proto;
342 memcpy(pdu->user.auth_key, usm_user->suser.auth_key,
343 sizeof(pdu->user.auth_key));
345 if (pdu->engine.engine_boots == 0 &&
346 pdu->engine.engine_time == 0) {
347 pdu->flags |= SNMP_MSG_AUTODISCOVER;
351 if (pdu->engine.engine_boots != snmpd_engine.engine_boots ||
352 abs(pdu->engine.engine_time - snmpd_engine.engine_time) >
357 if (((pdu->flags & SNMP_MSG_PRIV_FLAG) != 0 &&
358 (pdu->flags & SNMP_MSG_AUTH_FLAG) == 0) ||
359 ((pdu->flags & SNMP_MSG_AUTH_FLAG) == 0 &&
361 ((pdu->flags & SNMP_MSG_PRIV_FLAG) == 0 &&
373 snmp_pdu_auth_access(struct snmp_pdu *pdu, int32_t *ip)
388 (pdu->flags & SNMP_MSG_AUTODISCOVER) != 0)
391 switch (pdu->version) {
405 uname = pdu->user.sec_name;
406 if ((smodel = pdu->security_model) != SNMP_SECMODEL_USM)
409 if (pdu->context_engine_len != snmpd_engine.engine_len ||
410 memcmp(pdu->context_engine, snmpd_engine.engine_id,
441 switch (pdu->type) {
468 for (i = 0; i < pdu->nbindings; i++) {
470 suboid = asn_is_suboid(&view->subtree, &pdu->bindings[i].var);
485 struct snmp_pdu *pdu, int32_t *ip, size_t *pdulen)
510 memset(pdu, 0, sizeof(*pdu));
511 if ((code = snmp_pdu_decode_header(&b, pdu)) != SNMP_CODE_OK)
514 if (pdu->version == SNMP_V3) {
515 if (pdu->security_model != SNMP_SECMODEL_USM) {
519 if ((code = snmp_pdu_auth_user(pdu)) != SNMP_CODE_OK)
521 if ((code = snmp_pdu_decode_secmode(&b, pdu)) != SNMP_CODE_OK)
524 code = snmp_pdu_decode_scoped(&b, pdu, ip);
543 if (pdu->type == SNMP_OP_SET)
548 if (pdu->type == SNMP_OP_SET)
553 if (pdu->type == SNMP_OP_SET)
582 switch (pdu->version) {
607 snmp_pdu_dump(pdu);
614 if (pdu->version != SNMP_V3) {
617 strcmp(comm->string, pdu->community) == 0)
622 snmp_pdu_free(pdu);
629 } else if (pdu->nbindings == 0) {
631 if (strlen(pdu->user.sec_name) == 0) {
632 asn_append_oid(&(pdu->bindings[pdu->nbindings++].var),
634 pdu->context_engine_len = snmpd_engine.engine_len;
635 memcpy(pdu->context_engine, snmpd_engine.engine_id,
637 } else if (pdu->engine.engine_boots == 0 &&
638 pdu->engine.engine_time == 0) {
639 asn_append_oid(&(pdu->bindings[pdu->nbindings++].var),
641 pdu->engine.engine_boots = snmpd_engine.engine_boots;
642 pdu->engine.engine_time = snmpd_engine.engine_time;
645 (pdu->engine.engine_boots == 0 || pdu->engine.engine_time == 0)) {
650 if ((code = snmp_pdu_auth_access(pdu, ip)) != SNMP_CODE_OK)
660 snmp_input_finish(struct snmp_pdu *pdu, const u_char *rcvbuf, size_t rcvlen,
676 if (pdu->version == SNMP_V1)
677 pdu->error_status = SNMP_ERR_BADVALUE;
679 pdu->error_status = SNMP_ERR_WRONG_LENGTH;
681 pdu->error_status = SNMP_ERR_WRONG_VALUE;
683 pdu->error_status = SNMP_ERR_WRONG_ENCODING;
685 pdu->error_index = ivar;
687 if (snmp_make_errresp(pdu, &pdu_b, &resp_b) == SNMP_RET_IGN) {
695 snmp_pdu_dump(pdu);
701 switch (pdu->type) {
704 ret = snmp_get(pdu, &resp_b, &resp, data);
708 ret = snmp_getnext(pdu, &resp_b, &resp, data);
712 ret = snmp_set(pdu, &resp_b, &resp, data);
716 ret = snmp_getbulk(pdu, &resp_b, &resp, data);
746 if (snmp_make_errresp(pdu, &pdu_b, &resp_b) == SNMP_RET_IGN) {
753 snmp_pdu_dump(pdu);
1185 struct snmp_pdu pdu;
1249 ierr = snmp_input_start(pi->buf, pi->length, "SNMP", &pdu, &vi,
1286 perr = (*comm->owner->config->proxy)(&pdu, tport->transport,
1301 snmp_pdu_free(&pdu);
1307 snmp_pdu_free(&pdu);
1316 snmp_pdu_free(&pdu);
1328 if (pdu.type == SNMP_PDU_RESPONSE ||
1329 pdu.type == SNMP_PDU_TRAP ||
1330 pdu.type == SNMP_PDU_TRAP2) {
1333 snmp_pdu_free(&pdu);
1341 if (pdu.version < SNMP_V3 &&
1342 ((pi->cred && !pi->priv && pdu.type == SNMP_PDU_SET) ||
1344 (pdu.type == SNMP_PDU_SET || community != COMM_READ)))) {
1346 snmp_pdu_free(&pdu);
1359 snmp_pdu_free(&pdu);
1363 ferr = snmp_input_finish(&pdu, pi->buf, pi->length,
1382 snmp_pdu_free(&pdu);
1393 snmp_send_port(void *targ, const struct asn_oid *port, struct snmp_pdu *pdu,
1411 snmp_output(pdu, sndbuf, &sndlen, "SNMP PROXY");