All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] Netlink messages for multicast HW addr programming
@ 2016-01-21 11:47 Patrick Ruddy
  2016-01-21 20:04 ` Jiri Pirko
  0 siblings, 1 reply; 9+ messages in thread
From: Patrick Ruddy @ 2016-01-21 11:47 UTC (permalink / raw)
  To: netdev; +Cc: Patrick Ruddy

Add RTM_NEWADDR and RTM_DELADDR netlink messages to indicate
interest in specific multicast hardware addresses. These messages
are sent when addressed are added or deleted from the appropriate
interface driver.

Signed-off-by: Patrick Ruddy <pruddy@brocade.com>

diff --git a/net/core/dev_addr_lists.c b/net/core/dev_addr_lists.c
index c0548d2..a0ebadd 100644
--- a/net/core/dev_addr_lists.c
+++ b/net/core/dev_addr_lists.c
@@ -12,6 +12,7 @@
  */
 
 #include <linux/netdevice.h>
+#include <net/netlink.h>
 #include <linux/rtnetlink.h>
 #include <linux/export.h>
 #include <linux/list.h>
@@ -661,6 +662,62 @@ out:
 }
 EXPORT_SYMBOL(dev_mc_add_excl);
 
+static int fill_addr(struct sk_buff *skb, struct net_device *dev,
+		     const unsigned char *addr, int type)
+{
+	struct nlmsghdr *nlh;
+	struct ifaddrmsg *ifm;
+
+	nlh = nlmsg_put(skb, 0, 0, type, sizeof(*ifm), 0);
+	if (nlh == NULL)
+		return -EMSGSIZE;
+
+	ifm = nlmsg_data(nlh);
+	ifm->ifa_family = AF_UNSPEC;
+	ifm->ifa_prefixlen = 0;
+	ifm->ifa_flags = IFA_F_PERMANENT;
+	ifm->ifa_scope = RT_SCOPE_LINK;
+	ifm->ifa_index = dev->ifindex;
+	if (nla_put(skb, IFA_ADDRESS, dev->addr_len, addr))
+		goto nla_put_failure;
+	nlmsg_end(skb, nlh);
+	return 0;
+
+nla_put_failure:
+	nlmsg_cancel(skb, nlh);
+	return -EMSGSIZE;
+}
+
+static inline size_t addr_nlmsg_size(void)
+{
+	return NLMSG_ALIGN(sizeof(struct ifaddrmsg))
+		+ nla_total_size(MAX_ADDR_LEN);
+}
+
+static void mc_addr_notify(struct net_device *dev, const unsigned char * addr,
+			   int type)
+{
+	struct net *net = dev_net(dev);
+	struct sk_buff *skb;
+	int err = -ENOBUFS;
+
+	skb = nlmsg_new(addr_nlmsg_size(), GFP_ATOMIC);
+	if (skb == NULL)
+		goto errout;
+
+	err = fill_addr(skb, dev, addr, type);
+	if (err < 0) {
+		WARN_ON(err == -EMSGSIZE);
+		kfree_skb(skb);
+		goto errout;
+	}
+	rtnl_notify(skb, net, 0, RTNLGRP_LINK, NULL, GFP_ATOMIC);
+	return;
+errout:
+	if (err < 0)
+		rtnl_set_sk_err(net, RTNLGRP_LINK, err);
+}
+
 static int __dev_mc_add(struct net_device *dev, const unsigned char *addr,
 			bool global)
 {
@@ -669,8 +726,10 @@ static int __dev_mc_add(struct net_device *dev, const unsigned char *addr,
 	netif_addr_lock_bh(dev);
 	err = __hw_addr_add_ex(&dev->mc, addr, dev->addr_len,
 			       NETDEV_HW_ADDR_T_MULTICAST, global, false, 0);
-	if (!err)
+	if (!err) {
 		__dev_set_rx_mode(dev);
+		mc_addr_notify(dev, addr, RTM_NEWADDR);
+	}
 	netif_addr_unlock_bh(dev);
 	return err;
 }
@@ -709,8 +768,10 @@ static int __dev_mc_del(struct net_device *dev, const unsigned char *addr,
 	netif_addr_lock_bh(dev);
 	err = __hw_addr_del_ex(&dev->mc, addr, dev->addr_len,
 			       NETDEV_HW_ADDR_T_MULTICAST, global, false);
-	if (!err)
+	if (!err) {
 		__dev_set_rx_mode(dev);
+		mc_addr_notify(dev, addr, RTM_DELADDR);
+	}
 	netif_addr_unlock_bh(dev);
 	return err;
 }
-- 
2.1.4

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: [PATCH] Netlink messages for multicast HW addr programming
  2016-01-21 11:47 [PATCH] Netlink messages for multicast HW addr programming Patrick Ruddy
@ 2016-01-21 20:04 ` Jiri Pirko
  2016-01-22 14:51   ` Patrick Ruddy
  0 siblings, 1 reply; 9+ messages in thread
From: Jiri Pirko @ 2016-01-21 20:04 UTC (permalink / raw)
  To: Patrick Ruddy; +Cc: netdev

Thu, Jan 21, 2016 at 12:47:54PM CET, pruddy@brocade.com wrote:
>Add RTM_NEWADDR and RTM_DELADDR netlink messages to indicate
>interest in specific multicast hardware addresses. These messages
>are sent when addressed are added or deleted from the appropriate
>interface driver.
>
>Signed-off-by: Patrick Ruddy <pruddy@brocade.com>
>
>diff --git a/net/core/dev_addr_lists.c b/net/core/dev_addr_lists.c
>index c0548d2..a0ebadd 100644
>--- a/net/core/dev_addr_lists.c
>+++ b/net/core/dev_addr_lists.c
>@@ -12,6 +12,7 @@
>  */
> 
> #include <linux/netdevice.h>
>+#include <net/netlink.h>
> #include <linux/rtnetlink.h>
> #include <linux/export.h>
> #include <linux/list.h>
>@@ -661,6 +662,62 @@ out:
> }
> EXPORT_SYMBOL(dev_mc_add_excl);
> 
>+static int fill_addr(struct sk_buff *skb, struct net_device *dev,
>+		     const unsigned char *addr, int type)
>+{
>+	struct nlmsghdr *nlh;
>+	struct ifaddrmsg *ifm;
>+
>+	nlh = nlmsg_put(skb, 0, 0, type, sizeof(*ifm), 0);
>+	if (nlh == NULL)
>+		return -EMSGSIZE;
>+
>+	ifm = nlmsg_data(nlh);
>+	ifm->ifa_family = AF_UNSPEC;
>+	ifm->ifa_prefixlen = 0;
>+	ifm->ifa_flags = IFA_F_PERMANENT;
>+	ifm->ifa_scope = RT_SCOPE_LINK;
>+	ifm->ifa_index = dev->ifindex;
>+	if (nla_put(skb, IFA_ADDRESS, dev->addr_len, addr))
>+		goto nla_put_failure;
>+	nlmsg_end(skb, nlh);

How can userspace tell if this is a multicast addr? Also, why not add
notifications for unicast addrs so we handle both the same?

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH] Netlink messages for multicast HW addr programming
  2016-01-21 20:04 ` Jiri Pirko
