mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-30 03:27:44 -04:00
flow_dissect: use programable dissector in skb_flow_dissect and friends
Signed-off-by: Jiri Pirko <[email protected]> Signed-off-by: David S. Miller <[email protected]>
This commit is contained in:
parent
fbff949e3b
commit
06635a35d1
12 changed files with 229 additions and 146 deletions
|
|
@ -68,35 +68,35 @@ static inline u32 addr_fold(void *addr)
|
|||
|
||||
static u32 flow_get_src(const struct sk_buff *skb, const struct flow_keys *flow)
|
||||
{
|
||||
if (flow->src)
|
||||
return ntohl(flow->src);
|
||||
if (flow->addrs.src)
|
||||
return ntohl(flow->addrs.src);
|
||||
return addr_fold(skb->sk);
|
||||
}
|
||||
|
||||
static u32 flow_get_dst(const struct sk_buff *skb, const struct flow_keys *flow)
|
||||
{
|
||||
if (flow->dst)
|
||||
return ntohl(flow->dst);
|
||||
if (flow->addrs.dst)
|
||||
return ntohl(flow->addrs.dst);
|
||||
return addr_fold(skb_dst(skb)) ^ (__force u16) tc_skb_protocol(skb);
|
||||
}
|
||||
|
||||
static u32 flow_get_proto(const struct sk_buff *skb, const struct flow_keys *flow)
|
||||
{
|
||||
return flow->ip_proto;
|
||||
return flow->basic.ip_proto;
|
||||
}
|
||||
|
||||
static u32 flow_get_proto_src(const struct sk_buff *skb, const struct flow_keys *flow)
|
||||
{
|
||||
if (flow->ports)
|
||||
return ntohs(flow->port16[0]);
|
||||
if (flow->ports.ports)
|
||||
return ntohs(flow->ports.port16[0]);
|
||||
|
||||
return addr_fold(skb->sk);
|
||||
}
|
||||
|
||||
static u32 flow_get_proto_dst(const struct sk_buff *skb, const struct flow_keys *flow)
|
||||
{
|
||||
if (flow->ports)
|
||||
return ntohs(flow->port16[1]);
|
||||
if (flow->ports.ports)
|
||||
return ntohs(flow->ports.port16[1]);
|
||||
|
||||
return addr_fold(skb_dst(skb)) ^ (__force u16) tc_skb_protocol(skb);
|
||||
}
|
||||
|
|
@ -295,7 +295,7 @@ static int flow_classify(struct sk_buff *skb, const struct tcf_proto *tp,
|
|||
|
||||
keymask = f->keymask;
|
||||
if (keymask & FLOW_KEYS_NEEDED)
|
||||
skb_flow_dissect(skb, &flow_keys);
|
||||
skb_flow_dissect_flow_keys(skb, &flow_keys);
|
||||
|
||||
for (n = 0; n < f->nkeys; n++) {
|
||||
key = ffs(keymask) - 1;
|
||||
|
|
|
|||
|
|
@ -170,13 +170,13 @@ static bool choke_match_flow(struct sk_buff *skb1,
|
|||
|
||||
if (!choke_skb_cb(skb1)->keys_valid) {
|
||||
choke_skb_cb(skb1)->keys_valid = 1;
|
||||
skb_flow_dissect(skb1, &temp);
|
||||
skb_flow_dissect_flow_keys(skb1, &temp);
|
||||
make_flow_keys_digest(&choke_skb_cb(skb1)->keys, &temp);
|
||||
}
|
||||
|
||||
if (!choke_skb_cb(skb2)->keys_valid) {
|
||||
choke_skb_cb(skb2)->keys_valid = 1;
|
||||
skb_flow_dissect(skb2, &temp);
|
||||
skb_flow_dissect_flow_keys(skb2, &temp);
|
||||
make_flow_keys_digest(&choke_skb_cb(skb2)->keys, &temp);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue