diff options
| -rw-r--r-- | bgpd/bgp_snmp.c | 38 | ||||
| -rw-r--r-- | bgpd/bgp_snmp.h | 4 | ||||
| -rw-r--r-- | bgpd/bgp_snmp_bgp4.c | 6 | ||||
| -rw-r--r-- | bgpd/bgp_vty.c | 3 | ||||
| -rw-r--r-- | bgpd/bgpd.h | 1 | ||||
| -rw-r--r-- | bgpd/subdir.am | 1 |
6 files changed, 53 insertions, 0 deletions
diff --git a/bgpd/bgp_snmp.c b/bgpd/bgp_snmp.c index ce9442c1e0..0d26b5c64c 100644 --- a/bgpd/bgp_snmp.c +++ b/bgpd/bgp_snmp.c @@ -29,10 +29,46 @@ #include "bgpd/bgp_snmp_bgp4.h" #include "bgpd/bgp_snmp_bgp4v2.h" #include "bgpd/bgp_mplsvpn_snmp.h" +#include "bgpd/bgp_snmp_clippy.c" + +uint32_t bgp_snmp_traps_flags; + +static int bgp_cli_snmp_traps_config_write(struct vty *vty); + +DEFPY(bgp_snmp_traps_rfc4273, bgp_snmp_traps_rfc4273_cmd, + "bgp snmp traps rfc4273 <enable$on|disable$off>", + BGP_STR "Configure BGP SNMP\n" + "Configure SNMP traps for BGP \n" + "Configure use of rfc4273 SNMP traps for BGP \n" + "Enable rfc4273 traps\n" + "Disable rfc4273 traps\n") +{ + if (on) { + SET_FLAG(bgp_snmp_traps_flags, BGP_SNMP_TRAPS_RFC4273_ENABLED); + return CMD_SUCCESS; + } + UNSET_FLAG(bgp_snmp_traps_flags, BGP_SNMP_TRAPS_RFC4273_ENABLED); + return CMD_SUCCESS; +} + +static void bgp_snmp_traps_init(void) +{ + install_element(CONFIG_NODE, &bgp_snmp_traps_rfc4273_cmd); + SET_FLAG(bgp_snmp_traps_flags, BGP_SNMP_TRAPS_RFC4273_ENABLED); +} + +int bgp_cli_snmp_traps_config_write(struct vty *vty) +{ + if (CHECK_FLAG(bgp_snmp_traps_flags, BGP_SNMP_TRAPS_RFC4273_ENABLED)) + return 0; + vty_out(vty, "traps rfc4273 disable\n"); + return 0; +} static int bgp_snmp_init(struct event_loop *tm) { smux_init(tm); + bgp_snmp_traps_init(); bgp_snmp_bgp4_init(tm); bgp_snmp_bgp4v2_init(tm); bgp_mpls_l3vpn_module_init(); @@ -44,6 +80,8 @@ static int bgp_snmp_module_init(void) hook_register(peer_status_changed, bgpTrapEstablished); hook_register(peer_backward_transition, bgpTrapBackwardTransition); hook_register(frr_late_init, bgp_snmp_init); + hook_register(bgp_snmp_traps_config_write, + bgp_cli_snmp_traps_config_write); return 0; } diff --git a/bgpd/bgp_snmp.h b/bgpd/bgp_snmp.h index d324782ae3..36ee4d6162 100644 --- a/bgpd/bgp_snmp.h +++ b/bgpd/bgp_snmp.h @@ -15,4 +15,8 @@ #define IPADDRESS ASN_IPADDRESS #define GAUGE32 ASN_UNSIGNED +extern uint32_t bgp_snmp_traps_flags; + +#define BGP_SNMP_TRAPS_RFC4273_ENABLED (1 << 0) + #endif /* _FRR_BGP_SNMP_H_ */ diff --git a/bgpd/bgp_snmp_bgp4.c b/bgpd/bgp_snmp_bgp4.c index 692e232a83..6da16057d1 100644 --- a/bgpd/bgp_snmp_bgp4.c +++ b/bgpd/bgp_snmp_bgp4.c @@ -764,6 +764,9 @@ int bgpTrapEstablished(struct peer *peer) oid index[sizeof(oid) * IN_ADDR_SIZE]; struct peer_connection *connection = peer->connection; + if (!CHECK_FLAG(bgp_snmp_traps_flags, BGP_SNMP_TRAPS_RFC4273_ENABLED)) + return 0; + /* Check if this peer just went to Established */ if ((connection->ostatus != OpenConfirm) || !(peer_established(connection))) @@ -788,6 +791,9 @@ int bgpTrapBackwardTransition(struct peer *peer) struct in_addr addr; oid index[sizeof(oid) * IN_ADDR_SIZE]; + if (!CHECK_FLAG(bgp_snmp_traps_flags, BGP_SNMP_TRAPS_RFC4273_ENABLED)) + return 0; + ret = inet_aton(peer->host, &addr); if (ret == 0) return 0; diff --git a/bgpd/bgp_vty.c b/bgpd/bgp_vty.c index 8144d6e7b3..49213bcfb7 100644 --- a/bgpd/bgp_vty.c +++ b/bgpd/bgp_vty.c @@ -128,6 +128,7 @@ DEFINE_HOOK(bgp_inst_config_write, (bgp, vty)); DEFINE_HOOK(bgp_snmp_update_last_changed, (struct bgp *bgp), (bgp)); DEFINE_HOOK(bgp_snmp_init_stats, (struct bgp *bgp), (bgp)); +DEFINE_HOOK(bgp_snmp_traps_config_write, (struct vty * vty), (vty)); static struct peer_group *listen_range_exists(struct bgp *bgp, struct prefix *range, int exact); @@ -18477,6 +18478,8 @@ int bgp_config_write(struct vty *vty) safi_t safi; uint32_t tovpn_sid_index = 0; + hook_call(bgp_snmp_traps_config_write, vty); + if (bm->rmap_update_timer != RMAP_DEFAULT_UPDATE_TIMER) vty_out(vty, "bgp route-map delay-timer %u\n", bm->rmap_update_timer); diff --git a/bgpd/bgpd.h b/bgpd/bgpd.h index bc2008b78b..60d61918a3 100644 --- a/bgpd/bgpd.h +++ b/bgpd/bgpd.h @@ -832,6 +832,7 @@ DECLARE_HOOK(bgp_inst_delete, (struct bgp *bgp), (bgp)); DECLARE_HOOK(bgp_inst_config_write, (struct bgp *bgp, struct vty *vty), (bgp, vty)); +DECLARE_HOOK(bgp_snmp_traps_config_write, (struct vty * vty), (vty)); DECLARE_HOOK(bgp_config_end, (struct bgp *bgp), (bgp)); /* Thread callback information */ diff --git a/bgpd/subdir.am b/bgpd/subdir.am index c2dd207a49..7de6e7a9f1 100644 --- a/bgpd/subdir.am +++ b/bgpd/subdir.am @@ -214,6 +214,7 @@ clippy_scan += \ bgpd/bgp_rpki.c \ bgpd/bgp_vty.c \ bgpd/bgp_nexthop.c \ + bgpd/bgp_snmp.c \ # end nodist_bgpd_bgpd_SOURCES = \ |