@ 2016-01-22 14:51   ` Patrick Ruddy
  2016-01-22 15:05     ` Jiri Pirko
  0 siblings, 1 reply; 9+ messages in thread
From: Patrick Ruddy @ 2016-01-22 14:51 UTC (permalink / raw)
  To: jiri; +Cc: netdev, David Stapleton, Olufemi Komolafe, Stephen Hemminger

On Thu, 2016-01-21 at 21:04 +0100, Jiri Pirko wrote:
> Thu, Jan 21, 2016 at 12:47:54PM CET, pruddy@brocade.com wrote:
> >Add RTM_NEWADDR and RTM_DELADDR netlink messages to indicate
> >interest in specific multicast hardware addresses. These messages
> >are sent when addressed are added or deleted from the appropriate
> >interface driver.
> >
> >Signed-off-by: Patrick Ruddy <pruddy@brocade.com>
> >
> >diff --git a/net/core/dev_addr_lists.c b/net/core/dev_addr_lists.c
> >index c0548d2..a0ebadd 100644
> >--- a/net/core/dev_addr_lists.c
> >+++ b/net/core/dev_addr_lists.c
> >@@ -12,6 +12,7 @@
> >  */
> > 
> > #include <linux/netdevice.h>
> >+#include <net/netlink.h>
> > #include <linux/rtnetlink.h>
> > #include <linux/export.h>
> > #include <linux/list.h>
> >@@ -661,6 +662,62 @@ out:
> > }
> > EXPORT_SYMBOL(dev_mc_add_excl);
> > 
> >+static int fill_addr(struct sk_buff *skb, struct net_device *dev,
> >+		     const unsigned char *addr, int type)
> >+{
> >+	struct nlmsghdr *nlh;
> >+	struct ifaddrmsg *ifm;
> >+
> >+	nlh = nlmsg_put(skb, 0, 0, type, sizeof(*ifm), 0);
> >+	if (nlh == NULL)
> >+		return -EMSGSIZE;
> >+
> >+	ifm = nlmsg_data(nlh);
> >+	ifm->ifa_family = AF_UNSPEC;
> >+	ifm->ifa_prefixlen = 0;
> >+	ifm->ifa_flags = IFA_F_PERMANENT;
> >+	ifm->ifa_scope = RT_SCOPE_LINK;
> >+	ifm->ifa_index = dev->ifindex;
> >+	if (nla_put(skb, IFA_ADDRESS, dev->addr_len, addr))
> >+		goto nla_put_failure;
> >+	nlmsg_end(skb, nlh);
> 
> How can userspace tell if this is a multicast addr? Also, why not add
> notifications for unicast addrs so we handle both the same?

I am only using this RTM_NEW/DELADDR AF_UNSPEC message for multicast
addresses. I understand that the unicast addresses are notified in the
RTM_NEW/DELLINK.

-pr

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH] Netlink messages for multicast HW addr programming
  2016-01-22 14:51   ` Patrick Ruddy
@ 2016-01-22 15:05     ` Jiri Pirko
  2016-01-22 15:49       ` Patrick Ruddy
  0 siblings, 1 reply; 9+ messages in thread
From: Jiri Pirko @ 2016-01-22 15:05 UTC (permalink / raw)
  To: Patrick Ruddy
  Cc: netdev, David Stapleton, Olufemi Komolafe, Stephen Hemminger

Fri, Jan 22, 2016 at 03:51:55PM CET, pruddy@Brocade.com wrote:
>On Thu, 2016-01-21 at 21:04 +0100, Jiri Pirko wrote:
>> Thu, Jan 21, 2016 at 12:47:54PM CET, pruddy@brocade.com wrote:
>> >Add RTM_NEWADDR and RTM_DELADDR netlink messages to indicate
>> >interest in specific multicast hardware addresses. These messages
>> >are sent when addressed are added or deleted from the appropriate
>> >interface driver.
>> >
>> >Signed-off-by: Patrick Ruddy <pruddy@brocade.com>
>> >
>> >diff --git a/net/core/dev_addr_lists.c b/net/core/dev_addr_lists.c
>> >index c0548d2..a0ebadd 100644
>> >--- a/net/core/dev_addr_lists.c
>> >+++ b/net/core/dev_addr_lists.c
>> >@@ -12,6 +12,7 @@
>> >  */
>> > 
>> > #include <linux/netdevice.h>
>> >+#include <net/netlink.h>
>> > #include <linux/rtnetlink.h>
>> > #include <linux/export.h>
>> > #include <linux/list.h>
>> >@@ -661,6 +662,62 @@ out:
>> > }
>> > EXPORT_SYMBOL(dev_mc_add_excl);
>> > 
>> >+static int fill_addr(struct sk_buff *skb, struct net_device *dev,
>> >+		     const unsigned char *addr, int type)
>> >+{
>> >+	struct nlmsghdr *nlh;
>> >+	struct ifaddrmsg *ifm;
>> >+
>> >+	nlh = nlmsg_put(skb, 0, 0, type, sizeof(*ifm), 0);
>> >+	if (nlh == NULL)
>> >+		return -EMSGSIZE;
>> >+
>> >+	ifm = nlmsg_data(nlh);
>> >+	ifm->ifa_family = AF_UNSPEC;
>> >+	ifm->ifa_prefixlen = 0;
>> >+	ifm->ifa_flags = IFA_F_PERMANENT;
>> >+	ifm->ifa_scope = RT_SCOPE_LINK;
>> >+	ifm->ifa_index = dev->ifindex;
>> >+	if (nla_put(skb, IFA_ADDRESS, dev->addr_len, addr))
>> >+		goto nla_put_failure;
>> >+	nlmsg_end(skb, nlh);
>> 
>> How can userspace tell if this is a multicast addr? Also, why not add
>> notifications for unicast addrs so we handle both the same?
>
>I am only using this RTM_NEW/DELADDR AF_UNSPEC message for multicast
>addresses. I understand that the unicast addresses are notified in the
>RTM_NEW/DELLINK.

dev->dev_addr is notified by that. UC addresses do not have any
notification now.

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH] Netlink messages for multicast HW addr programming
  2016-01-22 15:05     ` Jiri Pirko
