]> git.puffer.fish Git - mirror/frr.git/commitdiff
bgpd: lttng tracepoint for local events received from zebra
authorAnuradha Karuppiah <anuradhak@nvidia.com>
Mon, 4 Oct 2021 16:41:43 +0000 (09:41 -0700)
committerAnuradha Karuppiah <anuradhak@nvidia.com>
Fri, 15 Oct 2021 17:37:02 +0000 (10:37 -0700)
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>
bgpd/bgp_trace.h
bgpd/bgp_zebra.c
tools/frr_babeltrace.py

index 91a190722be3a74603bfe94e16d1229c351c3b9a..14149b5139a66d71e24291748708f6d3a862b54a 100644 (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>
index 0249d53f02184c45dc690c535d2f2ecdb130a4a5..6161f56fe6505e91ad57d103895a6d1d3b8e2123 100644 (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)
index 3058395758467aa5217f513f8176a375563052c6..4a5dd2bb4ba2080cc644b7081b2d2caea11f7fed 100755 (executable)
@@ -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]