mac802154: move interface add handling in iface
This patch moves and renames the mac802154_add_iface and mac802154_netdev_register functions into iface.c. The function mac802154_add_iface is renamed to ieee802154_if_add which is a similar naming convention like mac80211. Signed-off-by: Alexander Aring <alex.aring@gmail.com> Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
This commit is contained in:
parent
b210b18747
commit
986a8abfc5
4 changed files with 72 additions and 68 deletions
|
@ -22,7 +22,9 @@ static struct net_device *
|
||||||
ieee802154_add_iface_deprecated(struct wpan_phy *wpan_phy,
|
ieee802154_add_iface_deprecated(struct wpan_phy *wpan_phy,
|
||||||
const char *name, int type)
|
const char *name, int type)
|
||||||
{
|
{
|
||||||
return mac802154_add_iface(wpan_phy, name, type);
|
struct ieee802154_local *local = wpan_phy_priv(wpan_phy);
|
||||||
|
|
||||||
|
return ieee802154_if_add(local, name, NULL, type);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ieee802154_del_iface_deprecated(struct wpan_phy *wpan_phy,
|
static void ieee802154_del_iface_deprecated(struct wpan_phy *wpan_phy,
|
||||||
|
|
|
@ -176,5 +176,8 @@ void mac802154_unlock_table(struct net_device *dev);
|
||||||
struct net_device *
|
struct net_device *
|
||||||
mac802154_add_iface(struct wpan_phy *phy, const char *name, int type);
|
mac802154_add_iface(struct wpan_phy *phy, const char *name, int type);
|
||||||
void ieee802154_if_remove(struct ieee802154_sub_if_data *sdata);
|
void ieee802154_if_remove(struct ieee802154_sub_if_data *sdata);
|
||||||
|
struct net_device *
|
||||||
|
ieee802154_if_add(struct ieee802154_local *local, const char *name,
|
||||||
|
struct wpan_dev **new_wpan_dev, int type);
|
||||||
|
|
||||||
#endif /* __IEEE802154_I_H */
|
#endif /* __IEEE802154_I_H */
|
||||||
|
|
|
@ -444,6 +444,72 @@ void mac802154_monitor_setup(struct net_device *dev)
|
||||||
sdata->promisuous_mode = true;
|
sdata->promisuous_mode = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
mac802154_netdev_register(struct ieee802154_local *local,
|
||||||
|
struct net_device *dev)
|
||||||
|
{
|
||||||
|
struct ieee802154_sub_if_data *sdata = IEEE802154_DEV_TO_SUB_IF(dev);
|
||||||
|
int err;
|
||||||
|
|
||||||
|
sdata->dev = dev;
|
||||||
|
sdata->local = local;
|
||||||
|
|
||||||
|
dev->needed_headroom = local->hw.extra_tx_headroom;
|
||||||
|
|
||||||
|
SET_NETDEV_DEV(dev, &local->phy->dev);
|
||||||
|
|
||||||
|
err = register_netdev(dev);
|
||||||
|
if (err < 0)
|
||||||
|
return err;
|
||||||
|
|
||||||
|
rtnl_lock();
|
||||||
|
mutex_lock(&local->iflist_mtx);
|
||||||
|
list_add_tail_rcu(&sdata->list, &local->interfaces);
|
||||||
|
mutex_unlock(&local->iflist_mtx);
|
||||||
|
rtnl_unlock();
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
struct net_device *
|
||||||
|
ieee802154_if_add(struct ieee802154_local *local, const char *name,
|
||||||
|
struct wpan_dev **new_wpan_dev, int type)
|
||||||
|
{
|
||||||
|
struct net_device *dev;
|
||||||
|
int err = -ENOMEM;
|
||||||
|
|
||||||
|
switch (type) {
|
||||||
|
case IEEE802154_DEV_MONITOR:
|
||||||
|
dev = alloc_netdev(sizeof(struct ieee802154_sub_if_data),
|
||||||
|
name, NET_NAME_UNKNOWN,
|
||||||
|
mac802154_monitor_setup);
|
||||||
|
break;
|
||||||
|
case IEEE802154_DEV_WPAN:
|
||||||
|
dev = alloc_netdev(sizeof(struct ieee802154_sub_if_data),
|
||||||
|
name, NET_NAME_UNKNOWN,
|
||||||
|
mac802154_wpan_setup);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
dev = NULL;
|
||||||
|
err = -EINVAL;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (!dev)
|
||||||
|
goto err;
|
||||||
|
|
||||||
|
err = mac802154_netdev_register(local, dev);
|
||||||
|
if (err)
|
||||||
|
goto err_free;
|
||||||
|
|
||||||
|
dev_hold(dev); /* we return an incremented device refcount */
|
||||||
|
return dev;
|
||||||
|
|
||||||
|
err_free:
|
||||||
|
free_netdev(dev);
|
||||||
|
err:
|
||||||
|
return ERR_PTR(err);
|
||||||
|
}
|
||||||
|
|
||||||
void ieee802154_if_remove(struct ieee802154_sub_if_data *sdata)
|
void ieee802154_if_remove(struct ieee802154_sub_if_data *sdata)
|
||||||
{
|
{
|
||||||
ASSERT_RTNL();
|
ASSERT_RTNL();
|
||||||
|
|
|
@ -30,73 +30,6 @@
|
||||||
#include "ieee802154_i.h"
|
#include "ieee802154_i.h"
|
||||||
#include "cfg.h"
|
#include "cfg.h"
|
||||||
|
|
||||||
static int
|
|
||||||
mac802154_netdev_register(struct wpan_phy *phy, struct net_device *dev)
|
|
||||||
{
|
|
||||||
struct ieee802154_sub_if_data *sdata = IEEE802154_DEV_TO_SUB_IF(dev);
|
|
||||||
struct ieee802154_local *local;
|
|
||||||
int err;
|
|
||||||
|
|
||||||
local = wpan_phy_priv(phy);
|
|
||||||
|
|
||||||
sdata->dev = dev;
|
|
||||||
sdata->local = local;
|
|
||||||
|
|
||||||
dev->needed_headroom = local->hw.extra_tx_headroom;
|
|
||||||
|
|
||||||
SET_NETDEV_DEV(dev, &local->phy->dev);
|
|
||||||
|
|
||||||
err = register_netdev(dev);
|
|
||||||
if (err < 0)
|
|
||||||
return err;
|
|
||||||
|
|
||||||
rtnl_lock();
|
|
||||||
mutex_lock(&local->iflist_mtx);
|
|
||||||
list_add_tail_rcu(&sdata->list, &local->interfaces);
|
|
||||||
mutex_unlock(&local->iflist_mtx);
|
|
||||||
rtnl_unlock();
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
struct net_device *
|
|
||||||
mac802154_add_iface(struct wpan_phy *phy, const char *name, int type)
|
|
||||||
{
|
|
||||||
struct net_device *dev;
|
|
||||||
int err = -ENOMEM;
|
|
||||||
|
|
||||||
switch (type) {
|
|
||||||
case IEEE802154_DEV_MONITOR:
|
|
||||||
dev = alloc_netdev(sizeof(struct ieee802154_sub_if_data),
|
|
||||||
name, NET_NAME_UNKNOWN,
|
|
||||||
mac802154_monitor_setup);
|
|
||||||
break;
|
|
||||||
case IEEE802154_DEV_WPAN:
|
|
||||||
dev = alloc_netdev(sizeof(struct ieee802154_sub_if_data),
|
|
||||||
name, NET_NAME_UNKNOWN,
|
|
||||||
mac802154_wpan_setup);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
dev = NULL;
|
|
||||||
err = -EINVAL;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (!dev)
|
|
||||||
goto err;
|
|
||||||
|
|
||||||
err = mac802154_netdev_register(phy, dev);
|
|
||||||
if (err)
|
|
||||||
goto err_free;
|
|
||||||
|
|
||||||
dev_hold(dev); /* we return an incremented device refcount */
|
|
||||||
return dev;
|
|
||||||
|
|
||||||
err_free:
|
|
||||||
free_netdev(dev);
|
|
||||||
err:
|
|
||||||
return ERR_PTR(err);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void ieee802154_tasklet_handler(unsigned long data)
|
static void ieee802154_tasklet_handler(unsigned long data)
|
||||||
{
|
{
|
||||||
struct ieee802154_local *local = (struct ieee802154_local *)data;
|
struct ieee802154_local *local = (struct ieee802154_local *)data;
|
||||||
|
|
Loading…
Add table
Reference in a new issue