flow_dissector: change port array into src, dst tuple
Signed-off-by: Jiri Pirko <jiri@resnulli.us> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
67a900cc04
commit
59346afe7a
@ -35,8 +35,8 @@ int enic_addfltr_5t(struct enic *enic, struct flow_keys *keys, u16 rq)
|
|||||||
data.type = FILTER_IPV4_5TUPLE;
|
data.type = FILTER_IPV4_5TUPLE;
|
||||||
data.u.ipv4.src_addr = ntohl(keys->addrs.src);
|
data.u.ipv4.src_addr = ntohl(keys->addrs.src);
|
||||||
data.u.ipv4.dst_addr = ntohl(keys->addrs.dst);
|
data.u.ipv4.dst_addr = ntohl(keys->addrs.dst);
|
||||||
data.u.ipv4.src_port = ntohs(keys->ports.port16[0]);
|
data.u.ipv4.src_port = ntohs(keys->ports.src);
|
||||||
data.u.ipv4.dst_port = ntohs(keys->ports.port16[1]);
|
data.u.ipv4.dst_port = ntohs(keys->ports.dst);
|
||||||
data.u.ipv4.flags = FILTER_FIELDS_IPV4_5TUPLE;
|
data.u.ipv4.flags = FILTER_FIELDS_IPV4_5TUPLE;
|
||||||
|
|
||||||
spin_lock_bh(&enic->devcmd_lock);
|
spin_lock_bh(&enic->devcmd_lock);
|
||||||
|
@ -352,10 +352,10 @@ static int enic_grxclsrule(struct enic *enic, struct ethtool_rxnfc *cmd)
|
|||||||
fsp->h_u.tcp_ip4_spec.ip4dst = n->keys.addrs.dst;
|
fsp->h_u.tcp_ip4_spec.ip4dst = n->keys.addrs.dst;
|
||||||
fsp->m_u.tcp_ip4_spec.ip4dst = (__u32)~0;
|
fsp->m_u.tcp_ip4_spec.ip4dst = (__u32)~0;
|
||||||
|
|
||||||
fsp->h_u.tcp_ip4_spec.psrc = n->keys.ports.port16[0];
|
fsp->h_u.tcp_ip4_spec.psrc = n->keys.ports.src;
|
||||||
fsp->m_u.tcp_ip4_spec.psrc = (__u16)~0;
|
fsp->m_u.tcp_ip4_spec.psrc = (__u16)~0;
|
||||||
|
|
||||||
fsp->h_u.tcp_ip4_spec.pdst = n->keys.ports.port16[1];
|
fsp->h_u.tcp_ip4_spec.pdst = n->keys.ports.dst;
|
||||||
fsp->m_u.tcp_ip4_spec.pdst = (__u16)~0;
|
fsp->m_u.tcp_ip4_spec.pdst = (__u16)~0;
|
||||||
|
|
||||||
fsp->ring_cookie = n->rq_id;
|
fsp->ring_cookie = n->rq_id;
|
||||||
|
@ -34,13 +34,16 @@ struct flow_dissector_key_addrs {
|
|||||||
/**
|
/**
|
||||||
* flow_dissector_key_tp_ports:
|
* flow_dissector_key_tp_ports:
|
||||||
* @ports: port numbers of Transport header
|
* @ports: port numbers of Transport header
|
||||||
* port16[0]: src port number
|
* src: source port number
|
||||||
* port16[1]: dst port number
|
* dst: destination port number
|
||||||
*/
|
*/
|
||||||
struct flow_dissector_key_ports {
|
struct flow_dissector_key_ports {
|
||||||
union {
|
union {
|
||||||
__be32 ports;
|
__be32 ports;
|
||||||
__be16 port16[2];
|
struct {
|
||||||
|
__be16 src;
|
||||||
|
__be16 dst;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -362,8 +362,8 @@ static inline void inet_set_txhash(struct sock *sk)
|
|||||||
|
|
||||||
keys.addrs.src = inet->inet_saddr;
|
keys.addrs.src = inet->inet_saddr;
|
||||||
keys.addrs.dst = inet->inet_daddr;
|
keys.addrs.dst = inet->inet_daddr;
|
||||||
keys.ports.port16[0] = inet->inet_sport;
|
keys.ports.src = inet->inet_sport;
|
||||||
keys.ports.port16[1] = inet->inet_dport;
|
keys.ports.dst = inet->inet_dport;
|
||||||
|
|
||||||
sk->sk_txhash = flow_hash_from_keys(&keys);
|
sk->sk_txhash = flow_hash_from_keys(&keys);
|
||||||
}
|
}
|
||||||
|
@ -700,8 +700,8 @@ static inline void ip6_set_txhash(struct sock *sk)
|
|||||||
|
|
||||||
keys.addrs.src = (__force __be32)ipv6_addr_hash(&np->saddr);
|
keys.addrs.src = (__force __be32)ipv6_addr_hash(&np->saddr);
|
||||||
keys.addrs.dst = (__force __be32)ipv6_addr_hash(&sk->sk_v6_daddr);
|
keys.addrs.dst = (__force __be32)ipv6_addr_hash(&sk->sk_v6_daddr);
|
||||||
keys.ports.port16[0] = inet->inet_sport;
|
keys.ports.src = inet->inet_sport;
|
||||||
keys.ports.port16[1] = inet->inet_dport;
|
keys.ports.dst = inet->inet_dport;
|
||||||
|
|
||||||
sk->sk_txhash = flow_hash_from_keys(&keys);
|
sk->sk_txhash = flow_hash_from_keys(&keys);
|
||||||
}
|
}
|
||||||
|
@ -385,9 +385,9 @@ static inline u32 __flow_hash_from_keys(struct flow_keys *keys, u32 keyval)
|
|||||||
/* get a consistent hash (same value on both flow directions) */
|
/* get a consistent hash (same value on both flow directions) */
|
||||||
if (((__force u32)keys->addrs.dst < (__force u32)keys->addrs.src) ||
|
if (((__force u32)keys->addrs.dst < (__force u32)keys->addrs.src) ||
|
||||||
(((__force u32)keys->addrs.dst == (__force u32)keys->addrs.src) &&
|
(((__force u32)keys->addrs.dst == (__force u32)keys->addrs.src) &&
|
||||||
((__force u16)keys->ports.port16[1] < (__force u16)keys->ports.port16[0]))) {
|
((__force u16)keys->ports.dst < (__force u16)keys->ports.src))) {
|
||||||
swap(keys->addrs.dst, keys->addrs.src);
|
swap(keys->addrs.dst, keys->addrs.src);
|
||||||
swap(keys->ports.port16[0], keys->ports.port16[1]);
|
swap(keys->ports.src, keys->ports.dst);
|
||||||
}
|
}
|
||||||
|
|
||||||
hash = __flow_hash_3words((__force u32)keys->addrs.dst,
|
hash = __flow_hash_3words((__force u32)keys->addrs.dst,
|
||||||
|
@ -88,7 +88,7 @@ static u32 flow_get_proto(const struct sk_buff *skb, const struct flow_keys *flo
|
|||||||
static u32 flow_get_proto_src(const struct sk_buff *skb, const struct flow_keys *flow)
|
static u32 flow_get_proto_src(const struct sk_buff *skb, const struct flow_keys *flow)
|
||||||
{
|
{
|
||||||
if (flow->ports.ports)
|
if (flow->ports.ports)
|
||||||
return ntohs(flow->ports.port16[0]);
|
return ntohs(flow->ports.src);
|
||||||
|
|
||||||
return addr_fold(skb->sk);
|
return addr_fold(skb->sk);
|
||||||
}
|
}
|
||||||
@ -96,7 +96,7 @@ static u32 flow_get_proto_src(const struct sk_buff *skb, const struct flow_keys
|
|||||||
static u32 flow_get_proto_dst(const struct sk_buff *skb, const struct flow_keys *flow)
|
static u32 flow_get_proto_dst(const struct sk_buff *skb, const struct flow_keys *flow)
|
||||||
{
|
{
|
||||||
if (flow->ports.ports)
|
if (flow->ports.ports)
|
||||||
return ntohs(flow->ports.port16[1]);
|
return ntohs(flow->ports.dst);
|
||||||
|
|
||||||
return addr_fold(skb_dst(skb)) ^ (__force u16) tc_skb_protocol(skb);
|
return addr_fold(skb_dst(skb)) ^ (__force u16) tc_skb_protocol(skb);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user