cls_flow.c (1bd758eb1cab2fa5b71a23f9e5d3c8076f4ed650) cls_flow.c (06635a35d13d42b95422bba6633f175245cc644e)
1/*
2 * net/sched/cls_flow.c Generic flow classifier
3 *
4 * Copyright (c) 2007, 2008 Patrick McHardy <kaber@trash.net>
5 *
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License
8 * as published by the Free Software Foundation; either version 2

--- 54 unchanged lines hidden (view full) ---

63{
64 unsigned long a = (unsigned long)addr;
65
66 return (a & 0xFFFFFFFF) ^ (BITS_PER_LONG > 32 ? a >> 32 : 0);
67}
68
69static u32 flow_get_src(const struct sk_buff *skb, const struct flow_keys *flow)
70{
1/*
2 * net/sched/cls_flow.c Generic flow classifier
3 *
4 * Copyright (c) 2007, 2008 Patrick McHardy <kaber@trash.net>
5 *
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License
8 * as published by the Free Software Foundation; either version 2

--- 54 unchanged lines hidden (view full) ---

63{
64 unsigned long a = (unsigned long)addr;
65
66 return (a & 0xFFFFFFFF) ^ (BITS_PER_LONG > 32 ? a >> 32 : 0);
67}
68
69static u32 flow_get_src(const struct sk_buff *skb, const struct flow_keys *flow)
70{
71 if (flow->src)
72 return ntohl(flow->src);
71 if (flow->addrs.src)
72 return ntohl(flow->addrs.src);
73 return addr_fold(skb->sk);
74}
75
76static u32 flow_get_dst(const struct sk_buff *skb, const struct flow_keys *flow)
77{
73 return addr_fold(skb->sk);
74}
75
76static u32 flow_get_dst(const struct sk_buff *skb, const struct flow_keys *flow)
77{
78 if (flow->dst)
79 return ntohl(flow->dst);
78 if (flow->addrs.dst)
79 return ntohl(flow->addrs.dst);
80 return addr_fold(skb_dst(skb)) ^ (__force u16) tc_skb_protocol(skb);
81}
82
83static u32 flow_get_proto(const struct sk_buff *skb, const struct flow_keys *flow)
84{
80 return addr_fold(skb_dst(skb)) ^ (__force u16) tc_skb_protocol(skb);
81}
82
83static u32 flow_get_proto(const struct sk_buff *skb, const struct flow_keys *flow)
84{
85 return flow->ip_proto;
85 return flow->basic.ip_proto;
86}
87
88static u32 flow_get_proto_src(const struct sk_buff *skb, const struct flow_keys *flow)
89{
86}
87
88static u32 flow_get_proto_src(const struct sk_buff *skb, const struct flow_keys *flow)
89{
90 if (flow->ports)
91 return ntohs(flow->port16[0]);
90 if (flow->ports.ports)
91 return ntohs(flow->ports.port16[0]);
92
93 return addr_fold(skb->sk);
94}
95
96static u32 flow_get_proto_dst(const struct sk_buff *skb, const struct flow_keys *flow)
97{
92
93 return addr_fold(skb->sk);
94}
95
96static u32 flow_get_proto_dst(const struct sk_buff *skb, const struct flow_keys *flow)
97{
98 if (flow->ports)
99 return ntohs(flow->port16[1]);
98 if (flow->ports.ports)
99 return ntohs(flow->ports.port16[1]);
100
101 return addr_fold(skb_dst(skb)) ^ (__force u16) tc_skb_protocol(skb);
102}
103
104static u32 flow_get_iif(const struct sk_buff *skb)
105{
106 return skb->skb_iif;
107}

--- 182 unchanged lines hidden (view full) ---

290 u32 keys[FLOW_KEY_MAX + 1];
291 struct flow_keys flow_keys;
292
293 if (!tcf_em_tree_match(skb, &f->ematches, NULL))
294 continue;
295
296 keymask = f->keymask;
297 if (keymask & FLOW_KEYS_NEEDED)
100
101 return addr_fold(skb_dst(skb)) ^ (__force u16) tc_skb_protocol(skb);
102}
103
104static u32 flow_get_iif(const struct sk_buff *skb)
105{
106 return skb->skb_iif;
107}

--- 182 unchanged lines hidden (view full) ---

290 u32 keys[FLOW_KEY_MAX + 1];
291 struct flow_keys flow_keys;
292
293 if (!tcf_em_tree_match(skb, &f->ematches, NULL))
294 continue;
295
296 keymask = f->keymask;
297 if (keymask & FLOW_KEYS_NEEDED)
298 skb_flow_dissect(skb, &flow_keys);
298 skb_flow_dissect_flow_keys(skb, &flow_keys);
299
300 for (n = 0; n < f->nkeys; n++) {
301 key = ffs(keymask) - 1;
302 keymask &= ~(1 << key);
303 keys[n] = flow_key_get(skb, key, &flow_keys);
304 }
305
306 if (f->mode == FLOW_MODE_HASH)

--- 388 unchanged lines hidden ---
299
300 for (n = 0; n < f->nkeys; n++) {
301 key = ffs(keymask) - 1;
302 keymask &= ~(1 << key);
303 keys[n] = flow_key_get(skb, key, &flow_keys);
304 }
305
306 if (f->mode == FLOW_MODE_HASH)

--- 388 unchanged lines hidden ---