switch (state)
{
case SNMP_INIT:
- TRACE(D_EVENTS, "starting protocol");
+ /* We intentionally do not log anything */
ASSERT(last == SNMP_DOWN);
proto_notify_state(&p->p, PS_START);
/* Fall thru */
case SNMP_LOCKED:
- TRACE(D_EVENTS, "address lock acquired");
+ TRACE(D_EVENTS, "SNMP Address lock acquired");
ASSERT(last == SNMP_INIT);
sock *s = sk_new(p->pool);
/* Try opening the socket, schedule a retry on fail */
if (sk_open(s) < 0)
{
- TRACE(D_EVENTS, "opening of communication socket failed");
+ TRACE(D_EVENTS, "SNMP Opening of communication socket failed");
rfree(s);
p->sock = NULL;
// TODO handle 0 timeout
return PS_START;
case SNMP_OPEN:
- TRACE(D_EVENTS, "communication socket opened, starting AgentX subagent");
+ TRACE(D_EVENTS, "SNMP Communication socket opened, starting AgentX subagent");
ASSERT(last == SNMP_LOCKED);
p->sock->rx_hook = snmp_rx;
return PS_START;
case SNMP_REGISTER:
- TRACE(D_EVENTS, "registering MIBs");
+ TRACE(D_EVENTS, "SNMP Registering MIBs");
ASSERT(last == SNMP_OPEN);
tm_stop(p->startup_timer); /* stop timeout */
case SNMP_STOP:
if (p->sock && p->state != SNMP_OPEN && !sk_tx_buffer_empty(p->sock))
{
- TRACE(D_EVENTS, "closing AgentX session");
+ TRACE(D_EVENTS, "SNMP Closing AgentX session");
if (p->state == SNMP_OPEN || p->state == SNMP_REGISTER ||
p->state == SNMP_CONN)
snmp_stop_subagent(p);
/* Fall thru */
case SNMP_DOWN:
- TRACE(D_EVENTS, "AgentX session closed");
+ TRACE(D_EVENTS, "SNMP AgentX session closed");
snmp_cleanup(p);
proto_notify_state(&p->p, PS_DOWN);
return PS_DOWN;
static void do_response(struct snmp_proto *p, byte *buf);
static uint parse_gets_pdu(struct snmp_proto *p, byte *pkt);
static struct agentx_response *prepare_response(struct snmp_proto *p, struct snmp_pdu *c);
-static void response_err_ind(struct agentx_response *res, enum agentx_response_errs err, u16 ind);
+static void response_err_ind(struct snmp_proto *p, struct agentx_response *res, enum agentx_response_errs err, u16 ind);
static uint update_packet_size(struct agentx_header *start, byte *end);
/* standard SNMP internet prefix (.1.3.6.1) */
ASSUME(c.size >= sizeof(struct agentx_response));
struct agentx_response *res = prepare_response(p, &c);
- response_err_ind(res, error, index);
+ response_err_ind(p, res, error, index);
sk_send(sk, sizeof(struct agentx_response));
}
const struct snmp_config *cf = SKIP_BACK(struct snmp_config, cf, p->p.cf);
sock *sk = p->sock;
+ TRACE(D_PACKETS, "SNMP sending agentx-Open-PDU");
+
struct snmp_pdu c;
snmp_pdu_context(&c, p, sk);
return;
sock *sk = p->sock;
-
+ TRACE(D_PACKETS, "SNMP sending agentx-Notify-PDU");
struct snmp_pdu c;
snmp_pdu_context(&c, p, sk);
void
snmp_register(struct snmp_proto *p, struct oid *oid, u32 bound, uint index, u8 is_instance)
{
+ TRACE(D_PACKETS, "SNMP sending agentx-Register-PDU");
un_register_pdu(p, oid, bound, index, AGENTX_REGISTER_PDU, is_instance);
}
*
* For more detailed description see un_register_pdu() function.
*/
-void
+void UNUSED
snmp_unregister(struct snmp_proto *p, struct oid *oid, u32 bound, uint index)
{
+ TRACE(D_PACKETS, "SNMP sending agentx-Unregister-PDU");
un_register_pdu(p, oid, bound, index, AGENTX_UNREGISTER_PDU, 0);
}
struct snmp_pdu c;
snmp_pdu_context(&c, p, sk);
+ TRACE(D_PACKETS, "SNMP sending agentx-Close-PDU with reason %u", reason);
+
#define REASON_SIZE sizeof(u32)
(void) snmp_tbuf_reserve(&c, AGENTX_HEADER_SIZE + REASON_SIZE);
if (c.error != AGENTX_RES_NO_ERROR)
{
- response_err_ind(res, c.error, c.index + 1);
+ response_err_ind(p, res, c.error, c.index + 1);
snmp_reset(p);
}
else if (all_possible)
{
/* All values in the agentx-TestSet-PDU are OK, realy to commit them */
- response_err_ind(res, AGENTX_RES_NO_ERROR, 0);
+ response_err_ind(p, res, AGENTX_RES_NO_ERROR, 0);
}
else
{
// Currently the only reachable branch
- //TRACE(D_PACKETS, "SNMP SET action failed (not writable)");
+ TRACE(D_PACKETS, "SNMP SET action failed (not writable)");
/* This is a recoverable error, we do not need to reset the connection */
- response_err_ind(res, AGENTX_RES_NOT_WRITABLE, c.index + 1);
+ response_err_ind(p, res, AGENTX_RES_NOT_WRITABLE, c.index + 1);
}
sk_send(sk, s);
c.error = err;
TRACE(D_PACKETS, "SNMP received PDU parsed with error %u", c.error);
- response_err_ind(r, c.error, 0);
+ response_err_ind(p, r, c.error, 0);
sk_send(p->sock, AGENTX_HEADER_SIZE);
/* Reset the connection on unrecoverable error */
switch (LOAD_U8(h->type))
{
case AGENTX_GET_PDU:
+ TRACE(D_PACKETS, "SNMP received agentx-Get-PDU");
+ return parse_gets_pdu(p, pkt);
+
case AGENTX_GET_NEXT_PDU:
+ TRACE(D_PACKETS, "SNMP received agentx-GetNext-PDU");
+ return parse_gets_pdu(p, pkt);
+
case AGENTX_GET_BULK_PDU:
+ TRACE(D_PACKETS, "SNMP received agentx-GetBulk-PDU");
return parse_gets_pdu(p, pkt);
case AGENTX_CLOSE_PDU:
case AGENTX_RES_PARSE_ERROR:
case AGENTX_RES_PROCESSING_ERR:
default:
- TRACE(D_PACKETS, "SNMP agentx-Response-PDU with unexepected error %u", r->error);
+ TRACE(D_PACKETS, "SNMP received agentx-Response-PDU with unexepected error %u", r->error);
snmp_reset(p);
break;
}
/*
* response_err_ind - update response error and index
+ * @p: SNMP protocol instance
* @res: response PDU header
* @err: error status
* @ind: index of error, ignored for noAgentXError
* error is not noError, also set the corrent response PDU payload size.
*/
static inline void
-response_err_ind(struct agentx_response *res, enum agentx_response_errs err, u16 ind)
+response_err_ind(struct snmp_proto *p, struct agentx_response *res, enum agentx_response_errs err, u16 ind)
{
STORE_U16(res->error, (u16) err);
if (err != AGENTX_RES_NO_ERROR && err != AGENTX_RES_GEN_ERROR)
{
- //TRACE(D_PACKETS, "Last PDU resulted in error %u", err);
+ if (p->verbose)
+ TRACE(D_PACKETS, "SNMP last PDU resulted in error %u", err);
STORE_U16(res->index, ind);
/* Reset VarBindList to null */
STORE_U32(res->h.payload,
}
else if (err == AGENTX_RES_GEN_ERROR)
{
- //TRACE(D_PACKETS, "Last PDU resulted in error %u genErr", err);
+ if (p->verbose)
+ TRACE(D_PACKETS, "SNMP last PDU resulted in error genErr");
STORE_U16(res->index, 0);
/* Reset VarBindList to null */
STORE_U32(res->h.payload,
#endif
/* We update the error, index pair on the beginning of the packet. */
- response_err_ind(response_header, c.error, c.index + 1);
+ response_err_ind(p, response_header, c.error, c.index + 1);
uint s = update_packet_size(&response_header->h, c.buffer);
/* We send the message in TX buffer. */