#include "subagent.h"
#include "snmp_utils.h"
-static void snmp_connected(sock *sk);
-static void snmp_sock_err(sock *sk, int err);
-static void snmp_ping_timer(struct timer *tm);
-static void snmp_startup(struct snmp_proto *p);
-static void snmp_startup_timeout(timer *t);
-static void snmp_start_locked(struct object_lock *lock);
-static int snmp_shutdown(struct proto *P);
-
static const char * const snmp_state[] = {
[SNMP_ERR] = "SNMP ERROR",
[SNMP_INIT] = "SNMP INIT",
[SNMP_OPEN] = "SNMP CONNECTION OPENED",
[SNMP_REGISTER] = "SNMP REGISTERING MIBS",
[SNMP_CONN] = "SNMP CONNECTED",
- [SNMP_STOP] = "SNMP STOPING",
+ [SNMP_STOP] = "SNMP STOPPING",
[SNMP_DOWN] = "SNMP DOWN",
-/*
- [SNMP_ERR] = "SNMP ERROR",
- [SNMP_DELAY] = "SNMP DELAY",
- [SNMP_INIT] = "SNMP INIT",
- [SNMP_REGISTER] = "SNMP REGISTERING",
- [SNMP_CONN] = "SNMP CONNECTED",
- [SNMP_STOP] = "SNMP STOP",
- [SNMP_DOWN] = "SNMP DOWN",
- [SNMP_LISTEN] = "SNMP LISTEN",
-*/
};
static struct proto *
}
static void
-snmp_startup_timeout(timer *t)
+snmp_sock_err(sock *sk, int err)
{
- snmp_log("startup timer triggered");
- snmp_startup(t->data);
-}
+ snmp_log("snmp_sock_err() %s - err no: %d", strerror(err), err);
+ struct snmp_proto *p = sk->data;
+ p->errs++;
-static void
-snmp_stop_timeout(timer *t)
-{
- snmp_log("stop timer triggered");
+ tm_stop(p->ping_timer);
- struct snmp_proto *p = t->data;
+ rfree(p->sock);
+ p->sock = NULL;
- snmp_down(p);
+ rfree(p->lock);
+ p->lock = NULL;
+
+ snmp_log("changing proto_snmp state to ERR[OR]");
+ p->state = SNMP_ERR;
+ // snmp_shutdown((struct proto *) p);
+
+ // TODO ping interval
+ tm_start(p->startup_timer, 4 S);
}
static void
-snmp_startup(struct snmp_proto *p)
+snmp_connected(sock *sk)
{
- //snmp_log("changing proto_snmp state to INIT");
-
- if (p->state == SNMP_LOCKED ||
- p->state == SNMP_OPEN ||
- p->state == SNMP_REGISTER ||
- p->state == SNMP_CONN)
- {
- snmp_log("startup() already in connected state %u", p->state);
- return;
- }
-
- snmp_log("snmp_startup()");
- p->state = SNMP_INIT;
-
- /* starting agentX communicaiton channel */
+ struct snmp_proto *p = sk->data;
+ snmp_log("snmp_connected() connection created");
- snmp_log("preparing lock");
- struct object_lock *lock;
+ p->state = SNMP_OPEN;
- /* we could have the lock already acquired but be in ERROR state */
- lock = p->lock = olock_new(p->p.pool);
+ byte *buf UNUSED = sk->rpos;
- // lock->addr
- // lock->port
- // lock->iface
- // lock->vrf
- lock->type = OBJLOCK_TCP;
- lock->hook = snmp_start_locked;
- lock->data = p;
+ sk->rx_hook = snmp_rx;
+ sk->tx_hook = NULL;
+ //sk->tx_hook = snmp_tx;
- snmp_log("lock acquiring");
- olock_acquire(lock);
+ snmp_start_subagent(p);
- /*
- snmp_log("local ip: %I:%u, remote ip: %I:%u",
- p->local_ip, p->local_port, p->remote_ip, p->remote_port);
- */
+ // TODO ping interval
+ tm_set(p->ping_timer, 15 S);
}
static void
}
static void
-snmp_connected(sock *sk)
+snmp_startup(struct snmp_proto *p)
{
- struct snmp_proto *p = sk->data;
- snmp_log("snmp_connected() connection created");
+ //snmp_log("changing proto_snmp state to INIT");
- p->state = SNMP_OPEN;
+ if (p->state == SNMP_LOCKED ||
+ p->state == SNMP_OPEN ||
+ p->state == SNMP_REGISTER ||
+ p->state == SNMP_CONN)
+ {
+ snmp_log("startup() already in connected state %u", p->state);
+ return;
+ }
- byte *buf UNUSED = sk->rpos;
+ snmp_log("snmp_startup()");
+ p->state = SNMP_INIT;
- sk->rx_hook = snmp_rx;
- sk->tx_hook = NULL;
- //sk->tx_hook = snmp_tx;
+ /* starting agentX communicaiton channel */
- snmp_start_subagent(p);
+ snmp_log("preparing lock");
+ struct object_lock *lock;
- // TODO ping interval
- tm_set(p->ping_timer, 15 S);
+ /* we could have the lock already acquired but be in ERROR state */
+ lock = p->lock = olock_new(p->p.pool);
+
+ // lock->addr
+ // lock->port
+ // lock->iface
+ // lock->vrf
+ lock->type = OBJLOCK_TCP;
+ lock->hook = snmp_start_locked;
+ lock->data = p;
+
+ snmp_log("lock acquiring");
+ olock_acquire(lock);
+
+ /*
+ snmp_log("local ip: %I:%u, remote ip: %I:%u",
+ p->local_ip, p->local_port, p->remote_ip, p->remote_port);
+ */
}
static void
-snmp_sock_err(sock *sk, int err)
+snmp_startup_timeout(timer *t)
{
- snmp_log("snmp_sock_err() %s - err no: %d", strerror(err), err);
- struct snmp_proto *p = sk->data;
- p->errs++;
+ snmp_log("startup timer triggered");
+ snmp_startup(t->data);
+}
- tm_stop(p->ping_timer);
+static void
+snmp_stop_timeout(timer *t)
+{
+ snmp_log("stop timer triggered");
- rfree(p->sock);
- p->sock = NULL;
+ struct snmp_proto *p = t->data;
- rfree(p->lock);
- p->lock = NULL;
+ snmp_down(p);
+}
- snmp_log("changing proto_snmp state to ERR[OR]");
- p->state = SNMP_ERR;
- // snmp_shutdown((struct proto *) p);
+static void
+snmp_ping_timer(struct timer *tm)
+{
+ // snmp_log("snmp_ping_timer() ");
+ struct snmp_proto *p = tm->data;
- // TODO ping interval
- tm_start(p->startup_timer, 4 S);
+ if (p->state == SNMP_CONN)
+ {
+ snmp_ping(p);
+ }
+
+ //tm_set(tm, current_time() + (15 S));
+ tm_set(tm, current_time() + 15 S);
}
static int
cf_error("local as not specified");
}
-static void
-snmp_ping_timer(struct timer *tm)
-{
- // snmp_log("snmp_ping_timer() ");
- struct snmp_proto *p = tm->data;
-
- if (p->state == SNMP_CONN)
- {
- snmp_ping(p);
- }
-
- //tm_set(tm, current_time() + (15 S));
- tm_set(tm, current_time() + 15 S);
-}
-
static int
snmp_shutdown(struct proto *P)
{