diff options
author | David S. Miller <davem@davemloft.net> | 2011-03-12 00:44:35 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2011-03-12 18:08:46 -0500 |
commit | 56bb8059e1a8bf291054c26367564dc302f6fd8f (patch) | |
tree | 56ec5ae2c1856208ccf97a0cd6b21ab0587f34cf | |
parent | 6281dcc94a96bd73017b2baa8fa83925405109ef (diff) |
net: Break struct flowi out into AF specific instances.
Now we have struct flowi4, flowi6, and flowidn for each address
family. And struct flowi is just a union of them all.
It might have been troublesome to convert flow_cache_uli_match() but
as it turns out this function is completely unused and therefore can
be simply removed.
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | include/net/dn.h | 4 | ||||
-rw-r--r-- | include/net/flow.h | 114 | ||||
-rw-r--r-- | net/ipv4/xfrm4_state.c | 4 | ||||
-rw-r--r-- | net/ipv6/mip6.c | 4 | ||||
-rw-r--r-- | net/ipv6/xfrm6_state.c | 4 | ||||
-rw-r--r-- | net/xfrm/xfrm_policy.c | 8 |
6 files changed, 69 insertions, 69 deletions
diff --git a/include/net/dn.h b/include/net/dn.h index a514a3cf4573..558dc7f93fb3 100644 --- a/include/net/dn.h +++ b/include/net/dn.h | |||
@@ -194,8 +194,8 @@ static inline void dn_dn2eth(unsigned char *ethaddr, __le16 addr) | |||
194 | 194 | ||
195 | static inline void dn_sk_ports_copy(struct flowi *fl, struct dn_scp *scp) | 195 | static inline void dn_sk_ports_copy(struct flowi *fl, struct dn_scp *scp) |
196 | { | 196 | { |
197 | fl->uli_u.dnports.sport = scp->addrloc; | 197 | fl->u.dn.uli.ports.sport = scp->addrloc; |
198 | fl->uli_u.dnports.dport = scp->addrrem; | 198 | fl->u.dn.uli.ports.dport = scp->addrrem; |
199 | } | 199 | } |
200 | 200 | ||
201 | extern unsigned dn_mss_from_pmtu(struct net_device *dev, int mtu); | 201 | extern unsigned dn_mss_from_pmtu(struct net_device *dev, int mtu); |
diff --git a/include/net/flow.h b/include/net/flow.h index f19f41d7dafc..931169095cc9 100644 --- a/include/net/flow.h +++ b/include/net/flow.h | |||
@@ -48,61 +48,68 @@ union flowi_uli { | |||
48 | } mht; | 48 | } mht; |
49 | }; | 49 | }; |
50 | 50 | ||
51 | struct flowi { | 51 | struct flowi4 { |
52 | struct flowi_common __fl_common; | ||
53 | __be32 daddr; | ||
54 | __be32 saddr; | ||
55 | union flowi_uli uli; | ||
56 | }; | ||
57 | |||
58 | struct flowi6 { | ||
52 | struct flowi_common __fl_common; | 59 | struct flowi_common __fl_common; |
53 | #define flowi_oif __fl_common.flowic_oif | 60 | struct in6_addr daddr; |
54 | #define flowi_iif __fl_common.flowic_iif | 61 | struct in6_addr saddr; |
55 | #define flowi_mark __fl_common.flowic_mark | 62 | __be32 flowlabel; |
56 | #define flowi_tos __fl_common.flowic_tos | 63 | union flowi_uli uli; |
57 | #define flowi_scope __fl_common.flowic_scope | 64 | }; |
58 | #define flowi_proto __fl_common.flowic_proto | ||
59 | #define flowi_flags __fl_common.flowic_flags | ||
60 | #define flowi_secid __fl_common.flowic_secid | ||
61 | 65 | ||
66 | struct flowidn { | ||
67 | struct flowi_common __fl_common; | ||
68 | __le16 daddr; | ||
69 | __le16 saddr; | ||
70 | union flowi_uli uli; | ||
71 | }; | ||
72 | |||
73 | struct flowi { | ||
62 | union { | 74 | union { |
63 | struct { | 75 | struct flowi_common __fl_common; |
64 | __be32 daddr; | 76 | struct flowi4 ip4; |
65 | __be32 saddr; | 77 | struct flowi6 ip6; |
66 | } ip4_u; | 78 | struct flowidn dn; |
67 | 79 | } u; | |
68 | struct { | 80 | #define flowi_oif u.__fl_common.flowic_oif |
69 | struct in6_addr daddr; | 81 | #define flowi_iif u.__fl_common.flowic_iif |
70 | struct in6_addr saddr; | 82 | #define flowi_mark u.__fl_common.flowic_mark |
71 | __be32 flowlabel; | 83 | #define flowi_tos u.__fl_common.flowic_tos |
72 | } ip6_u; | 84 | #define flowi_scope u.__fl_common.flowic_scope |
73 | 85 | #define flowi_proto u.__fl_common.flowic_proto | |
74 | struct { | 86 | #define flowi_flags u.__fl_common.flowic_flags |
75 | __le16 daddr; | 87 | #define flowi_secid u.__fl_common.flowic_secid |
76 | __le16 saddr; | ||
77 | __u8 scope; | ||
78 | } dn_u; | ||
79 | } nl_u; | ||
80 | #define fld_dst nl_u.dn_u.daddr | ||
81 | #define fld_src nl_u.dn_u.saddr | ||
82 | #define fld_scope nl_u.dn_u.scope | ||
83 | #define fl6_dst nl_u.ip6_u.daddr | ||
84 | #define fl6_src nl_u.ip6_u.saddr | ||
85 | #define fl6_flowlabel nl_u.ip6_u.flowlabel | ||
86 | #define fl4_dst nl_u.ip4_u.daddr | ||
87 | #define fl4_src nl_u.ip4_u.saddr | ||
88 | #define fl4_tos flowi_tos | 88 | #define fl4_tos flowi_tos |
89 | #define fl4_scope flowi_scope | 89 | #define fl4_scope flowi_scope |
90 | 90 | #define fld_scope flowi_scope | |
91 | union flowi_uli uli_u; | 91 | |
92 | #define fl4_sport uli_u.ports.sport | 92 | #define fld_dst u.dn.daddr |
93 | #define fl4_dport uli_u.ports.dport | 93 | #define fld_src u.dn.saddr |
94 | #define fl4_icmp_type uli_u.icmpt.type | 94 | #define fl6_dst u.ip6.daddr |
95 | #define fl4_icmp_code uli_u.icmpt.code | 95 | #define fl6_src u.ip6.saddr |
96 | #define fl4_ipsec_spi uli_u.spi | 96 | #define fl6_flowlabel u.ip6.flowlabel |
97 | #define fl4_mh_type uli_u.mht.type | 97 | #define fl4_dst u.ip4.daddr |
98 | #define fl4_gre_key uli_u.gre_key | 98 | #define fl4_src u.ip4.saddr |
99 | #define fl6_sport uli_u.ports.sport | 99 | #define fl4_sport u.ip4.uli.ports.sport |
100 | #define fl6_dport uli_u.ports.dport | 100 | #define fl4_dport u.ip4.uli.ports.dport |
101 | #define fl6_icmp_type uli_u.icmpt.type | 101 | #define fl4_icmp_type u.ip4.uli.icmpt.type |
102 | #define fl6_icmp_code uli_u.icmpt.code | 102 | #define fl4_icmp_code u.ip4.uli.icmpt.code |
103 | #define fl6_ipsec_spi uli_u.spi | 103 | #define fl4_ipsec_spi u.ip4.uli.spi |
104 | #define fl6_mh_type uli_u.mht.type | 104 | #define fl4_mh_type u.ip4.uli.mht.type |
105 | #define fl6_gre_key uli_u.gre_key | 105 | #define fl4_gre_key u.ip4.uli.gre_key |
106 | #define fl6_sport u.ip6.uli.ports.sport | ||
107 | #define fl6_dport u.ip6.uli.ports.dport | ||
108 | #define fl6_icmp_type u.ip6.uli.icmpt.type | ||
109 | #define fl6_icmp_code u.ip6.uli.icmpt.code | ||
110 | #define fl6_ipsec_spi u.ip6.uli.spi | ||
111 | #define fl6_mh_type u.ip6.uli.mht.type | ||
112 | #define fl6_gre_key u.ip6.uli.gre_key | ||
106 | } __attribute__((__aligned__(BITS_PER_LONG/8))); | 113 | } __attribute__((__aligned__(BITS_PER_LONG/8))); |
107 | 114 | ||
108 | #define FLOW_DIR_IN 0 | 115 | #define FLOW_DIR_IN 0 |
@@ -134,11 +141,4 @@ extern struct flow_cache_object *flow_cache_lookup( | |||
134 | extern void flow_cache_flush(void); | 141 | extern void flow_cache_flush(void); |
135 | extern atomic_t flow_cache_genid; | 142 | extern atomic_t flow_cache_genid; |
136 | 143 | ||
137 | static inline int flow_cache_uli_match(const struct flowi *fl1, | ||
138 | const struct flowi *fl2) | ||
139 | { | ||
140 | return (fl1->flowi_proto == fl2->flowi_proto && | ||
141 | !memcmp(&fl1->uli_u, &fl2->uli_u, sizeof(fl1->uli_u))); | ||
142 | } | ||
143 | |||
144 | #endif | 144 | #endif |
diff --git a/net/ipv4/xfrm4_state.c b/net/ipv4/xfrm4_state.c index 663b5501abcd..d8d541954532 100644 --- a/net/ipv4/xfrm4_state.c +++ b/net/ipv4/xfrm4_state.c | |||
@@ -25,9 +25,9 @@ __xfrm4_init_tempsel(struct xfrm_selector *sel, const struct flowi *fl) | |||
25 | { | 25 | { |
26 | sel->daddr.a4 = fl->fl4_dst; | 26 | sel->daddr.a4 = fl->fl4_dst; |
27 | sel->saddr.a4 = fl->fl4_src; | 27 | sel->saddr.a4 = fl->fl4_src; |
28 | sel->dport = xfrm_flowi_dport(fl, &fl->uli_u); | 28 | sel->dport = xfrm_flowi_dport(fl, &fl->u.ip4.uli); |
29 | sel->dport_mask = htons(0xffff); | 29 | sel->dport_mask = htons(0xffff); |
30 | sel->sport = xfrm_flowi_sport(fl, &fl->uli_u); | 30 | sel->sport = xfrm_flowi_sport(fl, &fl->u.ip4.uli); |
31 | sel->sport_mask = htons(0xffff); | 31 | sel->sport_mask = htons(0xffff); |
32 | sel->family = AF_INET; | 32 | sel->family = AF_INET; |
33 | sel->prefixlen_d = 32; | 33 | sel->prefixlen_d = 32; |
diff --git a/net/ipv6/mip6.c b/net/ipv6/mip6.c index 5038e6b2b55b..e1767aec3334 100644 --- a/net/ipv6/mip6.c +++ b/net/ipv6/mip6.c | |||
@@ -241,10 +241,10 @@ static int mip6_destopt_reject(struct xfrm_state *x, struct sk_buff *skb, | |||
241 | sel.prefixlen_s = 128; | 241 | sel.prefixlen_s = 128; |
242 | sel.family = AF_INET6; | 242 | sel.family = AF_INET6; |
243 | sel.proto = fl->flowi_proto; | 243 | sel.proto = fl->flowi_proto; |
244 | sel.dport = xfrm_flowi_dport(fl, &fl->uli_u); | 244 | sel.dport = xfrm_flowi_dport(fl, &fl->u.ip6.uli); |
245 | if (sel.dport) | 245 | if (sel.dport) |
246 | sel.dport_mask = htons(~0); | 246 | sel.dport_mask = htons(~0); |
247 | sel.sport = xfrm_flowi_sport(fl, &fl->uli_u); | 247 | sel.sport = xfrm_flowi_sport(fl, &fl->u.ip6.uli); |
248 | if (sel.sport) | 248 | if (sel.sport) |
249 | sel.sport_mask = htons(~0); | 249 | sel.sport_mask = htons(~0); |
250 | sel.ifindex = fl->flowi_oif; | 250 | sel.ifindex = fl->flowi_oif; |
diff --git a/net/ipv6/xfrm6_state.c b/net/ipv6/xfrm6_state.c index 71277ce78590..b456533a652d 100644 --- a/net/ipv6/xfrm6_state.c +++ b/net/ipv6/xfrm6_state.c | |||
@@ -26,9 +26,9 @@ __xfrm6_init_tempsel(struct xfrm_selector *sel, const struct flowi *fl) | |||
26 | * to current session. */ | 26 | * to current session. */ |
27 | ipv6_addr_copy((struct in6_addr *)&sel->daddr, &fl->fl6_dst); | 27 | ipv6_addr_copy((struct in6_addr *)&sel->daddr, &fl->fl6_dst); |
28 | ipv6_addr_copy((struct in6_addr *)&sel->saddr, &fl->fl6_src); | 28 | ipv6_addr_copy((struct in6_addr *)&sel->saddr, &fl->fl6_src); |
29 | sel->dport = xfrm_flowi_dport(fl, &fl->uli_u); | 29 | sel->dport = xfrm_flowi_dport(fl, &fl->u.ip6.uli); |
30 | sel->dport_mask = htons(0xffff); | 30 | sel->dport_mask = htons(0xffff); |
31 | sel->sport = xfrm_flowi_sport(fl, &fl->uli_u); | 31 | sel->sport = xfrm_flowi_sport(fl, &fl->u.ip6.uli); |
32 | sel->sport_mask = htons(0xffff); | 32 | sel->sport_mask = htons(0xffff); |
33 | sel->family = AF_INET6; | 33 | sel->family = AF_INET6; |
34 | sel->prefixlen_d = 128; | 34 | sel->prefixlen_d = 128; |
diff --git a/net/xfrm/xfrm_policy.c b/net/xfrm/xfrm_policy.c index d54b6e7165c6..2ecd18a106cf 100644 --- a/net/xfrm/xfrm_policy.c +++ b/net/xfrm/xfrm_policy.c | |||
@@ -61,8 +61,8 @@ __xfrm4_selector_match(const struct xfrm_selector *sel, const struct flowi *fl) | |||
61 | { | 61 | { |
62 | return addr_match(&fl->fl4_dst, &sel->daddr, sel->prefixlen_d) && | 62 | return addr_match(&fl->fl4_dst, &sel->daddr, sel->prefixlen_d) && |
63 | addr_match(&fl->fl4_src, &sel->saddr, sel->prefixlen_s) && | 63 | addr_match(&fl->fl4_src, &sel->saddr, sel->prefixlen_s) && |
64 | !((xfrm_flowi_dport(fl, &fl->uli_u) ^ sel->dport) & sel->dport_mask) && | 64 | !((xfrm_flowi_dport(fl, &fl->u.ip4.uli) ^ sel->dport) & sel->dport_mask) && |
65 | !((xfrm_flowi_sport(fl, &fl->uli_u) ^ sel->sport) & sel->sport_mask) && | 65 | !((xfrm_flowi_sport(fl, &fl->u.ip4.uli) ^ sel->sport) & sel->sport_mask) && |
66 | (fl->flowi_proto == sel->proto || !sel->proto) && | 66 | (fl->flowi_proto == sel->proto || !sel->proto) && |
67 | (fl->flowi_oif == sel->ifindex || !sel->ifindex); | 67 | (fl->flowi_oif == sel->ifindex || !sel->ifindex); |
68 | } | 68 | } |
@@ -72,8 +72,8 @@ __xfrm6_selector_match(const struct xfrm_selector *sel, const struct flowi *fl) | |||
72 | { | 72 | { |
73 | return addr_match(&fl->fl6_dst, &sel->daddr, sel->prefixlen_d) && | 73 | return addr_match(&fl->fl6_dst, &sel->daddr, sel->prefixlen_d) && |
74 | addr_match(&fl->fl6_src, &sel->saddr, sel->prefixlen_s) && | 74 | addr_match(&fl->fl6_src, &sel->saddr, sel->prefixlen_s) && |
75 | !((xfrm_flowi_dport(fl, &fl->uli_u) ^ sel->dport) & sel->dport_mask) && | 75 | !((xfrm_flowi_dport(fl, &fl->u.ip6.uli) ^ sel->dport) & sel->dport_mask) && |
76 | !((xfrm_flowi_sport(fl, &fl->uli_u) ^ sel->sport) & sel->sport_mask) && | 76 | !((xfrm_flowi_sport(fl, &fl->u.ip6.uli) ^ sel->sport) & sel->sport_mask) && |
77 | (fl->flowi_proto == sel->proto || !sel->proto) && | 77 | (fl->flowi_proto == sel->proto || !sel->proto) && |
78 | (fl->flowi_oif == sel->ifindex || !sel->ifindex); | 78 | (fl->flowi_oif == sel->ifindex || !sel->ifindex); |
79 | } | 79 | } |