]> git.puffer.fish Git - mirror/frr.git/commitdiff
doc: Instruction how to use Systemtap with FRRouting 8130/head
authorDonatas Abraitis <donatas.abraitis@gmail.com>
Mon, 22 Feb 2021 21:36:01 +0000 (23:36 +0200)
committerDonatas Abraitis <donatas.abraitis@gmail.com>
Mon, 22 Feb 2021 21:36:01 +0000 (23:36 +0200)
Signed-off-by: Donatas Abraitis <donatas.abraitis@gmail.com>
doc/developer/tracing.rst

index c194ae12707b087b17e3c9ff1ddcdd17d5a51d31..b07c71e505a62c188ebced9b7473aa719199e130 100644 (file)
@@ -173,6 +173,77 @@ Example::
 When using LTTng, you can also get zlogs as trace events by enabling
 the ``lttng_ust_tracelog:*`` event class.
 
+To see available SystemTap USDT probes, run::
+
+  stap -L 'process("/usr/lib/frr/bgpd").mark("*")'
+
+Example::
+  root@host ~> stap -L 'process("/usr/lib/frr/bgpd").mark("*")'
+  process("/usr/lib/frr/bgpd").mark("capability_process") $arg1:long $arg2:long
+  process("/usr/lib/frr/bgpd").mark("input_filter") $arg1:long $arg2:long $arg3:long $arg4:long $arg5:long
+  process("/usr/lib/frr/bgpd").mark("keepalive_process") $arg1:long $arg2:long
+  process("/usr/lib/frr/bgpd").mark("notification_process") $arg1:long $arg2:long
+  process("/usr/lib/frr/bgpd").mark("open_process") $arg1:long $arg2:long
+  process("/usr/lib/frr/bgpd").mark("output_filter") $arg1:long $arg2:long $arg3:long $arg4:long $arg5:long
+  process("/usr/lib/frr/bgpd").mark("packet_read") $arg1:long $arg2:long
+  process("/usr/lib/frr/bgpd").mark("process_update") $arg1:long $arg2:long $arg3:long $arg4:long $arg5:long $arg6:long
+  process("/usr/lib/frr/bgpd").mark("refresh_process") $arg1:long $arg2:long
+  process("/usr/lib/frr/bgpd").mark("update_process") $arg1:long $arg2:long
+
+When using SystemTap, you can also easily attach to an existing function::
+
+  stap -L 'process("/usr/lib/frr/bgpd").function("bgp_update_receive")'
+
+Example:
+
+  root@host ~> stap -L 'process("/usr/lib/frr/bgpd").function("bgp_update_receive")'
+  process("/usr/lib/frr/bgpd").function("bgp_update_receive@bgpd/bgp_packet.c:1531") $peer:struct peer* $size:bgp_size_t $attr:struct attr $restart:_Bool $nlris:struct bgp_nlri[] $__func__:char const[] const
+
+Complete ``bgp.stp`` example using SystemTap to show BGP peer, prefix and aspath
+using ``process_update`` USDT::
+
+  global pkt_size;
+  probe begin
+  {
+    ansi_clear_screen();
+    println("Starting...");
+  }
+  probe process("/usr/lib/frr/bgpd").function("bgp_update_receive")
+  {
+    pkt_size <<< $size;
+  }
+  probe process("/usr/lib/frr/bgpd").mark("process_update")
+  {
+    aspath = @cast($arg6, "attr")->aspath;
+    printf("> %s via %s (%s)\n",
+      user_string($arg2),
+      user_string(@cast($arg1, "peer")->host),
+      user_string(@cast(aspath, "aspath")->str));
+  }
+  probe end
+  {
+    if (@count(pkt_size))
+      print(@hist_linear(pkt_size, 0, 20, 2));
+  }
+
+Output::
+
+  Starting...
+  > 192.168.0.0/24 via 192.168.0.1 (65534)
+  > 192.168.100.1/32 via 192.168.0.1 (65534)
+  > 172.16.16.1/32 via 192.168.0.1 (65534 65030)
+  ^Cvalue |-------------------------------------------------- count
+      0 |                                                   0
+      2 |                                                   0
+      4 |@                                                  1
+      6 |                                                   0
+      8 |                                                   0
+        ~
+    18 |                                                   0
+    20 |                                                   0
+    >20 |@@@@@                                              5
+
+
 Concepts
 --------