内核路由表:fib_table
路由表项的增加和查询,fib_table_insert和fib_table_lookup。
跟踪fib_table_insert和fib_table_lookup两个接口。
#!/usr/bin/env bpftrace
#include <linux/pci.h>
#include <linux/netdevice.h>
kprobe:fib_table_insert {
printf("fib_table_insert\n");
@[kstack]=count();
}
kprobe:fib_table_lookup {
printf("fib_table_lookup\n");
@[kstack]=count();
}
在创建路由的时候,可以捕获到fib_table_insert接口的使用。
正常的接受报文会触发路由表的查询。
1)一个是接收报文路径,会有入向input路由表的查找;
2)一个是用户态发起connec/bind,或者内核tcp接受路径回复ack的时候,会有出向output路由表的创建和查找。
[root@localhost leiyanjie]# bpftrace route.bt
Attaching 2 probes...
fib_table_lookup
fib_table_lookup
fib_table_lookup
fib_table_lookup
fib_table_lookup
fib_table_lookup
fib_table_lookup
fib_table_lookup
fib_table_lookup
fib_table_lookup
fib_table_lookup
fib_table_lookup
fib_table_lookup
fib_table_lookup
fib_table_lookup
fib_table_lookup
fib_table_lookup
fib_table_lookup
fib_table_lookup
fib_table_lookup
fib_table_lookup
fib_table_lookup
fib_table_lookup
fib_table_lookup
fib_table_lookup
fib_table_lookup
fib_table_lookup
fib_table_lookup
fib_table_lookup
fib_table_lookup
fib_table_lookup
fib_table_lookup
fib_table_lookup
fib_table_lookup
fib_table_lookup
fib_table_lookup
fib_table_lookup
fib_table_lookup
fib_table_lookup
fib_table_lookup
^C
@[
fib_table_lookup+1
ip_route_output_key_hash_rcu+942
ip_route_output_key_hash+90
ip_route_output_flow+25
inet_csk_route_req+221
tcp_conn_request+898
tcp_rcv_state_process+382
tcp_v4_do_rcv+186
tcp_v4_rcv+3577
ip_protocol_deliver_rcu+48
ip_local_deliver_finish+68
ip_local_deliver+255
ip_rcv+216
__netif_receive_skb_one_core+137
process_backlog+158
net_rx_action+309
__do_softirq+188
asm_call_sysvec_on_stack+15
do_softirq_own_stack+55
do_softirq.part.18+47
__local_bh_enable_ip+79
ip_finish_output2+384
ip_output+109
__ip_queue_xmit+359
__tcp_transmit_skb+2638
tcp_connect+2856
tcp_v4_connect+1237
__inet_stream_connect+210
inet_stream_connect+54
__sys_connect+154
__x64_sys_connect+22
do_syscall_64+48
entry_SYSCALL_64_after_hwframe+98
]: 1
@[
fib_table_lookup+1
__inet_dev_addr_type.isra.28+167
__inet6_bind+675
__sys_bind+211
__x64_sys_bind+22
do_syscall_64+48
entry_SYSCALL_64_after_hwframe+98
]: 1
@[
fib_table_lookup+1
ip_route_output_key_hash_rcu+942
ip_route_output_key_hash+90
ip_route_output_flow+25
inet_csk_route_child_sock+286
tcp_v4_syn_recv_sock+912
tcp_v6_syn_recv_sock+1568
tcp_check_req+306
tcp_v4_rcv+2456
ip_protocol_deliver_rcu+48
ip_local_deliver_finish+68
ip_local_deliver+255
ip_rcv+216
__netif_receive_skb_one_core+137
process_backlog+158
net_rx_action+309
__do_softirq+188
asm_call_sysvec_on_stack+15
do_softirq_own_stack+55
do_softirq.part.18+47
__local_bh_enable_ip+79
ip_finish_output2+384
ip_output+109
__ip_queue_xmit+359
__tcp_transmit_skb+2638
tcp_rcv_synsent_state_process+1803
tcp_rcv_state_process+235
tcp_v4_do_rcv+186
__release_sock+121
release_sock+43
inet_stream_connect+65
__sys_connect+154
__x64_sys_connect+22
do_syscall_64+48
entry_SYSCALL_64_after_hwframe+98
]: 1
@[
fib_table_lookup+1
ip_route_output_key_hash_rcu+942
ip_route_output_key_hash+90
ip_route_output_flow+25
ip_send_unicast_reply+480
tcp_v4_send_ack+648
tcp_v4_rcv+1259
ip_protocol_deliver_rcu+48
ip_local_deliver_finish+68
ip_local_deliver+255
ip_rcv+216
__netif_receive_skb_one_core+137
process_backlog+158
net_rx_action+309
__do_softirq+188
asm_call_sysvec_on_stack+15
do_softirq_own_stack+55
do_softirq.part.18+47
flush_smp_call_function_from_idle+68
do_idle+328
cpu_startup_entry+25
start_secondary+276
secondary_startup_64_no_verify+176
]: 3
@[
fib_table_lookup+1
ip_route_output_key_hash_rcu+942
ip_route_output_key_hash+90
ip_route_output_flow+25
tcp_v4_connect+1209
__inet_stream_connect+210
inet_stream_connect+54
__sys_connect+154
__x64_sys_connect+22
do_syscall_64+48
entry_SYSCALL_64_after_hwframe+98
]: 4
@[
fib_table_lookup+1
ip_route_output_key_hash_rcu+942
ip_route_output_key_hash+90
ip_route_output_flow+25
tcp_v4_connect+357
__inet_stream_connect+210
inet_stream_connect+54
__sys_connect+154
__x64_sys_connect+22
do_syscall_64+48
entry_SYSCALL_64_after_hwframe+98
]: 4
@[
fib_table_lookup+1
ip_route_output_key_hash_rcu+942
ip_route_output_key_hash+90
tcp_v4_connect+943
__inet_stream_connect+210
inet_stream_connect+54
__sys_connect+154
__x64_sys_connect+22
do_syscall_64+48
entry_SYSCALL_64_after_hwframe+98
]: 4
@[
fib_table_lookup+1
ip_route_input_slow+492
ip_route_input_rcu+609
ip_route_input_noref+37
ip_rcv_finish_core.isra.22+101
ip_rcv_finish+100
ip_rcv+216
__netif_receive_skb_one_core+137
process_backlog+158
net_rx_action+309
__do_softirq+188
asm_call_sysvec_on_stack+15
do_softirq_own_stack+55
do_softirq.part.18+47
flush_smp_call_function_from_idle+68
do_idle+328
cpu_startup_entry+25
start_secondary+276
secondary_startup_64_no_verify+176
]: 11
@[
fib_table_lookup+1
__fib_validate_source+326
fib_validate_source+70
ip_route_input_slow+2498
ip_route_input_rcu+609
ip_route_input_noref+37
ip_rcv_finish_core.isra.22+101
ip_rcv_finish+100
ip_rcv+216
__netif_receive_skb_one_core+137
process_backlog+158
net_rx_action+309
__do_softirq+188
asm_call_sysvec_on_stack+15
do_softirq_own_stack+55
do_softirq.part.18+47
flush_smp_call_function_from_idle+68
do_idle+328
cpu_startup_entry+25
start_secondary+276
secondary_startup_64_no_verify+176
]: 11