From: Vojtech Vilimek Date: Mon, 4 Sep 2023 11:48:28 +0000 (+0200) Subject: SNMP: Refactoring (order) X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=eb5bd00de4d7afd41d0b73ce5d1db0d46ed07795;p=thirdparty%2Fbird.git SNMP: Refactoring (order) --- diff --git a/proto/snmp/snmp.c b/proto/snmp/snmp.c index ece8f47c1..a232fd323 100644 --- a/proto/snmp/snmp.c +++ b/proto/snmp/snmp.c @@ -79,14 +79,6 @@ #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", @@ -94,18 +86,8 @@ static const char * const snmp_state[] = { [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 * @@ -161,62 +143,46 @@ snmp_down(struct snmp_proto *p) } 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 @@ -257,46 +223,77 @@ snmp_start_locked(struct object_lock *lock) } 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 @@ -448,21 +445,6 @@ snmp_postconfig(struct proto_config *CF) 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) {