mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-06 04:36:45 +00:00
Merge pull request #9730 from AnuradhaKaruppiah/evpn-recv-lttng
bgp-evpn: lttng TPs for events received from zebra
This commit is contained in:
commit
e9f7b2b597
141
bgpd/bgp_trace.h
141
bgpd/bgp_trace.h
@ -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>
|
||||
|
@ -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)
|
||||
|
1
debian/frr-pythontools.install
vendored
1
debian/frr-pythontools.install
vendored
@ -1,2 +1,3 @@
|
||||
usr/lib/frr/frr-reload.py
|
||||
usr/lib/frr/generate_support_bundle.py
|
||||
usr/lib/frr/frr_babeltrace.py
|
||||
|
@ -717,6 +717,7 @@ fi
|
||||
%files pythontools
|
||||
%{_sbindir}/generate_support_bundle.py
|
||||
%{_sbindir}/frr-reload.py
|
||||
%{_sbindir}/frr_babeltrace.py
|
||||
%if 0%{?rhel} > 7 || 0%{?fedora} > 29
|
||||
%{_sbindir}/__pycache__/*
|
||||
%else
|
||||
@ -724,6 +725,8 @@ fi
|
||||
%{_sbindir}/generate_support_bundle.pyo
|
||||
%{_sbindir}/frr-reload.pyc
|
||||
%{_sbindir}/frr-reload.pyo
|
||||
%{_sbindir}/frr_babeltrace.pyc
|
||||
%{_sbindir}/frr_babeltrace.pyo
|
||||
%endif
|
||||
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env python3
|
||||
'''
|
||||
"""
|
||||
Usage: frr_babeltrace.py trace_path
|
||||
|
||||
FRR pushes data into lttng tracepoints in the least overhead way possible
|
||||
@ -23,7 +23,7 @@ more details.
|
||||
You should have received a copy of the GNU General Public License along
|
||||
with this program; see the file COPYING; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
'''
|
||||
"""
|
||||
|
||||
import ipaddress
|
||||
import socket
|
||||
@ -33,56 +33,56 @@ import babeltrace
|
||||
|
||||
########################### common parsers - start ############################
|
||||
def print_ip_addr(field_val):
|
||||
'''
|
||||
"""
|
||||
pretty print "struct ipaddr"
|
||||
'''
|
||||
"""
|
||||
if field_val[0] == socket.AF_INET:
|
||||
addr = [str(fv) for fv in field_val[4:8]]
|
||||
return str(ipaddress.IPv4Address('.'.join(addr)))
|
||||
return str(ipaddress.IPv4Address(".".join(addr)))
|
||||
|
||||
if field_val[0] == socket.AF_INET6:
|
||||
tmp = ''.join('%02x' % fb for fb in field_val[4:])
|
||||
tmp = "".join("%02x" % fb for fb in field_val[4:])
|
||||
addr = []
|
||||
while tmp:
|
||||
addr.append(tmp[:4])
|
||||
tmp = tmp[4:]
|
||||
addr = ':'.join(addr)
|
||||
addr = ":".join(addr)
|
||||
return str(ipaddress.IPv6Address(addr))
|
||||
|
||||
if not field_val[0]:
|
||||
return ''
|
||||
return ""
|
||||
|
||||
return field_val
|
||||
|
||||
|
||||
def print_mac(field_val):
|
||||
'''
|
||||
"""
|
||||
pretty print "u8 mac[6]"
|
||||
'''
|
||||
return ':'.join('%02x' % fb for fb in field_val)
|
||||
"""
|
||||
return ":".join("%02x" % fb for fb in field_val)
|
||||
|
||||
def print_net_ipv4_addr(field_val):
|
||||
'''
|
||||
"""
|
||||
pretty print ctf_integer_network ipv4
|
||||
'''
|
||||
"""
|
||||
return str(ipaddress.IPv4Address(field_val))
|
||||
|
||||
def print_esi(field_val):
|
||||
'''
|
||||
"""
|
||||
pretty print ethernet segment id, esi_t
|
||||
'''
|
||||
return ':'.join('%02x' % fb for fb in field_val)
|
||||
"""
|
||||
return ":".join("%02x" % fb for fb in field_val)
|
||||
|
||||
def get_field_list(event):
|
||||
'''
|
||||
"""
|
||||
only fetch fields added via the TP, skip metadata etc.
|
||||
'''
|
||||
"""
|
||||
return event.field_list_with_scope(babeltrace.CTFScope.EVENT_FIELDS)
|
||||
|
||||
def parse_event(event, field_parsers):
|
||||
'''
|
||||
"""
|
||||
Wild card event parser; doesn't make things any prettier
|
||||
'''
|
||||
"""
|
||||
field_list = get_field_list(event)
|
||||
field_info = {}
|
||||
for field in field_list:
|
||||
@ -96,7 +96,7 @@ def parse_event(event, field_parsers):
|
||||
|
||||
############################ evpn parsers - start #############################
|
||||
def parse_frr_bgp_evpn_mac_ip_zsend(event):
|
||||
'''
|
||||
"""
|
||||
bgp evpn mac-ip parser; raw format -
|
||||
ctf_array(unsigned char, mac, &pfx->prefix.macip_addr.mac,
|
||||
sizeof(struct ethaddr))
|
||||
@ -104,53 +104,156 @@ def parse_frr_bgp_evpn_mac_ip_zsend(event):
|
||||
sizeof(struct ipaddr))
|
||||
ctf_integer_network_hex(unsigned int, vtep, vtep.s_addr)
|
||||
ctf_array(unsigned char, esi, esi, sizeof(esi_t))
|
||||
'''
|
||||
field_parsers = {'ip': print_ip_addr,
|
||||
'mac': print_mac,
|
||||
'esi': print_esi,
|
||||
'vtep': print_net_ipv4_addr}
|
||||
"""
|
||||
field_parsers = {"ip": print_ip_addr,
|
||||
"mac": print_mac,
|
||||
"esi": print_esi,
|
||||
"vtep": print_net_ipv4_addr}
|
||||
|
||||
parse_event(event, field_parsers)
|
||||
|
||||
def parse_frr_bgp_evpn_bum_vtep_zsend(event):
|
||||
'''
|
||||
"""
|
||||
bgp evpn bum-vtep parser; raw format -
|
||||
ctf_integer_network_hex(unsigned int, vtep,
|
||||
pfx->prefix.imet_addr.ip.ipaddr_v4.s_addr)
|
||||
|
||||
'''
|
||||
field_parsers = {'vtep': print_net_ipv4_addr}
|
||||
"""
|
||||
field_parsers = {"vtep": print_net_ipv4_addr}
|
||||
|
||||
parse_event(event, field_parsers)
|
||||
|
||||
def parse_frr_bgp_evpn_mh_nh_rmac_send(event):
|
||||
'''
|
||||
"""
|
||||
bgp evpn nh-rmac parser; raw format -
|
||||
ctf_array(unsigned char, rmac, &nh->rmac, sizeof(struct ethaddr))
|
||||
'''
|
||||
field_parsers = {'rmac': print_mac}
|
||||
"""
|
||||
field_parsers = {"rmac": print_mac}
|
||||
|
||||
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():
|
||||
'''
|
||||
"""
|
||||
FRR lttng trace output parser; babel trace plugin
|
||||
'''
|
||||
event_parsers = {'frr_bgp:evpn_mac_ip_zsend':
|
||||
"""
|
||||
event_parsers = {"frr_bgp:evpn_mac_ip_zsend":
|
||||
parse_frr_bgp_evpn_mac_ip_zsend,
|
||||
'frr_bgp:evpn_bum_vtep_zsend':
|
||||
"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}
|
||||
"frr_bgp:evpn_mh_nh_rmac_zsend":
|
||||
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]
|
||||
|
||||
# grab events
|
||||
trace_collection = babeltrace.TraceCollection()
|
||||
trace_collection.add_traces_recursive(trace_path, 'ctf')
|
||||
trace_collection.add_traces_recursive(trace_path, "ctf")
|
||||
|
||||
for event in trace_collection.events:
|
||||
if event.name in event_parsers:
|
||||
@ -159,5 +262,5 @@ def main():
|
||||
else:
|
||||
parse_event(event, {})
|
||||
|
||||
if __name__ == '__main__':
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
|
@ -21,6 +21,7 @@ sbin_SCRIPTS += \
|
||||
tools/frrcommon.sh \
|
||||
tools/frrinit.sh \
|
||||
tools/generate_support_bundle.py \
|
||||
tools/frr_babeltrace.py \
|
||||
tools/watchfrr.sh \
|
||||
# end
|
||||
|
||||
@ -58,6 +59,7 @@ EXTRA_DIST += \
|
||||
tools/frr.service \
|
||||
tools/frr@.service \
|
||||
tools/generate_support_bundle.py \
|
||||
tools/frr_babeltrace.py \
|
||||
tools/multiple-bgpd.sh \
|
||||
tools/rrcheck.pl \
|
||||
tools/rrlookup.pl \
|
||||
|
Loading…
Reference in New Issue
Block a user