diff options
Diffstat (limited to 'bgpd/bgp_snmp.c')
-rw-r--r-- | bgpd/bgp_snmp.c | 48 |
1 files changed, 28 insertions, 20 deletions
diff --git a/bgpd/bgp_snmp.c b/bgpd/bgp_snmp.c index 86cc0879..eaa41e6c 100644 --- a/bgpd/bgp_snmp.c +++ b/bgpd/bgp_snmp.c @@ -415,6 +415,7 @@ write_bgpPeerTable (int action, u_char *var_val, printf ("val: %ld\n", intval); + /* TODO: wire up timer interval settings so that session sees them */ switch (v->magic) { case BGPPEERADMINSTATUS: @@ -422,7 +423,8 @@ write_bgpPeerTable (int action, u_char *var_val, #define BGP_PeerAdmin_start 2 /* When the peer is established, */ if (intval == BGP_PeerAdmin_stop) - BGP_EVENT_ADD (peer, BGP_Stop); +/* TODO: wire up SNMP BGPPEERADMINSTATUS BGP_PeerAdmin_stop ?? */ +/* BGP_EVENT_ADD (peer, BGP_Stop) */ ; else if (intval == BGP_PeerAdmin_start) ; /* Do nothing. */ else @@ -430,21 +432,21 @@ write_bgpPeerTable (int action, u_char *var_val, break; case BGPPEERCONNECTRETRYINTERVAL: SET_FLAG (peer->config, PEER_CONFIG_CONNECT); - peer->connect = intval; + peer->connect = intval; peer->v_connect = intval; break; case BGPPEERHOLDTIMECONFIGURED: SET_FLAG (peer->config, PEER_CONFIG_TIMER); - peer->holdtime = intval; + peer->holdtime = intval; peer->v_holdtime = intval; break; case BGPPEERKEEPALIVECONFIGURED: SET_FLAG (peer->config, PEER_CONFIG_TIMER); - peer->keepalive = intval; + peer->keepalive = intval; peer->v_keepalive = intval; break; case BGPPEERMINASORIGINATIONINTERVAL: - peer->v_asorig = intval; + peer->v_asorig = intval; break; case BGPPEERMINROUTEADVERTISEMENTINTERVAL: peer->v_routeadv = intval; @@ -459,6 +461,7 @@ bgpPeerTable (struct variable *v, oid name[], size_t *length, { static struct in_addr addr; struct peer *peer; + struct bgp_session_stats stats; *write_method = NULL; memset (&addr, 0, sizeof (struct in_addr)); @@ -467,13 +470,15 @@ bgpPeerTable (struct variable *v, oid name[], size_t *length, if (! peer) return NULL; + bgp_session_get_stats(peer->session, &stats); + switch (v->magic) { case BGPPEERIDENTIFIER: return SNMP_IPADDRESS (peer->remote_id); break; case BGPPEERSTATE: - return SNMP_INTEGER (peer->status); + return SNMP_INTEGER (peer->state); /* TODO: reconstruct old value */ break; case BGPPEERADMINSTATUS: *write_method = write_bgpPeerTable; @@ -515,26 +520,29 @@ bgpPeerTable (struct variable *v, oid name[], size_t *length, return SNMP_INTEGER (peer->as); break; case BGPPEERINUPDATES: - return SNMP_INTEGER (peer->update_in); + return SNMP_INTEGER (stats.update_in); break; case BGPPEEROUTUPDATES: - return SNMP_INTEGER (peer->update_out); + return SNMP_INTEGER (stats.update_out); break; case BGPPEERINTOTALMESSAGES: - return SNMP_INTEGER (peer->open_in + peer->update_in - + peer->keepalive_in + peer->notify_in - + peer->refresh_in + peer->dynamic_cap_in); + return SNMP_INTEGER (stats.open_in + stats.update_in + + stats.keepalive_in + stats.notify_in + + stats.refresh_in + stats.dynamic_cap_in); break; case BGPPEEROUTTOTALMESSAGES: - return SNMP_INTEGER (peer->open_out + peer->update_out - + peer->keepalive_out + peer->notify_out - + peer->refresh_out + peer->dynamic_cap_out); + return SNMP_INTEGER (stats.open_out + stats.update_out + + stats.keepalive_out + stats.notify_out + + stats.refresh_out + stats.dynamic_cap_out); break; case BGPPEERLASTERROR: { static u_char lasterror[2]; - lasterror[0] = peer->notify.code; - lasterror[1] = peer->notify.subcode; + bgp_notify notification = NULL ; + if (peer->session != NULL) + notification = peer->session->notification ; + lasterror[0] = (notification != NULL) ? notification->code : 0 ; + lasterror[1] = (notification != NULL) ? notification->subcode : 0 ; *var_len = 2; return (u_char *)&lasterror; } @@ -581,10 +589,10 @@ bgpPeerTable (struct variable *v, oid name[], size_t *length, return SNMP_INTEGER (peer->v_routeadv); break; case BGPPEERINUPDATEELAPSEDTIME: - if (peer->update_time == 0) + if (stats.update_time == 0) return SNMP_INTEGER (0); else - return SNMP_INTEGER (bgp_clock () - peer->update_time); + return SNMP_INTEGER (bgp_clock () - stats.update_time); break; default: return NULL; @@ -662,7 +670,7 @@ bgp4PathAttrLookup (struct variable *v, oid name[], size_t *length, { bgp_unlock_node (rn); - for (binfo = rn->info; binfo; binfo = binfo->next) + for (binfo = rn->info; binfo; binfo = binfo->info_next) if (sockunion_same (&binfo->peer->su, &su)) return binfo; } @@ -715,7 +723,7 @@ bgp4PathAttrLookup (struct variable *v, oid name[], size_t *length, { min = NULL; - for (binfo = rn->info; binfo; binfo = binfo->next) + for (binfo = rn->info; binfo; binfo = binfo->info_next) { if (binfo->peer->su.sin.sin_family == AF_INET && ntohl (paddr.s_addr) |