net rx drop(续) 0.0.1. 接上部如上半部分析,导致rx drop值增加的报文有三类 IPv6 STP LLDP 至此,为什么drop统计值增加,能够解释清楚了。 2020-03-15 IRQ #IRQ
net rx drop 0.1. 问题来源接OP问题报告,监控到部分机器的net rx drop统计值异常,触发报警,需排查具体原因,并确认是否影响业务。 0.2. 问题分析0.2.1. 复现问题跟OP同学确认,通过采集/proc/net/dev下的rx drop。登录到出问题的机器上, 确认内核该统计值确实异常。 异常报文个数不多,大约1s一个左右。 不是所有机器都有异常,有部分机器drop统计为0. 0.2.2. 2020-03-15 IRQ #IRQ
How IPv6 addresses are flushed on link down IPv6协议栈里, 当一个网口被down之后,网口上对应的IP地址也会一起被flush掉。面对IPv6跟IPv4不同的行为方式,内核提供了一个规避的开关。在4.6内核之后提供了一个开关,用来避免IPv6地址别清理掉。这个开关既有全局的设置,也有每个interface粒度的单独开关。 1234567keep_addr_on_down - INTEGER Keep all IPv6 addres 2019-11-11 Route #address #IPv6
ebpf如何访问skb 的fileds 0.1. ebpf如何访问skb 的fileds 加载: 转换: 所有skb的fields都转换成相对skb结构体头部的偏移量 根据偏移量重新校验 bpf指令 报文运行: Skb的地址在skb是作为ctx寄存器传递给bfp run函数的。 0.2. BPF CTX与SKB这里以tcpdump(PF_PACKET)为例,结合函数调用关系说明,skb是如何被当做ctx参数传递给bpf程序 2019-10-27 BPF #BPF
协议栈是如何调用xdp程序处理报文的 0.1. 函数调用栈以xdp SKB模式为例, 123456789101112131415--> bpf_prog_run_generic_xdp--> --> bpf_prog_run_xdp--> --> --> u32 act = __bpf_prog_run(prog, xdp, BPF_DISPATCHER_FUNC(xdp)); 展开BPF_DIS 2019-10-27 BPF #xdp
xdp 是如何加载到内核并运行的 0.1. XDP frameworkxdp在内核里的有三个关键步骤: load: 加载到内核 attach: 绑定到一个网口 run:网口收包时候,调用并执行bpf prog 0.1.1. load加载: 通过ebpf系统调用, 把prog加载到内核fd = sys_bpf(BPF_PROG_LOAD, attr, size); 在内核里创建一个bfp_prog结构体用以存储bpf prog 2019-10-26 BPF #xdp
how tcpdump work with vlan filter 0.1. 问题场景tcpdump在网口直接抓包和读取pcap文件两种场景下,同一个filter表达式icmp,对vlan报文有不同的处理结果。 在网口上抓包可以看到vlan和非vlan两种流量 读取pcap只能看到非vlan流量一种流量 【Q1】:在读取pcap文件时候,为什么不能读取到vlan报文呢? 0.2. 分析结论内核协议栈: 过滤条件 icmp:tcpdump 解析出来的 ebpf 2019-10-09 Tcpdump #Tcpdump
tcpdump and ebpf 以内核v6.6代码,介绍tcpdump程序如何与内核交互,加载bpf程序的。 0.1. 加载:libpcap通过sockopt里的“SO_ATTACH_FILTER“,在 packet socket下的”sk_filter“挂载prog呈现。 0.2. 运行:当skb报文到达packet_rcv时候, 通过调用___bpf_prog_run函数(注意,这个函数是3个下滑线,区别于2个下划线的函数) 2019-10-08 Tcpdump #Tcpdump
how tcpdump work with cbpf tcpdump通过libpcap库以及内核的af_packet对数据包问题进行抓取。关于这两部分的如何协作抓包,之前blog里已经写过。这里主要记录分析,在ebpf之前的内核(以v3.0)如何处理tcpdump里的filter的。 1. filter编译后,如何加载到内核里的:在filter被翻译为一系列的指令后,这个指令buff被libpcap,通过sockopt里的SO_ATTACH_FILT 2019-09-25 Tcpdump #Tcpdump
tcpdump如何实现参数-报文抓取长度 0.1. 用法tcpdump -s len 0.2. 原理tcpdump会把这个长度值编译到ebpf代码中。 ebpf代码执行完后,如果filter成功,则作为返回值(return)返回给调用方(内核协议栈),内核协议栈根据返回值,修改 skb报文到指定的长度,并借助 af socket 返回给用户空间。 0.2.1. tcpdump命令解析 2019-07-15 Tcpdump #Tcpdump