@ 2016-01-22 15:49       ` Patrick Ruddy
  2016-01-23  7:53         ` Jiri Pirko
  0 siblings, 1 reply; 9+ messages in thread
From: Patrick Ruddy @ 2016-01-22 15:49 UTC (permalink / raw)
  To: jiri; +Cc: netdev, David Stapleton, Olufemi Komolafe, Stephen Hemminger

On Fri, 2016-01-22 at 16:05 +0100, Jiri Pirko wrote:
> Fri, Jan 22, 2016 at 03:51:55PM CET, pruddy@Brocade.com wrote:
> >On Thu, 2016-01-21 at 21:04 +0100, Jiri Pirko wrote:
> >> Thu, Jan 21, 2016 at 12:47:54PM CET, pruddy@brocade.com wrote:
> >> >Add RTM_NEWADDR and RTM_DELADDR netlink messages to indicate
> >> >interest in specific multicast hardware addresses. These messages
> >> >are sent when addressed are added or deleted from the appropriate
> >> >interface driver.
> >> >
> >> >Signed-off-by: Patrick Ruddy <pruddy@brocade.com>
> >> >
> >> >diff --git a/net/core/dev_addr_lists.c b/net/core/dev_addr_lists.c
> >> >index c0548d2..a0ebadd 100644
> >> >--- a/net/core/dev_addr_lists.c
> >> >+++ b/net/core/dev_addr_lists.c
> >> >@@ -12,6 +12,7 @@
> >> >  */
> >> > 
> >> > #include <linux/netdevice.h>
> >> >+#include <net/netlink.h>
> >> > #include <linux/rtnetlink.h>
> >> > #include <linux/export.h>
> >> > #include <linux/list.h>
> >> >@@ -661,6 +662,62 @@ out:
> >> > }
> >> > EXPORT_SYMBOL(dev_mc_add_excl);
> >> > 
> >> >+static int fill_addr(struct sk_buff *skb, struct net_device *dev,
> >> >+		     const unsigned char *addr, int type)
> >> >+{
> >> >+	struct nlmsghdr *nlh;
> >> >+	struct ifaddrmsg *ifm;
> >> >+
> >> >+	nlh = nlmsg_put(skb, 0, 0, type, sizeof(*ifm), 0);
> >> >+	if (nlh == NULL)
> >> >+		return -EMSGSIZE;
> >> >+
> >> >+	ifm = nlmsg_data(nlh);
> >> >+	ifm->ifa_family = AF_UNSPEC;
> >> >+	ifm->ifa_prefixlen = 0;
> >> >+	ifm->ifa_flags = IFA_F_PERMANENT;
> >> >+	ifm->ifa_scope = RT_SCOPE_LINK;
> >> >+	ifm->ifa_index = dev->ifindex;
> >> >+	if (nla_put(skb, IFA_ADDRESS, dev->addr_len, addr))
> >> >+		goto nla_put_failure;
> >> >+	nlmsg_end(skb, nlh);
> >> 
> >> How can userspace tell if this is a multicast addr? Also, why not add
> >> notifications for unicast addrs so we handle both the same?
> >
> >I am only using this RTM_NEW/DELADDR AF_UNSPEC message for multicast
> >addresses. I understand that the unicast addresses are notified in the
> >RTM_NEW/DELLINK.
> 
> dev->dev_addr is notified by that. UC addresses do not have any
> notification now.
It is the multicast MAC address (ie the multicast equivalent of the
dev_addr) that we are notifying here right? Not L3 addresses.

-pr


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH] Netlink messages for multicast HW addr programming
  2016-01-22 15:49       ` Patrick Ruddy
@ 2016-01-23  7:53         ` Jiri Pirko
  2016-02-03 14:14           ` Patrick Ruddy
  0 siblings, 1 reply; 9+ messages in thread
From: Jiri Pirko @ 2016-01-23  7:53 UTC (permalink / raw)
  To: Patrick Ruddy
  Cc: netdev, David Stapleton, Olufemi Komolafe, Stephen Hemminger

Fri, Jan 22, 2016 at 04:49:36PM CET, pruddy@Brocade.com wrote:
>On Fri, 2016-01-22 at 16:05 +0100, Jiri Pirko wrote:
>> Fri, Jan 22, 2016 at 03:51:55PM CET, pruddy@Brocade.com wrote:
>> >On Thu, 2016-01-21 at 21:04 +0100, Jiri Pirko wrote:
>> >> Thu, Jan 21, 2016 at 12:47:54PM CET, pruddy@brocade.com wrote:
>> >> >Add RTM_NEWADDR and RTM_DELADDR netlink messages to indicate
>> >> >interest in specific multicast hardware addresses. These messages
>> >> >are sent when addressed are added or deleted from the appropriate
>> >> >interface driver.
>> >> >
>> >> >Signed-off-by: Patrick Ruddy <pruddy@brocade.com>
>> >> >
>> >> >diff --git a/net/core/dev_addr_lists.c b/net/core/dev_addr_lists.c
>> >> >index c0548d2..a0ebadd 100644
>> >> >--- a/net/core/dev_addr_lists.c
>> >> >+++ b/net/core/dev_addr_lists.c
>> >> >@@ -12,6 +12,7 @@
>> >> >  */
>> >> > 
>> >> > #include <linux/netdevice.h>
>> >> >+#include <net/netlink.h>
>> >> > #include <linux/rtnetlink.h>
>> >> > #include <linux/export.h>
>> >> > #include <linux/list.h>
>> >> >@@ -661,6 +662,62 @@ out:
>> >> > }
>> >> > EXPORT_SYMBOL(dev_mc_add_excl);
>> >> > 
>> >> >+static int fill_addr(struct sk_buff *skb, struct net_device *dev,
>> >> >+		     const unsigned char *addr, int type)
>> >> >+{
>> >> >+	struct nlmsghdr *nlh;
>> >> >+	struct ifaddrmsg *ifm;
>> >> >+
>> >> >+	nlh = nlmsg_put(skb, 0, 0, type, sizeof(*ifm), 0);
>> >> >+	if (nlh == NULL)
>> >> >+		return -EMSGSIZE;
>> >> >+
>> >> >+	ifm = nlmsg_data(nlh);
>> >> >+	ifm->ifa_family = AF_UNSPEC;
>> >> >+	ifm->ifa_prefixlen = 0;
>> >> >+	ifm->ifa_flags = IFA_F_PERMANENT;
>> >> >+	ifm->ifa_scope = RT_SCOPE_LINK;
>> >> >+	ifm->ifa_index = dev->ifindex;
>> >> >+	if (nla_put(skb, IFA_ADDRESS, dev->addr_len, addr))
>> >> >+		goto nla_put_failure;
>> >> >+	nlmsg_end(skb, nlh);
>> >> 
>> >> How can userspace tell if this is a multicast addr? Also, why not add
>> >> notifications for unicast addrs so we handle both the same?
>> >
>> >I am only using this RTM_NEW/DELADDR AF_UNSPEC message for multicast
>> >addresses. I understand that the unicast addresses are notified in the
>> >RTM_NEW/DELLINK.
>> 
>> dev->dev_addr is notified by that. UC addresses do not have any
>> notification now.
>It is the multicast MAC address (ie the multicast equivalent of the
>dev_addr) that we are notifying here right? Not L3 addresses.

I know :)

For example if kernel code calls dev_uc_add or dev_uc_del, thise
addresses are not notified to the userspace. All I'm saying is, if you
add notification for dev_mc_add and dev_mc_del, add it for uc variants
as well. Then you have to distinguish mc and uc in the netlink message.

>
>-pr
>

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH] Netlink messages for multicast HW addr programming
  2016-01-23  7:53         ` Jiri Pirko
