Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 34739
b: refs/heads/master
c: 62dd931
h: refs/heads/master
i:
  34737: b75ed38
  34735: 951fd96
v: v3
  • Loading branch information
Ville Nuorvala authored and David S. Miller committed Sep 22, 2006
1 parent e08e6fb commit efd5fd8
Show file tree
Hide file tree
Showing 4 changed files with 21 additions and 7 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 5f3e6e9e19f50a6910aec2dbd479187aabba04b7
refs/heads/master: 62dd93181aaa1d5a501a9cebcb254f44b8a48af7
1 change: 1 addition & 0 deletions trunk/include/net/neighbour.h
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,7 @@ struct pneigh_entry
{
struct pneigh_entry *next;
struct net_device *dev;
u8 flags;
u8 key[0];
};

Expand Down
11 changes: 8 additions & 3 deletions trunk/net/core/neighbour.c
Original file line number Diff line number Diff line change
Expand Up @@ -1544,9 +1544,14 @@ int neigh_add(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg)
lladdr = tb[NDA_LLADDR] ? nla_data(tb[NDA_LLADDR]) : NULL;

if (ndm->ndm_flags & NTF_PROXY) {
err = 0;
if (pneigh_lookup(tbl, dst, dev, 1) == NULL)
err = -ENOBUFS;
struct pneigh_entry *pn;

err = -ENOBUFS;
pn = pneigh_lookup(tbl, dst, dev, 1);
if (pn) {
pn->flags = ndm->ndm_flags;
err = 0;
}
goto out_dev_put;
}

Expand Down
14 changes: 11 additions & 3 deletions trunk/net/ipv6/ndisc.c
Original file line number Diff line number Diff line change
Expand Up @@ -736,8 +736,10 @@ static void ndisc_recv_ns(struct sk_buff *skb)
struct inet6_ifaddr *ifp;
struct inet6_dev *idev = NULL;
struct neighbour *neigh;
struct pneigh_entry *pneigh = NULL;
int dad = ipv6_addr_any(saddr);
int inc;
int is_router;

if (ipv6_addr_is_multicast(&msg->target)) {
ND_PRINTK2(KERN_WARNING
Expand Down Expand Up @@ -822,7 +824,8 @@ static void ndisc_recv_ns(struct sk_buff *skb)

if (ipv6_chk_acast_addr(dev, &msg->target) ||
(idev->cnf.forwarding &&
pneigh_lookup(&nd_tbl, &msg->target, dev, 0))) {
(pneigh = pneigh_lookup(&nd_tbl,
&msg->target, dev, 0)) != NULL)) {
if (!(NEIGH_CB(skb)->flags & LOCALLY_ENQUEUED) &&
skb->pkt_type != PACKET_HOST &&
inc != 0 &&
Expand All @@ -843,12 +846,17 @@ static void ndisc_recv_ns(struct sk_buff *skb)
goto out;
}

if (pneigh)
is_router = pneigh->flags & NTF_ROUTER;
else
is_router = idev->cnf.forwarding;

if (dad) {
struct in6_addr maddr;

ipv6_addr_all_nodes(&maddr);
ndisc_send_na(dev, NULL, &maddr, &msg->target,
idev->cnf.forwarding, 0, (ifp != NULL), 1);
is_router, 0, (ifp != NULL), 1);
goto out;
}

Expand All @@ -869,7 +877,7 @@ static void ndisc_recv_ns(struct sk_buff *skb)
NEIGH_UPDATE_F_OVERRIDE);
if (neigh || !dev->hard_header) {
ndisc_send_na(dev, neigh, saddr, &msg->target,
idev->cnf.forwarding,
is_router,
1, (ifp != NULL && inc), inc);
if (neigh)
neigh_release(neigh);
Expand Down

0 comments on commit efd5fd8

Please sign in to comment.