Merge tag 'ieee802154-for-net-next-2023-06-23' of gitolite.kernel.org:pub/scm/linux/kernel/git/wpan/wpan-next
Miquel Raynal says: ==================== Core WPAN changes: - Support for active scans - Support for answering BEACON_REQ - Specific MLME handling for limited devices WPAN driver changes: - ca8210: - Flag the devices as limited - Remove stray gpiod_unexport() call * tag 'ieee802154-for-net-next-2023-06-23' of gitolite.kernel.org:pub/scm/linux/kernel/git/wpan/wpan-next: ieee802154: ca8210: Remove stray gpiod_unexport() call ieee802154: ca8210: Flag the driver as being limited net: ieee802154: Handle limited devices with only datagram support mac802154: Handle received BEACON_REQ ieee802154: Add support for allowing to answer BEACON_REQ mac802154: Handle active scanning ieee802154: Add support for user active scan requests ==================== Link: https://lore.kernel.org/r/20230623195506.40b87b5f@xps-13 Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
@ -120,6 +120,29 @@ ieee802154_hdr_push(struct sk_buff *skb, struct ieee802154_hdr *hdr)
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(ieee802154_hdr_push);
|
||||
|
||||
int ieee802154_mac_cmd_push(struct sk_buff *skb, void *f,
|
||||
const void *pl, unsigned int pl_len)
|
||||
{
|
||||
struct ieee802154_mac_cmd_frame *frame = f;
|
||||
struct ieee802154_mac_cmd_pl *mac_pl = &frame->mac_pl;
|
||||
struct ieee802154_hdr *mhr = &frame->mhr;
|
||||
int ret;
|
||||
|
||||
skb_reserve(skb, sizeof(*mhr));
|
||||
ret = ieee802154_hdr_push(skb, mhr);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
skb_reset_mac_header(skb);
|
||||
skb->mac_len = ret;
|
||||
|
||||
skb_put_data(skb, mac_pl, sizeof(*mac_pl));
|
||||
skb_put_data(skb, pl, pl_len);
|
||||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(ieee802154_mac_cmd_push);
|
||||
|
||||
int ieee802154_beacon_push(struct sk_buff *skb,
|
||||
struct ieee802154_beacon_frame *beacon)
|
||||
{
|
||||
@ -284,6 +307,19 @@ ieee802154_hdr_pull(struct sk_buff *skb, struct ieee802154_hdr *hdr)
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(ieee802154_hdr_pull);
|
||||
|
||||
int ieee802154_mac_cmd_pl_pull(struct sk_buff *skb,
|
||||
struct ieee802154_mac_cmd_pl *mac_pl)
|
||||
{
|
||||
if (!pskb_may_pull(skb, sizeof(*mac_pl)))
|
||||
return -EINVAL;
|
||||
|
||||
memcpy(mac_pl, skb->data, sizeof(*mac_pl));
|
||||
skb_pull(skb, sizeof(*mac_pl));
|
||||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(ieee802154_mac_cmd_pl_pull);
|
||||
|
||||
int
|
||||
ieee802154_hdr_peek_addrs(const struct sk_buff *skb, struct ieee802154_hdr *hdr)
|
||||
{
|
||||
|
@ -233,7 +233,7 @@ static const struct nla_policy nl802154_policy[NL802154_ATTR_MAX+1] = {
|
||||
NLA_POLICY_RANGE(NLA_U8, NL802154_SCAN_DONE_REASON_FINISHED,
|
||||
NL802154_SCAN_DONE_REASON_ABORTED),
|
||||
[NL802154_ATTR_BEACON_INTERVAL] =
|
||||
NLA_POLICY_MAX(NLA_U8, IEEE802154_MAX_SCAN_DURATION),
|
||||
NLA_POLICY_MAX(NLA_U8, IEEE802154_ACTIVE_SCAN_DURATION),
|
||||
|
||||
#ifdef CONFIG_IEEE802154_NL802154_EXPERIMENTAL
|
||||
[NL802154_ATTR_SEC_ENABLED] = { .type = NLA_U8, },
|
||||
@ -1417,6 +1417,11 @@ static int nl802154_trigger_scan(struct sk_buff *skb, struct genl_info *info)
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (wpan_phy->flags & WPAN_PHY_FLAG_DATAGRAMS_ONLY) {
|
||||
NL_SET_ERR_MSG(info->extack, "PHY only supports datagrams");
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
request = kzalloc(sizeof(*request), GFP_KERNEL);
|
||||
if (!request)
|
||||
return -ENOMEM;
|
||||
@ -1426,6 +1431,7 @@ static int nl802154_trigger_scan(struct sk_buff *skb, struct genl_info *info)
|
||||
|
||||
type = nla_get_u8(info->attrs[NL802154_ATTR_SCAN_TYPE]);
|
||||
switch (type) {
|
||||
case NL802154_SCAN_ACTIVE:
|
||||
case NL802154_SCAN_PASSIVE:
|
||||
request->type = type;
|
||||
break;
|
||||
@ -1583,6 +1589,11 @@ nl802154_send_beacons(struct sk_buff *skb, struct genl_info *info)
|
||||
return -EPERM;
|
||||
}
|
||||
|
||||
if (wpan_phy->flags & WPAN_PHY_FLAG_DATAGRAMS_ONLY) {
|
||||
NL_SET_ERR_MSG(info->extack, "PHY only supports datagrams");
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
request = kzalloc(sizeof(*request), GFP_KERNEL);
|
||||
if (!request)
|
||||
return -ENOMEM;
|
||||
|
Reference in New Issue
Block a user