From: Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
To: Marcel Holtmann <marcel@holtmann.org>
Cc: linux-kernel@vger.kernel.org, netdev@vger.kernel.org,
linux-wireless@vger.kernel.org, slapin@ossfans.org,
davem@davemloft.net, Stephen Rothwell <sfr@canb.auug.org.au>
Subject: Re: [PATCH 4/5] ieee802154: add documentation about our stack
Date: Fri, 5 Jun 2009 20:00:06 +0400 [thread overview]
Message-ID: <bc64b4640906050900y233aecd3j24dddb4fd9d2820@mail.gmail.com> (raw)
In-Reply-To: <1244211945.23850.53.camel@localhost.localdomain>
2009/6/5 Marcel Holtmann <marcel@holtmann.org>:
> Hi Dmitry,
>
>> >> Add MAINTAINERS entry and a small text describing our stack interfaces,
>> >> how to hook the drivers, etc.
>> >>
>> >> Signed-off-by: Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
>> >> Signed-off-by: Sergey Lapin <slapin@ossfans.org>
>> >> ---
>> >> Documentation/networking/ieee802154.txt | 76 +++++++++++++++++++++++++++++++
>> >> MAINTAINERS | 12 +++++
>> >> 2 files changed, 88 insertions(+), 0 deletions(-)
>> >> create mode 100644 Documentation/networking/ieee802154.txt
>> >>
>> >> diff --git a/Documentation/networking/ieee802154.txt b/Documentation/networking/ieee802154.txt
>> >> new file mode 100644
>> >> index 0000000..a0280ad
>> >> --- /dev/null
>> >> +++ b/Documentation/networking/ieee802154.txt
>> >> @@ -0,0 +1,76 @@
>> >> +
>> >> + Linux IEEE 802.15.4 implementation
>> >> +
>> >> +
>> >> +Introduction
>> >> +============
>> >> +
>> >> +The Linux-ZigBee project goal is to provide complete implementation
>> >> +of IEEE 802.15.4 / ZigBee / 6LoWPAN protocols. IEEE 802.15.4 is a stack
>> >> +of protocols for organizing Low-Rate Wireless Personal Area Networks.
>> >> +
>> >> +Currently only IEEE 802.15.4 layer is implemented. We have choosen
>> >> +to use plain Berkeley socket API, the generic Linux networking stack
>> >> +to transfer IEEE 802.15.4 messages and a special protocol over genetlink
>> >> +for configuration/management
>> >> +
>> >> +
>> >> +Socket API
>> >> +==========
>> >> +
>> >> +int sd = socket(PF_IEEE802154, SOCK_DGRAM, 0);
>> >> +.....
>> >> +
>> >> +The address family, socket addresses etc. are defined in the
>> >> +include/net/ieee802154/af_ieee802154.h header or in the special header
>> >> +in our userspace package (see either linux-zigbee sourceforge download page
>> >> +or git tree at git://linux-zigbee.git.sourceforge.net/gitroot/linux-zigbee).
>> >> +
>> >> +One can use SOCK_RAW for passing raw data towards device xmit function. YMMV.
>> >> +
>> >> +
>> >> +MLME - MAC Level Management
>> >> +============================
>> >> +
>> >> +Most of IEEE 802.15.4 MLME interfaces are directly mapped on netlink commands.
>> >> +See the include/net/ieee802154/nl802154.h header. Our userspace tools package
>> >> +(see above) provides CLI configuration utility for radio interfaces and simple
>> >> +coordinator for IEEE 802.15.4 networks as an example users of MLME protocol.
>> >> +
>> >> +
>> >> +Kernel side
>> >> +=============
>> >> +
>> >> +Like with WiFi, there are several types of devices implementing IEEE 802.15.4.
>> >> +1) 'HardMAC'. The MAC layer is implemented in the device itself, the device
>> >> + exports MLME and data API.
>> >> +2) 'SoftMAC' or just radio. These types of devices are just radio transceivers
>> >> + possibly with some kinds of acceleration like automatic CRC computation and
>> >> + comparation, automagic ACK handling, address matching, etc.
>> >> +
>> >> +Those types of devices require different approach to be hooked into Linux kernel.
>> >> +
>> >> +
>> >> +HardMAC
>> >> +=======
>> >> +
>> >> +See the header include/net/ieee802154/netdevice.h. You have to implement Linux
>> >> +net_device, with .type = ARPHRD_IEEE802154. Data is exchanged with socket family
>> >> +code via plain sk_buffs. The control block of sk_buffs will contain additional
>> >> +info as described in the struct ieee802154_mac_cb.
>> >
>> > are you sending IP packets over this ARPHRD_IEEE802154 network devices
>> > or are you just abusing it as a control interface. If it is the later
>> > then can we please stop doing this. I really dislike these irda0,
>> > wmaster0 and alike stuff. If you can't configure it as real IP device,
>> > you should not use struct net_device at all from my point of view. For
>> > all your control details you have netlink so no need for an extra device
>> > here unless it can actually talk IP (or similar like IPX etc.).
>>
>> Hmm. Once I've thought about it, as net_device seemed a Really Big Thing to me
>> to be used for our stack. However from the beginning we wanted to use plain BSD
>> sockets API, we wanted to use sk_buffs (of course) for the whole
>> message interface.
>> And when prototyping lowpan_device, I ended duplicating lots of net_device
>> functionality on my own.
>> Either we have to develop some lightweight "net_device" abstracted from IP & Ko,
>> but containing sk_buff queues, header ops, etc, or end up with functionality
>> duplication and hacks like in bluetooth (where skb->dev is used to store hci_dev
>> instead of net_device).
>
> that skb->dev pointer is typed as net_device is just a cosmetic detail
> from my point of view. And having Bluetooth use it as hci_dev is not
> actually a hack. We just can't send Bluetooth HCI skb directly to the IP
> layer, but we also don't do that ;)
>
>> Hmm. AX.25, AppleTalk, CAN, DecNet, most of other procotols sitting inside
>> Linux kernel do use net_device structure, why should we differ?
>
> Don't know about CAN since I never looked deep enough into it. However
> for the other, they do transport some sort of networking packets over
> it. So my point is as long as I can use ifconfig of ip to set an address
> on these interfaces and route them it makes sense to. Just to reuse
> net_device because it is convenient for a control interface sounds wrong
> to me. The IrDA stuff is one big example of this.
Hmm. Let's make things clear: do you request for ip/ifconfig to be working
upon a net_device or do you request that network packets are transmitted
over the net_device?
>> Moreover, once we implement 6lowpan support (an encapsulation for IPv6 frames
>> into IEEE 802.15.4 ones) it will be possible to send IPv6 frames directly over
>> IEEE 802.15.4.
>
> So using the socket interfaces has nothing do with the net_device you
> are creating. So that argument doesn't work for me. Even mac80211
> nowadays uses a proper hardware abstraction (ieee80211_hw and
> ieee80211_ops) and you should do the same.
We have more or less the same abstraction for the simple radios (if you'd like,
please check the serie at the branch for-review-v2, or the serie that was posted
several days ago. Basically simple radio provide interface for packet rx/tx,
energy detection, etc. Then mac802154 (mac80211 analogy) comes into play:
all radio packets, queue processing, etc. are guided by master interface, which
multiplexes packets from/to one or several ARPHRD_IEEE802154 interfaces.
Those interfaces then decode if the packet is beacon, command or data frame,
passes data frames to socket family, calls netlink callbacks for commands, etc.
While I understand that master interface can be dropped/replaced by
non-net_device thing, I think that logical interfaces should be provided
via net_device. Please correct me if I'm wrong here.
For HardMAC (that part that is presented in this patchseri) we've cut
this scheme
directly at ARPHRD_IEEE802154 device. The device driver on it's own sends/
receives data frames via hardware and calls MLME callbacks where appropriate.
> Once you have actually implemented 6lowpan then these are the ones that
> should use net_device and show up within ifconfig.
--
With best wishes
Dmitry
next prev parent reply other threads:[~2009-06-05 16:00 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-06-05 2:29 [PULL REQUEST] IEEE 802.15.4 stack: generic parts v2 Dmitry Eremin-Solenikov
2009-06-05 2:29 ` [PATCH 1/5] Add constants for the ieee 802.15.4 stack Dmitry Eremin-Solenikov
2009-06-05 2:29 ` [PATCH 2/5] net: add IEEE 802.15.4 socket family implementation Dmitry Eremin-Solenikov
2009-06-05 2:29 ` [PATCH 3/5] net: add NL802154 interface for configuration of 802.15.4 devices Dmitry Eremin-Solenikov
2009-06-05 2:29 ` [PATCH 4/5] ieee802154: add documentation about our stack Dmitry Eremin-Solenikov
2009-06-05 2:29 ` [PATCH 5/5] ieee802154: add simple HardMAC driver sample Dmitry Eremin-Solenikov
2009-06-05 13:18 ` [PATCH 4/5] ieee802154: add documentation about our stack Marcel Holtmann
2009-06-05 13:40 ` Dmitry Eremin-Solenikov
2009-06-05 14:25 ` Marcel Holtmann
2009-06-05 16:00 ` Dmitry Eremin-Solenikov [this message]
2009-06-06 7:12 ` Maxim Osipov
2009-06-05 6:52 ` [PATCH 3/5] net: add NL802154 interface for configuration of 802.15.4 devices Johannes Berg
2009-06-05 7:15 ` Dmitry Eremin-Solenikov
2009-06-05 7:54 ` David Miller
2009-06-05 9:12 ` Dmitry Eremin-Solenikov
2009-06-05 9:46 ` Sergey Lapin
2009-06-05 10:45 ` Dmitry Eremin-Solenikov
2009-06-05 11:51 ` Jesper Dangaard Brouer
2009-06-05 13:23 ` Marcel Holtmann
2009-06-05 13:27 ` Dmitry Eremin-Solenikov
2009-06-06 0:58 ` David Miller
2009-06-06 7:06 ` Dmitry Eremin-Solenikov
2009-06-07 1:18 [PATCH 0/5] IEEE 802.15.4 stack: generic parts v3 Sergey Lapin
2009-06-07 1:18 ` [PATCH 1/5] Add constants for the ieee 802.15.4 stack Sergey Lapin
2009-06-07 1:18 ` [PATCH 2/5] net: add IEEE 802.15.4 socket family implementation Sergey Lapin
2009-06-07 1:18 ` [PATCH 3/5] net: add NL802154 interface for configuration of 802.15.4 devices Sergey Lapin
2009-06-07 1:18 ` [PATCH 4/5] ieee802154: add documentation about our stack Sergey Lapin
2009-06-08 22:18 [PULL REQUEST] IEEE 802.15.4 stack: generic parts v4 Sergey Lapin
2009-06-08 22:18 ` [PATCH 1/5] Add constants for the ieee 802.15.4 stack Sergey Lapin
2009-06-08 22:18 ` [PATCH 2/5] net: add IEEE 802.15.4 socket family implementation Sergey Lapin
2009-06-08 22:18 ` [PATCH 3/5] net: add NL802154 interface for configuration of 802.15.4 devices Sergey Lapin
2009-06-08 22:18 ` [PATCH 4/5] ieee802154: add documentation about our stack Sergey Lapin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=bc64b4640906050900y233aecd3j24dddb4fd9d2820@mail.gmail.com \
--to=dbaryshkov@gmail.com \
--cc=davem@davemloft.net \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-wireless@vger.kernel.org \
--cc=marcel@holtmann.org \
--cc=netdev@vger.kernel.org \
--cc=sfr@canb.auug.org.au \
--cc=slapin@ossfans.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®