diff options
author | Stanislav Fomichev <sdf@google.com> | 2019-04-01 16:57:31 -0400 |
---|---|---|
committer | Daniel Borkmann <daniel@iogearbox.net> | 2019-04-03 10:49:48 -0400 |
commit | 822fe61795018265ae14731d4e5399e5bde36864 (patch) | |
tree | 46a279c48db0fef4326e864ffc60df9146c99e19 /tools | |
parent | 2c3af7d901c61c101c02f431cfb520af9ff56ab4 (diff) |
net/flow_dissector: pass flow_keys->n_proto to BPF programs
This is a preparation for the next commit that would prohibit access to
the most fields of __sk_buff from the BPF programs.
Instead of requiring BPF flow dissector programs to look into skb,
pass all input data in the flow_keys.
Signed-off-by: Stanislav Fomichev <sdf@google.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Diffstat (limited to 'tools')
-rw-r--r-- | tools/testing/selftests/bpf/progs/bpf_flow.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/tools/testing/selftests/bpf/progs/bpf_flow.c b/tools/testing/selftests/bpf/progs/bpf_flow.c index f177c7a6a6c7..75b17cada539 100644 --- a/tools/testing/selftests/bpf/progs/bpf_flow.c +++ b/tools/testing/selftests/bpf/progs/bpf_flow.c | |||
@@ -92,7 +92,6 @@ static __always_inline int parse_eth_proto(struct __sk_buff *skb, __be16 proto) | |||
92 | { | 92 | { |
93 | struct bpf_flow_keys *keys = skb->flow_keys; | 93 | struct bpf_flow_keys *keys = skb->flow_keys; |
94 | 94 | ||
95 | keys->n_proto = proto; | ||
96 | switch (proto) { | 95 | switch (proto) { |
97 | case bpf_htons(ETH_P_IP): | 96 | case bpf_htons(ETH_P_IP): |
98 | bpf_tail_call(skb, &jmp_table, IP); | 97 | bpf_tail_call(skb, &jmp_table, IP); |
@@ -119,7 +118,9 @@ static __always_inline int parse_eth_proto(struct __sk_buff *skb, __be16 proto) | |||
119 | SEC("flow_dissector") | 118 | SEC("flow_dissector") |
120 | int _dissect(struct __sk_buff *skb) | 119 | int _dissect(struct __sk_buff *skb) |
121 | { | 120 | { |
122 | return parse_eth_proto(skb, skb->protocol); | 121 | struct bpf_flow_keys *keys = skb->flow_keys; |
122 | |||
123 | return parse_eth_proto(skb, keys->n_proto); | ||
123 | } | 124 | } |
124 | 125 | ||
125 | /* Parses on IPPROTO_* */ | 126 | /* Parses on IPPROTO_* */ |
@@ -358,6 +359,7 @@ PROG(VLAN)(struct __sk_buff *skb) | |||
358 | vlan->h_vlan_encapsulated_proto == bpf_htons(ETH_P_8021Q)) | 359 | vlan->h_vlan_encapsulated_proto == bpf_htons(ETH_P_8021Q)) |
359 | return BPF_DROP; | 360 | return BPF_DROP; |
360 | 361 | ||
362 | keys->n_proto = vlan->h_vlan_encapsulated_proto; | ||
361 | return parse_eth_proto(skb, vlan->h_vlan_encapsulated_proto); | 363 | return parse_eth_proto(skb, vlan->h_vlan_encapsulated_proto); |
362 | } | 364 | } |
363 | 365 | ||