• Alexei Starovoitov's avatar
    samples/bpf: bpf_tail_call example for networking · 530b2c86
    Alexei Starovoitov authored
    Usage:
    $ sudo ./sockex3
    IP     src.port -> dst.port               bytes      packets
    127.0.0.1.42010 -> 127.0.0.1.12865         1568            8
    127.0.0.1.59526 -> 127.0.0.1.33778     11422636       173070
    127.0.0.1.33778 -> 127.0.0.1.59526  11260224828       341974
    127.0.0.1.12865 -> 127.0.0.1.42010         1832           12
    IP     src.port -> dst.port               bytes      packets
    127.0.0.1.42010 -> 127.0.0.1.12865         1568            8
    127.0.0.1.59526 -> 127.0.0.1.33778     23198092       351486
    127.0.0.1.33778 -> 127.0.0.1.59526  22972698518       698616
    127.0.0.1.12865 -> 127.0.0.1.42010         1832           12
    
    this example is similar to sockex2 in a way that it accumulates per-flow
    statistics, but it does packet parsing differently.
    sockex2 inlines full packet parser routine into single bpf program.
    This sockex3 example have 4 independent programs that parse vlan, mpls, ip, ipv6
    and one main program that starts the process.
    bpf_tail_call() mechanism allows each program to be small and be called
    on demand potentially multiple times, so that many vlan, mpls, ip in ip,
    gre encapsulations can be parsed. These and other protocol parsers can
    be added or removed at runtime. TLVs can be parsed in similar manner.
    Note, tail_call_cnt dynamic check limits the number of tail calls to 32.
    Signed-off-by: default avatarAlexei Starovoitov <ast@plumgrid.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    530b2c86
sockex3_kern.c 6.27 KB