* [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.