Add new bpf_skb_adjust_room() decapsulation flags: - BPF_F_ADJ_ROOM_DECAP_L4_GRE - BPF_F_ADJ_ROOM_DECAP_L4_UDP - BPF_F_ADJ_ROOM_DECAP_IPXIP4 - BPF_F_ADJ_ROOM_DECAP_IPXIP6 These flags let BPF programs describe which tunnel layer is being removed, so later changes can update tunnel-related GSO state accordingly during decapsulation. This patch only introduces the UAPI flag definitions and helper documentation.
Showing the changes to include/uapi (1 of 2 files). Show all
Unified · Split
| @@ -3038,8 +3038,34 @@ union bpf_attr { · 3037 unmodified lines | |||
| 3038 | * | 3038 | * |
| 3039 | * * **BPF_F_ADJ_ROOM_DECAP_L3_IPV4**, | 3039 | * * **BPF_F_ADJ_ROOM_DECAP_L3_IPV4**, |
| 3040 | * **BPF_F_ADJ_ROOM_DECAP_L3_IPV6**: | 3040 | * **BPF_F_ADJ_ROOM_DECAP_L3_IPV6**: |
| 3041 | * Indicate the new IP header version after decapsulating the outer | 3041 | * Indicate the new IP header version after decapsulating the |
| 3042 | * IP header. Used when the inner and outer IP versions are different. | 3042 | * outer IP header. Used when the inner and outer IP versions |
| 3043 | * are different. These flags only trigger a protocol change | ||
| 3044 | * without clearing any tunnel-specific GSO flags. | ||
| 3045 | * | ||
| 3046 | * * **BPF_F_ADJ_ROOM_DECAP_L4_GRE**: | ||
| 3047 | * Clear GRE tunnel GSO flags (SKB_GSO_GRE and SKB_GSO_GRE_CSUM) | ||
| 3048 | * when decapsulating a GRE tunnel. | ||
| 3049 | * | ||
| 3050 | * * **BPF_F_ADJ_ROOM_DECAP_L4_UDP**: | ||
| 3051 | * Clear UDP tunnel GSO flags (SKB_GSO_UDP_TUNNEL and | ||
| 3052 | * SKB_GSO_UDP_TUNNEL_CSUM) when decapsulating a UDP tunnel. | ||
| 3053 | * | ||
| 3054 | * * **BPF_F_ADJ_ROOM_DECAP_IPXIP4**: | ||
| 3055 | * Clear IPIP/SIT tunnel GSO flag (SKB_GSO_IPXIP4) when decapsulating | ||
| 3056 | * a tunnel with an outer IPv4 header (IPv4-in-IPv4 or IPv6-in-IPv4). | ||
| 3057 | * | ||
| 3058 | * * **BPF_F_ADJ_ROOM_DECAP_IPXIP6**: | ||
| 3059 | * Clear IPv6 encapsulation tunnel GSO flag (SKB_GSO_IPXIP6) when | ||
| 3060 | * decapsulating a tunnel with an outer IPv6 header (IPv6-in-IPv6 | ||
| 3061 | * or IPv4-in-IPv6). | ||
| 3062 | * | ||
| 3063 | * When using the decapsulation flags above, the skb->encapsulation | ||
| 3064 | * flag is automatically cleared if all tunnel-specific GSO flags | ||
| 3065 | * (SKB_GSO_UDP_TUNNEL, SKB_GSO_UDP_TUNNEL_CSUM, SKB_GSO_GRE, | ||
| 3066 | * SKB_GSO_GRE_CSUM, SKB_GSO_IPXIP4, SKB_GSO_IPXIP6) have been | ||
| 3067 | * removed from the packet. This handles cases where all tunnel | ||
| 3068 | * layers have been decapsulated. | ||
| 3043 | * | 3069 | * |
| 3044 | * A call to this helper is susceptible to change the underlying | 3070 | * A call to this helper is susceptible to change the underlying |
| 3045 | * packet buffer. Therefore, at load time, all checks on pointers | 3071 | * packet buffer. Therefore, at load time, all checks on pointers |
| @@ -6293,6 +6319,10 @@ enum bpf_adj_room_flags { · 3247 unmodified lines | |||
| 6293 | BPF_F_ADJ_ROOM_ENCAP_L2_ETH = (1ULL << 6), | 6319 | BPF_F_ADJ_ROOM_ENCAP_L2_ETH = (1ULL << 6), |
| 6294 | BPF_F_ADJ_ROOM_DECAP_L3_IPV4 = (1ULL << 7), | 6320 | BPF_F_ADJ_ROOM_DECAP_L3_IPV4 = (1ULL << 7), |
| 6295 | BPF_F_ADJ_ROOM_DECAP_L3_IPV6 = (1ULL << 8), | 6321 | BPF_F_ADJ_ROOM_DECAP_L3_IPV6 = (1ULL << 8), |
| 6322 | BPF_F_ADJ_ROOM_DECAP_L4_GRE = (1ULL << 9), | ||
| 6323 | BPF_F_ADJ_ROOM_DECAP_L4_UDP = (1ULL << 10), | ||
| 6324 | BPF_F_ADJ_ROOM_DECAP_IPXIP4 = (1ULL << 11), | ||
| 6325 | BPF_F_ADJ_ROOM_DECAP_IPXIP6 = (1ULL << 12), | ||
| 6296 | }; | 6326 | }; |
| 6297 | 6327 | ||
| 6298 | enum { | 6328 | enum { |