Hi Alex, > I already thought many times to introduce something like that. Here is a draft > for introducing the generic 6lowpan private data into each lowpan interface. > For the beginning I introduced the enum "lltype" which contains the LL type of > a lowpan interface. > > Use cases for such feature (LL types): > > - If we do in upper layers (6LoWPAN/IPv6) a evaluation of dev->type then > the value is on all lowpan interfaces "APRHRD_6LOWPAN". If we checked on > "dev->type" and it's ARPHRD_6LOWPAN we can safe use lowpan_priv to get > 6LoWPAN generic private data. With this data we can check the LL type which > can be currently BTLE or IEEE802154. This could be useful to make different > handling in iphc compress/decompress and evaluating LL private data of skb > control block "skb->cb". > > Example (802.15.4 has different address handling functionality): > > switch (lowpan_priv(dev)->lltype) { > case LOWPAN_LLTYPE_BTLE: > /* do EUI64 btle handling */ > break; > case LOWPAN_LLTYPE_IEEE802154: > /* do complicated short/extended address handling */ > /* we can surely call skb->cb to some other private data from LL > which was set before iphc compress/decompress function call */ > break; > } > > The handling is currently for 802.15.4 is in generic 6lowpan code currently > not quite. This should be handled by private data. At the moment btle use > the same handling like for 802.15.4 extended address. Nevertheless is we can > cleanup some handling then in generic iphc functionality. > > This also possible in layers like IPv6, just doing a check on APRHRD_6LOWPAN > before calling lowpan_priv(dev)->lltype, then we are sure that the private > data of the interface is a 6LoWPAN interface and we can cast it to lowpan_priv. > Then we can do 6LoWPAN generic stuff OR 6lowpan specific LL stuff. > > - In Lukasz Duda RFC for introducing stateful address compression, I saw > some behaviour which such functionality is also useful. Currently we don't > have a allocated space for a 6LoWPAN generic space which is assigned to a > lowpan interface. When LL layers (BTLE, IEEE802154) calls iphc > compress/decompress Lukasz had no change to access some room which is needed > for storing the context information into a table. The workaround for this > feature was to add allocate a static data room for the table and doing a > lookup/match of netdev name. Which a generic 6lowpan private data room per each > lowpan interface we can put this table according to the netdev private room, > which means in short: no lookup is needed anymore, just dereferencing lowpan_priv. > > In upper layer like IPv6 Lukasz could use that to get the stateful context > table information as an example for doing 6LoWPAN generic stuff in upper > layers. > > > Note about the implementation for LL 6LoWPAN private pointer: > > I stole some mechanism from wireless for that. See [0], the vif struct is part > of sdata which is also part of private data of a wireless interface (mac80211). > I hope I can just adapt this behaviour. > > - Alex > > Cc: Jonathan Corbet <corbet@xxxxxxx> > Cc: linux-doc@xxxxxxxxxxxxxxx > > [0] http://lxr.free-electrons.com/source/include/net/mac80211.h#L1366 > > changes since PATCH (was RFC before): > - rename ll_type,ll_foo to lltype, llfoo > - add documentation for generic 6lowpan interfaces API > - add net/6lowpan/core.c for core functionality, like setup or cleanup > lowpan netdev interfaces, which is necessary e.g. heap allocation/free > - add LOWPAN_PRIV_SIZE for provide API functionality to calculate > private data > - rebase to current bluetooth-next/master > - add documentation in cc for the Documentation branch > > changes since v2: > - rename L2/l2 to LL/ll. I think the usually word in ietf for L2 is > LL which means "link layer". Also ipv6 stack use ll for variables like > lladdr -> link layer address. > - rebase to current bluetooth-next/master > - remove some brackets in function lowpan_priv. > > Alexander Aring (4): > Bluetooth: 6lowpan: change netdev_priv to lowpan_dev > 6lowpan: add generic 6lowpan netdev private data > 6lowpan: move module_init into core functionality > documentation: networking: add 6lowpan documentation > > Documentation/networking/6lowpan.txt | 51 ++++++++++++++++++++++++++++++++++++ > MAINTAINERS | 1 + > include/net/6lowpan.h | 23 ++++++++++++++++ > net/6lowpan/Makefile | 2 +- > net/6lowpan/core.c | 40 ++++++++++++++++++++++++++++ > net/6lowpan/iphc.c | 19 -------------- > net/bluetooth/6lowpan.c | 11 +++++--- > net/ieee802154/6lowpan/6lowpan_i.h | 3 ++- > net/ieee802154/6lowpan/core.c | 4 ++- > 9 files changed, 128 insertions(+), 26 deletions(-) > create mode 100644 Documentation/networking/6lowpan.txt > create mode 100644 net/6lowpan/core.c I went ahead and applied all 4 patches to bluetooth-next tree. That way they get exposure. Regards Marcel -- To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html