Commit 38130c31 authored by Alexander Aring's avatar Alexander Aring Committed by Marcel Holtmann

mac802154: add basic support for monitor

This patch adds basic support for monitor mode. Also change the open
call that we set the transceiver mac setting on an interface up. Futher
patches will add a better handling while interface up an interface.
Signed-off-by: default avatarAlexander Aring <alex.aring@gmail.com>
Signed-off-by: default avatarMarcel Holtmann <marcel@holtmann.org>
parent 2ac0f3a3
...@@ -84,6 +84,7 @@ struct ieee802154_sub_if_data { ...@@ -84,6 +84,7 @@ struct ieee802154_sub_if_data {
__le16 pan_id; __le16 pan_id;
__le16 short_addr; __le16 short_addr;
__le64 extended_addr; __le64 extended_addr;
bool promisuous_mode;
struct ieee802154_mac_params mac_params; struct ieee802154_mac_params mac_params;
......
...@@ -196,6 +196,12 @@ static int mac802154_wpan_open(struct net_device *dev) ...@@ -196,6 +196,12 @@ static int mac802154_wpan_open(struct net_device *dev)
mutex_lock(&phy->pib_lock); mutex_lock(&phy->pib_lock);
if (local->hw.flags & IEEE802154_HW_PROMISCUOUS) {
rc = drv_set_promiscuous_mode(local, sdata->promisuous_mode);
if (rc < 0)
goto out;
}
if (local->hw.flags & IEEE802154_HW_TXPOWER) { if (local->hw.flags & IEEE802154_HW_TXPOWER) {
rc = drv_set_tx_power(local, sdata->mac_params.transmit_power); rc = drv_set_tx_power(local, sdata->mac_params.transmit_power);
if (rc < 0) if (rc < 0)
...@@ -382,7 +388,7 @@ static const struct net_device_ops mac802154_wpan_ops = { ...@@ -382,7 +388,7 @@ static const struct net_device_ops mac802154_wpan_ops = {
}; };
static const struct net_device_ops mac802154_monitor_ops = { static const struct net_device_ops mac802154_monitor_ops = {
.ndo_open = mac802154_slave_open, .ndo_open = mac802154_wpan_open,
.ndo_stop = mac802154_slave_close, .ndo_stop = mac802154_slave_close,
.ndo_start_xmit = ieee802154_monitor_start_xmit, .ndo_start_xmit = ieee802154_monitor_start_xmit,
}; };
...@@ -434,6 +440,8 @@ void mac802154_wpan_setup(struct net_device *dev) ...@@ -434,6 +440,8 @@ void mac802154_wpan_setup(struct net_device *dev)
sdata->pan_id = cpu_to_le16(IEEE802154_PANID_BROADCAST); sdata->pan_id = cpu_to_le16(IEEE802154_PANID_BROADCAST);
sdata->short_addr = cpu_to_le16(IEEE802154_ADDR_BROADCAST); sdata->short_addr = cpu_to_le16(IEEE802154_ADDR_BROADCAST);
sdata->promisuous_mode = false;
mac802154_llsec_init(&sdata->sec); mac802154_llsec_init(&sdata->sec);
} }
...@@ -453,4 +461,6 @@ void mac802154_monitor_setup(struct net_device *dev) ...@@ -453,4 +461,6 @@ void mac802154_monitor_setup(struct net_device *dev)
sdata = IEEE802154_DEV_TO_SUB_IF(dev); sdata = IEEE802154_DEV_TO_SUB_IF(dev);
sdata->type = IEEE802154_DEV_MONITOR; sdata->type = IEEE802154_DEV_MONITOR;
sdata->promisuous_mode = true;
} }
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment