Skip to content

Commit

Permalink
[IPV6]: Don't forward packets to proxied link-local address.
Browse files Browse the repository at this point in the history
Proxying router can't forward traffic sent to link-local address, so signal
the sender and discard the packet. This behavior is clarified by Mobile IPv6
specification (RFC3775) but might be required for all proxying router.
Based on MIPL2 kernel patch.

Signed-off-by: Ville Nuorvala <vnuorval@tcs.hut.fi>
Signed-off-by: Masahide NAKAMURA <nakam@linux-ipv6.org>
Signed-off-by: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
  • Loading branch information
Ville Nuorvala authored and David S. Miller committed Sep 22, 2006
1 parent e21e0b5 commit 74553b0
Showing 1 changed file with 16 additions and 1 deletion.
17 changes: 16 additions & 1 deletion net/ipv6/ip6_output.c
Original file line number Diff line number Diff line change
Expand Up @@ -345,6 +345,16 @@ static int ip6_forward_proxy_check(struct sk_buff *skb)
}
}

/*
* The proxying router can't forward traffic sent to a link-local
* address, so signal the sender and discard the packet. This
* behavior is clarified by the MIPv6 specification.
*/
if (ipv6_addr_type(&hdr->daddr) & IPV6_ADDR_LINKLOCAL) {
dst_link_failure(skb);
return -1;
}

return 0;
}

Expand Down Expand Up @@ -403,8 +413,13 @@ int ip6_forward(struct sk_buff *skb)
}

if (pneigh_lookup(&nd_tbl, &hdr->daddr, skb->dev, 0)) {
if (ip6_forward_proxy_check(skb))
int proxied = ip6_forward_proxy_check(skb);
if (proxied > 0)
return ip6_input(skb);
else if (proxied < 0) {
IP6_INC_STATS(IPSTATS_MIB_INDISCARDS);
goto drop;
}
}

if (!xfrm6_route_forward(skb)) {
Expand Down

0 comments on commit 74553b0

Please sign in to comment.