According to RFC2741 section 6.1.1 an agentx-response-pdu shouldn't have the NON_DEFAULT_CONTEXT set. Remove the argument from ax_response().
OK? martijn@ diff --git a/application_agentx.c b/application_agentx.c index c7a2a26..0d73e08 100644 --- a/application_agentx.c +++ b/application_agentx.c @@ -311,8 +311,7 @@ appl_agentx_recv(int fd, short event, void *cookie) pdu->ap_header.aph_sessionid); ax_response(conn->conn_ax, pdu->ap_header.aph_sessionid, pdu->ap_header.aph_transactionid, - pdu->ap_header.aph_packetid, - &(pdu->ap_context), smi_getticks(), + pdu->ap_header.aph_packetid, smi_getticks(), APPL_ERROR_NOTOPEN, 0, NULL, 0); appl_agentx_send(-1, EV_WRITE, conn); goto fail; @@ -370,8 +369,8 @@ appl_agentx_recv(int fd, short event, void *cookie) case AX_PDU_TYPE_PING: ax_response(conn->conn_ax, pdu->ap_header.aph_sessionid, pdu->ap_header.aph_transactionid, - pdu->ap_header.aph_packetid, &(pdu->ap_context), - smi_getticks(), APPL_ERROR_NOERROR, 0, NULL, 0); + pdu->ap_header.aph_packetid, smi_getticks(), + APPL_ERROR_NOERROR, 0, NULL, 0); appl_agentx_send(-1, EV_WRITE, conn); break; case AX_PDU_TYPE_INDEXALLOCATE: @@ -380,8 +379,8 @@ appl_agentx_recv(int fd, short event, void *cookie) ax_pdutype2string(pdu->ap_header.aph_type)); ax_response(conn->conn_ax, pdu->ap_header.aph_sessionid, pdu->ap_header.aph_transactionid, - pdu->ap_header.aph_packetid, &(pdu->ap_context), - smi_getticks(), APPL_ERROR_PROCESSINGERROR, 1, + pdu->ap_header.aph_packetid, smi_getticks(), + APPL_ERROR_PROCESSINGERROR, 1, pdu->ap_payload.ap_vbl.ap_varbind, pdu->ap_payload.ap_vbl.ap_nvarbind); appl_agentx_send(-1, EV_WRITE, conn); @@ -392,8 +391,8 @@ appl_agentx_recv(int fd, short event, void *cookie) ax_pdutype2string(pdu->ap_header.aph_type)); ax_response(conn->conn_ax, pdu->ap_header.aph_sessionid, pdu->ap_header.aph_transactionid, - pdu->ap_header.aph_packetid, &(pdu->ap_context), - smi_getticks(), APPL_ERROR_PROCESSINGERROR, 1, + pdu->ap_header.aph_packetid, smi_getticks(), + APPL_ERROR_PROCESSINGERROR, 1, NULL, 0); appl_agentx_send(-1, EV_WRITE, conn); break; @@ -492,16 +491,15 @@ appl_agentx_open(struct appl_agentx_connection *conn, struct ax_pdu *pdu) log_info("%s: %s %s: Open", session->sess_backend.ab_name, oidbuf, session->sess_descr.aos_string); - ax_response(conn->conn_ax, session->sess_id, pdu->ap_header.aph_transactionid, - pdu->ap_header.aph_packetid, NULL, smi_getticks(), APPL_ERROR_NOERROR, 0, - NULL, 0); + ax_response(conn->conn_ax, session->sess_id, + pdu->ap_header.aph_transactionid, pdu->ap_header.aph_packetid, + smi_getticks(), APPL_ERROR_NOERROR, 0, NULL, 0); appl_agentx_send(-1, EV_WRITE, conn); return; fail: ax_response(conn->conn_ax, 0, pdu->ap_header.aph_transactionid, - pdu->ap_header.aph_packetid, NULL, 0, APPL_ERROR_OPENFAILED, 0, - NULL, 0); + pdu->ap_header.aph_packetid, 0, APPL_ERROR_OPENFAILED, 0, NULL, 0); appl_agentx_send(-1, EV_WRITE, conn); if (session != NULL) free(session->sess_descr.aos_string); @@ -521,7 +519,7 @@ appl_agentx_close(struct appl_agentx_session *session, struct ax_pdu *pdu) ax_response(conn->conn_ax, pdu->ap_header.aph_sessionid, pdu->ap_header.aph_transactionid, pdu->ap_header.aph_packetid, - &(pdu->ap_context), smi_getticks(), APPL_ERROR_NOERROR, 0, NULL, 0); + smi_getticks(), APPL_ERROR_NOERROR, 0, NULL, 0); appl_agentx_send(-1, EV_WRITE, conn); } @@ -593,7 +591,7 @@ appl_agentx_register(struct appl_agentx_session *session, struct ax_pdu *pdu) fail: ax_response(session->sess_conn->conn_ax, session->sess_id, pdu->ap_header.aph_transactionid, pdu->ap_header.aph_packetid, - &(pdu->ap_context), smi_getticks(), error, 0, NULL, 0); + smi_getticks(), error, 0, NULL, 0); appl_agentx_send(-1, EV_WRITE, session->sess_conn); } @@ -620,7 +618,7 @@ appl_agentx_unregister(struct appl_agentx_session *session, struct ax_pdu *pdu) fail: ax_response(session->sess_conn->conn_ax, session->sess_id, pdu->ap_header.aph_transactionid, pdu->ap_header.aph_packetid, - &(pdu->ap_context), smi_getticks(), error, 0, NULL, 0); + smi_getticks(), error, 0, NULL, 0); appl_agentx_send(-1, EV_WRITE, session->sess_conn); } diff --git a/ax.c b/ax.c index 27580a6..dde9823 100644 --- a/ax.c +++ b/ax.c @@ -715,11 +715,11 @@ ax_unregister(struct ax *ax, uint32_t sessionid, int ax_response(struct ax *ax, uint32_t sessionid, uint32_t transactionid, - uint32_t packetid, struct ax_ostring *context, uint32_t sysuptime, - uint16_t error, uint16_t index, struct ax_varbind *vblist, size_t nvb) + uint32_t packetid, uint32_t sysuptime, uint16_t error, uint16_t index, + struct ax_varbind *vblist, size_t nvb) { if (ax_pdu_header(ax, AX_PDU_TYPE_RESPONSE, 0, sessionid, - transactionid, packetid, context) == -1) + transactionid, packetid, NULL) == -1) return -1; if (ax_pdu_add_uint32(ax, sysuptime) == -1 || diff --git a/ax.h b/ax.h index 3b2ea93..8649c34 100644 --- a/ax.h +++ b/ax.h @@ -251,8 +251,7 @@ uint32_t ax_register(struct ax *, uint8_t, uint32_t, uint32_t ax_unregister(struct ax *, uint32_t, struct ax_ostring *, uint8_t, uint8_t, struct ax_oid *, uint32_t); int ax_response(struct ax *, uint32_t, uint32_t, uint32_t, - struct ax_ostring *, uint32_t, uint16_t, uint16_t, - struct ax_varbind *, size_t); + uint32_t, uint16_t, uint16_t, struct ax_varbind *, size_t); void ax_pdu_free(struct ax_pdu *); void ax_varbind_free(struct ax_varbind *); const char *ax_error2string(enum ax_pdu_error);