@ 2016-02-03 14:14           ` Patrick Ruddy
  2016-02-03 14:22             ` Jiri Pirko
  2016-02-03 23:41             ` Stephen Hemminger
  0 siblings, 2 replies; 9+ messages in thread
From: Patrick Ruddy @ 2016-02-03 14:14 UTC (permalink / raw)
  To: jiri; +Cc: netdev, David Stapleton, Olufemi Komolafe, Stephen Hemminger

On Sat, 2016-01-23 at 08:53 +0100, Jiri Pirko wrote:
> Fri, Jan 22, 2016 at 04:49:36PM CET, pruddy@Brocade.com wrote:
> >On Fri, 2016-01-22 at 16:05 +0100, Jiri Pirko wrote:
> >> Fri, Jan 22, 2016 at 03:51:55PM CET, pruddy@Brocade.com wrote:
> >> >On Thu, 2016-01-21 at 21:04 +0100, Jiri Pirko wrote:
> >> >> Thu, Jan 21, 2016 at 12:47:54PM CET, pruddy@brocade.com wrote:
> >> >> >Add RTM_NEWADDR and RTM_DELADDR netlink messages to indicate
> >> >> >interest in specific multicast hardware addresses. These messages
> >> >> >are sent when addressed are added or deleted from the appropriate
> >> >> >interface driver.
> >> >> >
> >> >> >Signed-off-by: Patrick Ruddy <pruddy@brocade.com>
> >> >> >
> >> >> >diff --git a/net/core/dev_addr_lists.c b/net/core/dev_addr_lists.c
> >> >> >index c0548d2..a0ebadd 100644
> >> >> >--- a/net/core/dev_addr_lists.c
> >> >> >+++ b/net/core/dev_addr_lists.c
> >> >> >@@ -12,6 +12,7 @@
> >> >> >  */
> >> >> > 
> >> >> > #include <linux/netdevice.h>
> >> >> >+#include <net/netlink.h>
> >> >> > #include <linux/rtnetlink.h>
> >> >> > #include <linux/export.h>
> >> >> > #include <linux/list.h>
> >> >> >@@ -661,6 +662,62 @@ out:
> >> >> > }
> >> >> > EXPORT_SYMBOL(dev_mc_add_excl);
> >> >> > 
> >> >> >+static int fill_addr(struct sk_buff *skb, struct net_device *dev,
> >> >> >+		     const unsigned char *addr, int type)
> >> >> >+{
> >> >> >+	struct nlmsghdr *nlh;
> >> >> >+	struct ifaddrmsg *ifm;
> >> >> >+
> >> >> >+	nlh = nlmsg_put(skb, 0, 0, type, sizeof(*ifm), 0);
> >> >> >+	if (nlh == NULL)
> >> >> >+		return -EMSGSIZE;
> >> >> >+
> >> >> >+	ifm = nlmsg_data(nlh);
> >> >> >+	ifm->ifa_family = AF_UNSPEC;
> >> >> >+	ifm->ifa_prefixlen = 0;
> >> >> >+	ifm->ifa_flags = IFA_F_PERMANENT;
> >> >> >+	ifm->ifa_scope = RT_SCOPE_LINK;
> >> >> >+	ifm->ifa_index = dev->ifindex;
> >> >> >+	if (nla_put(skb, IFA_ADDRESS, dev->addr_len, addr))
> >> >> >+		goto nla_put_failure;
> >> >> >+	nlmsg_end(skb, nlh);
> >> >> 
> >> >> How can userspace tell if this is a multicast addr? Also, why not add
> >> >> notifications for unicast addrs so we handle both the same?
> >> >
> >> >I am only using this RTM_NEW/DELADDR AF_UNSPEC message for multicast
> >> >addresses. I understand that the unicast addresses are notified in the
> >> >RTM_NEW/DELLINK.
> >> 
> >> dev->dev_addr is notified by that. UC addresses do not have any
> >> notification now.
> >It is the multicast MAC address (ie the multicast equivalent of the
> >dev_addr) that we are notifying here right? Not L3 addresses.
> 
> I know :)
> 
> For example if kernel code calls dev_uc_add or dev_uc_del, thise
> addresses are not notified to the userspace. All I'm saying is, if you
> add notification for dev_mc_add and dev_mc_del, add it for uc variants
> as well. Then you have to distinguish mc and uc in the netlink message.

One more Q on this. I can use IFA_ADDRESS for unicast addresses and
IFA_MULTICAST for multicast addresses but are these distinctions
actually required since the multicast nature of an address is clear from
the address itself - at least it is for ethernet and ifininet?

-pr

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH] Netlink messages for multicast HW addr programming
  2016-02-03 14:14           ` Patrick Ruddy
