* [PATCH net-next] dev: advertise rx_flags changes
@ 2013-09-23 14:25 Nicolas Dichtel
2013-09-23 19:27 ` Stephen Hemminger
0 siblings, 1 reply; 8+ messages in thread
From: Nicolas Dichtel @ 2013-09-23 14:25 UTC (permalink / raw)
To: netdev; +Cc: davem, Nicolas Dichtel
There is no netlink message/call to notifier chains when rx_flags are updated,
let's advertise everybody.
Signed-off-by: Nicolas Dichtel <nicolas.dichtel@6wind.com>
---
net/core/dev.c | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/net/core/dev.c b/net/core/dev.c
index 5c713f2239cc..6c91d3919279 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -4818,8 +4818,13 @@ static void dev_change_rx_flags(struct net_device *dev, int flags)
{
const struct net_device_ops *ops = dev->netdev_ops;
- if ((dev->flags & IFF_UP) && ops->ndo_change_rx_flags)
- ops->ndo_change_rx_flags(dev, flags);
+ if (dev->flags & IFF_UP) {
+ if (ops->ndo_change_rx_flags)
+ ops->ndo_change_rx_flags(dev, flags);
+
+ call_netdevice_notifiers(NETDEV_CHANGE, dev);
+ rtmsg_ifinfo(RTM_NEWLINK, dev, flags);
+ }
}
static int __dev_set_promiscuity(struct net_device *dev, int inc)
--
1.8.2.1
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH net-next] dev: advertise rx_flags changes
2013-09-23 14:25 [PATCH net-next] dev: advertise rx_flags changes Nicolas Dichtel
@ 2013-09-23 19:27 ` Stephen Hemminger
2013-09-24 16:21 ` [PATCH net-next v2] dev: always " Nicolas Dichtel
0 siblings, 1 reply; 8+ messages in thread
From: Stephen Hemminger @ 2013-09-23 19:27 UTC (permalink / raw)
To: Nicolas Dichtel; +Cc: netdev, davem
On Mon, 23 Sep 2013 16:25:34 +0200
Nicolas Dichtel <nicolas.dichtel@6wind.com> wrote:
> There is no netlink message/call to notifier chains when rx_flags are updated,
> let's advertise everybody.
>
> Signed-off-by: Nicolas Dichtel <nicolas.dichtel@6wind.com>
> ---
> net/core/dev.c | 9 +++++++--
> 1 file changed, 7 insertions(+), 2 deletions(-)
>
> diff --git a/net/core/dev.c b/net/core/dev.c
> index 5c713f2239cc..6c91d3919279 100644
> --- a/net/core/dev.c
> +++ b/net/core/dev.c
> @@ -4818,8 +4818,13 @@ static void dev_change_rx_flags(struct net_device *dev, int flags)
> {
> const struct net_device_ops *ops = dev->netdev_ops;
>
> - if ((dev->flags & IFF_UP) && ops->ndo_change_rx_flags)
> - ops->ndo_change_rx_flags(dev, flags);
> + if (dev->flags & IFF_UP) {
> + if (ops->ndo_change_rx_flags)
> + ops->ndo_change_rx_flags(dev, flags);
> +
> + call_netdevice_notifiers(NETDEV_CHANGE, dev);
> + rtmsg_ifinfo(RTM_NEWLINK, dev, flags);
> + }
> }
>
> static int __dev_set_promiscuity(struct net_device *dev, int inc)
This will cause duplicate notification if IFF_MULTICAST changes:
1. dev_change_flags
__dev_change_flags
dev_change_rx_flags
call_netdevice_notifiers...
2. dev_change_flags
__dev_notify_flags
call_netdevice_notifiers...
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH net-next v2] dev: always advertise rx_flags changes
2013-09-23 19:27 ` Stephen Hemminger
@ 2013-09-24 16:21 ` Nicolas Dichtel
2013-09-24 16:47 ` Stephen Hemminger
0 siblings, 1 reply; 8+ messages in thread
From: Nicolas Dichtel @ 2013-09-24 16:21 UTC (permalink / raw)
To: stephen; +Cc: netdev, davem, Nicolas Dichtel
Depending on the code path, there is/isn't netlink message/call to notifier
chains when rx_flags are updated, let's send advertisement for all cases.
Signed-off-by: Nicolas Dichtel <nicolas.dichtel@6wind.com>
---
v2: rework the patch to avoid double notification
net/core/dev.c | 64 +++++++++++++++++++++++++++++++++++++---------------------
1 file changed, 41 insertions(+), 23 deletions(-)
diff --git a/net/core/dev.c b/net/core/dev.c
index 5c713f2239cc..067bfbe70c4c 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -4822,7 +4822,7 @@ static void dev_change_rx_flags(struct net_device *dev, int flags)
ops->ndo_change_rx_flags(dev, flags);
}
-static int __dev_set_promiscuity(struct net_device *dev, int inc)
+static int __dev_set_promiscuity(struct net_device *dev, int inc, bool notif)
{
unsigned int old_flags = dev->flags;
kuid_t uid;
@@ -4865,6 +4865,10 @@ static int __dev_set_promiscuity(struct net_device *dev, int inc)
dev_change_rx_flags(dev, IFF_PROMISC);
}
+ if (notif) {
+ call_netdevice_notifiers(NETDEV_CHANGE, dev);
+ rtmsg_ifinfo(RTM_NEWLINK, dev, IFF_PROMISC);
+ }
return 0;
}
@@ -4884,7 +4888,7 @@ int dev_set_promiscuity(struct net_device *dev, int inc)
unsigned int old_flags = dev->flags;
int err;
- err = __dev_set_promiscuity(dev, inc);
+ err = __dev_set_promiscuity(dev, inc, true);
if (err < 0)
return err;
if (dev->flags != old_flags)
@@ -4893,22 +4897,9 @@ int dev_set_promiscuity(struct net_device *dev, int inc)
}
EXPORT_SYMBOL(dev_set_promiscuity);
-/**
- * dev_set_allmulti - update allmulti count on a device
- * @dev: device
- * @inc: modifier
- *
- * Add or remove reception of all multicast frames to a device. While the
- * count in the device remains above zero the interface remains listening
- * to all interfaces. Once it hits zero the device reverts back to normal
- * filtering operation. A negative @inc value is used to drop the counter
- * when releasing a resource needing all multicasts.
- * Return 0 if successful or a negative errno code on error.
- */
-
-int dev_set_allmulti(struct net_device *dev, int inc)
+static int __dev_set_allmulti(struct net_device *dev, int inc, bool notif)
{
- unsigned int old_flags = dev->flags;
+ unsigned int old_flags = dev->flags, old_gflags = dev->gflags;
ASSERT_RTNL();
@@ -4931,9 +4922,32 @@ int dev_set_allmulti(struct net_device *dev, int inc)
if (dev->flags ^ old_flags) {
dev_change_rx_flags(dev, IFF_ALLMULTI);
dev_set_rx_mode(dev);
+ if (notif) {
+ call_netdevice_notifiers(NETDEV_CHANGE, dev);
+ if (dev->gflags ^ old_gflags)
+ rtmsg_ifinfo(RTM_NEWLINK, dev, IFF_ALLMULTI);
+ }
}
return 0;
}
+
+/**
+ * dev_set_allmulti - update allmulti count on a device
+ * @dev: device
+ * @inc: modifier
+ *
+ * Add or remove reception of all multicast frames to a device. While the
+ * count in the device remains above zero the interface remains listening
+ * to all interfaces. Once it hits zero the device reverts back to normal
+ * filtering operation. A negative @inc value is used to drop the counter
+ * when releasing a resource needing all multicasts.
+ * Return 0 if successful or a negative errno code on error.
+ */
+
+int dev_set_allmulti(struct net_device *dev, int inc)
+{
+ return __dev_set_allmulti(dev, inc, true);
+}
EXPORT_SYMBOL(dev_set_allmulti);
/*
@@ -4958,10 +4972,10 @@ void __dev_set_rx_mode(struct net_device *dev)
* therefore calling __dev_set_promiscuity here is safe.
*/
if (!netdev_uc_empty(dev) && !dev->uc_promisc) {
- __dev_set_promiscuity(dev, 1);
+ __dev_set_promiscuity(dev, 1, false);
dev->uc_promisc = true;
} else if (netdev_uc_empty(dev) && dev->uc_promisc) {
- __dev_set_promiscuity(dev, -1);
+ __dev_set_promiscuity(dev, -1, false);
dev->uc_promisc = false;
}
}
@@ -5050,9 +5064,13 @@ int __dev_change_flags(struct net_device *dev, unsigned int flags)
if ((flags ^ dev->gflags) & IFF_PROMISC) {
int inc = (flags & IFF_PROMISC) ? 1 : -1;
+ unsigned int old_flags = dev->flags;
dev->gflags ^= IFF_PROMISC;
- dev_set_promiscuity(dev, inc);
+
+ if (__dev_set_promiscuity(dev, inc, false) >= 0)
+ if (dev->flags != old_flags)
+ dev_set_rx_mode(dev);
}
/* NOTE: order of synchronization of IFF_PROMISC and IFF_ALLMULTI
@@ -5063,7 +5081,7 @@ int __dev_change_flags(struct net_device *dev, unsigned int flags)
int inc = (flags & IFF_ALLMULTI) ? 1 : -1;
dev->gflags ^= IFF_ALLMULTI;
- dev_set_allmulti(dev, inc);
+ __dev_set_allmulti(dev, inc, false);
}
return ret;
@@ -5101,13 +5119,13 @@ void __dev_notify_flags(struct net_device *dev, unsigned int old_flags)
int dev_change_flags(struct net_device *dev, unsigned int flags)
{
int ret;
- unsigned int changes, old_flags = dev->flags;
+ unsigned int changes, old_flags = dev->flags, old_gflags = dev->gflags;
ret = __dev_change_flags(dev, flags);
if (ret < 0)
return ret;
- changes = old_flags ^ dev->flags;
+ changes = (old_flags ^ dev->flags) | (old_gflags ^ dev->gflags);
if (changes)
rtmsg_ifinfo(RTM_NEWLINK, dev, changes);
--
1.8.2.1
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH net-next v2] dev: always advertise rx_flags changes
2013-09-24 16:21 ` [PATCH net-next v2] dev: always " Nicolas Dichtel
@ 2013-09-24 16:47 ` Stephen Hemminger
2013-09-25 10:02 ` [PATCH net-next v3 1/2] dev: update __dev_notify_flags() to send rtnl msg Nicolas Dichtel
0 siblings, 1 reply; 8+ messages in thread
From: Stephen Hemminger @ 2013-09-24 16:47 UTC (permalink / raw)
To: Nicolas Dichtel; +Cc: netdev, davem
On Tue, 24 Sep 2013 18:21:32 +0200
Nicolas Dichtel <nicolas.dichtel@6wind.com> wrote:
> diff --git a/net/core/dev.c b/net/core/dev.c
> index 5c713f2239cc..067bfbe70c4c 100644
> --- a/net/core/dev.c
> +++ b/net/core/dev.c
> @@ -4822,7 +4822,7 @@ static void dev_change_rx_flags(struct net_device *dev, int flags)
> ops->ndo_change_rx_flags(dev, flags);
> }
>
> -static int __dev_set_promiscuity(struct net_device *dev, int inc)
> +static int __dev_set_promiscuity(struct net_device *dev, int inc, bool notif)
> {
> unsigned int old_flags = dev->flags;
> kuid_t uid;
> @@ -4865,6 +4865,10 @@ static int __dev_set_promiscuity(struct net_device *dev, int inc)
>
> dev_change_rx_flags(dev, IFF_PROMISC);
> }
> + if (notif) {
> + call_netdevice_notifiers(NETDEV_CHANGE, dev);
> + rtmsg_ifinfo(RTM_NEWLINK, dev, IFF_PROMISC);
> + }
> return 0;
> }
This is getting uglier as the conditional is added to each
function. Why not create a helper function and change callers.
static void __dev_notify_flag(dev, int flags)
{
call_netdevice_notifiers(NETDEV_CHANGE, dev);
rtmsg_ifinfo(RTM_NEWLINK, dev, flags);
}
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH net-next v3 1/2] dev: update __dev_notify_flags() to send rtnl msg
2013-09-24 16:47 ` Stephen Hemminger
@ 2013-09-25 10:02 ` Nicolas Dichtel
2013-09-25 10:02 ` [PATCH net-next v3 2/2] dev: always advertise rx_flags changes via netlink Nicolas Dichtel
2013-09-30 19:08 ` [PATCH net-next v3 1/2] dev: update __dev_notify_flags() to send rtnl msg David Miller
0 siblings, 2 replies; 8+ messages in thread
From: Nicolas Dichtel @ 2013-09-25 10:02 UTC (permalink / raw)
To: stephen; +Cc: netdev, davem, Nicolas Dichtel
This patch only prepares the next one, there is no functional change.
Now, __dev_notify_flags() can also be used to notify flags changes via
rtnetlink.
Signed-off-by: Nicolas Dichtel <nicolas.dichtel@6wind.com>
---
v3: add patch #1
use __dev_notify_flags() to notify rxflags (note that notifier chains are
not called when flags IFF_PROMISC and IFF_ALLMULTI are changed)
v2: rework the patch to avoid double notification
include/linux/netdevice.h | 4 +++-
net/core/dev.c | 11 ++++++-----
net/core/rtnetlink.c | 3 +--
3 files changed, 10 insertions(+), 8 deletions(-)
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
index 3de49aca4519..4466db0cb673 100644
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
@@ -2368,7 +2368,9 @@ extern int dev_ethtool(struct net *net, struct ifreq *);
extern unsigned int dev_get_flags(const struct net_device *);
extern int __dev_change_flags(struct net_device *, unsigned int flags);
extern int dev_change_flags(struct net_device *, unsigned int);
-extern void __dev_notify_flags(struct net_device *, unsigned int old_flags);
+void __dev_notify_flags(struct net_device *,
+ unsigned int old_flags,
+ unsigned int gchanges);
extern int dev_change_name(struct net_device *, const char *);
extern int dev_set_alias(struct net_device *, const char *, size_t);
extern int dev_change_net_namespace(struct net_device *,
diff --git a/net/core/dev.c b/net/core/dev.c
index 5c713f2239cc..1222309feeaa 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -5069,10 +5069,14 @@ int __dev_change_flags(struct net_device *dev, unsigned int flags)
return ret;
}
-void __dev_notify_flags(struct net_device *dev, unsigned int old_flags)
+void __dev_notify_flags(struct net_device *dev, unsigned int old_flags,
+ unsigned int gchanges)
{
unsigned int changes = dev->flags ^ old_flags;
+ if (gchanges)
+ rtmsg_ifinfo(RTM_NEWLINK, dev, gchanges);
+
if (changes & IFF_UP) {
if (dev->flags & IFF_UP)
call_netdevice_notifiers(NETDEV_UP, dev);
@@ -5108,10 +5112,7 @@ int dev_change_flags(struct net_device *dev, unsigned int flags)
return ret;
changes = old_flags ^ dev->flags;
- if (changes)
- rtmsg_ifinfo(RTM_NEWLINK, dev, changes);
-
- __dev_notify_flags(dev, old_flags);
+ __dev_notify_flags(dev, old_flags, changes);
return ret;
}
EXPORT_SYMBOL(dev_change_flags);
diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c
index 2a0e21de3060..4aedf03da052 100644
--- a/net/core/rtnetlink.c
+++ b/net/core/rtnetlink.c
@@ -1647,9 +1647,8 @@ int rtnl_configure_link(struct net_device *dev, const struct ifinfomsg *ifm)
}
dev->rtnl_link_state = RTNL_LINK_INITIALIZED;
- rtmsg_ifinfo(RTM_NEWLINK, dev, ~0U);
- __dev_notify_flags(dev, old_flags);
+ __dev_notify_flags(dev, old_flags, ~0U);
return 0;
}
EXPORT_SYMBOL(rtnl_configure_link);
--
1.8.2.1
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH net-next v3 2/2] dev: always advertise rx_flags changes via netlink
2013-09-25 10:02 ` [PATCH net-next v3 1/2] dev: update __dev_notify_flags() to send rtnl msg Nicolas Dichtel
@ 2013-09-25 10:02 ` Nicolas Dichtel
2013-09-30 19:08 ` David Miller
2013-09-30 19:08 ` [PATCH net-next v3 1/2] dev: update __dev_notify_flags() to send rtnl msg David Miller
1 sibling, 1 reply; 8+ messages in thread
From: Nicolas Dichtel @ 2013-09-25 10:02 UTC (permalink / raw)
To: stephen; +Cc: netdev, davem, Nicolas Dichtel
When flags IFF_PROMISC and IFF_ALLMULTI are changed, netlink messages are not
consistent. For example, if a multicast daemon is running (flag IFF_ALLMULTI
set in dev->flags but not dev->gflags, ie not exported to userspace) and then a
user sets it via netlink (flag IFF_ALLMULTI set in dev->flags and dev->gflags, ie
exported to userspace), no netlink message is sent.
Same for IFF_PROMISC and because dev->promiscuity is exported via
IFLA_PROMISCUITY, we may send a netlink message after each change of this
counter.
Signed-off-by: Nicolas Dichtel <nicolas.dichtel@6wind.com>
---
v3: add patch #1
use __dev_notify_flags() to notify rxflags (note that notifier chains are
not called when flags IFF_PROMISC and IFF_ALLMULTI are changed)
v2: rework the patch to avoid double notification
net/core/dev.c | 60 ++++++++++++++++++++++++++++++++++++----------------------
1 file changed, 37 insertions(+), 23 deletions(-)
diff --git a/net/core/dev.c b/net/core/dev.c
index 1222309feeaa..b23aefcb3c42 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -4822,7 +4822,7 @@ static void dev_change_rx_flags(struct net_device *dev, int flags)
ops->ndo_change_rx_flags(dev, flags);
}
-static int __dev_set_promiscuity(struct net_device *dev, int inc)
+static int __dev_set_promiscuity(struct net_device *dev, int inc, bool notify)
{
unsigned int old_flags = dev->flags;
kuid_t uid;
@@ -4865,6 +4865,8 @@ static int __dev_set_promiscuity(struct net_device *dev, int inc)
dev_change_rx_flags(dev, IFF_PROMISC);
}
+ if (notify)
+ __dev_notify_flags(dev, old_flags, IFF_PROMISC);
return 0;
}
@@ -4884,7 +4886,7 @@ int dev_set_promiscuity(struct net_device *dev, int inc)
unsigned int old_flags = dev->flags;
int err;
- err = __dev_set_promiscuity(dev, inc);
+ err = __dev_set_promiscuity(dev, inc, true);
if (err < 0)
return err;
if (dev->flags != old_flags)
@@ -4893,22 +4895,9 @@ int dev_set_promiscuity(struct net_device *dev, int inc)
}
EXPORT_SYMBOL(dev_set_promiscuity);
-/**
- * dev_set_allmulti - update allmulti count on a device
- * @dev: device
- * @inc: modifier
- *
- * Add or remove reception of all multicast frames to a device. While the
- * count in the device remains above zero the interface remains listening
- * to all interfaces. Once it hits zero the device reverts back to normal
- * filtering operation. A negative @inc value is used to drop the counter
- * when releasing a resource needing all multicasts.
- * Return 0 if successful or a negative errno code on error.
- */
-
-int dev_set_allmulti(struct net_device *dev, int inc)
+static int __dev_set_allmulti(struct net_device *dev, int inc, bool notify)
{
- unsigned int old_flags = dev->flags;
+ unsigned int old_flags = dev->flags, old_gflags = dev->gflags;
ASSERT_RTNL();
@@ -4931,9 +4920,30 @@ int dev_set_allmulti(struct net_device *dev, int inc)
if (dev->flags ^ old_flags) {
dev_change_rx_flags(dev, IFF_ALLMULTI);
dev_set_rx_mode(dev);
+ if (notify)
+ __dev_notify_flags(dev, old_flags,
+ dev->gflags ^ old_gflags);
}
return 0;
}
+
+/**
+ * dev_set_allmulti - update allmulti count on a device
+ * @dev: device
+ * @inc: modifier
+ *
+ * Add or remove reception of all multicast frames to a device. While the
+ * count in the device remains above zero the interface remains listening
+ * to all interfaces. Once it hits zero the device reverts back to normal
+ * filtering operation. A negative @inc value is used to drop the counter
+ * when releasing a resource needing all multicasts.
+ * Return 0 if successful or a negative errno code on error.
+ */
+
+int dev_set_allmulti(struct net_device *dev, int inc)
+{
+ return __dev_set_allmulti(dev, inc, true);
+}
EXPORT_SYMBOL(dev_set_allmulti);
/*
@@ -4958,10 +4968,10 @@ void __dev_set_rx_mode(struct net_device *dev)
* therefore calling __dev_set_promiscuity here is safe.
*/
if (!netdev_uc_empty(dev) && !dev->uc_promisc) {
- __dev_set_promiscuity(dev, 1);
+ __dev_set_promiscuity(dev, 1, false);
dev->uc_promisc = true;
} else if (netdev_uc_empty(dev) && dev->uc_promisc) {
- __dev_set_promiscuity(dev, -1);
+ __dev_set_promiscuity(dev, -1, false);
dev->uc_promisc = false;
}
}
@@ -5050,9 +5060,13 @@ int __dev_change_flags(struct net_device *dev, unsigned int flags)
if ((flags ^ dev->gflags) & IFF_PROMISC) {
int inc = (flags & IFF_PROMISC) ? 1 : -1;
+ unsigned int old_flags = dev->flags;
dev->gflags ^= IFF_PROMISC;
- dev_set_promiscuity(dev, inc);
+
+ if (__dev_set_promiscuity(dev, inc, false) >= 0)
+ if (dev->flags != old_flags)
+ dev_set_rx_mode(dev);
}
/* NOTE: order of synchronization of IFF_PROMISC and IFF_ALLMULTI
@@ -5063,7 +5077,7 @@ int __dev_change_flags(struct net_device *dev, unsigned int flags)
int inc = (flags & IFF_ALLMULTI) ? 1 : -1;
dev->gflags ^= IFF_ALLMULTI;
- dev_set_allmulti(dev, inc);
+ __dev_set_allmulti(dev, inc, false);
}
return ret;
@@ -5105,13 +5119,13 @@ void __dev_notify_flags(struct net_device *dev, unsigned int old_flags,
int dev_change_flags(struct net_device *dev, unsigned int flags)
{
int ret;
- unsigned int changes, old_flags = dev->flags;
+ unsigned int changes, old_flags = dev->flags, old_gflags = dev->gflags;
ret = __dev_change_flags(dev, flags);
if (ret < 0)
return ret;
- changes = old_flags ^ dev->flags;
+ changes = (old_flags ^ dev->flags) | (old_gflags ^ dev->gflags);
__dev_notify_flags(dev, old_flags, changes);
return ret;
}
--
1.8.2.1
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH net-next v3 1/2] dev: update __dev_notify_flags() to send rtnl msg
2013-09-25 10:02 ` [PATCH net-next v3 1/2] dev: update __dev_notify_flags() to send rtnl msg Nicolas Dichtel
2013-09-25 10:02 ` [PATCH net-next v3 2/2] dev: always advertise rx_flags changes via netlink Nicolas Dichtel
@ 2013-09-30 19:08 ` David Miller
1 sibling, 0 replies; 8+ messages in thread
From: David Miller @ 2013-09-30 19:08 UTC (permalink / raw)
To: nicolas.dichtel; +Cc: stephen, netdev
From: Nicolas Dichtel <nicolas.dichtel@6wind.com>
Date: Wed, 25 Sep 2013 12:02:44 +0200
> This patch only prepares the next one, there is no functional change.
> Now, __dev_notify_flags() can also be used to notify flags changes via
> rtnetlink.
>
> Signed-off-by: Nicolas Dichtel <nicolas.dichtel@6wind.com>
Applied.
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH net-next v3 2/2] dev: always advertise rx_flags changes via netlink
2013-09-25 10:02 ` [PATCH net-next v3 2/2] dev: always advertise rx_flags changes via netlink Nicolas Dichtel
@ 2013-09-30 19:08 ` David Miller
0 siblings, 0 replies; 8+ messages in thread
From: David Miller @ 2013-09-30 19:08 UTC (permalink / raw)
To: nicolas.dichtel; +Cc: stephen, netdev
From: Nicolas Dichtel <nicolas.dichtel@6wind.com>
Date: Wed, 25 Sep 2013 12:02:45 +0200
> When flags IFF_PROMISC and IFF_ALLMULTI are changed, netlink messages are not
> consistent. For example, if a multicast daemon is running (flag IFF_ALLMULTI
> set in dev->flags but not dev->gflags, ie not exported to userspace) and then a
> user sets it via netlink (flag IFF_ALLMULTI set in dev->flags and dev->gflags, ie
> exported to userspace), no netlink message is sent.
> Same for IFF_PROMISC and because dev->promiscuity is exported via
> IFLA_PROMISCUITY, we may send a netlink message after each change of this
> counter.
>
> Signed-off-by: Nicolas Dichtel <nicolas.dichtel@6wind.com>
Applied.
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2013-09-30 19:08 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-09-23 14:25 [PATCH net-next] dev: advertise rx_flags changes Nicolas Dichtel
2013-09-23 19:27 ` Stephen Hemminger
2013-09-24 16:21 ` [PATCH net-next v2] dev: always " Nicolas Dichtel
2013-09-24 16:47 ` Stephen Hemminger
2013-09-25 10:02 ` [PATCH net-next v3 1/2] dev: update __dev_notify_flags() to send rtnl msg Nicolas Dichtel
2013-09-25 10:02 ` [PATCH net-next v3 2/2] dev: always advertise rx_flags changes via netlink Nicolas Dichtel
2013-09-30 19:08 ` David Miller
2013-09-30 19:08 ` [PATCH net-next v3 1/2] dev: update __dev_notify_flags() to send rtnl msg David Miller
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).