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 --- |