@ 2016-02-03 14:22             ` Jiri Pirko
  2016-02-03 23:41             ` Stephen Hemminger
  1 sibling, 0 replies; 9+ messages in thread
From: Jiri Pirko @ 2016-02-03 14:22 UTC (permalink / raw)
  To: Patrick Ruddy
  Cc: netdev, David Stapleton, Olufemi Komolafe, Stephen Hemminger

Wed, Feb 03, 2016 at 03:14:41PM CET, pruddy@Brocade.com wrote:
>On Sat, 2016-01-23 at 08:53 +0100, Jiri Pirko wrote:
>> Fri, Jan 22, 2016 at 04:49:36PM CET, pruddy@Brocade.com wrote:
>> >On Fri, 2016-01-22 at 16:05 +0100, Jiri Pirko wrote:
>> >> Fri, Jan 22, 2016 at 03:51:55PM CET, pruddy@Brocade.com wrote:
>> >> >On Thu, 2016-01-21 at 21:04 +0100, Jiri Pirko wrote:
>> >> >> Thu, Jan 21, 2016 at 12:47:54PM CET, pruddy@brocade.com wrote:
>> >> >> >Add RTM_NEWADDR and RTM_DELADDR netlink messages to indicate
>> >> >> >interest in specific multicast hardware addresses. These messages
>> >> >> >are sent when addressed are added or deleted from the appropriate
>> >> >> >interface driver.
>> >> >> >
>> >> >> >Signed-off-by: Patrick Ruddy <pruddy@brocade.com>
>> >> >> >
>> >> >> >diff --git a/net/core/dev_addr_lists.c b/net/core/dev_addr_lists.c
>> >> >> >index c0548d2..a0ebadd 100644
>> >> >> >--- a/net/core/dev_addr_lists.c
>> >> >> >+++ b/net/core/dev_addr_lists.c
>> >> >> >@@ -12,6 +12,7 @@
>> >> >> >  */
>> >> >> > 
>> >> >> > #include <linux/netdevice.h>
>> >> >> >+#include <net/netlink.h>
>> >> >> > #include <linux/rtnetlink.h>
>> >> >> > #include <linux/export.h>
>> >> >> > #include <linux/list.h>
>> >> >> >@@ -661,6 +662,62 @@ out:
>> >> >> > }
>> >> >> > EXPORT_SYMBOL(dev_mc_add_excl);
>> >> >> > 
>> >> >> >+static int fill_addr(struct sk_buff *skb, struct net_device *dev,
>> >> >> >+		     const unsigned char *addr, int type)
>> >> >> >+{
>> >> >> >+	struct nlmsghdr *nlh;
>> >> >> >+	struct ifaddrmsg *ifm;
>> >> >> >+
>> >> >> >+	nlh = nlmsg_put(skb, 0, 0, type, sizeof(*ifm), 0);
>> >> >> >+	if (nlh == NULL)
>> >> >> >+		return -EMSGSIZE;
>> >> >> >+
>> >> >> >+	ifm = nlmsg_data(nlh);
>> >> >> >+	ifm->ifa_family = AF_UNSPEC;
>> >> >> >+	ifm->ifa_prefixlen = 0;
>> >> >> >+	ifm->ifa_flags = IFA_F_PERMANENT;
>> >> >> >+	ifm->ifa_scope = RT_SCOPE_LINK;
>> >> >> >+	ifm->ifa_index = dev->ifindex;
>> >> >> >+	if (nla_put(skb, IFA_ADDRESS, dev->addr_len, addr))
>> >> >> >+		goto nla_put_failure;
>> >> >> >+	nlmsg_end(skb, nlh);
>> >> >> 
>> >> >> How can userspace tell if this is a multicast addr? Also, why not add
>> >> >> notifications for unicast addrs so we handle both the same?
>> >> >
>> >> >I am only using this RTM_NEW/DELADDR AF_UNSPEC message for multicast
>> >> >addresses. I understand that the unicast addresses are notified in the
>> >> >RTM_NEW/DELLINK.
>> >> 
>> >> dev->dev_addr is notified by that. UC addresses do not have any
>> >> notification now.
>> >It is the multicast MAC address (ie the multicast equivalent of the
>> >dev_addr) that we are notifying here right? Not L3 addresses.
>> 
>> I know :)
>> 
>> For example if kernel code calls dev_uc_add or dev_uc_del, thise
>> addresses are not notified to the userspace. All I'm saying is, if you
>> add notification for dev_mc_add and dev_mc_del, add it for uc variants
>> as well. Then you have to distinguish mc and uc in the netlink message.
>
>One more Q on this. I can use IFA_ADDRESS for unicast addresses and
>IFA_MULTICAST for multicast addresses but are these distinctions
>actually required since the multicast nature of an address is clear from
>the address itself - at least it is for ethernet and ifininet?

