Message ID | 1417947627-2329-1-git-send-email-vadim4j@gmail.com (mailing list archive) |
---|---|
State | Not Applicable, archived |
Headers | show |
On Sun, 2014-12-07 at 12:20 +0200, Vadim Kochan wrote: > +++ b/net/mac80211/iface.c > @@ -1624,6 +1625,10 @@ static void ieee80211_assign_perm_addr(struct ieee80211_local *local, > mutex_unlock(&local->iflist_mtx); > } > > +static struct rtnl_link_ops wireless_link_ops __read_mostly = { > + .kind = "wlan", > +}; I think it would make sense to set it - if not already set - in the netdev notifier in cfg80211. johannes -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
You meant here ? net/wireless/core.c : static int cfg80211_netdev_notifier_call(struct notifier_block *nb, unsigned long state, void *ptr) { ... switch (state) { case NETDEV_POST_INIT: SET_NETDEV_DEVTYPE(dev, &wiphy_type); break; case NETDEV_REGISTER: ... dev->rtnl_link_ops = &wireless_link_ops; ... } ... } Regards, On Mon, Dec 8, 2014 at 9:27 AM, Johannes Berg <johannes@sipsolutions.net> wrote: > On Sun, 2014-12-07 at 12:20 +0200, Vadim Kochan wrote: > >> +++ b/net/mac80211/iface.c > >> @@ -1624,6 +1625,10 @@ static void ieee80211_assign_perm_addr(struct ieee80211_local *local, >> mutex_unlock(&local->iflist_mtx); >> } >> >> +static struct rtnl_link_ops wireless_link_ops __read_mostly = { >> + .kind = "wlan", >> +}; > > I think it would make sense to set it - if not already set - in the > netdev notifier in cfg80211. > > johannes > -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Mon, 2014-12-08 at 12:07 +0200, Vadim Kochan wrote: > You meant here ? > > net/wireless/core.c : static int cfg80211_netdev_notifier_call(struct > notifier_block *nb, > unsigned long state, void *ptr) > { > > ... > switch (state) { > case NETDEV_POST_INIT: > SET_NETDEV_DEVTYPE(dev, &wiphy_type); > break; > case NETDEV_REGISTER: > ... > dev->rtnl_link_ops = &wireless_link_ops; > ... > } Well it seems it could go more with the SET_NETDEV_TYPE()? johannes -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Mon, Dec 08, 2014 at 11:17:03AM +0100, Johannes Berg wrote: > On Mon, 2014-12-08 at 12:07 +0200, Vadim Kochan wrote: > > You meant here ? > > > > net/wireless/core.c : static int cfg80211_netdev_notifier_call(struct > > notifier_block *nb, > > unsigned long state, void *ptr) > > { > > > > ... > > switch (state) { > > case NETDEV_POST_INIT: > > SET_NETDEV_DEVTYPE(dev, &wiphy_type); > > break; > > case NETDEV_REGISTER: > > ... > > dev->rtnl_link_ops = &wireless_link_ops; > > ... > > } > > Well it seems it could go more with the SET_NETDEV_TYPE()? > > johannes > What I worry about is this peace of code in net/core/dev.c : int register_netdevice(struct net_device *dev) { ... if (!dev->rtnl_link_ops || dev->rtnl_link_state == RTNL_LINK_INITIALIZED) rtmsg_ifinfo(RTM_NEWLINK, dev, ~0U, GFP_KERNEL); ... } which will skip sending RTM_NEWLINK message if it has rtnl_link_ops ... Actually meanwhile I dont see any problems as my wifi works OK with these changes, but I want to be sure in 100% that it does not break anything ... So I am under investigating this ... Maybe you can suggest ? Thanks, -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Mon, 2014-12-08 at 23:48 +0200, vadim4j@gmail.com wrote: > What I worry about is this peace of code in net/core/dev.c : > > int register_netdevice(struct net_device *dev) > { > ... > > if (!dev->rtnl_link_ops || > dev->rtnl_link_state == RTNL_LINK_INITIALIZED) > rtmsg_ifinfo(RTM_NEWLINK, dev, ~0U, GFP_KERNEL); > ... > } rtnl_link_state should be RTNL_LINK_INITIALIZED though, unless somebody set something else. johannes -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Tue, Dec 09, 2014 at 09:24:18AM +0100, Johannes Berg wrote: > On Mon, 2014-12-08 at 23:48 +0200, vadim4j@gmail.com wrote: > > > What I worry about is this peace of code in net/core/dev.c : > > > > int register_netdevice(struct net_device *dev) > > { > > ... > > > > if (!dev->rtnl_link_ops || > > dev->rtnl_link_state == RTNL_LINK_INITIALIZED) > > rtmsg_ifinfo(RTM_NEWLINK, dev, ~0U, GFP_KERNEL); > > ... > > } > > rtnl_link_state should be RTNL_LINK_INITIALIZED though, unless somebody > set something else. > > johannes > OK I tested & checked by code that RTNL_LINK_INITIALIZED is set, and RTM_NEWLINK message will be sent as it was before. I will resend the patch. Thanks, -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/net/mac80211/iface.c b/net/mac80211/iface.c index 653f5eb..e48372b 100644 --- a/net/mac80211/iface.c +++ b/net/mac80211/iface.c @@ -18,6 +18,7 @@ #include <linux/rtnetlink.h> #include <net/mac80211.h> #include <net/ieee80211_radiotap.h> +#include <net/rtnetlink.h> #include "ieee80211_i.h" #include "sta_info.h" #include "debugfs_netdev.h" @@ -1624,6 +1625,10 @@ static void ieee80211_assign_perm_addr(struct ieee80211_local *local, mutex_unlock(&local->iflist_mtx); } +static struct rtnl_link_ops wireless_link_ops __read_mostly = { + .kind = "wlan", +}; + int ieee80211_if_add(struct ieee80211_local *local, const char *name, struct wireless_dev **new_wdev, enum nl80211_iftype type, struct vif_params *params) @@ -1684,6 +1689,8 @@ int ieee80211_if_add(struct ieee80211_local *local, const char *name, memcpy(sdata->vif.addr, ndev->dev_addr, ETH_ALEN); memcpy(sdata->name, ndev->name, IFNAMSIZ); + ndev->rtnl_link_ops = &wireless_link_ops; + sdata->dev = ndev; }
It allows to identify the wlan kind of device for the user application, e.g.: # ip -d link 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 promiscuity 0 2: enp0s25: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN mode DEFAULT group default qlen 1000 link/ether XX:XX:XX:XX:XX:XX brd ff:ff:ff:ff:ff:ff promiscuity 0 3: wlp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000 link/ether XX:XX:XX:XX:XX:XX brd ff:ff:ff:ff:ff:ff promiscuity 0 wlan Signed-off-by: Vadim Kochan <vadim4j@gmail.com> --- net/mac80211/iface.c | 7 +++++++ 1 file changed, 7 insertions(+)