.-------------------------------------------------------------------------------------------------------. | Userspace | '-----------------^----------------------------------^----------------------------------^---------------' | | socket | | v | | .------------------------------. | | socket | IPv6 | | | '------------------------------' | netlink | ^ | .------------------|-----------------------------------------|---------------------------|-----------------. | | ieee802154 | | | |------------------|-----------------------------------------|---------------------------|-----------------| | v v | | | .---------------------------------. .-----------------------------. | | | | 802.15.4 Sockets | | 802.15.4 6LoWPAN | | | | |---------------------------------| |-----------------------------| .---------------v-------------. | | |.--------------. .--------------.| | | | nl802154 | | | || DGRAM | | RAW || | .-----------------------. | |-----------------------------| | | || data payload | | full frame || | | Generic 6LoWPAN | | | | | | |'------^-------' '--------------'| | | .-------------------. | | | .----------. .-----------. | | | | | | ^ | | | | NHC | | | | | mlme | | cmd, etc. | | | | | | | | | | | '-------------------' | | | |----------| |-----------| | | | | v | | | | '-------------^---------' | | | assoc. | | panid | | | | | .------------. | | | | | | | | deassoc. | | channel | | | | | | dataframes | tx| | rx | | .--------v--------. | | | ... | | ... | | | | | '------------' | | | | | dataframes | | | '----------' '-----------' | | | | | ^ | | | | '-------^-|-------' | | | ^ | | | '-----|----|-------------|-|------' '---------------|-|-----------' | | | | | | | | | |-----------. | | | | | | | | tx | |rx '-------| | | | '-------|-------------|-------' | | | |---------------------|-----|------. rx| |tx | | | | v | | | | | | | | | .------------------------------. | | | | | | | | | | frame creation | | | | | | | | | | |------------------------------| | | | | | | | | | | generic functions <-|-----|--------------' | | | | | - wpan_dev callbacks struct? | | | | | | | | | | instead dev_hard_header | | | | | .-------------------. | | | ******| different HardMAC/SoftMAC | | | | | | mlme operations | | | | * | | - data | | | | | | |<-' | | * | | --- for mlme --- | | | | | '-------------------' | | * | | - beacon | | | | | | | | * | | - cmd | | | | | | | | * | | - ack? -> (slotted mode) | | | | | | | | * | '--------------|---------------' |.-------------------------. | | | * | v || 802.15.4 packet_layer | | ----------' | * | .----------------. |'-------------------------' | | | * | | dev_queue_xmit |<--------' ^ | | | * | '----------------' | | | | * '----------------|------------------------------|----------------------|-------------|---------------------' * .-----|------------------------------|----------------------|-------------|------------. * | | | mac802154 | | | * |-----|------------------------------|----------------------v-------------v------------| * | | | .-------------..-----------. | *******************************************************************>| do mlme ops || cfg802154 | | can use frame creation | | .--------------------------|-------------. '-------------'|-----------| | | | | Frame parsing (call netif_receive_skb) | | | panid |--------| | | |----------------------------------------| | | shortaddr | | | | | | again check if 802.15.4 compliant | | | etc. | | | | | | different handling coordinator/node | | '-----------' | | | | | set packet type (e.g. PACKET_HOST) | | | | | | '---------------------^------------------' | | | | | | | tx workqueue | | | |ndo_start_xmit | |-----------------------' | | .--------------. | | .------------------|---|--------------------------------------. | | | e.g. tcpdump | | | | | |interface types | | | '--------------' | | |------------------|---|--------------------------------------| | | ^ | | | | | | | | | | | | .----------------|---v-----------. .---------------------. | | | | | | | | frames | | frames | | mac sett. | | .-----------. | '--------> for rx, filtered by phy | | non-filtered by phy | |<------------| | af_packet | | | |--------------------------------| |---------------------| | | | '-----------' | .---| | | | |----. | | ^ | | | | .-------------. .-----------. | | .-----------. | | | | | | | | | | | coordinator | | node | | | | monitor |-----------------------|----------' | | | | '------^------' '-----^-----' | | '-----------' | | | | | | | | '--------|---------------|-------' '-------^-------------' | | | | | | '----------|---------------|------------------|---------------' | | | | | | rx/tx | rx/tx |rx/tx not possible(no AACK)| | | | | | |--------| | | | '--------|--------------|---------------|---------|--------|------------------|--------' | | v v | | | | | =================================== | | | | ^ ^ ^ | | | | .------|----------|----------|-----------|------. | | each interface type has | | | | Frames | | | | if AACK, ack frames are handled different phy address filters| |------|----------|----------|-----------|------| | by phy layer, not driver. - sets mac settings on ifup | | .----v----..----v----..----v----. .---------. | AACK ----|---> | | | data || cmd || beacon | | ack |------. | AACK disabled if promiscuous mode. | | '----^----''----^----''----^----' '----^----' | | | Then driver receives ack frames. | '------|----------|----------|-----------.------' | | | | | | | . | | | | | | | . | | sets promiscuous mode | .------v----------v----------v-----------v------. | | | | | 802.15.4 SoftMAC Driver | | | | | |-----------------------------------------------| | | | | | - supports always AACK handling | | | | -------->| - ACK handling is done by phy (AACK) |<----------- | | - on AACK, ACK frames doesn't reach driver |<---------------------- | - filtering (CRC, address, what phy can do..) | | phy settings '-----------------------------------------------' | ^ | | | v | .----------------------. | | 802.15.4 SoftMAC PHY |<----------------' '----------------------'