2014-07-25 16:40:27

by Jun Zhao

[permalink] [raw]
Subject: [PATCH 1/1] neighbour : fix ndm_type type error issue

ndm_type means L3 address type, in neighbour proxy and vxlan, it's RTN_UNICAST.
NDA_DST is for netlink TLV type, hence it's not right value in this context.

Signed-off-by: Jun Zhao <[email protected]>
---
drivers/net/vxlan.c | 2 +-
net/core/neighbour.c | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c
index d3f3e5d..1fb7b37 100644
--- a/drivers/net/vxlan.c
+++ b/drivers/net/vxlan.c
@@ -340,7 +340,7 @@ static int vxlan_fdb_info(struct sk_buff *skb, struct vxlan_dev *vxlan,
ndm->ndm_state = fdb->state;
ndm->ndm_ifindex = vxlan->dev->ifindex;
ndm->ndm_flags = fdb->flags;
- ndm->ndm_type = NDA_DST;
+ ndm->ndm_type = RTN_UNICAST;

if (send_eth && nla_put(skb, NDA_LLADDR, ETH_ALEN, &fdb->eth_addr))
goto nla_put_failure;
diff --git a/net/core/neighbour.c b/net/core/neighbour.c
index 559890b..ef31fef 100644
--- a/net/core/neighbour.c
+++ b/net/core/neighbour.c
@@ -2249,7 +2249,7 @@ static int pneigh_fill_info(struct sk_buff *skb, struct pneigh_entry *pn,
ndm->ndm_pad1 = 0;
ndm->ndm_pad2 = 0;
ndm->ndm_flags = pn->flags | NTF_PROXY;
- ndm->ndm_type = NDA_DST;
+ ndm->ndm_type = RTN_UNICAST;
ndm->ndm_ifindex = pn->dev->ifindex;
ndm->ndm_state = NUD_NONE;

--
1.7.10.4


2014-07-25 23:21:51

by Cong Wang

[permalink] [raw]
Subject: Re: [PATCH 1/1] neighbour : fix ndm_type type error issue

On Fri, Jul 25, 2014 at 9:38 AM, Jun Zhao <[email protected]> wrote:
> ndm_type means L3 address type, in neighbour proxy and vxlan, it's RTN_UNICAST.
> NDA_DST is for netlink TLV type, hence it's not right value in this context.
>

Looks correct to me, at least libnl uses RTN_* for ndm_type.

2014-07-25 23:25:00

by Hannes Frederic Sowa

[permalink] [raw]
Subject: Re: [PATCH 1/1] neighbour : fix ndm_type type error issue

On Fri, Jul 25, 2014, at 18:38, Jun Zhao wrote:
> ndm_type means L3 address type, in neighbour proxy and vxlan, it's
> RTN_UNICAST.
> NDA_DST is for netlink TLV type, hence it's not right value in this
> context.

The value of NDA_DST == RTN_UNICAST, otherwise we couldn't do this
change as it would alter e.g. arpd behavior.

Acked-by: Hannes Frederic Sowa <[email protected]>

Thanks,
Hannes

2014-07-26 00:30:31

by Jun Zhao

[permalink] [raw]
Subject: Re: [PATCH 1/1] neighbour : fix ndm_type type error issue

On Sat, 2014-07-26 at 01:24 +0200, Hannes Frederic Sowa wrote:
> On Fri, Jul 25, 2014, at 18:38, Jun Zhao wrote:
> > ndm_type means L3 address type, in neighbour proxy and vxlan, it's
> > RTN_UNICAST.
> > NDA_DST is for netlink TLV type, hence it's not right value in this
> > context.
>
> The value of NDA_DST == RTN_UNICAST, otherwise we couldn't do this
> change as it would alter e.g. arpd behavior.
>
> Acked-by: Hannes Frederic Sowa <[email protected]>
>
> Thanks,
> Hannes

But I think NDA_DST/RTN_UNICAST have different means in this context,
even though the value of NDA_DST == RTN_UNICAST.

For arp proxy/NDP proxy context, ndm_type means the peer L3 address,
so RTN_UNICAST is the right value. For vxlan have similar semantic for
remote ip.

BTW: In the source code, implicit think NDA_DST == RTN_UNICAST maybe
not a good idea when we don't have a comment or the other explain.

2014-07-26 13:42:52

by Hannes Frederic Sowa

[permalink] [raw]
Subject: Re: [PATCH 1/1] neighbour : fix ndm_type type error issue

Hi,

On Sat, Jul 26, 2014, at 02:29, Jun Zhao wrote:
> On Sat, 2014-07-26 at 01:24 +0200, Hannes Frederic Sowa wrote:
> > On Fri, Jul 25, 2014, at 18:38, Jun Zhao wrote:
> > > ndm_type means L3 address type, in neighbour proxy and vxlan, it's
> > > RTN_UNICAST.
> > > NDA_DST is for netlink TLV type, hence it's not right value in this
> > > context.
> >
> > The value of NDA_DST == RTN_UNICAST, otherwise we couldn't do this
> > change as it would alter e.g. arpd behavior.
> >
> > Acked-by: Hannes Frederic Sowa <[email protected]>
> >
> > Thanks,
> > Hannes
>
> But I think NDA_DST/RTN_UNICAST have different means in this context,
> even though the value of NDA_DST == RTN_UNICAST.
>
> For arp proxy/NDP proxy context, ndm_type means the peer L3 address,
> so RTN_UNICAST is the right value. For vxlan have similar semantic for
> remote ip.
>
> BTW: In the source code, implicit think NDA_DST == RTN_UNICAST maybe
> not a good idea when we don't have a comment or the other explain.

I am totally with you and think your change is good, that's why I also
gave my ack to your patch.

My comment above was about my concerns regarding making a user space
visible change, which in the end could alter the behavior of already
existing software.

Developers maybe have debugged code and seen some different value being
propagated from the kernel and this software could now break if we would
change the value after all those years.

Bye,
Hannes

2014-07-26 15:06:28

by Jun Zhao

[permalink] [raw]
Subject: Re: [PATCH 1/1] neighbour : fix ndm_type type error issue

Hi, Hannes

On Sat, 2014-07-26 at 15:42 +0200, Hannes Frederic Sowa wrote:
> Hi,
>
> On Sat, Jul 26, 2014, at 02:29, Jun Zhao wrote:
> > On Sat, 2014-07-26 at 01:24 +0200, Hannes Frederic Sowa wrote:
> > > On Fri, Jul 25, 2014, at 18:38, Jun Zhao wrote:
> > > > ndm_type means L3 address type, in neighbour proxy and vxlan, it's
> > > > RTN_UNICAST.
> > > > NDA_DST is for netlink TLV type, hence it's not right value in this
> > > > context.
> > >
> > > The value of NDA_DST == RTN_UNICAST, otherwise we couldn't do this
> > > change as it would alter e.g. arpd behavior.
> > >
> > > Acked-by: Hannes Frederic Sowa <[email protected]>
> > >
> > > Thanks,
> > > Hannes
> >
> > But I think NDA_DST/RTN_UNICAST have different means in this context,
> > even though the value of NDA_DST == RTN_UNICAST.
> >
> > For arp proxy/NDP proxy context, ndm_type means the peer L3 address,
> > so RTN_UNICAST is the right value. For vxlan have similar semantic for
> > remote ip.
> >
> > BTW: In the source code, implicit think NDA_DST == RTN_UNICAST maybe
> > not a good idea when we don't have a comment or the other explain.
>
> I am totally with you and think your change is good, that's why I also
> gave my ack to your patch.
>
> My comment above was about my concerns regarding making a user space
> visible change, which in the end could alter the behavior of already
> existing software.
>
> Developers maybe have debugged code and seen some different value being
> propagated from the kernel and this software could now break if we would
> change the value after all those years.
>
> Bye,
> Hannes

Lucky, NDA_DST == RTN_UNICAST is true really in source code :)

/* rtm_type */

enum {
RTN_UNSPEC,
RTN_UNICAST,
...
}

enum {
NDA_UNSPEC,
NDA_DST,
...
}

2014-07-29 00:52:40

by David Miller

[permalink] [raw]
Subject: Re: [PATCH 1/1] neighbour : fix ndm_type type error issue

From: Jun Zhao <[email protected]>
Date: Sat, 26 Jul 2014 00:38:59 +0800

> ndm_type means L3 address type, in neighbour proxy and vxlan, it's RTN_UNICAST.
> NDA_DST is for netlink TLV type, hence it's not right value in this context.
>
> Signed-off-by: Jun Zhao <[email protected]>

This change is definitely correct, applied, thanks.