diff options
author | David S. Miller <davem@davemloft.net> | 2015-09-02 00:19:17 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2015-09-02 00:19:17 -0400 |
commit | 20a17bf6c04e3eca8824c930ecc55ab832558e3b (patch) | |
tree | 551f9cf95cdadc374b6a2fef2817505504bdc74a /net | |
parent | de4c1f8ba302ccf4f2b3b17dc614b0a0b14d351a (diff) |
flow_dissector: Use 'const' where possible.
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net')
-rw-r--r-- | net/core/flow_dissector.c | 79 |
1 files changed, 41 insertions, 38 deletions
diff --git a/net/core/flow_dissector.c b/net/core/flow_dissector.c index 345a0408cfe4..d79699c9d1b9 100644 --- a/net/core/flow_dissector.c +++ b/net/core/flow_dissector.c | |||
@@ -19,14 +19,14 @@ | |||
19 | #include <net/flow_dissector.h> | 19 | #include <net/flow_dissector.h> |
20 | #include <scsi/fc/fc_fcoe.h> | 20 | #include <scsi/fc/fc_fcoe.h> |
21 | 21 | ||
22 | static bool skb_flow_dissector_uses_key(struct flow_dissector *flow_dissector, | 22 | static bool dissector_uses_key(const struct flow_dissector *flow_dissector, |
23 | enum flow_dissector_key_id key_id) | 23 | enum flow_dissector_key_id key_id) |
24 | { | 24 | { |
25 | return flow_dissector->used_keys & (1 << key_id); | 25 | return flow_dissector->used_keys & (1 << key_id); |
26 | } | 26 | } |
27 | 27 | ||
28 | static void skb_flow_dissector_set_key(struct flow_dissector *flow_dissector, | 28 | static void dissector_set_key(struct flow_dissector *flow_dissector, |
29 | enum flow_dissector_key_id key_id) | 29 | enum flow_dissector_key_id key_id) |
30 | { | 30 | { |
31 | flow_dissector->used_keys |= (1 << key_id); | 31 | flow_dissector->used_keys |= (1 << key_id); |
32 | } | 32 | } |
@@ -51,20 +51,20 @@ void skb_flow_dissector_init(struct flow_dissector *flow_dissector, | |||
51 | * boundaries of unsigned short. | 51 | * boundaries of unsigned short. |
52 | */ | 52 | */ |
53 | BUG_ON(key->offset > USHRT_MAX); | 53 | BUG_ON(key->offset > USHRT_MAX); |
54 | BUG_ON(skb_flow_dissector_uses_key(flow_dissector, | 54 | BUG_ON(dissector_uses_key(flow_dissector, |
55 | key->key_id)); | 55 | key->key_id)); |
56 | 56 | ||
57 | skb_flow_dissector_set_key(flow_dissector, key->key_id); | 57 | dissector_set_key(flow_dissector, key->key_id); |
58 | flow_dissector->offset[key->key_id] = key->offset; | 58 | flow_dissector->offset[key->key_id] = key->offset; |
59 | } | 59 | } |
60 | 60 | ||
61 | /* Ensure that the dissector always includes control and basic key. | 61 | /* Ensure that the dissector always includes control and basic key. |
62 | * That way we are able to avoid handling lack of these in fast path. | 62 | * That way we are able to avoid handling lack of these in fast path. |
63 | */ | 63 | */ |
64 | BUG_ON(!skb_flow_dissector_uses_key(flow_dissector, | 64 | BUG_ON(!dissector_uses_key(flow_dissector, |
65 | FLOW_DISSECTOR_KEY_CONTROL)); | 65 | FLOW_DISSECTOR_KEY_CONTROL)); |
66 | BUG_ON(!skb_flow_dissector_uses_key(flow_dissector, | 66 | BUG_ON(!dissector_uses_key(flow_dissector, |
67 | FLOW_DISSECTOR_KEY_BASIC)); | 67 | FLOW_DISSECTOR_KEY_BASIC)); |
68 | } | 68 | } |
69 | EXPORT_SYMBOL(skb_flow_dissector_init); | 69 | EXPORT_SYMBOL(skb_flow_dissector_init); |
70 | 70 | ||
@@ -154,8 +154,8 @@ bool __skb_flow_dissect(const struct sk_buff *skb, | |||
154 | FLOW_DISSECTOR_KEY_BASIC, | 154 | FLOW_DISSECTOR_KEY_BASIC, |
155 | target_container); | 155 | target_container); |
156 | 156 | ||
157 | if (skb_flow_dissector_uses_key(flow_dissector, | 157 | if (dissector_uses_key(flow_dissector, |
158 | FLOW_DISSECTOR_KEY_ETH_ADDRS)) { | 158 | FLOW_DISSECTOR_KEY_ETH_ADDRS)) { |
159 | struct ethhdr *eth = eth_hdr(skb); | 159 | struct ethhdr *eth = eth_hdr(skb); |
160 | struct flow_dissector_key_eth_addrs *key_eth_addrs; | 160 | struct flow_dissector_key_eth_addrs *key_eth_addrs; |
161 | 161 | ||
@@ -178,8 +178,8 @@ ip: | |||
178 | 178 | ||
179 | ip_proto = iph->protocol; | 179 | ip_proto = iph->protocol; |
180 | 180 | ||
181 | if (!skb_flow_dissector_uses_key(flow_dissector, | 181 | if (!dissector_uses_key(flow_dissector, |
182 | FLOW_DISSECTOR_KEY_IPV4_ADDRS)) | 182 | FLOW_DISSECTOR_KEY_IPV4_ADDRS)) |
183 | break; | 183 | break; |
184 | 184 | ||
185 | key_addrs = skb_flow_dissector_target(flow_dissector, | 185 | key_addrs = skb_flow_dissector_target(flow_dissector, |
@@ -218,8 +218,8 @@ ipv6: | |||
218 | ip_proto = iph->nexthdr; | 218 | ip_proto = iph->nexthdr; |
219 | nhoff += sizeof(struct ipv6hdr); | 219 | nhoff += sizeof(struct ipv6hdr); |
220 | 220 | ||
221 | if (skb_flow_dissector_uses_key(flow_dissector, | 221 | if (dissector_uses_key(flow_dissector, |
222 | FLOW_DISSECTOR_KEY_IPV6_ADDRS)) { | 222 | FLOW_DISSECTOR_KEY_IPV6_ADDRS)) { |
223 | struct flow_dissector_key_ipv6_addrs *key_ipv6_addrs; | 223 | struct flow_dissector_key_ipv6_addrs *key_ipv6_addrs; |
224 | 224 | ||
225 | key_ipv6_addrs = skb_flow_dissector_target(flow_dissector, | 225 | key_ipv6_addrs = skb_flow_dissector_target(flow_dissector, |
@@ -232,8 +232,8 @@ ipv6: | |||
232 | 232 | ||
233 | flow_label = ip6_flowlabel(iph); | 233 | flow_label = ip6_flowlabel(iph); |
234 | if (flow_label) { | 234 | if (flow_label) { |
235 | if (skb_flow_dissector_uses_key(flow_dissector, | 235 | if (dissector_uses_key(flow_dissector, |
236 | FLOW_DISSECTOR_KEY_FLOW_LABEL)) { | 236 | FLOW_DISSECTOR_KEY_FLOW_LABEL)) { |
237 | key_tags = skb_flow_dissector_target(flow_dissector, | 237 | key_tags = skb_flow_dissector_target(flow_dissector, |
238 | FLOW_DISSECTOR_KEY_FLOW_LABEL, | 238 | FLOW_DISSECTOR_KEY_FLOW_LABEL, |
239 | target_container); | 239 | target_container); |
@@ -257,8 +257,8 @@ ipv6: | |||
257 | if (!vlan) | 257 | if (!vlan) |
258 | goto out_bad; | 258 | goto out_bad; |
259 | 259 | ||
260 | if (skb_flow_dissector_uses_key(flow_dissector, | 260 | if (dissector_uses_key(flow_dissector, |
261 | FLOW_DISSECTOR_KEY_VLANID)) { | 261 | FLOW_DISSECTOR_KEY_VLANID)) { |
262 | key_tags = skb_flow_dissector_target(flow_dissector, | 262 | key_tags = skb_flow_dissector_target(flow_dissector, |
263 | FLOW_DISSECTOR_KEY_VLANID, | 263 | FLOW_DISSECTOR_KEY_VLANID, |
264 | target_container); | 264 | target_container); |
@@ -298,8 +298,8 @@ ipv6: | |||
298 | if (!hdr) | 298 | if (!hdr) |
299 | goto out_bad; | 299 | goto out_bad; |
300 | 300 | ||
301 | if (skb_flow_dissector_uses_key(flow_dissector, | 301 | if (dissector_uses_key(flow_dissector, |
302 | FLOW_DISSECTOR_KEY_TIPC_ADDRS)) { | 302 | FLOW_DISSECTOR_KEY_TIPC_ADDRS)) { |
303 | key_addrs = skb_flow_dissector_target(flow_dissector, | 303 | key_addrs = skb_flow_dissector_target(flow_dissector, |
304 | FLOW_DISSECTOR_KEY_TIPC_ADDRS, | 304 | FLOW_DISSECTOR_KEY_TIPC_ADDRS, |
305 | target_container); | 305 | target_container); |
@@ -320,8 +320,8 @@ mpls: | |||
320 | 320 | ||
321 | if ((ntohl(hdr[0].entry) & MPLS_LS_LABEL_MASK) >> | 321 | if ((ntohl(hdr[0].entry) & MPLS_LS_LABEL_MASK) >> |
322 | MPLS_LS_LABEL_SHIFT == MPLS_LABEL_ENTROPY) { | 322 | MPLS_LS_LABEL_SHIFT == MPLS_LABEL_ENTROPY) { |
323 | if (skb_flow_dissector_uses_key(flow_dissector, | 323 | if (dissector_uses_key(flow_dissector, |
324 | FLOW_DISSECTOR_KEY_MPLS_ENTROPY)) { | 324 | FLOW_DISSECTOR_KEY_MPLS_ENTROPY)) { |
325 | key_keyid = skb_flow_dissector_target(flow_dissector, | 325 | key_keyid = skb_flow_dissector_target(flow_dissector, |
326 | FLOW_DISSECTOR_KEY_MPLS_ENTROPY, | 326 | FLOW_DISSECTOR_KEY_MPLS_ENTROPY, |
327 | target_container); | 327 | target_container); |
@@ -374,8 +374,8 @@ ip_proto_again: | |||
374 | if (!keyid) | 374 | if (!keyid) |
375 | goto out_bad; | 375 | goto out_bad; |
376 | 376 | ||
377 | if (skb_flow_dissector_uses_key(flow_dissector, | 377 | if (dissector_uses_key(flow_dissector, |
378 | FLOW_DISSECTOR_KEY_GRE_KEYID)) { | 378 | FLOW_DISSECTOR_KEY_GRE_KEYID)) { |
379 | key_keyid = skb_flow_dissector_target(flow_dissector, | 379 | key_keyid = skb_flow_dissector_target(flow_dissector, |
380 | FLOW_DISSECTOR_KEY_GRE_KEYID, | 380 | FLOW_DISSECTOR_KEY_GRE_KEYID, |
381 | target_container); | 381 | target_container); |
@@ -470,8 +470,8 @@ ip_proto_again: | |||
470 | break; | 470 | break; |
471 | } | 471 | } |
472 | 472 | ||
473 | if (skb_flow_dissector_uses_key(flow_dissector, | 473 | if (dissector_uses_key(flow_dissector, |
474 | FLOW_DISSECTOR_KEY_PORTS)) { | 474 | FLOW_DISSECTOR_KEY_PORTS)) { |
475 | key_ports = skb_flow_dissector_target(flow_dissector, | 475 | key_ports = skb_flow_dissector_target(flow_dissector, |
476 | FLOW_DISSECTOR_KEY_PORTS, | 476 | FLOW_DISSECTOR_KEY_PORTS, |
477 | target_container); | 477 | target_container); |
@@ -497,18 +497,21 @@ static __always_inline void __flow_hash_secret_init(void) | |||
497 | net_get_random_once(&hashrnd, sizeof(hashrnd)); | 497 | net_get_random_once(&hashrnd, sizeof(hashrnd)); |
498 | } | 498 | } |
499 | 499 | ||
500 | static __always_inline u32 __flow_hash_words(u32 *words, u32 length, u32 keyval) | 500 | static __always_inline u32 __flow_hash_words(const u32 *words, u32 length, |
501 | u32 keyval) | ||
501 | { | 502 | { |
502 | return jhash2(words, length, keyval); | 503 | return jhash2(words, length, keyval); |
503 | } | 504 | } |
504 | 505 | ||
505 | static inline void *flow_keys_hash_start(struct flow_keys *flow) | 506 | static inline const u32 *flow_keys_hash_start(const struct flow_keys *flow) |
506 | { | 507 | { |
508 | const void *p = flow; | ||
509 | |||
507 | BUILD_BUG_ON(FLOW_KEYS_HASH_OFFSET % sizeof(u32)); | 510 | BUILD_BUG_ON(FLOW_KEYS_HASH_OFFSET % sizeof(u32)); |
508 | return (void *)flow + FLOW_KEYS_HASH_OFFSET; | 511 | return (const u32 *)(p + FLOW_KEYS_HASH_OFFSET); |
509 | } | 512 | } |
510 | 513 | ||
511 | static inline size_t flow_keys_hash_length(struct flow_keys *flow) | 514 | static inline size_t flow_keys_hash_length(const struct flow_keys *flow) |
512 | { | 515 | { |
513 | size_t diff = FLOW_KEYS_HASH_OFFSET + sizeof(flow->addrs); | 516 | size_t diff = FLOW_KEYS_HASH_OFFSET + sizeof(flow->addrs); |
514 | BUILD_BUG_ON((sizeof(*flow) - FLOW_KEYS_HASH_OFFSET) % sizeof(u32)); | 517 | BUILD_BUG_ON((sizeof(*flow) - FLOW_KEYS_HASH_OFFSET) % sizeof(u32)); |
@@ -598,7 +601,7 @@ static inline u32 __flow_hash_from_keys(struct flow_keys *keys, u32 keyval) | |||
598 | 601 | ||
599 | __flow_hash_consistentify(keys); | 602 | __flow_hash_consistentify(keys); |
600 | 603 | ||
601 | hash = __flow_hash_words((u32 *)flow_keys_hash_start(keys), | 604 | hash = __flow_hash_words(flow_keys_hash_start(keys), |
602 | flow_keys_hash_length(keys), keyval); | 605 | flow_keys_hash_length(keys), keyval); |
603 | if (!hash) | 606 | if (!hash) |
604 | hash = 1; | 607 | hash = 1; |
@@ -677,7 +680,7 @@ __u32 skb_get_hash_perturb(const struct sk_buff *skb, u32 perturb) | |||
677 | } | 680 | } |
678 | EXPORT_SYMBOL(skb_get_hash_perturb); | 681 | EXPORT_SYMBOL(skb_get_hash_perturb); |
679 | 682 | ||
680 | __u32 __skb_get_hash_flowi6(struct sk_buff *skb, struct flowi6 *fl6) | 683 | __u32 __skb_get_hash_flowi6(struct sk_buff *skb, const struct flowi6 *fl6) |
681 | { | 684 | { |
682 | struct flow_keys keys; | 685 | struct flow_keys keys; |
683 | 686 | ||
@@ -701,7 +704,7 @@ __u32 __skb_get_hash_flowi6(struct sk_buff *skb, struct flowi6 *fl6) | |||
701 | } | 704 | } |
702 | EXPORT_SYMBOL(__skb_get_hash_flowi6); | 705 | EXPORT_SYMBOL(__skb_get_hash_flowi6); |
703 | 706 | ||
704 | __u32 __skb_get_hash_flowi4(struct sk_buff *skb, struct flowi4 *fl4) | 707 | __u32 __skb_get_hash_flowi4(struct sk_buff *skb, const struct flowi4 *fl4) |
705 | { | 708 | { |
706 | struct flow_keys keys; | 709 | struct flow_keys keys; |
707 | 710 | ||
@@ -787,7 +790,7 @@ u32 skb_get_poff(const struct sk_buff *skb) | |||
787 | return __skb_get_poff(skb, skb->data, &keys, skb_headlen(skb)); | 790 | return __skb_get_poff(skb, skb->data, &keys, skb_headlen(skb)); |
788 | } | 791 | } |
789 | 792 | ||
790 | __u32 __get_hash_from_flowi6(struct flowi6 *fl6, struct flow_keys *keys) | 793 | __u32 __get_hash_from_flowi6(const struct flowi6 *fl6, struct flow_keys *keys) |
791 | { | 794 | { |
792 | memset(keys, 0, sizeof(*keys)); | 795 | memset(keys, 0, sizeof(*keys)); |
793 | 796 | ||
@@ -806,7 +809,7 @@ __u32 __get_hash_from_flowi6(struct flowi6 *fl6, struct flow_keys *keys) | |||
806 | } | 809 | } |
807 | EXPORT_SYMBOL(__get_hash_from_flowi6); | 810 | EXPORT_SYMBOL(__get_hash_from_flowi6); |
808 | 811 | ||
809 | __u32 __get_hash_from_flowi4(struct flowi4 *fl4, struct flow_keys *keys) | 812 | __u32 __get_hash_from_flowi4(const struct flowi4 *fl4, struct flow_keys *keys) |
810 | { | 813 | { |
811 | memset(keys, 0, sizeof(*keys)); | 814 | memset(keys, 0, sizeof(*keys)); |
812 | 815 | ||