diff options
Diffstat (limited to 'net/mac802154/mac_cmd.c')
-rw-r--r-- | net/mac802154/mac_cmd.c | 42 |
1 files changed, 41 insertions, 1 deletions
diff --git a/net/mac802154/mac_cmd.c b/net/mac802154/mac_cmd.c index d40c0928bc62..bf809131eef7 100644 --- a/net/mac802154/mac_cmd.c +++ b/net/mac802154/mac_cmd.c | |||
@@ -40,6 +40,9 @@ static int mac802154_mlme_start_req(struct net_device *dev, | |||
40 | u8 pan_coord, u8 blx, | 40 | u8 pan_coord, u8 blx, |
41 | u8 coord_realign) | 41 | u8 coord_realign) |
42 | { | 42 | { |
43 | struct ieee802154_mlme_ops *ops = ieee802154_mlme_ops(dev); | ||
44 | int rc = 0; | ||
45 | |||
43 | BUG_ON(addr->mode != IEEE802154_ADDR_SHORT); | 46 | BUG_ON(addr->mode != IEEE802154_ADDR_SHORT); |
44 | 47 | ||
45 | mac802154_dev_set_pan_id(dev, addr->pan_id); | 48 | mac802154_dev_set_pan_id(dev, addr->pan_id); |
@@ -47,12 +50,31 @@ static int mac802154_mlme_start_req(struct net_device *dev, | |||
47 | mac802154_dev_set_ieee_addr(dev); | 50 | mac802154_dev_set_ieee_addr(dev); |
48 | mac802154_dev_set_page_channel(dev, page, channel); | 51 | mac802154_dev_set_page_channel(dev, page, channel); |
49 | 52 | ||
53 | if (ops->llsec) { | ||
54 | struct ieee802154_llsec_params params; | ||
55 | int changed = 0; | ||
56 | |||
57 | params.coord_shortaddr = addr->short_addr; | ||
58 | changed |= IEEE802154_LLSEC_PARAM_COORD_SHORTADDR; | ||
59 | |||
60 | params.pan_id = addr->pan_id; | ||
61 | changed |= IEEE802154_LLSEC_PARAM_PAN_ID; | ||
62 | |||
63 | params.hwaddr = ieee802154_devaddr_from_raw(dev->dev_addr); | ||
64 | changed |= IEEE802154_LLSEC_PARAM_HWADDR; | ||
65 | |||
66 | params.coord_hwaddr = params.hwaddr; | ||
67 | changed |= IEEE802154_LLSEC_PARAM_COORD_HWADDR; | ||
68 | |||
69 | rc = ops->llsec->set_params(dev, ¶ms, changed); | ||
70 | } | ||
71 | |||
50 | /* FIXME: add validation for unused parameters to be sane | 72 | /* FIXME: add validation for unused parameters to be sane |
51 | * for SoftMAC | 73 | * for SoftMAC |
52 | */ | 74 | */ |
53 | ieee802154_nl_start_confirm(dev, IEEE802154_SUCCESS); | 75 | ieee802154_nl_start_confirm(dev, IEEE802154_SUCCESS); |
54 | 76 | ||
55 | return 0; | 77 | return rc; |
56 | } | 78 | } |
57 | 79 | ||
58 | static struct wpan_phy *mac802154_get_phy(const struct net_device *dev) | 80 | static struct wpan_phy *mac802154_get_phy(const struct net_device *dev) |
@@ -64,6 +86,22 @@ static struct wpan_phy *mac802154_get_phy(const struct net_device *dev) | |||
64 | return to_phy(get_device(&priv->hw->phy->dev)); | 86 | return to_phy(get_device(&priv->hw->phy->dev)); |
65 | } | 87 | } |
66 | 88 | ||
89 | static struct ieee802154_llsec_ops mac802154_llsec_ops = { | ||
90 | .get_params = mac802154_get_params, | ||
91 | .set_params = mac802154_set_params, | ||
92 | .add_key = mac802154_add_key, | ||
93 | .del_key = mac802154_del_key, | ||
94 | .add_dev = mac802154_add_dev, | ||
95 | .del_dev = mac802154_del_dev, | ||
96 | .add_devkey = mac802154_add_devkey, | ||
97 | .del_devkey = mac802154_del_devkey, | ||
98 | .add_seclevel = mac802154_add_seclevel, | ||
99 | .del_seclevel = mac802154_del_seclevel, | ||
100 | .lock_table = mac802154_lock_table, | ||
101 | .get_table = mac802154_get_table, | ||
102 | .unlock_table = mac802154_unlock_table, | ||
103 | }; | ||
104 | |||
67 | struct ieee802154_reduced_mlme_ops mac802154_mlme_reduced = { | 105 | struct ieee802154_reduced_mlme_ops mac802154_mlme_reduced = { |
68 | .get_phy = mac802154_get_phy, | 106 | .get_phy = mac802154_get_phy, |
69 | }; | 107 | }; |
@@ -75,6 +113,8 @@ struct ieee802154_mlme_ops mac802154_mlme_wpan = { | |||
75 | .get_short_addr = mac802154_dev_get_short_addr, | 113 | .get_short_addr = mac802154_dev_get_short_addr, |
76 | .get_dsn = mac802154_dev_get_dsn, | 114 | .get_dsn = mac802154_dev_get_dsn, |
77 | 115 | ||
116 | .llsec = &mac802154_llsec_ops, | ||
117 | |||
78 | .set_mac_params = mac802154_set_mac_params, | 118 | .set_mac_params = mac802154_set_mac_params, |
79 | .get_mac_params = mac802154_get_mac_params, | 119 | .get_mac_params = mac802154_get_mac_params, |
80 | }; | 120 | }; |