bgpd: lttng tracepoint for local events received from zebra

TPs -
=====
root@ibm-2410a1-01:mgmt:~# lttng list --userspace |grep frr_bgp:evpn.*recv
      frr_bgp:evpn_local_l3vni_del_zrecv (loglevel: TRACE_INFO (6)) (type: tracepoint)
      frr_bgp:evpn_local_l3vni_add_zrecv (loglevel: TRACE_INFO (6)) (type: tracepoint)
      frr_bgp:evpn_local_macip_del_zrecv (loglevel: TRACE_INFO (6)) (type: tracepoint)
      frr_bgp:evpn_local_macip_add_zrecv (loglevel: TRACE_INFO (6)) (type: tracepoint)
      frr_bgp:evpn_local_vni_del_zrecv (loglevel: TRACE_INFO (6)) (type: tracepoint)
      frr_bgp:evpn_local_vni_add_zrecv (loglevel: TRACE_INFO (6)) (type: tracepoint)
      frr_bgp:evpn_mh_local_es_evi_del_zrecv (loglevel: TRACE_INFO (6)) (type: tracepoint)
      frr_bgp:evpn_mh_local_es_evi_add_zrecv (loglevel: TRACE_INFO (6)) (type: tracepoint)
      frr_bgp:evpn_mh_local_es_del_zrecv (loglevel: TRACE_INFO (6)) (type: tracepoint)
      frr_bgp:evpn_mh_local_es_add_zrecv (loglevel: TRACE_INFO (6)) (type: tracepoint)
root@ibm-2410a1-01:mgmt:~#

Sample output -
===============
1. ES
frr_bgp:evpn_mh_local_es_add_zrecv {'esi': '03:44:38:39:ff:ff:01:00:00:01', 'vtep': '27.0.0.15', 'active': 0, 'bypass': 0, 'df_pref': 50000}
frr_bgp:evpn_mh_local_es_del_zrecv {'esi': '03:44:38:39:ff:ff:01:00:00:01'}

2. ES-EVI
frr_bgp:evpn_mh_local_es_evi_add_zrecv {'esi': '03:44:38:39:ff:ff:01:00:00:01', 'vni': 1004}
frr_bgp:evpn_mh_local_es_evi_del_zrecv {'esi': '03:44:38:39:ff:ff:01:00:00:01', 'vni': 1001}

3. L2-VNI
frr_bgp:evpn_local_vni_add_zrecv {'vni': 1004, 'vtep': '27.0.0.15', 'mc_grp': '239.1.1.104', 'vrf': 97}

