forked from Mirror/frr
bgpd: add [no] bgp snmp traps bgp4-mibv2 command
There is no command to choose to send or not the bgp4-mibv2 traps. Since the MIB bgp4-mibv2 notification are redundant with MIB RFC4273 we added a command: - [no] bgp snmp traps bgp4-mibv2 By default, the bgp4-mibv2 traps will be disabled, to prevent from redundancy. Signed-off-by: Francois Dumontet <francois.dumontet@6wind.com>
This commit is contained in:
parent
d78854f438
commit
e6de67f1e5
|
@ -31,30 +31,47 @@
|
||||||
#include "bgpd/bgp_mplsvpn_snmp.h"
|
#include "bgpd/bgp_mplsvpn_snmp.h"
|
||||||
#include "bgpd/bgp_snmp_clippy.c"
|
#include "bgpd/bgp_snmp_clippy.c"
|
||||||
|
|
||||||
uint32_t bgp_snmp_traps_flags;
|
|
||||||
|
|
||||||
static int bgp_cli_snmp_traps_config_write(struct vty *vty);
|
static int bgp_cli_snmp_traps_config_write(struct vty *vty);
|
||||||
|
|
||||||
DEFPY(bgp_snmp_traps_rfc4273, bgp_snmp_traps_rfc4273_cmd,
|
DEFPY(bgp_snmp_traps_rfc4273, bgp_snmp_traps_rfc4273_cmd,
|
||||||
"bgp snmp traps rfc4273 <enable$on|disable$off>",
|
"[no$no] bgp snmp traps rfc4273",
|
||||||
BGP_STR "Configure BGP SNMP\n"
|
NO_STR BGP_STR
|
||||||
"Configure SNMP traps for BGP \n"
|
"Configure BGP SNMP\n"
|
||||||
"Configure use of rfc4273 SNMP traps for BGP \n"
|
"Configure SNMP traps for BGP\n"
|
||||||
"Enable rfc4273 traps\n"
|
"Configure use of rfc4273 SNMP traps for BGP\n")
|
||||||
"Disable rfc4273 traps\n")
|
|
||||||
{
|
{
|
||||||
if (on) {
|
if (no) {
|
||||||
SET_FLAG(bgp_snmp_traps_flags, BGP_SNMP_TRAPS_RFC4273_ENABLED);
|
UNSET_FLAG(bm->options, BGP_OPT_TRAPS_RFC4273);
|
||||||
return CMD_SUCCESS;
|
return CMD_SUCCESS;
|
||||||
}
|
}
|
||||||
UNSET_FLAG(bgp_snmp_traps_flags, BGP_SNMP_TRAPS_RFC4273_ENABLED);
|
SET_FLAG(bm->options, BGP_OPT_TRAPS_RFC4273);
|
||||||
|
return CMD_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
DEFPY(bgp_snmp_traps_bgp4_mibv2, bgp_snmp_traps_bgp4_mibv2_cmd,
|
||||||
|
"[no$no] bgp snmp traps bgp4-mibv2",
|
||||||
|
NO_STR BGP_STR
|
||||||
|
"Configure BGP SNMP\n"
|
||||||
|
"Configure SNMP traps for BGP\n"
|
||||||
|
"Configure use of BGP4-MIBv2 SNMP traps for BGP\n")
|
||||||
|
{
|
||||||
|
if (no) {
|
||||||
|
UNSET_FLAG(bm->options, BGP_OPT_TRAPS_BGP4MIBV2);
|
||||||
|
return CMD_SUCCESS;
|
||||||
|
}
|
||||||
|
SET_FLAG(bm->options, BGP_OPT_TRAPS_BGP4MIBV2);
|
||||||
return CMD_SUCCESS;
|
return CMD_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void bgp_snmp_traps_init(void)
|
static void bgp_snmp_traps_init(void)
|
||||||
{
|
{
|
||||||
install_element(CONFIG_NODE, &bgp_snmp_traps_rfc4273_cmd);
|
install_element(CONFIG_NODE, &bgp_snmp_traps_rfc4273_cmd);
|
||||||
SET_FLAG(bgp_snmp_traps_flags, BGP_SNMP_TRAPS_RFC4273_ENABLED);
|
install_element(CONFIG_NODE, &bgp_snmp_traps_bgp4_mibv2_cmd);
|
||||||
|
|
||||||
|
SET_FLAG(bm->options, BGP_OPT_TRAPS_RFC4273);
|
||||||
|
/* BGP4MIBv2 traps are disabled by default */
|
||||||
}
|
}
|
||||||
|
|
||||||
int bgp_cli_snmp_traps_config_write(struct vty *vty)
|
int bgp_cli_snmp_traps_config_write(struct vty *vty)
|
||||||
|
@ -75,15 +92,23 @@ int bgp_cli_snmp_traps_config_write(struct vty *vty)
|
||||||
|
|
||||||
int bgpTrapEstablished(struct peer *peer)
|
int bgpTrapEstablished(struct peer *peer)
|
||||||
{
|
{
|
||||||
bgp4TrapEstablished(peer);
|
if (CHECK_FLAG(bm->options, BGP_OPT_TRAPS_RFC4273))
|
||||||
bgpv2TrapEstablished(peer);
|
bgp4TrapEstablished(peer);
|
||||||
|
|
||||||
|
if (CHECK_FLAG(bm->options, BGP_OPT_TRAPS_BGP4MIBV2))
|
||||||
|
bgpv2TrapEstablished(peer);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int bgpTrapBackwardTransition(struct peer *peer)
|
int bgpTrapBackwardTransition(struct peer *peer)
|
||||||
{
|
{
|
||||||
bgp4TrapBackwardTransition(peer);
|
if (CHECK_FLAG(bm->options, BGP_OPT_TRAPS_RFC4273))
|
||||||
bgpv2TrapBackwardTransition(peer);
|
bgp4TrapBackwardTransition(peer);
|
||||||
|
|
||||||
|
if (CHECK_FLAG(bm->options, BGP_OPT_TRAPS_BGP4MIBV2))
|
||||||
|
bgpv2TrapBackwardTransition(peer);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -15,10 +15,6 @@
|
||||||
#define IPADDRESS ASN_IPADDRESS
|
#define IPADDRESS ASN_IPADDRESS
|
||||||
#define GAUGE32 ASN_UNSIGNED
|
#define GAUGE32 ASN_UNSIGNED
|
||||||
|
|
||||||
extern uint32_t bgp_snmp_traps_flags;
|
|
||||||
|
|
||||||
#define BGP_SNMP_TRAPS_RFC4273_ENABLED (1 << 0)
|
|
||||||
|
|
||||||
extern int bgpTrapEstablished(struct peer *peer);
|
extern int bgpTrapEstablished(struct peer *peer);
|
||||||
extern int bgpTrapBackwardTransition(struct peer *peer);
|
extern int bgpTrapBackwardTransition(struct peer *peer);
|
||||||
|
|
||||||
|
|
|
@ -764,9 +764,6 @@ int bgp4TrapEstablished(struct peer *peer)
|
||||||
oid index[sizeof(oid) * IN_ADDR_SIZE];
|
oid index[sizeof(oid) * IN_ADDR_SIZE];
|
||||||
struct peer_connection *connection = peer->connection;
|
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 */
|
/* Check if this peer just went to Established */
|
||||||
if ((connection->ostatus != OpenConfirm) ||
|
if ((connection->ostatus != OpenConfirm) ||
|
||||||
!(peer_established(connection)))
|
!(peer_established(connection)))
|
||||||
|
@ -791,9 +788,6 @@ int bgp4TrapBackwardTransition(struct peer *peer)
|
||||||
struct in_addr addr;
|
struct in_addr addr;
|
||||||
oid index[sizeof(oid) * IN_ADDR_SIZE];
|
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);
|
ret = inet_aton(peer->host, &addr);
|
||||||
if (ret == 0)
|
if (ret == 0)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -825,7 +825,6 @@ static struct trap_object bgpv2TrapBackListv6[] = {
|
||||||
{ 6, { 1, 3, 1, BGP4V2_PEER_LAST_ERROR_RECEIVED_TEXT, 1, 2 } }
|
{ 6, { 1, 3, 1, BGP4V2_PEER_LAST_ERROR_RECEIVED_TEXT, 1, 2 } }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
static struct variable bgpv2_variables[] = {
|
static struct variable bgpv2_variables[] = {
|
||||||
/* bgp4V2PeerEntry */
|
/* bgp4V2PeerEntry */
|
||||||
{BGP4V2_PEER_INSTANCE,
|
{BGP4V2_PEER_INSTANCE,
|
||||||
|
@ -1450,6 +1449,9 @@ int bgpv2TrapEstablished(struct peer *peer)
|
||||||
oid index[sizeof(oid) * IN6_ADDR_SIZE];
|
oid index[sizeof(oid) * IN6_ADDR_SIZE];
|
||||||
size_t length;
|
size_t length;
|
||||||
|
|
||||||
|
if (!CHECK_FLAG(bm->options, BGP_OPT_TRAPS_BGP4MIBV2))
|
||||||
|
return 0;
|
||||||
|
|
||||||
/* Check if this peer just went to Established */
|
/* Check if this peer just went to Established */
|
||||||
if ((peer->connection->ostatus != OpenConfirm) ||
|
if ((peer->connection->ostatus != OpenConfirm) ||
|
||||||
!(peer_established(peer->connection)))
|
!(peer_established(peer->connection)))
|
||||||
|
@ -1475,8 +1477,7 @@ int bgpv2TrapEstablished(struct peer *peer)
|
||||||
BGP4V2ESTABLISHED);
|
BGP4V2ESTABLISHED);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return 0;
|
break;
|
||||||
;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -1487,6 +1488,9 @@ int bgpv2TrapBackwardTransition(struct peer *peer)
|
||||||
oid index[sizeof(oid) * IN6_ADDR_SIZE];
|
oid index[sizeof(oid) * IN6_ADDR_SIZE];
|
||||||
size_t length;
|
size_t length;
|
||||||
|
|
||||||
|
if (!CHECK_FLAG(bm->options, BGP_OPT_TRAPS_BGP4MIBV2))
|
||||||
|
return 0;
|
||||||
|
|
||||||
switch (sockunion_family(&peer->connection->su)) {
|
switch (sockunion_family(&peer->connection->su)) {
|
||||||
case AF_INET:
|
case AF_INET:
|
||||||
oid_copy_in_addr(index, &peer->connection->su.sin.sin_addr);
|
oid_copy_in_addr(index, &peer->connection->su.sin.sin_addr);
|
||||||
|
@ -1507,14 +1511,12 @@ int bgpv2TrapBackwardTransition(struct peer *peer)
|
||||||
BGP4V2BACKWARDTRANSITION);
|
BGP4V2BACKWARDTRANSITION);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return 0;
|
break;
|
||||||
;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int bgp_snmp_bgp4v2_init(struct event_loop *tm)
|
int bgp_snmp_bgp4v2_init(struct event_loop *tm)
|
||||||
{
|
{
|
||||||
REGISTER_MIB("mibII/bgpv2", bgpv2_variables, variable, bgpv2_oid);
|
REGISTER_MIB("mibII/bgpv2", bgpv2_variables, variable, bgpv2_oid);
|
||||||
|
|
|
@ -121,6 +121,8 @@ struct bgp_master {
|
||||||
#define BGP_OPT_NO_FIB (1 << 0)
|
#define BGP_OPT_NO_FIB (1 << 0)
|
||||||
#define BGP_OPT_NO_LISTEN (1 << 1)
|
#define BGP_OPT_NO_LISTEN (1 << 1)
|
||||||
#define BGP_OPT_NO_ZEBRA (1 << 2)
|
#define BGP_OPT_NO_ZEBRA (1 << 2)
|
||||||
|
#define BGP_OPT_TRAPS_RFC4273 (1 << 3)
|
||||||
|
#define BGP_OPT_TRAPS_BGP4MIBV2 (1 << 4)
|
||||||
|
|
||||||
uint64_t updgrp_idspace;
|
uint64_t updgrp_idspace;
|
||||||
uint64_t subgrp_idspace;
|
uint64_t subgrp_idspace;
|
||||||
|
|
Loading…
Reference in a new issue