mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-08 11:07:08 +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_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 */
|
/* clang-format on */
|
||||||
|
|
||||||
#include <lttng/tracepoint-event.h>
|
#include <lttng/tracepoint-event.h>
|
||||||
|
@ -64,6 +64,7 @@
|
|||||||
#include "bgpd/bgp_evpn_private.h"
|
#include "bgpd/bgp_evpn_private.h"
|
||||||
#include "bgpd/bgp_evpn_mh.h"
|
#include "bgpd/bgp_evpn_mh.h"
|
||||||
#include "bgpd/bgp_mac.h"
|
#include "bgpd/bgp_mac.h"
|
||||||
|
#include "bgpd/bgp_trace.h"
|
||||||
|
|
||||||
/* All information about zebra. */
|
/* All information about zebra. */
|
||||||
struct zclient *zclient = NULL;
|
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,
|
esi_to_str(&esi, buf, sizeof(buf)), &originator_ip,
|
||||||
active, df_pref, bypass ? "bypass" : "");
|
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,
|
bgp_evpn_local_es_add(bgp, &esi, originator_ip, active, df_pref,
|
||||||
!!bypass);
|
!!bypass);
|
||||||
|
|
||||||
@ -2798,6 +2802,8 @@ static int bgp_zebra_process_local_es_del(ZAPI_CALLBACK_ARGS)
|
|||||||
zlog_debug("Rx del ESI %s",
|
zlog_debug("Rx del ESI %s",
|
||||||
esi_to_str(&esi, buf, sizeof(buf)));
|
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);
|
bgp_evpn_local_es_del(bgp, &esi);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@ -2824,10 +2830,15 @@ static int bgp_zebra_process_local_es_evi(ZAPI_CALLBACK_ARGS)
|
|||||||
ZEBRA_VNI_ADD ? "add" : "del",
|
ZEBRA_VNI_ADD ? "add" : "del",
|
||||||
esi_to_str(&esi, buf, sizeof(buf)), vni);
|
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);
|
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);
|
bgp_evpn_local_es_evi_del(bgp, &esi, vni);
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -2862,6 +2873,10 @@ static int bgp_zebra_process_local_l3vni(ZAPI_CALLBACK_ARGS)
|
|||||||
filter ? "prefix-routes-only" : "none",
|
filter ? "prefix-routes-only" : "none",
|
||||||
svi_ifindex);
|
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,
|
bgp_evpn_local_l3vni_add(l3vni, vrf_id, &svi_rmac, &vrr_rmac,
|
||||||
originator_ip, filter, svi_ifindex,
|
originator_ip, filter, svi_ifindex,
|
||||||
is_anycast_mac);
|
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",
|
zlog_debug("Rx L3-VNI DEL VRF %s VNI %u",
|
||||||
vrf_id_to_name(vrf_id), l3vni);
|
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);
|
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(vrf_id), vni,
|
||||||
vrf_id_to_name(tenant_vrf_id), svi_ifindex);
|
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(
|
return bgp_evpn_local_vni_add(
|
||||||
bgp, vni,
|
bgp, vni,
|
||||||
vtep_ip.s_addr != INADDR_ANY ? vtep_ip : bgp->router_id,
|
vtep_ip.s_addr != INADDR_ANY ? vtep_ip : bgp->router_id,
|
||||||
tenant_vrf_id, mcast_grp, svi_ifindex);
|
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);
|
return bgp_evpn_local_vni_del(bgp, vni);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static int bgp_zebra_process_local_macip(ZAPI_CALLBACK_ARGS)
|
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,
|
&mac, &ip, vni, seqnum, state,
|
||||||
esi_to_str(&esi, buf2, sizeof(buf2)));
|
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,
|
return bgp_evpn_local_macip_add(bgp, vni, &mac, &ip,
|
||||||
flags, seqnum, &esi);
|
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);
|
return bgp_evpn_local_macip_del(bgp, vni, &mac, &ip, state);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void bgp_zebra_process_local_ip_prefix(ZAPI_CALLBACK_ARGS)
|
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/frr-reload.py
|
||||||
usr/lib/frr/generate_support_bundle.py
|
usr/lib/frr/generate_support_bundle.py
|
||||||
|
usr/lib/frr/frr_babeltrace.py
|
||||||
|
@ -717,6 +717,7 @@ fi
|
|||||||
%files pythontools
|
%files pythontools
|
||||||
%{_sbindir}/generate_support_bundle.py
|
%{_sbindir}/generate_support_bundle.py
|
||||||
%{_sbindir}/frr-reload.py
|
%{_sbindir}/frr-reload.py
|
||||||
|
%{_sbindir}/frr_babeltrace.py
|
||||||
%if 0%{?rhel} > 7 || 0%{?fedora} > 29
|
%if 0%{?rhel} > 7 || 0%{?fedora} > 29
|
||||||
%{_sbindir}/__pycache__/*
|
%{_sbindir}/__pycache__/*
|
||||||
%else
|
%else
|
||||||
@ -724,6 +725,8 @@ fi
|
|||||||
%{_sbindir}/generate_support_bundle.pyo
|
%{_sbindir}/generate_support_bundle.pyo
|
||||||
%{_sbindir}/frr-reload.pyc
|
%{_sbindir}/frr-reload.pyc
|
||||||
%{_sbindir}/frr-reload.pyo
|
%{_sbindir}/frr-reload.pyo
|
||||||
|
%{_sbindir}/frr_babeltrace.pyc
|
||||||
|
%{_sbindir}/frr_babeltrace.pyo
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
'''
|
"""
|
||||||
Usage: frr_babeltrace.py trace_path
|
Usage: frr_babeltrace.py trace_path
|
||||||
|
|
||||||
FRR pushes data into lttng tracepoints in the least overhead way possible
|
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
|
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
|
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
|
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
'''
|
"""
|
||||||
|
|
||||||
import ipaddress
|
import ipaddress
|
||||||
import socket
|
import socket
|
||||||
@ -33,56 +33,56 @@ import babeltrace
|
|||||||
|
|
||||||
########################### common parsers - start ############################
|
########################### common parsers - start ############################
|
||||||
def print_ip_addr(field_val):
|
def print_ip_addr(field_val):
|
||||||
'''
|
"""
|
||||||
pretty print "struct ipaddr"
|
pretty print "struct ipaddr"
|
||||||
'''
|
"""
|
||||||
if field_val[0] == socket.AF_INET:
|
if field_val[0] == socket.AF_INET:
|
||||||
addr = [str(fv) for fv in field_val[4:8]]
|
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:
|
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 = []
|
addr = []
|
||||||
while tmp:
|
while tmp:
|
||||||
addr.append(tmp[:4])
|
addr.append(tmp[:4])
|
||||||
tmp = tmp[4:]
|
tmp = tmp[4:]
|
||||||
addr = ':'.join(addr)
|
addr = ":".join(addr)
|
||||||
return str(ipaddress.IPv6Address(addr))
|
return str(ipaddress.IPv6Address(addr))
|
||||||
|
|
||||||
if not field_val[0]:
|
if not field_val[0]:
|
||||||
return ''
|
return ""
|
||||||
|
|
||||||
return field_val
|
return field_val
|
||||||
|
|
||||||
|
|
||||||
def print_mac(field_val):
|
def print_mac(field_val):
|
||||||
'''
|
"""
|
||||||
pretty print "u8 mac[6]"
|
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):
|
def print_net_ipv4_addr(field_val):
|
||||||
'''
|
"""
|
||||||
pretty print ctf_integer_network ipv4
|
pretty print ctf_integer_network ipv4
|
||||||
'''
|
"""
|
||||||
return str(ipaddress.IPv4Address(field_val))
|
return str(ipaddress.IPv4Address(field_val))
|
||||||
|
|
||||||
def print_esi(field_val):
|
def print_esi(field_val):
|
||||||
'''
|
"""
|
||||||
pretty print ethernet segment id, esi_t
|
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):
|
def get_field_list(event):
|
||||||
'''
|
"""
|
||||||
only fetch fields added via the TP, skip metadata etc.
|
only fetch fields added via the TP, skip metadata etc.
|
||||||
'''
|
"""
|
||||||
return event.field_list_with_scope(babeltrace.CTFScope.EVENT_FIELDS)
|
return event.field_list_with_scope(babeltrace.CTFScope.EVENT_FIELDS)
|
||||||
|
|
||||||
def parse_event(event, field_parsers):
|
def parse_event(event, field_parsers):
|
||||||
'''
|
"""
|
||||||
Wild card event parser; doesn't make things any prettier
|
Wild card event parser; doesn't make things any prettier
|
||||||
'''
|
"""
|
||||||
field_list = get_field_list(event)
|
field_list = get_field_list(event)
|
||||||
field_info = {}
|
field_info = {}
|
||||||
for field in field_list:
|
for field in field_list:
|
||||||
@ -96,7 +96,7 @@ def parse_event(event, field_parsers):
|
|||||||
|
|
||||||
############################ evpn parsers - start #############################
|
############################ evpn parsers - start #############################
|
||||||
def parse_frr_bgp_evpn_mac_ip_zsend(event):
|
def parse_frr_bgp_evpn_mac_ip_zsend(event):
|
||||||
'''
|
"""
|
||||||
bgp evpn mac-ip parser; raw format -
|
bgp evpn mac-ip parser; raw format -
|
||||||
ctf_array(unsigned char, mac, &pfx->prefix.macip_addr.mac,
|
ctf_array(unsigned char, mac, &pfx->prefix.macip_addr.mac,
|
||||||
sizeof(struct ethaddr))
|
sizeof(struct ethaddr))
|
||||||
@ -104,53 +104,156 @@ def parse_frr_bgp_evpn_mac_ip_zsend(event):
|
|||||||
sizeof(struct ipaddr))
|
sizeof(struct ipaddr))
|
||||||
ctf_integer_network_hex(unsigned int, vtep, vtep.s_addr)
|
ctf_integer_network_hex(unsigned int, vtep, vtep.s_addr)
|
||||||
ctf_array(unsigned char, esi, esi, sizeof(esi_t))
|
ctf_array(unsigned char, esi, esi, sizeof(esi_t))
|
||||||
'''
|
"""
|
||||||
field_parsers = {'ip': print_ip_addr,
|
field_parsers = {"ip": print_ip_addr,
|
||||||
'mac': print_mac,
|
"mac": print_mac,
|
||||||
'esi': print_esi,
|
"esi": print_esi,
|
||||||
'vtep': print_net_ipv4_addr}
|
"vtep": print_net_ipv4_addr}
|
||||||
|
|
||||||
parse_event(event, field_parsers)
|
parse_event(event, field_parsers)
|
||||||
|
|
||||||
def parse_frr_bgp_evpn_bum_vtep_zsend(event):
|
def parse_frr_bgp_evpn_bum_vtep_zsend(event):
|
||||||
'''
|
"""
|
||||||
bgp evpn bum-vtep parser; raw format -
|
bgp evpn bum-vtep parser; raw format -
|
||||||
ctf_integer_network_hex(unsigned int, vtep,
|
ctf_integer_network_hex(unsigned int, vtep,
|
||||||
pfx->prefix.imet_addr.ip.ipaddr_v4.s_addr)
|
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)
|
parse_event(event, field_parsers)
|
||||||
|
|
||||||
def parse_frr_bgp_evpn_mh_nh_rmac_send(event):
|
def parse_frr_bgp_evpn_mh_nh_rmac_send(event):
|
||||||
'''
|
"""
|
||||||
bgp evpn nh-rmac parser; raw format -
|
bgp evpn nh-rmac parser; raw format -
|
||||||
ctf_array(unsigned char, rmac, &nh->rmac, sizeof(struct ethaddr))
|
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)
|
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():
|
def main():
|
||||||
'''
|
"""
|
||||||
FRR lttng trace output parser; babel trace plugin
|
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,
|
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,
|
parse_frr_bgp_evpn_bum_vtep_zsend,
|
||||||
'frr_bgp:evpn_mh_nh_rmac_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
|
# get the trace path from the first command line argument
|
||||||
trace_path = sys.argv[1]
|
trace_path = sys.argv[1]
|
||||||
|
|
||||||
# grab events
|
# grab events
|
||||||
trace_collection = babeltrace.TraceCollection()
|
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:
|
for event in trace_collection.events:
|
||||||
if event.name in event_parsers:
|
if event.name in event_parsers:
|
||||||
@ -159,5 +262,5 @@ def main():
|
|||||||
else:
|
else:
|
||||||
parse_event(event, {})
|
parse_event(event, {})
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == "__main__":
|
||||||
main()
|
main()
|
||||||
|
@ -21,6 +21,7 @@ sbin_SCRIPTS += \
|
|||||||
tools/frrcommon.sh \
|
tools/frrcommon.sh \
|
||||||
tools/frrinit.sh \
|
tools/frrinit.sh \
|
||||||
tools/generate_support_bundle.py \
|
tools/generate_support_bundle.py \
|
||||||
|
tools/frr_babeltrace.py \
|
||||||
tools/watchfrr.sh \
|
tools/watchfrr.sh \
|
||||||
# end
|
# end
|
||||||
|
|
||||||
@ -58,6 +59,7 @@ EXTRA_DIST += \
|
|||||||
tools/frr.service \
|
tools/frr.service \
|
||||||
tools/frr@.service \
|
tools/frr@.service \
|
||||||
tools/generate_support_bundle.py \
|
tools/generate_support_bundle.py \
|
||||||
|
tools/frr_babeltrace.py \
|
||||||
tools/multiple-bgpd.sh \
|
tools/multiple-bgpd.sh \
|
||||||
tools/rrcheck.pl \
|
tools/rrcheck.pl \
|
||||||
tools/rrlookup.pl \
|
tools/rrlookup.pl \
|
||||||
|
Loading…
Reference in New Issue
Block a user