]>
Commit | Line | Data |
---|---|---|
6e2128d4 | 1 | /* |
2 | * MAC commands interface | |
3 | * | |
4 | * Copyright 2007-2012 Siemens AG | |
5 | * | |
6 | * This program is free software; you can redistribute it and/or modify | |
7 | * it under the terms of the GNU General Public License version 2 | |
8 | * as published by the Free Software Foundation. | |
9 | * | |
10 | * This program is distributed in the hope that it will be useful, | |
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
13 | * GNU General Public License for more details. | |
14 | * | |
6e2128d4 | 15 | * Written by: |
16 | * Sergey Lapin <slapin@ossfans.org> | |
17 | * Dmitry Eremin-Solenikov <dbaryshkov@gmail.com> | |
18 | * Alexander Smirnov <alex.bluesman.smirnov@gmail.com> | |
19 | */ | |
20 | ||
21 | #include <linux/skbuff.h> | |
22 | #include <linux/if_arp.h> | |
23 | ||
5265f467 | 24 | #include <net/ieee802154.h> |
6e2128d4 | 25 | #include <net/ieee802154_netdev.h> |
26 | #include <net/wpan-phy.h> | |
27 | #include <net/mac802154.h> | |
5265f467 | 28 | #include <net/nl802154.h> |
6e2128d4 | 29 | |
0f1556bc | 30 | #include "ieee802154_i.h" |
6e2128d4 | 31 | |
5265f467 | 32 | static int mac802154_mlme_start_req(struct net_device *dev, |
ae531b94 | 33 | struct ieee802154_addr *addr, |
5265f467 | 34 | u8 channel, u8 page, |
35 | u8 bcn_ord, u8 sf_ord, | |
36 | u8 pan_coord, u8 blx, | |
37 | u8 coord_realign) | |
38 | { | |
9b0bb4a8 PB |
39 | struct ieee802154_mlme_ops *ops = ieee802154_mlme_ops(dev); |
40 | int rc = 0; | |
41 | ||
ae531b94 | 42 | BUG_ON(addr->mode != IEEE802154_ADDR_SHORT); |
5265f467 | 43 | |
ae531b94 PB |
44 | mac802154_dev_set_pan_id(dev, addr->pan_id); |
45 | mac802154_dev_set_short_addr(dev, addr->short_addr); | |
5265f467 | 46 | mac802154_dev_set_ieee_addr(dev); |
47 | mac802154_dev_set_page_channel(dev, page, channel); | |
48 | ||
9b0bb4a8 PB |
49 | if (ops->llsec) { |
50 | struct ieee802154_llsec_params params; | |
51 | int changed = 0; | |
52 | ||
53 | params.coord_shortaddr = addr->short_addr; | |
54 | changed |= IEEE802154_LLSEC_PARAM_COORD_SHORTADDR; | |
55 | ||
56 | params.pan_id = addr->pan_id; | |
57 | changed |= IEEE802154_LLSEC_PARAM_PAN_ID; | |
58 | ||
59 | params.hwaddr = ieee802154_devaddr_from_raw(dev->dev_addr); | |
60 | changed |= IEEE802154_LLSEC_PARAM_HWADDR; | |
61 | ||
62 | params.coord_hwaddr = params.hwaddr; | |
63 | changed |= IEEE802154_LLSEC_PARAM_COORD_HWADDR; | |
64 | ||
65 | rc = ops->llsec->set_params(dev, ¶ms, changed); | |
66 | } | |
67 | ||
5265f467 | 68 | /* FIXME: add validation for unused parameters to be sane |
69 | * for SoftMAC | |
70 | */ | |
71 | ieee802154_nl_start_confirm(dev, IEEE802154_SUCCESS); | |
72 | ||
9b0bb4a8 | 73 | return rc; |
5265f467 | 74 | } |
75 | ||
42884042 | 76 | static struct wpan_phy *mac802154_get_phy(const struct net_device *dev) |
6e2128d4 | 77 | { |
78 | struct mac802154_sub_if_data *priv = netdev_priv(dev); | |
79 | ||
80 | BUG_ON(dev->type != ARPHRD_IEEE802154); | |
81 | ||
82 | return to_phy(get_device(&priv->hw->phy->dev)); | |
83 | } | |
84 | ||
29e02374 PB |
85 | static struct ieee802154_llsec_ops mac802154_llsec_ops = { |
86 | .get_params = mac802154_get_params, | |
87 | .set_params = mac802154_set_params, | |
88 | .add_key = mac802154_add_key, | |
89 | .del_key = mac802154_del_key, | |
90 | .add_dev = mac802154_add_dev, | |
91 | .del_dev = mac802154_del_dev, | |
92 | .add_devkey = mac802154_add_devkey, | |
93 | .del_devkey = mac802154_del_devkey, | |
94 | .add_seclevel = mac802154_add_seclevel, | |
95 | .del_seclevel = mac802154_del_seclevel, | |
96 | .lock_table = mac802154_lock_table, | |
97 | .get_table = mac802154_get_table, | |
98 | .unlock_table = mac802154_unlock_table, | |
99 | }; | |
100 | ||
6e2128d4 | 101 | struct ieee802154_reduced_mlme_ops mac802154_mlme_reduced = { |
102 | .get_phy = mac802154_get_phy, | |
103 | }; | |
32bad7e3 | 104 | |
105 | struct ieee802154_mlme_ops mac802154_mlme_wpan = { | |
106 | .get_phy = mac802154_get_phy, | |
5265f467 | 107 | .start_req = mac802154_mlme_start_req, |
e885a47a | 108 | .get_pan_id = mac802154_dev_get_pan_id, |
109 | .get_short_addr = mac802154_dev_get_short_addr, | |
0483546a | 110 | .get_dsn = mac802154_dev_get_dsn, |
e462ded6 | 111 | |
29e02374 PB |
112 | .llsec = &mac802154_llsec_ops, |
113 | ||
e462ded6 PB |
114 | .set_mac_params = mac802154_set_mac_params, |
115 | .get_mac_params = mac802154_get_mac_params, | |
32bad7e3 | 116 | }; |