diff options
| author | David S. Miller <davem@davemloft.net> | 2015-09-01 20:00:24 -0400 |
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2015-09-01 20:00:24 -0400 |
| commit | a17ace95b0f08ccbcf24946db5673c4b5ee8fcae (patch) | |
| tree | 0b98bda0d97182d99c95ee291d6b9eb730921e34 | |
| parent | 4b36993d3df0834eff3b4172962de0343a4d9123 (diff) | |
flow: Move __get_hash_from_flowi{4,6} into flow_dissector.c
These cannot live in net/core/flow.c which only builds when XFRM is
enabled.
Reported-by: kbuild test robot <fengguang.wu@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
| -rw-r--r-- | net/core/flow.c | 36 | ||||
| -rw-r--r-- | net/core/flow_dissector.c | 35 |
2 files changed, 35 insertions, 36 deletions
diff --git a/net/core/flow.c b/net/core/flow.c index 61930bb0eb59..1033725be40b 100644 --- a/net/core/flow.c +++ b/net/core/flow.c | |||
| @@ -22,7 +22,6 @@ | |||
| 22 | #include <linux/cpumask.h> | 22 | #include <linux/cpumask.h> |
| 23 | #include <linux/mutex.h> | 23 | #include <linux/mutex.h> |
| 24 | #include <net/flow.h> | 24 | #include <net/flow.h> |
| 25 | #include <net/flow_dissector.h> | ||
| 26 | #include <linux/atomic.h> | 25 | #include <linux/atomic.h> |
| 27 | #include <linux/security.h> | 26 | #include <linux/security.h> |
| 28 | #include <net/net_namespace.h> | 27 | #include <net/net_namespace.h> |
| @@ -510,38 +509,3 @@ void flow_cache_fini(struct net *net) | |||
| 510 | fc->percpu = NULL; | 509 | fc->percpu = NULL; |
| 511 | } | 510 | } |
| 512 | EXPORT_SYMBOL(flow_cache_fini); | 511 | EXPORT_SYMBOL(flow_cache_fini); |
| 513 | |||
| 514 | __u32 __get_hash_from_flowi6(struct flowi6 *fl6, struct flow_keys *keys) | ||
| 515 | { | ||
| 516 | memset(keys, 0, sizeof(*keys)); | ||
| 517 | |||
| 518 | memcpy(&keys->addrs.v6addrs.src, &fl6->saddr, | ||
| 519 | sizeof(keys->addrs.v6addrs.src)); | ||
| 520 | memcpy(&keys->addrs.v6addrs.dst, &fl6->daddr, | ||
| 521 | sizeof(keys->addrs.v6addrs.dst)); | ||
| 522 | keys->control.addr_type = FLOW_DISSECTOR_KEY_IPV6_ADDRS; | ||
| 523 | keys->ports.src = fl6->fl6_sport; | ||
| 524 | keys->ports.dst = fl6->fl6_dport; | ||
| 525 | keys->keyid.keyid = fl6->fl6_gre_key; | ||
| 526 | keys->tags.flow_label = (__force u32)fl6->flowlabel; | ||
| 527 | keys->basic.ip_proto = fl6->flowi6_proto; | ||
| 528 | |||
| 529 | return flow_hash_from_keys(keys); | ||
| 530 | } | ||
| 531 | EXPORT_SYMBOL(__get_hash_from_flowi6); | ||
| 532 | |||
| 533 | __u32 __get_hash_from_flowi4(struct flowi4 *fl4, struct flow_keys *keys) | ||
| 534 | { | ||
| 535 | memset(keys, 0, sizeof(*keys)); | ||
| 536 | |||
| 537 | keys->addrs.v4addrs.src = fl4->saddr; | ||
| 538 | keys->addrs.v4addrs.dst = fl4->daddr; | ||
| 539 | keys->control.addr_type = FLOW_DISSECTOR_KEY_IPV4_ADDRS; | ||
| 540 | keys->ports.src = fl4->fl4_sport; | ||
| 541 | keys->ports.dst = fl4->fl4_dport; | ||
| 542 | keys->keyid.keyid = fl4->fl4_gre_key; | ||
| 543 | keys->basic.ip_proto = fl4->flowi4_proto; | ||
| 544 | |||
| 545 | return flow_hash_from_keys(keys); | ||
| 546 | } | ||
| 547 | EXPORT_SYMBOL(__get_hash_from_flowi4); | ||
diff --git a/net/core/flow_dissector.c b/net/core/flow_dissector.c index 8d32020303c6..345a0408cfe4 100644 --- a/net/core/flow_dissector.c +++ b/net/core/flow_dissector.c | |||
| @@ -787,6 +787,41 @@ u32 skb_get_poff(const struct sk_buff *skb) | |||
| 787 | return __skb_get_poff(skb, skb->data, &keys, skb_headlen(skb)); | 787 | return __skb_get_poff(skb, skb->data, &keys, skb_headlen(skb)); |
| 788 | } | 788 | } |
| 789 | 789 | ||
| 790 | __u32 __get_hash_from_flowi6(struct flowi6 *fl6, struct flow_keys *keys) | ||
| 791 | { | ||
| 792 | memset(keys, 0, sizeof(*keys)); | ||
| 793 | |||
| 794 | memcpy(&keys->addrs.v6addrs.src, &fl6->saddr, | ||
| 795 | sizeof(keys->addrs.v6addrs.src)); | ||
| 796 | memcpy(&keys->addrs.v6addrs.dst, &fl6->daddr, | ||
| 797 | sizeof(keys->addrs.v6addrs.dst)); | ||
| 798 | keys->control.addr_type = FLOW_DISSECTOR_KEY_IPV6_ADDRS; | ||
| 799 | keys->ports.src = fl6->fl6_sport; | ||
| 800 | keys->ports.dst = fl6->fl6_dport; | ||
| 801 | keys->keyid.keyid = fl6->fl6_gre_key; | ||
| 802 | keys->tags.flow_label = (__force u32)fl6->flowlabel; | ||
| 803 | keys->basic.ip_proto = fl6->flowi6_proto; | ||
| 804 | |||
| 805 | return flow_hash_from_keys(keys); | ||
| 806 | } | ||
| 807 | EXPORT_SYMBOL(__get_hash_from_flowi6); | ||
| 808 | |||
| 809 | __u32 __get_hash_from_flowi4(struct flowi4 *fl4, struct flow_keys *keys) | ||
| 810 | { | ||
| 811 | memset(keys, 0, sizeof(*keys)); | ||
| 812 | |||
| 813 | keys->addrs.v4addrs.src = fl4->saddr; | ||
| 814 | keys->addrs.v4addrs.dst = fl4->daddr; | ||
| 815 | keys->control.addr_type = FLOW_DISSECTOR_KEY_IPV4_ADDRS; | ||
| 816 | keys->ports.src = fl4->fl4_sport; | ||
| 817 | keys->ports.dst = fl4->fl4_dport; | ||
| 818 | keys->keyid.keyid = fl4->fl4_gre_key; | ||
| 819 | keys->basic.ip_proto = fl4->flowi4_proto; | ||
| 820 | |||
| 821 | return flow_hash_from_keys(keys); | ||
| 822 | } | ||
| 823 | EXPORT_SYMBOL(__get_hash_from_flowi4); | ||
| 824 | |||
| 790 | static const struct flow_dissector_key flow_keys_dissector_keys[] = { | 825 | static const struct flow_dissector_key flow_keys_dissector_keys[] = { |
| 791 | { | 826 | { |
| 792 | .key_id = FLOW_DISSECTOR_KEY_CONTROL, | 827 | .key_id = FLOW_DISSECTOR_KEY_CONTROL, |
