projects
/
cascardo
/
linux.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
ipv6: Convert to use flowi6 where applicable.
[cascardo/linux.git]
/
net
/
ipv6
/
ndisc.c
diff --git
a/net/ipv6/ndisc.c
b/net/ipv6/ndisc.c
index
2342545
..
0e49c9d
100644
(file)
--- a/
net/ipv6/ndisc.c
+++ b/
net/ipv6/ndisc.c
@@
-511,7
+511,7
@@
void ndisc_send_skb(struct sk_buff *skb,
const struct in6_addr *saddr,
struct icmp6hdr *icmp6h)
{
const struct in6_addr *saddr,
struct icmp6hdr *icmp6h)
{
- struct flowi
fl
;
+ struct flowi
6 fl6
;
struct dst_entry *dst;
struct net *net = dev_net(dev);
struct sock *sk = net->ipv6.ndisc_sk;
struct dst_entry *dst;
struct net *net = dev_net(dev);
struct sock *sk = net->ipv6.ndisc_sk;
@@
-521,7
+521,7
@@
void ndisc_send_skb(struct sk_buff *skb,
type = icmp6h->icmp6_type;
type = icmp6h->icmp6_type;
- icmpv6_flow_init(sk, &fl, type, saddr, daddr, dev->ifindex);
+ icmpv6_flow_init(sk, &fl
6
, type, saddr, daddr, dev->ifindex);
dst = icmp6_dst_alloc(dev, neigh, daddr);
if (!dst) {
dst = icmp6_dst_alloc(dev, neigh, daddr);
if (!dst) {
@@
-529,8
+529,8
@@
void ndisc_send_skb(struct sk_buff *skb,
return;
}
return;
}
-
err = xfrm_lookup(net, &dst, &fl
, NULL, 0);
- if (
err < 0
) {
+
dst = xfrm_lookup(net, dst, flowi6_to_flowi(&fl6)
, NULL, 0);
+ if (
IS_ERR(dst)
) {
kfree_skb(skb);
return;
}
kfree_skb(skb);
return;
}
@@
-1515,7
+1515,7
@@
void ndisc_send_redirect(struct sk_buff *skb, struct neighbour *neigh,
struct rt6_info *rt;
struct dst_entry *dst;
struct inet6_dev *idev;
struct rt6_info *rt;
struct dst_entry *dst;
struct inet6_dev *idev;
- struct flowi
fl
;
+ struct flowi
6 fl6
;
u8 *opt;
int rd_len;
int err;
u8 *opt;
int rd_len;
int err;
@@
-1535,15
+1535,15
@@
void ndisc_send_redirect(struct sk_buff *skb, struct neighbour *neigh,
return;
}
return;
}
- icmpv6_flow_init(sk, &fl, NDISC_REDIRECT,
+ icmpv6_flow_init(sk, &fl
6
, NDISC_REDIRECT,
&saddr_buf, &ipv6_hdr(skb)->saddr, dev->ifindex);
&saddr_buf, &ipv6_hdr(skb)->saddr, dev->ifindex);
- dst = ip6_route_output(net, NULL, &fl);
+ dst = ip6_route_output(net, NULL, &fl
6
);
if (dst == NULL)
return;
if (dst == NULL)
return;
-
err = xfrm_lookup(net, &dst, &fl
, NULL, 0);
- if (
err
)
+
dst = xfrm_lookup(net, dst, flowi6_to_flowi(&fl6)
, NULL, 0);
+ if (
IS_ERR(dst)
)
return;
rt = (struct rt6_info *) dst;
return;
rt = (struct rt6_info *) dst;
@@
-1553,7
+1553,9
@@
void ndisc_send_redirect(struct sk_buff *skb, struct neighbour *neigh,
"ICMPv6 Redirect: destination is not a neighbour.\n");
goto release;
}
"ICMPv6 Redirect: destination is not a neighbour.\n");
goto release;
}
- if (!xrlim_allow(dst, 1*HZ))
+ if (!rt->rt6i_peer)
+ rt6_bind_peer(rt, 1);
+ if (inet_peer_xrlim_allow(rt->rt6i_peer, 1*HZ))
goto release;
if (dev->addr_len) {
goto release;
if (dev->addr_len) {