Berkeley IP Information
Welcome to the project page for blip, the Berkeley IP implementation for low-power networks.
We have developed an implementation of IPv6 for TinyOS. It uses 6lowpan/HC-01 header compression, and includes IPv6 neighbor discovery, default route selection, point-to-point routing, and network programming support. It has been tested on micaz, telosb, and epic platforms. Standard tools like ping6, tracert6, and nc6 can be used to interact with and troubleshoot a network of blip devices, and pc-side code is written using the standard BSD sockets API (or any other kernel-provided networking interface). A sensor network can also be easily mapped into the public subnet to provide global connectivity.
The current codebase has been tested for stability and performance in several deployments with sizes reaching up to 75 nodes, including our testbed (smote), the ACme project, and in various apartments as part of energy audits. Although the routing is designed primarily with static installations in mind, we are reasonably confident the stack's performance and stability.
The first step is to get the code. As of TinyOS 2.1.1, blip is included as a core part of TinyOS. Follow the instructions on http://docs.tinyos.net to install TinyOS and your platform toolchain. Once finished, the blip tutorial explains how to compile and install a blip network.
In May 2010 we kicked off the first public preview of blip-2.0 by releasing it into tinyos-2.x-contrib/berkeley/blip-2.0. The goal of the next version of blip is to support the relevant IETF standards, and in a less casual way then the current version. In that spirit, this pre-release of blip-2.0 fully supports draft-ietf-hc-06; this means 64-bit address support for the cc2420 radio, packing all the weird multicast address formats, etc. I've also cleaned up a lot of the other internal code and interfaces, and separated all the 6lowpan compression routines into a much updated library, lib6lowpan; if you're thinking of implementing your own 6lowpan compressor, I encourage you to have a look at this code as a source of test cases since we'll all benefit from more interop.
To give you an idea of the sort of roadmap we're working on, collaborators at Johns Hopkins are working on an implementation of RPL and they've made a lot of progress; I hope we'll be able to use this as the basis of blip-2.0 routing. I've done some looking into 6lowpan-nd, but I feel that particular document is still too in flux to be worth implementing; once the WG converges, we can hopefully push out an implementation fairly quickly. In the coming months, I hope to have more complete documentation of the internals to make it possible to easily switch in and out multiple routing protocols on top of the same basic 6lowpan components, inside the existing architecture.
The code is in tinyos-2.x-contrib/berkeley/blip-2.0; a README in there should get you running. It may be full of bugs right now and since there's no routing (only link-local addresses), it's really only good for playing with, but is a taste of what's coming down the line.
- core integration
- system-wire Ieee154 messaging abstraction
- blip+AM/dual stack option is available
- serial stack bugfixes
- DAG numbering/rebuilding
- traffic generation
- "experimental" multi-driver support
- explicit LPL support
- "experimental" tcp support
- ip extension header architecture
- routing driver now compiles/cross-compiles using gnu autotools
- statistics interfaces fleshed out
- platform support: telosb epic shimmer iris [micaz]
- core integration
- name change propagated through code: release is stored in tinyos-2.x-contrib/berkeley/blip
- no longer need separate radvd (advertisement daemon is included in the routing driver)
- driver runs a telnet server for route inspection and maintenance
- UDP now accessed through a generic component, with passive open handled, provides bind() for active open
- Prototype TCP stack (undocumented, several known issues)
- NWProg (point-to-point network programming using pieces of Deluge) has been throughly debugged
- IP address structures are now much prettier (see ip.h), same as in linux
- UDPShell is much improved; new BinaryShell? exports similar functionality but saves 4k of code size by removing ascii processing.
- completely revised routing algorithm for improved performance and convergence.
- many stability improvements and bug fixes
- support for compiling the router for MIPS platforms
- prototype RPC protocol and stub generator
- Single-phase UDP and IP interfaces
- Elimination of buffer pool
- Fragment forwarding without hop-by-hop reassembly
- Improved header structure to allow easy insertion/deletion
- Network programming support using TFTP-like protocol along with parts of deluge (will be come TFTP in the future).
- initial release
The docs on this wiki are mostly depreciated, and have been removed. The primary documentation is now maintained as the blip tutorial
- blip/CrossCompiling - how to cross compile the routing code
There is a public users list for b6lowpan users at https://lists.eecs.berkeley.edu/sympa/info/blip-users. Currently it is low volume; only release notifications, but you're welcome to use it for any related questions.