Skip to content

Commit

Permalink
net: wrap the wireless pointers in struct net_device in an ifdef
Browse files Browse the repository at this point in the history
Most protocol-specific pointers in struct net_device are under
a respective ifdef. Wireless is the notable exception. Since
there's a sizable number of custom-built kernels for datacenter
workloads which don't build wireless it seems reasonable to
ifdefy those pointers as well.

While at it move IPv4 and IPv6 pointers up, those are special
for obvious reasons.

Acked-by: Johannes Berg <[email protected]>
Acked-by: Stefan Schmidt <[email protected]> # ieee802154
Acked-by: Sven Eckelmann <[email protected]>
Signed-off-by: Jakub Kicinski <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
  • Loading branch information
kuba-moo authored and davem330 committed May 22, 2022
1 parent 5ff851b commit c304edd
Show file tree
Hide file tree
Showing 5 changed files with 25 additions and 10 deletions.
8 changes: 6 additions & 2 deletions include/linux/netdevice.h
Original file line number Diff line number Diff line change
Expand Up @@ -2119,6 +2119,8 @@ struct net_device {

/* Protocol-specific pointers */

struct in_device __rcu *ip_ptr;
struct inet6_dev __rcu *ip6_ptr;
#if IS_ENABLED(CONFIG_VLAN_8021Q)
struct vlan_info __rcu *vlan_info;
#endif
Expand All @@ -2131,16 +2133,18 @@ struct net_device {
#if IS_ENABLED(CONFIG_ATALK)
void *atalk_ptr;
#endif
struct in_device __rcu *ip_ptr;
#if IS_ENABLED(CONFIG_DECNET)
struct dn_dev __rcu *dn_ptr;
#endif
struct inet6_dev __rcu *ip6_ptr;
#if IS_ENABLED(CONFIG_AX25)
void *ax25_ptr;
#endif
#if IS_ENABLED(CONFIG_CFG80211)
struct wireless_dev *ieee80211_ptr;
#endif
#if IS_ENABLED(CONFIG_IEEE802154) || IS_ENABLED(CONFIG_6LOWPAN)
struct wpan_dev *ieee802154_ptr;
#endif
#if IS_ENABLED(CONFIG_MPLS_ROUTING)
struct mpls_dev __rcu *mpls_ptr;
#endif
Expand Down
2 changes: 2 additions & 0 deletions include/net/cfg80211.h
Original file line number Diff line number Diff line change
Expand Up @@ -8006,7 +8006,9 @@ int cfg80211_register_netdevice(struct net_device *dev);
*/
static inline void cfg80211_unregister_netdevice(struct net_device *dev)
{
#if IS_ENABLED(CONFIG_CFG80211)
cfg80211_unregister_wdev(dev->ieee80211_ptr);
#endif
}

/**
Expand Down
2 changes: 2 additions & 0 deletions include/net/cfg802154.h
Original file line number Diff line number Diff line change
Expand Up @@ -373,6 +373,7 @@ struct wpan_dev {

#define to_phy(_dev) container_of(_dev, struct wpan_phy, dev)

#if IS_ENABLED(CONFIG_IEEE802154) || IS_ENABLED(CONFIG_6LOWPAN)
static inline int
wpan_dev_hard_header(struct sk_buff *skb, struct net_device *dev,
const struct ieee802154_addr *daddr,
Expand All @@ -383,6 +384,7 @@ wpan_dev_hard_header(struct sk_buff *skb, struct net_device *dev,

return wpan_dev->header_ops->create(skb, dev, daddr, saddr, len);
}
#endif

struct wpan_phy *
wpan_phy_new(const struct cfg802154_ops *ops, size_t priv_size);
Expand Down
2 changes: 2 additions & 0 deletions net/batman-adv/hard-interface.c
Original file line number Diff line number Diff line change
Expand Up @@ -307,9 +307,11 @@ static bool batadv_is_cfg80211_netdev(struct net_device *net_device)
if (!net_device)
return false;

#if IS_ENABLED(CONFIG_CFG80211)
/* cfg80211 drivers have to set ieee80211_ptr */
if (net_device->ieee80211_ptr)
return true;
#endif

return false;
}
Expand Down
21 changes: 13 additions & 8 deletions net/core/net-sysfs.c
Original file line number Diff line number Diff line change
Expand Up @@ -746,7 +746,6 @@ static const struct attribute_group netstat_group = {
.attrs = netstat_attrs,
};

#if IS_ENABLED(CONFIG_WIRELESS_EXT) || IS_ENABLED(CONFIG_CFG80211)
static struct attribute *wireless_attrs[] = {
NULL
};
Expand All @@ -755,7 +754,19 @@ static const struct attribute_group wireless_group = {
.name = "wireless",
.attrs = wireless_attrs,
};

static bool wireless_group_needed(struct net_device *ndev)
{
#if IS_ENABLED(CONFIG_CFG80211)
if (ndev->ieee80211_ptr)
return true;
#endif
#if IS_ENABLED(CONFIG_WIRELESS_EXT)
if (ndev->wireless_handlers)
return true;
#endif
return false;
}

#else /* CONFIG_SYSFS */
#define net_class_groups NULL
Expand Down Expand Up @@ -1996,14 +2007,8 @@ int netdev_register_kobject(struct net_device *ndev)

*groups++ = &netstat_group;

#if IS_ENABLED(CONFIG_WIRELESS_EXT) || IS_ENABLED(CONFIG_CFG80211)
if (ndev->ieee80211_ptr)
*groups++ = &wireless_group;
#if IS_ENABLED(CONFIG_WIRELESS_EXT)
else if (ndev->wireless_handlers)
if (wireless_group_needed(ndev))
*groups++ = &wireless_group;
#endif
#endif
#endif /* CONFIG_SYSFS */

error = device_add(dev);
Expand Down

0 comments on commit c304edd

Please sign in to comment.