ieee802154: avoid deprecated .ndo_do_ioctl callback

The ieee802154 socket implementation is the last remaining caller of the
netdevice ioctl callback. In order to completely remove this, add a custom
pointer to the existing wpan_dev specific operations structure. Since that
structure is currently only used to wrap the 'create' header operation,
adjust the naming slightly to make this more generic.

It would be a good idea to adjust the calling conventions and split the
get/set operations into separate functions, but that can be a follow-up
cleanup. For the moment, I kept the actual changes to a minimum to
avoid regressions.

Link: https://lore.kernel.org/all/20231011140225.253106-2-arnd@kernel.org/
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Link: https://patch.msgid.link/20260915211538.1519815-1-arnd@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
Arnd Bergmann 2026-09-15 23:14:03 +02:00 committed by Jakub Kicinski
parent c440250e9c
commit 52fb7cca01
3 changed files with 12 additions and 10 deletions

View File

@ -458,15 +458,16 @@ struct ieee802154_llsec_device_key {
u32 frame_counter;
};
struct wpan_dev_header_ops {
struct wpan_dev_ops {
/* TODO create callback currently assumes ieee802154_mac_cb inside
* skb->cb. This should be changed to give these information as
* parameter.
*/
int (*create)(struct sk_buff *skb, struct net_device *dev,
int (*header_create)(struct sk_buff *skb, struct net_device *dev,
const struct ieee802154_addr *daddr,
const struct ieee802154_addr *saddr,
unsigned int len);
int (*ioctl)(struct net_device *dev, struct ifreq *ifr, int cmd);
};
struct wpan_dev {
@ -477,7 +478,7 @@ struct wpan_dev {
struct list_head list;
struct net_device *netdev;
const struct wpan_dev_header_ops *header_ops;
const struct wpan_dev_ops *ops;
/* lowpan interface, set when the wpan_dev belongs to one lowpan_dev */
struct net_device *lowpan_dev;
@ -523,7 +524,7 @@ wpan_dev_hard_header(struct sk_buff *skb, struct net_device *dev,
{
struct wpan_dev *wpan_dev = dev->ieee802154_ptr;
return wpan_dev->header_ops->create(skb, dev, daddr, saddr, len);
return wpan_dev->ops->header_create(skb, dev, daddr, saddr, len);
}
#endif

View File

@ -139,8 +139,9 @@ static int ieee802154_dev_ioctl(struct sock *sk, struct ifreq __user *arg,
if (!dev)
return -ENODEV;
if (dev->type == ARPHRD_IEEE802154 && dev->netdev_ops->ndo_do_ioctl)
ret = dev->netdev_ops->ndo_do_ioctl(dev, &ifr, cmd);
if (dev->type == ARPHRD_IEEE802154 && dev->ieee802154_ptr &&
dev->ieee802154_ptr->ops)
ret = dev->ieee802154_ptr->ops->ioctl(dev, &ifr, cmd);
if (!ret && put_user_ifreq(&ifr, arg))
ret = -EFAULT;

View File

@ -406,8 +406,9 @@ static int ieee802154_header_create(struct sk_buff *skb,
return hlen;
}
static const struct wpan_dev_header_ops ieee802154_header_ops = {
.create = ieee802154_header_create,
static const struct wpan_dev_ops ieee802154_ops = {
.header_create = ieee802154_header_create,
.ioctl = mac802154_wpan_ioctl,
};
/* This header create functionality assumes a 8 byte array for
@ -497,7 +498,6 @@ static const struct net_device_ops mac802154_wpan_ops = {
.ndo_open = mac802154_wpan_open,
.ndo_stop = mac802154_slave_close,
.ndo_start_xmit = ieee802154_subif_start_xmit,
.ndo_do_ioctl = mac802154_wpan_ioctl,
.ndo_set_mac_address = mac802154_wpan_mac_addr,
};
@ -583,7 +583,7 @@ ieee802154_setup_sdata(struct ieee802154_sub_if_data *sdata,
sdata->dev->netdev_ops = &mac802154_wpan_ops;
sdata->dev->ml_priv = &mac802154_mlme_wpan;
sdata->iface_default_filtering = IEEE802154_FILTERING_4_FRAME_FIELDS;
wpan_dev->header_ops = &ieee802154_header_ops;
wpan_dev->ops = &ieee802154_ops;
mutex_init(&sdata->sec_mtx);