]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
SNMP: Refactoring (order)
authorVojtech Vilimek <vojtech.vilimek@nic.cz>
Mon, 4 Sep 2023 11:48:28 +0000 (13:48 +0200)
committerVojtech Vilimek <vojtech.vilimek@nic.cz>
Mon, 4 Sep 2023 11:48:28 +0000 (13:48 +0200)
proto/snmp/snmp.c

index ece8f47c1cbd2c237dbbc994530657648488b6f1..a232fd3239166c60d5b840e0913378e01af10399 100644 (file)
 #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)
 {