mirror of
https://gitlab.nic.cz/labs/bird.git
synced 2025-01-03 15:41:54 +00:00
SNMP: Refactoring (order)
This commit is contained in:
parent
7543da15d8
commit
eb5bd00de4
@ -79,14 +79,6 @@
|
|||||||
#include "subagent.h"
|
#include "subagent.h"
|
||||||
#include "snmp_utils.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[] = {
|
static const char * const snmp_state[] = {
|
||||||
[SNMP_ERR] = "SNMP ERROR",
|
[SNMP_ERR] = "SNMP ERROR",
|
||||||
[SNMP_INIT] = "SNMP INIT",
|
[SNMP_INIT] = "SNMP INIT",
|
||||||
@ -94,18 +86,8 @@ static const char * const snmp_state[] = {
|
|||||||
[SNMP_OPEN] = "SNMP CONNECTION OPENED",
|
[SNMP_OPEN] = "SNMP CONNECTION OPENED",
|
||||||
[SNMP_REGISTER] = "SNMP REGISTERING MIBS",
|
[SNMP_REGISTER] = "SNMP REGISTERING MIBS",
|
||||||
[SNMP_CONN] = "SNMP CONNECTED",
|
[SNMP_CONN] = "SNMP CONNECTED",
|
||||||
[SNMP_STOP] = "SNMP STOPING",
|
[SNMP_STOP] = "SNMP STOPPING",
|
||||||
[SNMP_DOWN] = "SNMP DOWN",
|
[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 struct proto *
|
||||||
@ -161,20 +143,83 @@ snmp_down(struct snmp_proto *p)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
snmp_startup_timeout(timer *t)
|
snmp_sock_err(sock *sk, int err)
|
||||||
{
|
{
|
||||||
snmp_log("startup timer triggered");
|
snmp_log("snmp_sock_err() %s - err no: %d", strerror(err), err);
|
||||||
snmp_startup(t->data);
|
struct snmp_proto *p = sk->data;
|
||||||
|
p->errs++;
|
||||||
|
|
||||||
|
tm_stop(p->ping_timer);
|
||||||
|
|
||||||
|
rfree(p->sock);
|
||||||
|
p->sock = NULL;
|
||||||
|
|
||||||
|
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
|
static void
|
||||||
snmp_stop_timeout(timer *t)
|
snmp_connected(sock *sk)
|
||||||
{
|
{
|
||||||
snmp_log("stop timer triggered");
|
struct snmp_proto *p = sk->data;
|
||||||
|
snmp_log("snmp_connected() connection created");
|
||||||
|
|
||||||
struct snmp_proto *p = t->data;
|
p->state = SNMP_OPEN;
|
||||||
|
|
||||||
snmp_down(p);
|
byte *buf UNUSED = sk->rpos;
|
||||||
|
|
||||||
|
sk->rx_hook = snmp_rx;
|
||||||
|
sk->tx_hook = NULL;
|
||||||
|
//sk->tx_hook = snmp_tx;
|
||||||
|
|
||||||
|
snmp_start_subagent(p);
|
||||||
|
|
||||||
|
// TODO ping interval
|
||||||
|
tm_set(p->ping_timer, 15 S);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
snmp_start_locked(struct object_lock *lock)
|
||||||
|
{
|
||||||
|
snmp_log("snmp_start_locked() - lock acquired; preparing socket");
|
||||||
|
struct snmp_proto *p = lock->data;
|
||||||
|
|
||||||
|
p->state = SNMP_LOCKED;
|
||||||
|
|
||||||
|
sock *s = sk_new(p->p.pool);
|
||||||
|
s->type = SK_TCP_ACTIVE;
|
||||||
|
s->saddr = p->local_ip;
|
||||||
|
s->daddr = p->remote_ip;
|
||||||
|
s->dport = p->remote_port;
|
||||||
|
s->rbsize = SNMP_RX_BUFFER_SIZE;
|
||||||
|
s->tbsize = SNMP_TX_BUFFER_SIZE;
|
||||||
|
|
||||||
|
//s->tos = IP_PREC_INTERNET_CONTROL
|
||||||
|
//s->rx_hook = snmp_connected;
|
||||||
|
s->tx_hook = snmp_connected;
|
||||||
|
s->err_hook = snmp_sock_err;
|
||||||
|
|
||||||
|
//mb_free(p->sock);
|
||||||
|
p->sock = s;
|
||||||
|
s->data = p;
|
||||||
|
|
||||||
|
p->to_send = 0;
|
||||||
|
p->errs = 0;
|
||||||
|
|
||||||
|
if (sk_open(s) < 0)
|
||||||
|
{
|
||||||
|
log(L_ERR "Cannot open listening socket");
|
||||||
|
snmp_down(p);
|
||||||
|
}
|
||||||
|
|
||||||
|
snmp_log("socket ready!, trying to connect");
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -220,83 +265,35 @@ snmp_startup(struct snmp_proto *p)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
snmp_start_locked(struct object_lock *lock)
|
snmp_startup_timeout(timer *t)
|
||||||
{
|
{
|
||||||
snmp_log("snmp_start_locked() - lock acquired; preparing socket");
|
snmp_log("startup timer triggered");
|
||||||
struct snmp_proto *p = lock->data;
|
snmp_startup(t->data);
|
||||||
|
}
|
||||||
|
|
||||||
p->state = SNMP_LOCKED;
|
static void
|
||||||
|
snmp_stop_timeout(timer *t)
|
||||||
|
{
|
||||||
|
snmp_log("stop timer triggered");
|
||||||
|
|
||||||
sock *s = sk_new(p->p.pool);
|
struct snmp_proto *p = t->data;
|
||||||
s->type = SK_TCP_ACTIVE;
|
|
||||||
s->saddr = p->local_ip;
|
|
||||||
s->daddr = p->remote_ip;
|
|
||||||
s->dport = p->remote_port;
|
|
||||||
s->rbsize = SNMP_RX_BUFFER_SIZE;
|
|
||||||
s->tbsize = SNMP_TX_BUFFER_SIZE;
|
|
||||||
|
|
||||||
//s->tos = IP_PREC_INTERNET_CONTROL
|
snmp_down(p);
|
||||||
//s->rx_hook = snmp_connected;
|
}
|
||||||
s->tx_hook = snmp_connected;
|
|
||||||
s->err_hook = snmp_sock_err;
|
|
||||||
|
|
||||||
//mb_free(p->sock);
|
static void
|
||||||
p->sock = s;
|
snmp_ping_timer(struct timer *tm)
|
||||||
s->data = p;
|
{
|
||||||
|
// snmp_log("snmp_ping_timer() ");
|
||||||
|
struct snmp_proto *p = tm->data;
|
||||||
|
|
||||||
p->to_send = 0;
|
if (p->state == SNMP_CONN)
|
||||||
p->errs = 0;
|
|
||||||
|
|
||||||
if (sk_open(s) < 0)
|
|
||||||
{
|
{
|
||||||
log(L_ERR "Cannot open listening socket");
|
snmp_ping(p);
|
||||||
snmp_down(p);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
snmp_log("socket ready!, trying to connect");
|
//tm_set(tm, current_time() + (15 S));
|
||||||
}
|
tm_set(tm, current_time() + 15 S);
|
||||||
|
|
||||||
static void
|
|
||||||
snmp_connected(sock *sk)
|
|
||||||
{
|
|
||||||
struct snmp_proto *p = sk->data;
|
|
||||||
snmp_log("snmp_connected() connection created");
|
|
||||||
|
|
||||||
p->state = SNMP_OPEN;
|
|
||||||
|
|
||||||
byte *buf UNUSED = sk->rpos;
|
|
||||||
|
|
||||||
sk->rx_hook = snmp_rx;
|
|
||||||
sk->tx_hook = NULL;
|
|
||||||
//sk->tx_hook = snmp_tx;
|
|
||||||
|
|
||||||
snmp_start_subagent(p);
|
|
||||||
|
|
||||||
// TODO ping interval
|
|
||||||
tm_set(p->ping_timer, 15 S);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
snmp_sock_err(sock *sk, int err)
|
|
||||||
{
|
|
||||||
snmp_log("snmp_sock_err() %s - err no: %d", strerror(err), err);
|
|
||||||
struct snmp_proto *p = sk->data;
|
|
||||||
p->errs++;
|
|
||||||
|
|
||||||
tm_stop(p->ping_timer);
|
|
||||||
|
|
||||||
rfree(p->sock);
|
|
||||||
p->sock = NULL;
|
|
||||||
|
|
||||||
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 int
|
static int
|
||||||
@ -448,21 +445,6 @@ snmp_postconfig(struct proto_config *CF)
|
|||||||
cf_error("local as not specified");
|
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
|
static int
|
||||||
snmp_shutdown(struct proto *P)
|
snmp_shutdown(struct proto *P)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user