0
0
mirror of https://gitlab.nic.cz/labs/bird.git synced 2024-12-23 10:11:53 +00:00
bird/proto/snmp/snmp.c

156 lines
4.1 KiB
C
Raw Normal View History

2022-08-01 11:01:49 +00:00
/*
* BIRD -- Simple Network Management Protocol (SNMP)
*
* (c) 2022 Vojtech Vilimek <vojtech.vilimek@nic.cz>
* (c) 2022 CZ.NIC z.s.p.o.
*
* Can be freely distributed and used under the terms of the GNU GPL.
*
* Parts of this file were auto-generated using mib2c
* using mib2c.create-dataset.conf
2022-08-01 11:01:49 +00:00
*/
#include "nest/bird.h"
#include "nest/protocol.h"
#include "nest/cli.h"
#include "proto/snmp/snmp.h"
#include "proto/snmp/subagent.h"
#include "proto/snmp/bgp_mib.h"
2022-08-01 11:01:49 +00:00
static struct proto *
snmp_init(struct proto_config *CF)
{
struct proto *P = proto_new(CF);
struct snmp_proto *p = (void *) P;
p->rl_gen = (struct tbf) TBF_DEFAULT_LOG_LIMITS;
return P;
}
void start_multihook(void)
{
/* init bgp MIB table */
snmp_init_bgp_table();
/* init ospf MIB table */
//snmp_inti_ospf_table();
}
2022-08-01 11:01:49 +00:00
static int
snmp_start(struct proto *P)
{
/* init MIB tables */
if (snmp_start_subagent(start_multihook))
return PS_UP;
else
return PS_DOWN;
2022-08-01 11:01:49 +00:00
}
static int
snmp_reconfigure(struct proto *P, struct proto_config *CF)
{
return 0;
}
static void
snmp_show_proto_info(struct proto *P)
{
struct snmp_proto *sp = (void *) P;
struct snmp_config *c = (void *) P->cf;
2022-08-01 11:01:49 +00:00
cli_msg(-1006, " BGP peers");
struct snmp_bond *bond;
WALK_LIST(bond, c->bgp_entries)
2022-08-01 11:01:49 +00:00
{
struct proto_config *cf = P->cf;
struct bgp_config *bcf = (struct bgp_config *) cf;
struct proto_config *pcf = (void *) bond->proto;
struct proto *p = cf->proto;
struct bgp_proto *bp = (struct bgp_proto *) cf->proto;
struct bgp_conn *conn = bp->conn;
cli_msg(-1006, " name: %s", cf->name);
cli_msg(-1006, "");
cli_msg(-1006, " rem. identifier: %u", bp->remote_id);
// learn more !!
cli_msg(-1006, " admin status: %s", (p->disabled) ? "start" :
"stop");
// version ?
cli_msg(-1006, " version: ??, likely 4");
cli_msg(-1006, " local ip: %u", bcf->local_ip);
cli_msg(-1006, " remote ip: %u", bcf->remote_ip);
cli_msg(-1006, " local port: %u", bcf->local_port);
cli_msg(-1006, " remote port: %u", bcf->remote_port);
if (conn) {
cli_msg(-1006, " state: %u", conn->state);
cli_msg(-1006, " remote as: %u", conn->remote_caps->as4_number);
}
cli_msg(-1006, " in updates: %u", bp->stats.rx_updates);
cli_msg(-1006, " out updates: %u", bp->stats.tx_updates);
cli_msg(-1006, " in total: %u", bp->stats.rx_messages);
cli_msg(-1006, " out total: %u", bp->stats.tx_messages);
cli_msg(-1006, " fsm transitions: %u",
bp->stats.fsm_established_transitions);
// not supported yet
cli_msg(-1006, " fsm total time: --");
cli_msg(-1006, " retry interval: %u", bcf->connect_retry_time);
if (conn) {
cli_msg(-1006, " hold time: %u", conn->hold_time);
cli_msg(-1006, " keep alive: %u", conn->keepalive_time );
2022-08-01 11:01:49 +00:00
}
cli_msg(-1006, " hold configurated: %u", bcf->hold_time );
cli_msg(-1006, " keep alive config: %u", bcf->keepalive_time );
// unknown
cli_msg(-1006, " min AS origin. int.: --");
cli_msg(-1006, " min route advertisement: %u", 0 );
cli_msg(-1006, " in update elapsed time: %u", 0 );
if (!conn)
cli_msg(-1006, " no default connection");
cli_msg(-1006, " outgoinin_conn state %u", bp->outgoing_conn.state + 1);
cli_msg(-1006, " incoming_conn state: %u", bp->incoming_conn.state + 1);
2022-08-01 11:01:49 +00:00
}
}
void
shutdown_multihook(void)
2022-08-01 11:01:49 +00:00
{
snmp_del_bgp_table();
//snmp_del_ospf_table();
2022-08-01 11:01:49 +00:00
}
/* snmp_shutdown already occupied by net-snmp */
void
snmp_shutdown_(struct proto *P)
2022-08-01 11:01:49 +00:00
{
snmp_stop_subagent(shutdown_multihook);
2022-08-01 11:01:49 +00:00
}
struct protocol proto_snmp = {
.name = "Snmp",
.template = "snmp%d",
.channel_mask = NB_ANY,
.proto_size = sizeof(struct snmp_proto),
.config_size = sizeof(struct snmp_config),
.init = snmp_init,
.start = snmp_start,
.reconfigure = snmp_reconfigure,
.shutdown = snmp_shutdown_,
2022-08-01 11:01:49 +00:00
.show_proto_info = snmp_show_proto_info,
};
/* strange name because conflict with net-snmp lib snmp_lib() */
2022-08-01 11:01:49 +00:00
void
snmp_build_(void)
2022-08-01 11:01:49 +00:00
{
proto_build(&proto_snmp);
}