diff options
-rw-r--r-- | net/mac802154/mac_cmd.c | 24 | ||||
-rw-r--r-- | net/mac802154/wpan.c | 26 |
2 files changed, 47 insertions, 3 deletions
diff --git a/net/mac802154/mac_cmd.c b/net/mac802154/mac_cmd.c index afb4e2cbc00a..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) |
diff --git a/net/mac802154/wpan.c b/net/mac802154/wpan.c index 00729ca1e30a..23bc91cf99c4 100644 --- a/net/mac802154/wpan.c +++ b/net/mac802154/wpan.c | |||
@@ -35,6 +35,28 @@ | |||
35 | 35 | ||
36 | #include "mac802154.h" | 36 | #include "mac802154.h" |
37 | 37 | ||
38 | static int mac802154_wpan_update_llsec(struct net_device *dev) | ||
39 | { | ||
40 | struct mac802154_sub_if_data *priv = netdev_priv(dev); | ||
41 | struct ieee802154_mlme_ops *ops = ieee802154_mlme_ops(dev); | ||
42 | int rc = 0; | ||
43 | |||
44 | if (ops->llsec) { | ||
45 | struct ieee802154_llsec_params params; | ||
46 | int changed = 0; | ||
47 | |||
48 | params.pan_id = priv->pan_id; | ||
49 | changed |= IEEE802154_LLSEC_PARAM_PAN_ID; | ||
50 | |||
51 | params.hwaddr = priv->extended_addr; | ||
52 | changed |= IEEE802154_LLSEC_PARAM_HWADDR; | ||
53 | |||
54 | rc = ops->llsec->set_params(dev, ¶ms, changed); | ||
55 | } | ||
56 | |||
57 | return rc; | ||
58 | } | ||
59 | |||
38 | static int | 60 | static int |
39 | mac802154_wpan_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) | 61 | mac802154_wpan_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) |
40 | { | 62 | { |
@@ -81,7 +103,7 @@ mac802154_wpan_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) | |||
81 | priv->pan_id = cpu_to_le16(sa->addr.pan_id); | 103 | priv->pan_id = cpu_to_le16(sa->addr.pan_id); |
82 | priv->short_addr = cpu_to_le16(sa->addr.short_addr); | 104 | priv->short_addr = cpu_to_le16(sa->addr.short_addr); |
83 | 105 | ||
84 | err = 0; | 106 | err = mac802154_wpan_update_llsec(dev); |
85 | break; | 107 | break; |
86 | } | 108 | } |
87 | 109 | ||
@@ -99,7 +121,7 @@ static int mac802154_wpan_mac_addr(struct net_device *dev, void *p) | |||
99 | /* FIXME: validate addr */ | 121 | /* FIXME: validate addr */ |
100 | memcpy(dev->dev_addr, addr->sa_data, dev->addr_len); | 122 | memcpy(dev->dev_addr, addr->sa_data, dev->addr_len); |
101 | mac802154_dev_set_ieee_addr(dev); | 123 | mac802154_dev_set_ieee_addr(dev); |
102 | return 0; | 124 | return mac802154_wpan_update_llsec(dev); |
103 | } | 125 | } |
104 | 126 | ||
105 | int mac802154_set_mac_params(struct net_device *dev, | 127 | int mac802154_set_mac_params(struct net_device *dev, |