4. L3-VNI
frr_bgp:evpn_local_l3vni_add_zrecv {'vni': 4001, 'vrf': 87, 'svi_rmac': '24:8a:07:cc:aa:5f', 'vrr_rmac': '24:8a:07:cc:aa:5f', 'vtep': '27.0.0.15', 'filter': 0, 'svi_ifindex': 95, 'anycast_mac': 'n'
frr_bgp:evpn_local_l3vni_del_zrecv {'vni': 4003, 'vrf': 107}

5. MAC-IP
frr_bgp:evpn_local_macip_add_zrecv {'vni': 1003, 'mac': '00:02:00:00:00:04', 'ip': 'fe80::202:ff:fe00:4', 'flags': 4, 'seq': 0, 'esi': '03:44:38:39:ff:ff:01:00:00:02'}
frr_bgp:evpn_local_macip_del_zrecv {'vni': 1000, 'mac': '00:02:00:00:00:04', 'ip': '2001:fee1::4', 'state': 1}

Signed-off-by: Anuradha Karuppiah <anuradhak@nvidia.com>
This commit is contained in:
Anuradha Karuppiah 2021-10-04 09:41:43 -07:00
parent 1afa7d5326
commit a383bfc7c9
3 changed files with 282 additions and 8 deletions

View File

@ -334,6 +334,147 @@ TRACEPOINT_EVENT(
)
)
TRACEPOINT_LOGLEVEL(frr_bgp, evpn_nh_rmac_zsend, TRACE_INFO)
TRACEPOINT_EVENT(
frr_bgp,
evpn_mh_local_es_add_zrecv,
TP_ARGS(esi_t *, esi, struct in_addr, vtep,
uint8_t, active, uint8_t, bypass, uint16_t, df_pref),
TP_FIELDS(
ctf_array(unsigned char, esi, esi, sizeof(esi_t))
ctf_integer_network_hex(unsigned int, vtep, vtep.s_addr)
ctf_integer(uint8_t, active, active)
ctf_integer(uint8_t, bypass, bypass)
ctf_integer(uint16_t, df_pref, df_pref)
)
)
TRACEPOINT_LOGLEVEL(frr_bgp, evpn_mh_local_es_add_zrecv, TRACE_INFO)
TRACEPOINT_EVENT(
frr_bgp,
evpn_mh_local_es_del_zrecv,
TP_ARGS(esi_t *, esi),
TP_FIELDS(
ctf_array(unsigned char, esi, esi, sizeof(esi_t))
)
)
TRACEPOINT_LOGLEVEL(frr_bgp, evpn_mh_local_es_del_zrecv, TRACE_INFO)
TRACEPOINT_EVENT(
frr_bgp,
evpn_mh_local_es_evi_add_zrecv,
TP_ARGS(esi_t *, esi, vni_t, vni),
TP_FIELDS(
ctf_array(unsigned char, esi, esi, sizeof(esi_t))
ctf_integer(vni_t, vni, vni)
)
)
TRACEPOINT_LOGLEVEL(frr_bgp, evpn_mh_local_es_evi_add_zrecv, TRACE_INFO)
TRACEPOINT_EVENT(
frr_bgp,
evpn_mh_local_es_evi_del_zrecv,
TP_ARGS(esi_t *, esi, vni_t, vni),
TP_FIELDS(
ctf_array(unsigned char, esi, esi, sizeof(esi_t))
ctf_integer(vni_t, vni, vni)
)
)
TRACEPOINT_LOGLEVEL(frr_bgp, evpn_mh_local_es_evi_del_zrecv, TRACE_INFO)
TRACEPOINT_EVENT(
frr_bgp,
evpn_local_vni_add_zrecv,
TP_ARGS(vni_t, vni, struct in_addr, vtep, vrf_id_t, vrf,
struct in_addr, mc_grp),
TP_FIELDS(
ctf_integer(vni_t, vni, vni)
ctf_integer_network_hex(unsigned int, vtep, vtep.s_addr)
ctf_integer_network_hex(unsigned int, mc_grp,
mc_grp.s_addr)
ctf_integer(int, vrf, vrf)
)
)
TRACEPOINT_LOGLEVEL(frr_bgp, evpn_local_vni_add_zrecv, TRACE_INFO)
TRACEPOINT_EVENT(
frr_bgp,
evpn_local_vni_del_zrecv,
TP_ARGS(vni_t, vni),
TP_FIELDS(
ctf_integer(vni_t, vni, vni)
)
)
TRACEPOINT_LOGLEVEL(frr_bgp, evpn_local_vni_del_zrecv, TRACE_INFO)
TRACEPOINT_EVENT(
frr_bgp,
evpn_local_macip_add_zrecv,
TP_ARGS(vni_t, vni, struct ethaddr *, mac,
struct ipaddr *, ip, uint32_t, flags,
uint32_t, seqnum, esi_t *, esi),
TP_FIELDS(
ctf_integer(vni_t, vni, vni)
ctf_array(unsigned char, mac, mac,
sizeof(struct ethaddr))
ctf_array(unsigned char, ip, ip,
sizeof(struct ipaddr))
ctf_integer(uint32_t, flags, flags)
ctf_integer(uint32_t, seq, seqnum)
ctf_array(unsigned char, esi, esi, sizeof(esi_t))
)
)
TRACEPOINT_LOGLEVEL(frr_bgp, evpn_local_macip_add_zrecv, TRACE_INFO)
TRACEPOINT_EVENT(
frr_bgp,
evpn_local_macip_del_zrecv,
TP_ARGS(vni_t, vni, struct ethaddr *, mac, struct ipaddr *, ip,
int, state),
TP_FIELDS(
ctf_integer(vni_t, vni, vni)
ctf_array(unsigned char, mac, mac,
sizeof(struct ethaddr))
ctf_array(unsigned char, ip, ip,
sizeof(struct ipaddr))
ctf_integer(int, state, state)
)
)
TRACEPOINT_LOGLEVEL(frr_bgp, evpn_local_macip_del_zrecv, TRACE_INFO)
TRACEPOINT_EVENT(
frr_bgp,
evpn_local_l3vni_add_zrecv,
TP_ARGS(vni_t, vni, vrf_id_t, vrf,
struct ethaddr *, svi_rmac,
struct ethaddr *, vrr_rmac, int, filter,
struct in_addr, vtep, int, svi_ifindex,
bool, anycast_mac),
TP_FIELDS(
ctf_integer(vni_t, vni, vni)
ctf_integer(int, vrf, vrf)
ctf_array(unsigned char, svi_rmac, svi_rmac,
sizeof(struct ethaddr))
ctf_array(unsigned char, vrr_rmac, vrr_rmac,
sizeof(struct ethaddr))
ctf_integer_network_hex(unsigned int, vtep, vtep.s_addr)
ctf_integer(int, filter, filter)
ctf_integer(int, svi_ifindex, svi_ifindex)
ctf_string(anycast_mac, anycast_mac ? "y" : "n")
)
)
TRACEPOINT_LOGLEVEL(frr_bgp, evpn_local_l3vni_add_zrecv, TRACE_INFO)
TRACEPOINT_EVENT(
frr_bgp,
evpn_local_l3vni_del_zrecv,
TP_ARGS(vni_t, vni, vrf_id_t, vrf),
TP_FIELDS(
ctf_integer(vni_t, vni, vni)
ctf_integer(int, vrf, vrf)
)
)
TRACEPOINT_LOGLEVEL(frr_bgp, evpn_local_l3vni_del_zrecv, TRACE_INFO)
/* clang-format on */
#include <lttng/tracepoint-event.h>

