| Sergey Lapin | 02cf228 | 2009-06-08 12:18:50 +0000 | [diff] [blame] | 1 |  | 
 | 2 | 		Linux IEEE 802.15.4 implementation | 
 | 3 |  | 
 | 4 |  | 
 | 5 | Introduction | 
 | 6 | ============ | 
 | 7 |  | 
 | 8 | The Linux-ZigBee project goal is to provide complete implementation | 
 | 9 | of IEEE 802.15.4 / ZigBee / 6LoWPAN protocols. IEEE 802.15.4 is a stack | 
 | 10 | of protocols for organizing Low-Rate Wireless Personal Area Networks. | 
 | 11 |  | 
 | 12 | Currently only IEEE 802.15.4 layer is implemented. We have choosen | 
 | 13 | to use plain Berkeley socket API, the generic Linux networking stack | 
 | 14 | to transfer IEEE 802.15.4 messages and a special protocol over genetlink | 
 | 15 | for configuration/management | 
 | 16 |  | 
 | 17 |  | 
 | 18 | Socket API | 
 | 19 | ========== | 
 | 20 |  | 
 | 21 | int sd = socket(PF_IEEE802154, SOCK_DGRAM, 0); | 
 | 22 | ..... | 
 | 23 |  | 
 | 24 | The address family, socket addresses etc. are defined in the | 
| Dmitry Baryshkov | 48a2f11 | 2009-08-07 02:58:39 +0000 | [diff] [blame] | 25 | include/net/af_ieee802154.h header or in the special header | 
| Sergey Lapin | 02cf228 | 2009-06-08 12:18:50 +0000 | [diff] [blame] | 26 | in our userspace package (see either linux-zigbee sourceforge download page | 
 | 27 | or git tree at git://linux-zigbee.git.sourceforge.net/gitroot/linux-zigbee). | 
 | 28 |  | 
 | 29 | One can use SOCK_RAW for passing raw data towards device xmit function. YMMV. | 
 | 30 |  | 
 | 31 |  | 
 | 32 | MLME - MAC Level Management | 
 | 33 | ============================ | 
 | 34 |  | 
 | 35 | Most of IEEE 802.15.4 MLME interfaces are directly mapped on netlink commands. | 
| Dmitry Baryshkov | 48a2f11 | 2009-08-07 02:58:39 +0000 | [diff] [blame] | 36 | See the include/net/nl802154.h header. Our userspace tools package | 
| Sergey Lapin | 02cf228 | 2009-06-08 12:18:50 +0000 | [diff] [blame] | 37 | (see above) provides CLI configuration utility for radio interfaces and simple | 
 | 38 | coordinator for IEEE 802.15.4 networks as an example users of MLME protocol. | 
 | 39 |  | 
 | 40 |  | 
 | 41 | Kernel side | 
 | 42 | ============= | 
 | 43 |  | 
 | 44 | Like with WiFi, there are several types of devices implementing IEEE 802.15.4. | 
 | 45 | 1) 'HardMAC'. The MAC layer is implemented in the device itself, the device | 
 | 46 |    exports MLME and data API. | 
 | 47 | 2) 'SoftMAC' or just radio. These types of devices are just radio transceivers | 
 | 48 |    possibly with some kinds of acceleration like automatic CRC computation and | 
 | 49 |    comparation, automagic ACK handling, address matching, etc. | 
 | 50 |  | 
 | 51 | Those types of devices require different approach to be hooked into Linux kernel. | 
 | 52 |  | 
 | 53 |  | 
 | 54 | HardMAC | 
 | 55 | ======= | 
 | 56 |  | 
| Dmitry Baryshkov | 48a2f11 | 2009-08-07 02:58:39 +0000 | [diff] [blame] | 57 | See the header include/net/ieee802154_netdev.h. You have to implement Linux | 
| Sergey Lapin | 02cf228 | 2009-06-08 12:18:50 +0000 | [diff] [blame] | 58 | net_device, with .type = ARPHRD_IEEE802154. Data is exchanged with socket family | 
| Dmitry Eremin-Solenikov | a0aea57 | 2009-08-19 18:53:39 +0400 | [diff] [blame] | 59 | code via plain sk_buffs. On skb reception skb->cb must contain additional | 
 | 60 | info as described in the struct ieee802154_mac_cb. During packet transmission | 
 | 61 | the skb->cb is used to provide additional data to device's header_ops->create | 
 | 62 | function. Be aware, that this data can be overriden later (when socket code | 
 | 63 | submits skb to qdisc), so if you need something from that cb later, you should | 
 | 64 | store info in the skb->data on your own. | 
| Sergey Lapin | 02cf228 | 2009-06-08 12:18:50 +0000 | [diff] [blame] | 65 |  | 
 | 66 | To hook the MLME interface you have to populate the ml_priv field of your | 
 | 67 | net_device with a pointer to struct ieee802154_mlme_ops instance. All fields are | 
 | 68 | required. | 
 | 69 |  | 
 | 70 | We provide an example of simple HardMAC driver at drivers/ieee802154/fakehard.c | 
 | 71 |  | 
 | 72 |  | 
 | 73 | SoftMAC | 
 | 74 | ======= | 
 | 75 |  | 
| Thadeu Lima de Souza Cascardo | 987b881 | 2009-07-26 12:34:40 -0300 | [diff] [blame] | 76 | We are going to provide intermediate layer implementing IEEE 802.15.4 MAC | 
| Sergey Lapin | 02cf228 | 2009-06-08 12:18:50 +0000 | [diff] [blame] | 77 | in software. This is currently WIP. | 
 | 78 |  | 
| Dmitry Baryshkov | 48a2f11 | 2009-08-07 02:58:39 +0000 | [diff] [blame] | 79 | See header include/net/mac802154.h and several drivers in drivers/ieee802154/. | 
| Dmitry Eremin-Solenikov | a0aea57 | 2009-08-19 18:53:39 +0400 | [diff] [blame] | 80 |  |