mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-14 17:14:09 +00:00
[IPV6] NDISC: Take source address into account for redirects.
Signed-off-by: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org> Signed-off-by: Ville Nuorvala <vnuorval@tcs.hut.fi> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
a57d27fc71
commit
5e032e32ec
@ -110,6 +110,7 @@ extern int rt6_route_rcv(struct net_device *dev,
|
||||
struct in6_addr *gwaddr);
|
||||
|
||||
extern void rt6_redirect(struct in6_addr *dest,
|
||||
struct in6_addr *src,
|
||||
struct in6_addr *saddr,
|
||||
struct neighbour *neigh,
|
||||
u8 *lladdr,
|
||||
|
@ -1346,7 +1346,8 @@ static void ndisc_redirect_rcv(struct sk_buff *skb)
|
||||
|
||||
neigh = __neigh_lookup(&nd_tbl, target, skb->dev, 1);
|
||||
if (neigh) {
|
||||
rt6_redirect(dest, &skb->nh.ipv6h->saddr, neigh, lladdr,
|
||||
rt6_redirect(dest, &skb->nh.ipv6h->daddr,
|
||||
&skb->nh.ipv6h->saddr, neigh, lladdr,
|
||||
on_link);
|
||||
neigh_release(neigh);
|
||||
}
|
||||
|
@ -1279,7 +1279,8 @@ static int ip6_route_del(struct fib6_config *cfg)
|
||||
/*
|
||||
* Handle redirects
|
||||
*/
|
||||
void rt6_redirect(struct in6_addr *dest, struct in6_addr *saddr,
|
||||
void rt6_redirect(struct in6_addr *dest, struct in6_addr *src,
|
||||
struct in6_addr *saddr,
|
||||
struct neighbour *neigh, u8 *lladdr, int on_link)
|
||||
{
|
||||
struct rt6_info *rt, *nrt = NULL;
|
||||
@ -1304,7 +1305,7 @@ void rt6_redirect(struct in6_addr *dest, struct in6_addr *saddr,
|
||||
*/
|
||||
|
||||
read_lock_bh(&table->tb6_lock);
|
||||
fn = fib6_lookup(&table->tb6_root, dest, NULL);
|
||||
fn = fib6_lookup(&table->tb6_root, dest, src);
|
||||
restart:
|
||||
for (rt = fn->leaf; rt; rt = rt->u.next) {
|
||||
/*
|
||||
|
Loading…
x
Reference in New Issue
Block a user