View File

@ -64,6 +64,7 @@
#include "bgpd/bgp_evpn_private.h"
#include "bgpd/bgp_evpn_mh.h"
#include "bgpd/bgp_mac.h"
#include "bgpd/bgp_trace.h"
/* All information about zebra. */
struct zclient *zclient = NULL;
@ -2773,6 +2774,9 @@ static int bgp_zebra_process_local_es_add(ZAPI_CALLBACK_ARGS)
esi_to_str(&esi, buf, sizeof(buf)), &originator_ip,
active, df_pref, bypass ? "bypass" : "");
frrtrace(5, frr_bgp, evpn_mh_local_es_add_zrecv, &esi, originator_ip,
active, bypass, df_pref);
bgp_evpn_local_es_add(bgp, &esi, originator_ip, active, df_pref,
!!bypass);
@ -2798,6 +2802,8 @@ static int bgp_zebra_process_local_es_del(ZAPI_CALLBACK_ARGS)
zlog_debug("Rx del ESI %s",
esi_to_str(&esi, buf, sizeof(buf)));
frrtrace(1, frr_bgp, evpn_mh_local_es_del_zrecv, &esi);
bgp_evpn_local_es_del(bgp, &esi);
return 0;
@ -2824,10 +2830,15 @@ static int bgp_zebra_process_local_es_evi(ZAPI_CALLBACK_ARGS)
ZEBRA_VNI_ADD ? "add" : "del",
esi_to_str(&esi, buf, sizeof(buf)), vni);
if (cmd == ZEBRA_LOCAL_ES_EVI_ADD)
if (cmd == ZEBRA_LOCAL_ES_EVI_ADD) {
frrtrace(2, frr_bgp, evpn_mh_local_es_evi_add_zrecv, &esi, vni);
bgp_evpn_local_es_evi_add(bgp, &esi, vni);
else
} else {
frrtrace(2, frr_bgp, evpn_mh_local_es_evi_del_zrecv, &esi, vni);
bgp_evpn_local_es_evi_del(bgp, &esi, vni);
}
return 0;
}
@ -2862,6 +2873,10 @@ static int bgp_zebra_process_local_l3vni(ZAPI_CALLBACK_ARGS)
filter ? "prefix-routes-only" : "none",
svi_ifindex);
frrtrace(8, frr_bgp, evpn_local_l3vni_add_zrecv, l3vni, vrf_id,
&svi_rmac, &vrr_rmac, filter, originator_ip,
svi_ifindex, is_anycast_mac);
bgp_evpn_local_l3vni_add(l3vni, vrf_id, &svi_rmac, &vrr_rmac,
originator_ip, filter, svi_ifindex,
is_anycast_mac);
@ -2870,6 +2885,8 @@ static int bgp_zebra_process_local_l3vni(ZAPI_CALLBACK_ARGS)
zlog_debug("Rx L3-VNI DEL VRF %s VNI %u",
vrf_id_to_name(vrf_id), l3vni);
frrtrace(2, frr_bgp, evpn_local_l3vni_del_zrecv, l3vni, vrf_id);
bgp_evpn_local_l3vni_del(l3vni, vrf_id);
}
@ -2906,13 +2923,19 @@ static int bgp_zebra_process_local_vni(ZAPI_CALLBACK_ARGS)
vrf_id_to_name(vrf_id), vni,
vrf_id_to_name(tenant_vrf_id), svi_ifindex);
if (cmd == ZEBRA_VNI_ADD)
if (cmd == ZEBRA_VNI_ADD) {
frrtrace(4, frr_bgp, evpn_local_vni_add_zrecv, vni, vtep_ip,
tenant_vrf_id, mcast_grp);
return bgp_evpn_local_vni_add(
bgp, vni,
vtep_ip.s_addr != INADDR_ANY ? vtep_ip : bgp->router_id,
tenant_vrf_id, mcast_grp, svi_ifindex);
else
} else {
frrtrace(1, frr_bgp, evpn_local_vni_del_zrecv, vni);
return bgp_evpn_local_vni_del(bgp, vni);
}
}
static int bgp_zebra_process_local_macip(ZAPI_CALLBACK_ARGS)
@ -2968,11 +2991,18 @@ static int bgp_zebra_process_local_macip(ZAPI_CALLBACK_ARGS)
&mac, &ip, vni, seqnum, state,
esi_to_str(&esi, buf2, sizeof(buf2)));
if (cmd == ZEBRA_MACIP_ADD)
if (cmd == ZEBRA_MACIP_ADD) {
frrtrace(6, frr_bgp, evpn_local_macip_add_zrecv, vni, &mac, &ip,
flags, seqnum, &esi);
return bgp_evpn_local_macip_add(bgp, vni, &mac, &ip,
flags, seqnum, &esi);
else
} else {
frrtrace(4, frr_bgp, evpn_local_macip_del_zrecv, vni, &mac, &ip,
state);
return bgp_evpn_local_macip_del(bgp, vni, &mac, &ip, state);
}
}
static void bgp_zebra_process_local_ip_prefix(ZAPI_CALLBACK_ARGS)