Please mark them correctly. Thanks.

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH] Netlink messages for multicast HW addr programming
  2016-02-03 14:14           ` Patrick Ruddy
  2016-02-03 14:22             ` Jiri Pirko
@ 2016-02-03 23:41             ` Stephen Hemminger
  1 sibling, 0 replies; 9+ messages in thread
From: Stephen Hemminger @ 2016-02-03 23:41 UTC (permalink / raw)
  To: Patrick Ruddy; +Cc: jiri, netdev, David Stapleton, Olufemi Komolafe

On Wed, 3 Feb 2016 06:14:41 -0800
Patrick Ruddy <pruddy@Brocade.com> wrote:

> One more Q on this. I can use IFA_ADDRESS for unicast addresses and
> IFA_MULTICAST for multicast addresses but are these distinctions
> actually required since the multicast nature of an address is clear from
> the address itself - at least it is for ethernet and ifininet?

The flags on L2 addresses should be analagous to what happens with L3 (IP) addresses.

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2016-02-03 23:41 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-01-21 11:47 [PATCH] Netlink messages for multicast HW addr programming Patrick Ruddy
2016-01-21 20:04 ` Jiri Pirko
2016-01-22 14:51   ` Patrick Ruddy
2016-01-22 15:05     ` Jiri Pirko
2016-01-22 15:49       ` Patrick Ruddy
2016-01-23  7:53         ` Jiri Pirko
2016-02-03 14:14           ` Patrick Ruddy
2016-02-03 14:22             ` Jiri Pirko
2016-02-03 23:41             ` Stephen Hemminger

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.