1. tun server
[chrism@t420 tun]$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp0s25: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000
link/ether 00:21:cc:6f:3e:0d brd ff:ff:ff:ff:ff:ff
3: wlp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 08:11:96:8c:da:c4 brd ff:ff:ff:ff:ff:ff
inet 192.168.31.245/24 brd 192.168.31.255 scope global dynamic wlp3s0
valid_lft 33770sec preferred_lft 33770sec
inet6 fe80::e7bc:bfd9:bb46:5fc5/64 scope link
valid_lft forever preferred_lft forever
[chrism@t420 tun]$ sudo ./tun -i tun0 -s -d
[sudo] password for chrism:
Successfully connected to interface tun0
[chrism@t420 ~]$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp0s25: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000
link/ether 00:21:cc:6f:3e:0d brd ff:ff:ff:ff:ff:ff
3: wlp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 08:11:96:8c:da:c4 brd ff:ff:ff:ff:ff:ff
inet 192.168.31.245/24 brd 192.168.31.255 scope global dynamic wlp3s0
valid_lft 33750sec preferred_lft 33750sec
inet6 fe80::e7bc:bfd9:bb46:5fc5/64 scope link
valid_lft forever preferred_lft forever
16: tun0: <POINTOPOINT,MULTICAST,NOARP> mtu 1500 qdisc noop state DOWN group default qlen 500
link/none
[chrism@t420 ~]$ sudo ifconfig tun0 1.1.1.2/24 up
[chrism@t420 ~]$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp0s25: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000
link/ether 00:21:cc:6f:3e:0d brd ff:ff:ff:ff:ff:ff
3: wlp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 08:11:96:8c:da:c4 brd ff:ff:ff:ff:ff:ff
inet 192.168.31.245/24 brd 192.168.31.255 scope global dynamic wlp3s0
valid_lft 33746sec preferred_lft 33746sec
inet6 fe80::e7bc:bfd9:bb46:5fc5/64 scope link
valid_lft forever preferred_lft forever
16: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 500
link/none
inet 1.1.1.2/24 scope global tun0
valid_lft forever preferred_lft forever
inet6 fe80::f807:2f3b:af29:105d/64 scope link flags 800
valid_lft forever preferred_lft forever
2. tun client
[mishuang@mi tun]$ sudo ./tun -i tun0 -c 192.168.31.245 -d
[sudo] password for mishuang:
Successfully connected to interface tun0
CLIENT: Connected to server 192.168.31.245
[root@mi stap]# ifconfig tun0 1.1.1.1/24 up
[root@mi stap]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:c2:c6:ed:58:0f brd ff:ff:ff:ff:ff:ff
inet 192.168.31.201/24 brd 192.168.31.255 scope global dynamic wlan0
valid_lft 36587sec preferred_lft 36587sec
inet6 fe80::3633:2e0f:f7bf:e6ef/64 scope link
valid_lft forever preferred_lft forever
13: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 500
link/none
inet 1.1.1.1/24 scope global tun0
valid_lft forever preferred_lft forever
inet6 fe80::1c20:1e61:eebd:396d/64 scope link flags 800
valid_lft forever preferred_lft forever
3. udp-server
[mishuang@mi udp-server]$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:c2:c6:ed:58:0f brd ff:ff:ff:ff:ff:ff
inet 192.168.31.201/24 brd 192.168.31.255 scope global dynamic wlan0
valid_lft 36349sec preferred_lft 36349sec
inet6 fe80::3633:2e0f:f7bf:e6ef/64 scope link
valid_lft forever preferred_lft forever
13: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 500
link/none
inet 1.1.1.1/24 scope global tun0
valid_lft forever preferred_lft forever
inet6 fe80::1c20:1e61:eebd:396d/64 scope link flags 800
valid_lft forever preferred_lft forever
[mishuang@mi udp-server]$ ./udp-server -s
Client : Hello from client 0
Client : Hello from client 1
Client : Hello from client 2
Client : Hello from client 3
Client : Hello from client 4
4. udp-client
[chrism@t420 udp-client]$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp0s25: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000
link/ether 00:21:cc:6f:3e:0d brd ff:ff:ff:ff:ff:ff
3: wlp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 08:11:96:8c:da:c4 brd ff:ff:ff:ff:ff:ff
inet 192.168.31.245/24 brd 192.168.31.255 scope global dynamic wlp3s0
valid_lft 33438sec preferred_lft 33438sec
inet6 fe80::e7bc:bfd9:bb46:5fc5/64 scope link
valid_lft forever preferred_lft forever
16: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 500
link/none
inet 1.1.1.2/24 scope global tun0
valid_lft forever preferred_lft forever
inet6 fe80::f807:2f3b:af29:105d/64 scope link flags 800
valid_lft forever preferred_lft forever
[chrism@t420 udp-client]$ ./udp-client -c 1.1.1.1 -t 1000
5. udp-client
0xffffffffc0a3eca0 : tun_net_xmit+0x0/0x450 [tun]
0xffffffffa67dec50 : dev_hard_start_xmit+0xa0/0x200 [kernel]
0xffffffffa68191ce : sch_direct_xmit+0x1de/0x270 [kernel]
0xffffffffa68193cc : __qdisc_run+0x16c/0x530 [kernel]
0xffffffffa67df0fb : __dev_queue_xmit+0x27b/0x8f0 [kernel]
0xffffffffa683a049 : ip_finish_output2+0x199/0x3a0 [kernel] (inexact)
0xffffffffa683aec1 : ip_output+0x71/0xe0 [kernel] (inexact)
0xffffffffa683b7b5 : ip_send_skb+0x15/0x40 [kernel] (inexact)
0xffffffffa6867943 : udp_send_skb.isra.42+0x153/0x310 [kernel] (inexact)
0xffffffffa686812d : udp_sendmsg+0x5cd/0xb70 [kernel] (inexact)
0xffffffffa67bd226 : sock_sendmsg+0x36/0x40 [kernel] (inexact)
0xffffffffa67bf2a8 : __sys_sendto+0xd8/0x150 [kernel] (inexact)
0xffffffffa67bf344 : __x64_sys_sendto+0x24/0x30 [kernel] (inexact)
0xffffffffa6004245 : do_syscall_64+0x55/0x100 [kernel] (inexact)
0xffffffffa6a0008c : entry_SYSCALL_64_after_hwframe+0x44/0xa9 [kernel] (inexact)
0x0 (inexact)
parms: skb=0xffff8f5aca272600 dev=0xffff8f5b829d0000
execname: udp-client
ts: 13, 14
0x7fedda14b4f3 : __sendto_nocancel+0xa/0x57 [/lib/x86_64-linux-gnu/libc-2.23.so]
0x400c00 [/home/chrism/prg/c/udp-client/udp-client+0xc00/0x1000]
0xffffffffc0a43250 : tun_chr_read_iter+0x0/0x80 [tun]
0xffffffffa6272a4f : __vfs_read+0x10f/0x190 [kernel]
0xffffffffa6272b60 : vfs_read+0x90/0x130 [kernel]
0xffffffffa6273102 : ksys_read+0x52/0xc0 [kernel]
0xffffffffa6004245 : do_syscall_64+0x55/0x100 [kernel]
0xffffffffa6a0008c : entry_SYSCALL_64_after_hwframe+0x44/0xa9 [kernel]
0x0 (inexact)
parms: iocb=0xffffa76402d7be60 to=0xffffa76402d7be88
execname: tun
ts: 1, 2
0x7feae847e260 : __read_nocancel+0x7/0x57 [/lib/x86_64-linux-gnu/libc-2.23.so]
0x400fa2 : cread+0x29/0x4b [/home/chrism/prg/c/tun/tun]
0x401a24 : main+0x6db/0x8c7 [/home/chrism/prg/c/tun/tun]
0x7feae83a7830 : __libc_start_main+0xf0/0x1d0 [/lib/x86_64-linux-gnu/libc-2.23.so]
0x400db9 : _start+0x29/0x30 [/home/chrism/prg/c/tun/tun]
6. udp-server
0xffffffffbe273b20 : pollwake+0x0/0x70 [kernel]
0xffffffffbe0c8fc6 : __wake_up_common+0x86/0x120 [kernel]
0xffffffffbe0c922a : __wake_up_common_lock+0x6a/0x90 [kernel]
0xffffffffbe78f66c : sock_def_readable+0x3c/0x60 [kernel]
0xffffffffbe819840 : tcp_data_queue+0x4c0/0xcb0 [kernel]
0xffffffffbe81a300 : tcp_rcv_established+0x2d0/0x5f0 [kernel]
0xffffffffbe825917 : tcp_v4_do_rcv+0xf7/0x1d0 [kernel]
0xffffffffbe826d83 : tcp_v4_rcv+0xa63/0xb70 [kernel]
0xffffffffbe7fee82 : ip_local_deliver_finish+0x92/0x1d0 [kernel]
0xffffffffbe7ff41b : ip_local_deliver+0x5b/0xc0 [kernel]
0xffffffffbe7ff4c2 : ip_rcv+0x42/0xb0 [kernel]
0xffffffffbe7ae880 : __netif_receive_skb_one_core+0x40/0x50 [kernel]
0xffffffffbe7adc94 : netif_receive_skb_internal+0x24/0xb0 [kernel]
0xffffffffbe7af2dc : napi_gro_receive+0xbc/0xe0 [kernel]
0xffffffffc0c118d7 : ieee80211_deliver_skb+0x117/0x2c0 [mac80211]
0xffffffffc0c13296 : ieee80211_rx_handlers+0x906/0x23f0 [mac80211]
0xffffffffc0c15698 : ieee80211_prepare_and_rx_handle+0x748/0x1230 [mac80211]
0xffffffffc0c16579 : ieee80211_rx_napi+0x3f9/0x990 [mac80211]
0xffffffffc0ce2df3 : iwl_mvm_rx_rx_mpdu+0x4a3/0xac0 [iwlmvm]
0xffffffffc0a2d759 : iwl_pcie_rx_handle+0x5a9/0xa70 [iwlwifi]
parms: wait=0xffff9b9283c73b40 mode=0x1 sync=0x1 key=0xc3
execname: irq/132-iwlwifi
ts: 1, 1834
<no user backtrace at kernel.function("pollwake@fs/select.c:210")>
[root@mi stap]# st tun_chr_write_iter [18/1906]
tun
+ cat /root/stap/tun_chr_write_iter.stp
#!/usr/local/bin/stap -v
global start
function timestamp:long() { return gettimeofday_us() - start }
probe begin { start = gettimeofday_us() }
global n = 1;
probe module("tun").function("tun_chr_write_iter")
{
if ((execname() == "") || "" == "") {
print_backtrace()
printf("parms: %s\n", $$parms);
printf("execname: %s\n", execname());
printf("ts: %d, %d\n", timestamp()/1000000, n++);
print_ubacktrace();
printf("\n");
}
}
+ cd /root/stap
+ chmod +x /root/stap/tun_chr_write_iter.stp
+ /usr/local/bin/stap -v -k --all-modules -d /bin/ping -d /lib/x86_64-linux-gnu/libc-2.23.so -d /home/mishuang/prg/c/tun/tun /root/stap/tun_chr_write_iter.stp
Pass 1: parsed user script and 476 library scripts using 115836virt/85216res/5292shr/80460data kb, in 240usr/10sys/271real ms.
Pass 2: analyzed script: 2 probes, 8 functions, 4 embeds, 2 globals using 277844virt/248924res/6760shr/242468data kb, in 930usr/550sys/1491real ms.
Pass 3: translated to C into "/tmp/stapmuVHjB/stap_25508_src.c" using 277844virt/249244res/6948shr/242468data kb, in 4480usr/300sys/4773real ms.
Pass 4: compiled C into "stap_25508.ko" in 12570usr/630sys/13167real ms.
Pass 5: starting run.
0xffffffffc0b84eb0 : tun_chr_write_iter+0x0/0x70 [tun]
0xffffffffbe25eea5 : __vfs_write+0xe5/0x170 [kernel]
0xffffffffbe25f0cd : vfs_write+0xad/0x1a0 [kernel]
0xffffffffbe25f312 : ksys_write+0x42/0x90 [kernel]
0xffffffffbe003ddf : do_syscall_64+0x4f/0x100 [kernel]
0xffffffffbea0008c : entry_SYSCALL_64_after_hwframe+0x44/0xa9 [kernel]
0x0 (inexact)
parms: iocb=0xffff9b9283b7be68 from=0xffff9b9283b7be90
execname: tun
ts: 0, 1
0x7fb3044152c0 : __write_nocancel+0x7/0x57 [/lib/x86_64-linux-gnu/libc-2.23.so]
0x400fea : cwrite+0x29/0x4b [/home/mishuang/prg/c/tun/tun]
0x401b81 : main+0x88f/0x8de [/home/mishuang/prg/c/tun/tun]
0x7fb30433e830 : __libc_start_main+0xf0/0x1d0 [/lib/x86_64-linux-gnu/libc-2.23.so]
0x400db9 : _start+0x29/0x30 [/home/mishuang/prg/c/tun/tun]