aboutsummaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2015-09-02 00:19:17 -0400
committerDavid S. Miller <davem@davemloft.net>2015-09-02 00:19:17 -0400
commit20a17bf6c04e3eca8824c930ecc55ab832558e3b (patch)
tree551f9cf95cdadc374b6a2fef2817505504bdc74a /net
parentde4c1f8ba302ccf4f2b3b17dc614b0a0b14d351a (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.c79
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
22static bool skb_flow_dissector_uses_key(struct flow_dissector *flow_dissector, 22static 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
28static void skb_flow_dissector_set_key(struct flow_dissector *flow_dissector, 28static 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}
69EXPORT_SYMBOL(skb_flow_dissector_init); 69EXPORT_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
500static __always_inline u32 __flow_hash_words(u32 *words, u32 length, u32 keyval) 500static __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
505static inline void *flow_keys_hash_start(struct flow_keys *flow) 506static 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
511static inline size_t flow_keys_hash_length(struct flow_keys *flow) 514static 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}
678EXPORT_SYMBOL(skb_get_hash_perturb); 681EXPORT_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}
702EXPORT_SYMBOL(__skb_get_hash_flowi6); 705EXPORT_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}
807EXPORT_SYMBOL(__get_hash_from_flowi6); 810EXPORT_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