aboutsummaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorTom Herbert <tom@herbertland.com>2015-09-01 12:24:27 -0400
committerDavid S. Miller <davem@davemloft.net>2015-09-01 18:06:22 -0400
commitcd79a2382aa5dcefa6e21a7c59bb1bb19e53b74d (patch)
treec252b8dd90eddc8d635356e8b394bd455cac51c0 /net
parenta6e544b0a88b53114bfa5a57e21b7be7a8dfc9d0 (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.c7
-rw-r--r--net/ethernet/eth.c2
-rw-r--r--net/sched/cls_flow.c2
-rw-r--r--net/sched/cls_flower.c2
-rw-r--r--net/sched/sch_choke.c4
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);
121bool __skb_flow_dissect(const struct sk_buff *skb, 121bool __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);
556static inline u32 ___skb_get_hash(const struct sk_buff *skb, 557static 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