aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2011-03-12 00:44:35 -0500
committerDavid S. Miller <davem@davemloft.net>2011-03-12 18:08:46 -0500
commit56bb8059e1a8bf291054c26367564dc302f6fd8f (patch)
tree56ec5ae2c1856208ccf97a0cd6b21ab0587f34cf
parent6281dcc94a96bd73017b2baa8fa83925405109ef (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.h4
-rw-r--r--include/net/flow.h114
-rw-r--r--net/ipv4/xfrm4_state.c4
-rw-r--r--net/ipv6/mip6.c4
-rw-r--r--net/ipv6/xfrm6_state.c4
-rw-r--r--net/xfrm/xfrm_policy.c8
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
195static inline void dn_sk_ports_copy(struct flowi *fl, struct dn_scp *scp) 195static 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
201extern unsigned dn_mss_from_pmtu(struct net_device *dev, int mtu); 201extern 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
51struct flowi { 51struct flowi4 {
52 struct flowi_common __fl_common;
53 __be32 daddr;
54 __be32 saddr;
55 union flowi_uli uli;
56};
57
58struct 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
66struct flowidn {
67 struct flowi_common __fl_common;
68 __le16 daddr;
69 __le16 saddr;
70 union flowi_uli uli;
71};
72
73struct 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(
134extern void flow_cache_flush(void); 141extern void flow_cache_flush(void);
135extern atomic_t flow_cache_genid; 142extern atomic_t flow_cache_genid;
136 143
137static 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}