• Home
  • Raw
  • Download

Lines Matching +full:point +full:- +full:to +full:- +full:point

1 .. SPDX-License-Identifier: GPL-2.0
13 BPF flow dissector is an attempt to reimplement C-based flow dissector logic
14 in BPF to gain all the benefits of BPF verifier (namely, limits on the
26 * ``nhoff`` - initial offset of the networking header
27 * ``thoff`` - initial offset of the transport header, initialized to nhoff
28 * ``n_proto`` - L3 protocol type, parsed out of L2 header
29 * ``flags`` - optional flags
35 The return code of the BPF program is either BPF_OK to indicate successful
36 dissection, or BPF_DROP to indicate parsing error.
38 __sk_buff->data
41 In the VLAN-less case, this is what the initial state of the BPF flow
44 +------+------+------------+-----------+
46 +------+------+------------+-----------+
49 +-- flow dissector starts here
54 skb->data + flow_keys->nhoff point to the first byte of L3_HEADER
55 flow_keys->thoff = nhoff
56 flow_keys->n_proto = ETHER_TYPE
60 Pre-VLAN parsing::
62 +------+------+------+-----+-----------+-----------+
64 +------+------+------+-----+-----------+-----------+
67 +-- flow dissector starts here
71 skb->data + flow_keys->nhoff point the to first byte of TCI
72 flow_keys->thoff = nhoff
73 flow_keys->n_proto = TPID
76 have to parse VLAN information twice for double tagged packets.
79 Post-VLAN parsing::
81 +------+------+------+-----+-----------+-----------+
83 +------+------+------+-----+-----------+-----------+
86 +-- flow dissector starts here
90 skb->data + flow_keys->nhoff point the to first byte of L3_HEADER
91 flow_keys->thoff = nhoff
92 flow_keys->n_proto = ETHER_TYPE
95 and BPF flow dissector is not required to handle it.
101 can be called for both cases and would have to be written carefully to
108 ``flow_keys->flags`` might contain optional input flags that work as follows:
110 * ``BPF_FLOW_DISSECTOR_F_PARSE_1ST_FRAG`` - tells BPF flow dissector to
113 used by ``eth_get_headlen`` to estimate length of all headers for GRO.
114 * ``BPF_FLOW_DISSECTOR_F_STOP_AT_FLOW_LABEL`` - tells BPF flow dissector to
116 ``___skb_get_hash`` to get flow hash.
117 * ``BPF_FLOW_DISSECTOR_F_STOP_AT_ENCAP`` - tells BPF flow dissector to stop
127 for the loader. bpftool can be used to load BPF flow dissector program as well.
130 * ``jmp_table`` map that contains sub-programs for each supported L3 protocol
131 * ``_dissect`` routine - entry point; it does input ``n_proto`` parsing and
132 does ``bpf_tail_call`` to the appropriate L3 handler
134 Since BPF at this point doesn't support looping (or any jumping back),
135 jmp_table is used instead to handle multiple levels of encapsulation (and
141 BPF flow dissector doesn't support exporting all the metadata that in-kernel
142 C-based implementation can export. Notable example is single VLAN (802.1Q)
143 and double VLAN (802.1AD) tags. Please refer to the ``struct bpf_flow_keys``
146 When BPF flow dissector is attached to the root network namespace (machine-wide