bpf_skb_adjust_room sets the inner_protocol as skb->protocol for packets encapsulation. But that is not appropriate when pushing Ethernet header. Add an option to further specify encap L2 type and set the inner_protocol as ETH_P_TEB.
Showing the changes to include/uapi (1 of 3 files). Show all
Unified · Split
| @@ -2484,6 +2484,10 @@ union bpf_attr { · 2483 unmodified lines | |||
| 2484 | * Use with ENCAP_L3/L4 flags to further specify the tunnel | 2484 | * Use with ENCAP_L3/L4 flags to further specify the tunnel |
| 2485 | * type; *len* is the length of the inner MAC header. | 2485 | * type; *len* is the length of the inner MAC header. |
| 2486 | * | 2486 | * |
| 2487 | * * **BPF_F_ADJ_ROOM_ENCAP_L2_ETH**: | ||
| 2488 | * Use with BPF_F_ADJ_ROOM_ENCAP_L2 flag to further specify the | ||
| 2489 | * L2 type as Ethernet. | ||
| 2490 | * | ||
| 2487 | * A call to this helper is susceptible to change the underlying | 2491 | * A call to this helper is susceptible to change the underlying |
| 2488 | * packet buffer. Therefore, at load time, all checks on pointers | 2492 | * packet buffer. Therefore, at load time, all checks on pointers |
| 2489 | * previously done by the verifier are invalidated and must be | 2493 | * previously done by the verifier are invalidated and must be |
| @@ -4916,6 +4920,7 @@ enum { · 2426 unmodified lines | |||
| 4916 | BPF_F_ADJ_ROOM_ENCAP_L4_GRE = (1ULL << 3), | 4920 | BPF_F_ADJ_ROOM_ENCAP_L4_GRE = (1ULL << 3), |
| 4917 | BPF_F_ADJ_ROOM_ENCAP_L4_UDP = (1ULL << 4), | 4921 | BPF_F_ADJ_ROOM_ENCAP_L4_UDP = (1ULL << 4), |
| 4918 | BPF_F_ADJ_ROOM_NO_CSUM_RESET = (1ULL << 5), | 4922 | BPF_F_ADJ_ROOM_NO_CSUM_RESET = (1ULL << 5), |
| 4923 | BPF_F_ADJ_ROOM_ENCAP_L2_ETH = (1ULL << 6), | ||
| 4919 | }; | 4924 | }; |
| 4920 | 4925 | ||
| 4921 | enum { | 4926 | enum { |