diff options
author | David S. Miller <davem@davemloft.net> | 2011-03-12 16:22:43 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2011-03-12 18:08:54 -0500 |
commit | 4c9483b2fb5d2548c3cc1fe03cdd4484ceeb5d1c (patch) | |
tree | c29c8070012cffb38fe249cf528589a675f622b1 /net/netfilter | |
parent | 9cce96df5b76691712dba22e83ff5efe900361e1 (diff) |
ipv6: Convert to use flowi6 where applicable.
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/netfilter')
-rw-r--r-- | net/netfilter/ipvs/ip_vs_ctl.c | 10 | ||||
-rw-r--r-- | net/netfilter/ipvs/ip_vs_xmit.c | 14 | ||||
-rw-r--r-- | net/netfilter/xt_TEE.c | 12 |
3 files changed, 17 insertions, 19 deletions
diff --git a/net/netfilter/ipvs/ip_vs_ctl.c b/net/netfilter/ipvs/ip_vs_ctl.c index d07a32aa07b6..a60b20fa142e 100644 --- a/net/netfilter/ipvs/ip_vs_ctl.c +++ b/net/netfilter/ipvs/ip_vs_ctl.c | |||
@@ -75,15 +75,13 @@ static int __ip_vs_addr_is_local_v6(struct net *net, | |||
75 | const struct in6_addr *addr) | 75 | const struct in6_addr *addr) |
76 | { | 76 | { |
77 | struct rt6_info *rt; | 77 | struct rt6_info *rt; |
78 | struct flowi fl = { | 78 | struct flowi6 fl6 = { |
79 | .flowi_oif = 0, | 79 | .daddr = *addr, |
80 | .fl6_dst = *addr, | ||
81 | .fl6_src = { .s6_addr32 = {0, 0, 0, 0} }, | ||
82 | }; | 80 | }; |
83 | 81 | ||
84 | rt = (struct rt6_info *)ip6_route_output(net, NULL, &fl); | 82 | rt = (struct rt6_info *)ip6_route_output(net, NULL, &fl6); |
85 | if (rt && rt->rt6i_dev && (rt->rt6i_dev->flags & IFF_LOOPBACK)) | 83 | if (rt && rt->rt6i_dev && (rt->rt6i_dev->flags & IFF_LOOPBACK)) |
86 | return 1; | 84 | return 1; |
87 | 85 | ||
88 | return 0; | 86 | return 0; |
89 | } | 87 | } |
diff --git a/net/netfilter/ipvs/ip_vs_xmit.c b/net/netfilter/ipvs/ip_vs_xmit.c index 7dc00e313611..6132b213eddc 100644 --- a/net/netfilter/ipvs/ip_vs_xmit.c +++ b/net/netfilter/ipvs/ip_vs_xmit.c | |||
@@ -198,27 +198,27 @@ __ip_vs_route_output_v6(struct net *net, struct in6_addr *daddr, | |||
198 | struct in6_addr *ret_saddr, int do_xfrm) | 198 | struct in6_addr *ret_saddr, int do_xfrm) |
199 | { | 199 | { |
200 | struct dst_entry *dst; | 200 | struct dst_entry *dst; |
201 | struct flowi fl = { | 201 | struct flowi6 fl6 = { |
202 | .fl6_dst = *daddr, | 202 | .daddr = *daddr, |
203 | }; | 203 | }; |
204 | 204 | ||
205 | dst = ip6_route_output(net, NULL, &fl); | 205 | dst = ip6_route_output(net, NULL, &fl6); |
206 | if (dst->error) | 206 | if (dst->error) |
207 | goto out_err; | 207 | goto out_err; |
208 | if (!ret_saddr) | 208 | if (!ret_saddr) |
209 | return dst; | 209 | return dst; |
210 | if (ipv6_addr_any(&fl.fl6_src) && | 210 | if (ipv6_addr_any(&fl6.saddr) && |
211 | ipv6_dev_get_saddr(net, ip6_dst_idev(dst)->dev, | 211 | ipv6_dev_get_saddr(net, ip6_dst_idev(dst)->dev, |
212 | &fl.fl6_dst, 0, &fl.fl6_src) < 0) | 212 | &fl6.daddr, 0, &fl6.saddr) < 0) |
213 | goto out_err; | 213 | goto out_err; |
214 | if (do_xfrm) { | 214 | if (do_xfrm) { |
215 | dst = xfrm_lookup(net, dst, &fl, NULL, 0); | 215 | dst = xfrm_lookup(net, dst, flowi6_to_flowi(&fl6), NULL, 0); |
216 | if (IS_ERR(dst)) { | 216 | if (IS_ERR(dst)) { |
217 | dst = NULL; | 217 | dst = NULL; |
218 | goto out_err; | 218 | goto out_err; |
219 | } | 219 | } |
220 | } | 220 | } |
221 | ipv6_addr_copy(ret_saddr, &fl.fl6_src); | 221 | ipv6_addr_copy(ret_saddr, &fl6.saddr); |
222 | return dst; | 222 | return dst; |
223 | 223 | ||
224 | out_err: | 224 | out_err: |
diff --git a/net/netfilter/xt_TEE.c b/net/netfilter/xt_TEE.c index d8c00f9342ae..5f054a0dbbb1 100644 --- a/net/netfilter/xt_TEE.c +++ b/net/netfilter/xt_TEE.c | |||
@@ -143,18 +143,18 @@ tee_tg_route6(struct sk_buff *skb, const struct xt_tee_tginfo *info) | |||
143 | const struct ipv6hdr *iph = ipv6_hdr(skb); | 143 | const struct ipv6hdr *iph = ipv6_hdr(skb); |
144 | struct net *net = pick_net(skb); | 144 | struct net *net = pick_net(skb); |
145 | struct dst_entry *dst; | 145 | struct dst_entry *dst; |
146 | struct flowi fl; | 146 | struct flowi6 fl6; |
147 | 147 | ||
148 | memset(&fl, 0, sizeof(fl)); | 148 | memset(&fl6, 0, sizeof(fl6)); |
149 | if (info->priv) { | 149 | if (info->priv) { |
150 | if (info->priv->oif == -1) | 150 | if (info->priv->oif == -1) |
151 | return false; | 151 | return false; |
152 | fl.flowi_oif = info->priv->oif; | 152 | fl6.flowi6_oif = info->priv->oif; |
153 | } | 153 | } |
154 | fl.fl6_dst = info->gw.in6; | 154 | fl6.daddr = info->gw.in6; |
155 | fl.fl6_flowlabel = ((iph->flow_lbl[0] & 0xF) << 16) | | 155 | fl6.flowlabel = ((iph->flow_lbl[0] & 0xF) << 16) | |
156 | (iph->flow_lbl[1] << 8) | iph->flow_lbl[2]; | 156 | (iph->flow_lbl[1] << 8) | iph->flow_lbl[2]; |
157 | dst = ip6_route_output(net, NULL, &fl); | 157 | dst = ip6_route_output(net, NULL, &fl6); |
158 | if (dst == NULL) | 158 | if (dst == NULL) |
159 | return false; | 159 | return false; |
160 | 160 | ||