diff options
author | Tom Herbert <tom@herbertland.com> | 2015-09-01 12:24:27 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2015-09-01 18:06:22 -0400 |
commit | cd79a2382aa5dcefa6e21a7c59bb1bb19e53b74d (patch) | |
tree | c252b8dd90eddc8d635356e8b394bd455cac51c0 /net | |
parent | a6e544b0a88b53114bfa5a57e21b7be7a8dfc9d0 (diff) |
flow_dissector: Add flags argument to skb_flow_dissector functions
The flags argument will allow control of the dissection process (for
instance whether to parse beyond L3).
Signed-off-by: Tom Herbert <tom@herbertland.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net')
-rw-r--r-- | net/core/flow_dissector.c | 7 | ||||
-rw-r--r-- | net/ethernet/eth.c | 2 | ||||
-rw-r--r-- | net/sched/cls_flow.c | 2 | ||||
-rw-r--r-- | net/sched/cls_flower.c | 2 | ||||
-rw-r--r-- | net/sched/sch_choke.c | 4 |
5 files changed, 9 insertions, 8 deletions
diff --git a/net/core/flow_dissector.c b/net/core/flow_dissector.c index 22f3d768b459..c3d9807cb34e 100644 --- a/net/core/flow_dissector.c +++ b/net/core/flow_dissector.c | |||
@@ -121,7 +121,8 @@ EXPORT_SYMBOL(__skb_flow_get_ports); | |||
121 | bool __skb_flow_dissect(const struct sk_buff *skb, | 121 | bool __skb_flow_dissect(const struct sk_buff *skb, |
122 | struct flow_dissector *flow_dissector, | 122 | struct flow_dissector *flow_dissector, |
123 | void *target_container, | 123 | void *target_container, |
124 | void *data, __be16 proto, int nhoff, int hlen) | 124 | void *data, __be16 proto, int nhoff, int hlen, |
125 | unsigned int flags) | ||
125 | { | 126 | { |
126 | struct flow_dissector_key_control *key_control; | 127 | struct flow_dissector_key_control *key_control; |
127 | struct flow_dissector_key_basic *key_basic; | 128 | struct flow_dissector_key_basic *key_basic; |
@@ -556,7 +557,7 @@ EXPORT_SYMBOL(flow_hash_from_keys); | |||
556 | static inline u32 ___skb_get_hash(const struct sk_buff *skb, | 557 | static inline u32 ___skb_get_hash(const struct sk_buff *skb, |
557 | struct flow_keys *keys, u32 keyval) | 558 | struct flow_keys *keys, u32 keyval) |
558 | { | 559 | { |
559 | if (!skb_flow_dissect_flow_keys(skb, keys)) | 560 | if (!skb_flow_dissect_flow_keys(skb, keys, 0)) |
560 | return 0; | 561 | return 0; |
561 | 562 | ||
562 | return __flow_hash_from_keys(keys, keyval); | 563 | return __flow_hash_from_keys(keys, keyval); |
@@ -726,7 +727,7 @@ u32 skb_get_poff(const struct sk_buff *skb) | |||
726 | { | 727 | { |
727 | struct flow_keys keys; | 728 | struct flow_keys keys; |
728 | 729 | ||
729 | if (!skb_flow_dissect_flow_keys(skb, &keys)) | 730 | if (!skb_flow_dissect_flow_keys(skb, &keys, 0)) |
730 | return 0; | 731 | return 0; |
731 | 732 | ||
732 | return __skb_get_poff(skb, skb->data, &keys, skb_headlen(skb)); | 733 | return __skb_get_poff(skb, skb->data, &keys, skb_headlen(skb)); |
diff --git a/net/ethernet/eth.c b/net/ethernet/eth.c index 217127c3a3ef..d850fdc828f9 100644 --- a/net/ethernet/eth.c +++ b/net/ethernet/eth.c | |||
@@ -132,7 +132,7 @@ u32 eth_get_headlen(void *data, unsigned int len) | |||
132 | 132 | ||
133 | /* parse any remaining L2/L3 headers, check for L4 */ | 133 | /* parse any remaining L2/L3 headers, check for L4 */ |
134 | if (!skb_flow_dissect_flow_keys_buf(&keys, data, eth->h_proto, | 134 | if (!skb_flow_dissect_flow_keys_buf(&keys, data, eth->h_proto, |
135 | sizeof(*eth), len)) | 135 | sizeof(*eth), len, 0)) |
136 | return max_t(u32, keys.control.thoff, sizeof(*eth)); | 136 | return max_t(u32, keys.control.thoff, sizeof(*eth)); |
137 | 137 | ||
138 | /* parse for any L4 headers */ | 138 | /* parse for any L4 headers */ |
diff --git a/net/sched/cls_flow.c b/net/sched/cls_flow.c index bb2a0f529c1f..536838b657bf 100644 --- a/net/sched/cls_flow.c +++ b/net/sched/cls_flow.c | |||
@@ -301,7 +301,7 @@ static int flow_classify(struct sk_buff *skb, const struct tcf_proto *tp, | |||
301 | 301 | ||
302 | keymask = f->keymask; | 302 | keymask = f->keymask; |
303 | if (keymask & FLOW_KEYS_NEEDED) | 303 | if (keymask & FLOW_KEYS_NEEDED) |
304 | skb_flow_dissect_flow_keys(skb, &flow_keys); | 304 | skb_flow_dissect_flow_keys(skb, &flow_keys, 0); |
305 | 305 | ||
306 | for (n = 0; n < f->nkeys; n++) { | 306 | for (n = 0; n < f->nkeys; n++) { |
307 | key = ffs(keymask) - 1; | 307 | key = ffs(keymask) - 1; |
diff --git a/net/sched/cls_flower.c b/net/sched/cls_flower.c index 2f3d03f99487..57692947ebbe 100644 --- a/net/sched/cls_flower.c +++ b/net/sched/cls_flower.c | |||
@@ -129,7 +129,7 @@ static int fl_classify(struct sk_buff *skb, const struct tcf_proto *tp, | |||
129 | * so do it rather here. | 129 | * so do it rather here. |
130 | */ | 130 | */ |
131 | skb_key.basic.n_proto = skb->protocol; | 131 | skb_key.basic.n_proto = skb->protocol; |
132 | skb_flow_dissect(skb, &head->dissector, &skb_key); | 132 | skb_flow_dissect(skb, &head->dissector, &skb_key, 0); |
133 | 133 | ||
134 | fl_set_masked_key(&skb_mkey, &skb_key, &head->mask); | 134 | fl_set_masked_key(&skb_mkey, &skb_key, &head->mask); |
135 | 135 | ||
diff --git a/net/sched/sch_choke.c b/net/sched/sch_choke.c index 665bde07916b..02bfd3d1c4f0 100644 --- a/net/sched/sch_choke.c +++ b/net/sched/sch_choke.c | |||
@@ -170,13 +170,13 @@ static bool choke_match_flow(struct sk_buff *skb1, | |||
170 | 170 | ||
171 | if (!choke_skb_cb(skb1)->keys_valid) { | 171 | if (!choke_skb_cb(skb1)->keys_valid) { |
172 | choke_skb_cb(skb1)->keys_valid = 1; | 172 | choke_skb_cb(skb1)->keys_valid = 1; |
173 | skb_flow_dissect_flow_keys(skb1, &temp); | 173 | skb_flow_dissect_flow_keys(skb1, &temp, 0); |
174 | make_flow_keys_digest(&choke_skb_cb(skb1)->keys, &temp); | 174 | make_flow_keys_digest(&choke_skb_cb(skb1)->keys, &temp); |
175 | } | 175 | } |
176 | 176 | ||
177 | if (!choke_skb_cb(skb2)->keys_valid) { | 177 | if (!choke_skb_cb(skb2)->keys_valid) { |
178 | choke_skb_cb(skb2)->keys_valid = 1; | 178 | choke_skb_cb(skb2)->keys_valid = 1; |
179 | skb_flow_dissect_flow_keys(skb2, &temp); | 179 | skb_flow_dissect_flow_keys(skb2, &temp, 0); |
180 | make_flow_keys_digest(&choke_skb_cb(skb2)->keys, &temp); | 180 | make_flow_keys_digest(&choke_skb_cb(skb2)->keys, &temp); |
181 | } | 181 | } |
182 | 182 | ||