diff options
Diffstat (limited to 'net/ipv6/mip6.c')
-rw-r--r-- | net/ipv6/mip6.c | 24 |
1 files changed, 13 insertions, 11 deletions
diff --git a/net/ipv6/mip6.c b/net/ipv6/mip6.c index d6e9599d0705..43242e6e6103 100644 --- a/net/ipv6/mip6.c +++ b/net/ipv6/mip6.c | |||
@@ -126,7 +126,7 @@ static struct mip6_report_rate_limiter mip6_report_rl = { | |||
126 | 126 | ||
127 | static int mip6_destopt_input(struct xfrm_state *x, struct sk_buff *skb) | 127 | static int mip6_destopt_input(struct xfrm_state *x, struct sk_buff *skb) |
128 | { | 128 | { |
129 | struct ipv6hdr *iph = ipv6_hdr(skb); | 129 | const struct ipv6hdr *iph = ipv6_hdr(skb); |
130 | struct ipv6_destopt_hdr *destopt = (struct ipv6_destopt_hdr *)skb->data; | 130 | struct ipv6_destopt_hdr *destopt = (struct ipv6_destopt_hdr *)skb->data; |
131 | int err = destopt->nexthdr; | 131 | int err = destopt->nexthdr; |
132 | 132 | ||
@@ -181,8 +181,8 @@ static int mip6_destopt_output(struct xfrm_state *x, struct sk_buff *skb) | |||
181 | } | 181 | } |
182 | 182 | ||
183 | static inline int mip6_report_rl_allow(struct timeval *stamp, | 183 | static inline int mip6_report_rl_allow(struct timeval *stamp, |
184 | struct in6_addr *dst, | 184 | const struct in6_addr *dst, |
185 | struct in6_addr *src, int iif) | 185 | const struct in6_addr *src, int iif) |
186 | { | 186 | { |
187 | int allow = 0; | 187 | int allow = 0; |
188 | 188 | ||
@@ -203,18 +203,20 @@ static inline int mip6_report_rl_allow(struct timeval *stamp, | |||
203 | return allow; | 203 | return allow; |
204 | } | 204 | } |
205 | 205 | ||
206 | static int mip6_destopt_reject(struct xfrm_state *x, struct sk_buff *skb, struct flowi *fl) | 206 | static int mip6_destopt_reject(struct xfrm_state *x, struct sk_buff *skb, |
207 | const struct flowi *fl) | ||
207 | { | 208 | { |
208 | struct net *net = xs_net(x); | 209 | struct net *net = xs_net(x); |
209 | struct inet6_skb_parm *opt = (struct inet6_skb_parm *)skb->cb; | 210 | struct inet6_skb_parm *opt = (struct inet6_skb_parm *)skb->cb; |
211 | const struct flowi6 *fl6 = &fl->u.ip6; | ||
210 | struct ipv6_destopt_hao *hao = NULL; | 212 | struct ipv6_destopt_hao *hao = NULL; |
211 | struct xfrm_selector sel; | 213 | struct xfrm_selector sel; |
212 | int offset; | 214 | int offset; |
213 | struct timeval stamp; | 215 | struct timeval stamp; |
214 | int err = 0; | 216 | int err = 0; |
215 | 217 | ||
216 | if (unlikely(fl->proto == IPPROTO_MH && | 218 | if (unlikely(fl6->flowi6_proto == IPPROTO_MH && |
217 | fl->fl_mh_type <= IP6_MH_TYPE_MAX)) | 219 | fl6->fl6_mh_type <= IP6_MH_TYPE_MAX)) |
218 | goto out; | 220 | goto out; |
219 | 221 | ||
220 | if (likely(opt->dsthao)) { | 222 | if (likely(opt->dsthao)) { |
@@ -239,14 +241,14 @@ static int mip6_destopt_reject(struct xfrm_state *x, struct sk_buff *skb, struct | |||
239 | sizeof(sel.saddr)); | 241 | sizeof(sel.saddr)); |
240 | sel.prefixlen_s = 128; | 242 | sel.prefixlen_s = 128; |
241 | sel.family = AF_INET6; | 243 | sel.family = AF_INET6; |
242 | sel.proto = fl->proto; | 244 | sel.proto = fl6->flowi6_proto; |
243 | sel.dport = xfrm_flowi_dport(fl); | 245 | sel.dport = xfrm_flowi_dport(fl, &fl6->uli); |
244 | if (sel.dport) | 246 | if (sel.dport) |
245 | sel.dport_mask = htons(~0); | 247 | sel.dport_mask = htons(~0); |
246 | sel.sport = xfrm_flowi_sport(fl); | 248 | sel.sport = xfrm_flowi_sport(fl, &fl6->uli); |
247 | if (sel.sport) | 249 | if (sel.sport) |
248 | sel.sport_mask = htons(~0); | 250 | sel.sport_mask = htons(~0); |
249 | sel.ifindex = fl->oif; | 251 | sel.ifindex = fl6->flowi6_oif; |
250 | 252 | ||
251 | err = km_report(net, IPPROTO_DSTOPTS, &sel, | 253 | err = km_report(net, IPPROTO_DSTOPTS, &sel, |
252 | (hao ? (xfrm_address_t *)&hao->addr : NULL)); | 254 | (hao ? (xfrm_address_t *)&hao->addr : NULL)); |
@@ -347,7 +349,7 @@ static const struct xfrm_type mip6_destopt_type = | |||
347 | 349 | ||
348 | static int mip6_rthdr_input(struct xfrm_state *x, struct sk_buff *skb) | 350 | static int mip6_rthdr_input(struct xfrm_state *x, struct sk_buff *skb) |
349 | { | 351 | { |
350 | struct ipv6hdr *iph = ipv6_hdr(skb); | 352 | const struct ipv6hdr *iph = ipv6_hdr(skb); |
351 | struct rt2_hdr *rt2 = (struct rt2_hdr *)skb->data; | 353 | struct rt2_hdr *rt2 = (struct rt2_hdr *)skb->data; |
352 | int err = rt2->rt_hdr.nexthdr; | 354 | int err = rt2->rt_hdr.nexthdr; |
353 | 355 | ||