View File

@ -132,7 +132,93 @@ def parse_frr_bgp_evpn_mh_nh_rmac_send(event):
parse_event(event, field_parsers)
############################ evpn parsers - end #############################
def parse_frr_bgp_evpn_mh_local_es_add_zrecv(event):
'''
bgp evpn local-es parser; raw format -
ctf_array(unsigned char, esi, esi, sizeof(esi_t))
ctf_integer_network_hex(unsigned int, vtep, vtep.s_addr)
'''
field_parsers = {'esi': print_esi,
'vtep': print_net_ipv4_addr}
parse_event(event, field_parsers)
def parse_frr_bgp_evpn_mh_local_es_del_zrecv(event):
'''
bgp evpn local-es parser; raw format -
ctf_array(unsigned char, esi, esi, sizeof(esi_t))
'''
field_parsers = {'esi': print_esi}
parse_event(event, field_parsers)
def parse_frr_bgp_evpn_mh_local_es_evi_add_zrecv(event):
'''
bgp evpn local-es-evi parser; raw format -
ctf_array(unsigned char, esi, esi, sizeof(esi_t))
'''
field_parsers = {'esi': print_esi}
parse_event(event, field_parsers)
def parse_frr_bgp_evpn_mh_local_es_evi_del_zrecv(event):
'''
bgp evpn local-es-evi parser; raw format -
ctf_array(unsigned char, esi, esi, sizeof(esi_t))
'''
field_parsers = {'esi': print_esi}
parse_event(event, field_parsers)
def parse_frr_bgp_evpn_local_vni_add_zrecv(event):
'''
bgp evpn local-vni parser; raw format -
ctf_integer_network_hex(unsigned int, vtep, vtep.s_addr)
ctf_integer_network_hex(unsigned int, mc_grp, mc_grp.s_addr)
'''
field_parsers = {'vtep': print_net_ipv4_addr,
'mc_grp': print_net_ipv4_addr}
parse_event(event, field_parsers)
def parse_frr_bgp_evpn_local_l3vni_add_zrecv(event):
'''
bgp evpn local-l3vni parser; raw format -
ctf_integer_network_hex(unsigned int, vtep, vtep.s_addr)
ctf_array(unsigned char, svi_rmac, svi_rmac, sizeof(struct ethaddr))
ctf_array(unsigned char, vrr_rmac, vrr_rmac, sizeof(struct ethaddr))
'''
field_parsers = {'vtep': print_net_ipv4_addr,
'svi_rmac': print_mac,
'vrr_rmac': print_mac}
parse_event(event, field_parsers)
def parse_frr_bgp_evpn_local_macip_add_zrecv(event):
'''
bgp evpn local-mac-ip parser; raw format -
ctf_array(unsigned char, ip, ip, sizeof(struct ipaddr))
ctf_array(unsigned char, mac, mac, sizeof(struct ethaddr))
ctf_array(unsigned char, esi, esi, sizeof(esi_t))
'''
field_parsers = {'ip': print_ip_addr,
'mac': print_mac,
'esi': print_esi}
parse_event(event, field_parsers)
def parse_frr_bgp_evpn_local_macip_del_zrecv(event):
'''
bgp evpn local-mac-ip del parser; raw format -
ctf_array(unsigned char, ip, ip, sizeof(struct ipaddr))
ctf_array(unsigned char, mac, mac, sizeof(struct ethaddr))
'''
field_parsers = {'ip': print_ip_addr,
'mac': print_mac}
parse_event(event, field_parsers)
############################ evpn parsers - end *#############################
def main():
'''
@ -143,7 +229,24 @@ def main():
'frr_bgp:evpn_bum_vtep_zsend':
parse_frr_bgp_evpn_bum_vtep_zsend,
'frr_bgp:evpn_mh_nh_rmac_zsend':
parse_frr_bgp_evpn_mh_nh_rmac_send}
parse_frr_bgp_evpn_mh_nh_rmac_send,
'frr_bgp:evpn_mh_local_es_add_zrecv':
parse_frr_bgp_evpn_mh_local_es_add_zrecv,
'frr_bgp:evpn_mh_local_es_del_zrecv':
parse_frr_bgp_evpn_mh_local_es_del_zrecv,
'frr_bgp:evpn_mh_local_es_evi_add_zrecv':
parse_frr_bgp_evpn_mh_local_es_evi_add_zrecv,
'frr_bgp:evpn_mh_local_es_evi_del_zrecv':
parse_frr_bgp_evpn_mh_local_es_evi_del_zrecv,
'frr_bgp:evpn_local_vni_add_zrecv':
parse_frr_bgp_evpn_local_vni_add_zrecv,
'frr_bgp:evpn_local_l3vni_add_zrecv':
parse_frr_bgp_evpn_local_l3vni_add_zrecv,
'frr_bgp:evpn_local_macip_add_zrecv':
parse_frr_bgp_evpn_local_macip_add_zrecv,
'frr_bgp:evpn_local_macip_del_zrecv':
parse_frr_bgp_evpn_local_macip_del_zrecv,
}
# get the trace path from the first command line argument
trace_path = sys.argv[1]