Jump to navigation Jump to search

Source Download

All source code could be obtained from SarForge.

Quick Startup

To easiest way to run a BRN meshnode is to use a modified Netgear WGT634 Netgear router preloaded with the OpenWRT linux distribution. You can also use our OpenWRT image BRN Base Image:


Thereafter you need to download the BRN software package BRN package:


Installing BRN is quite simple:

ipkg install berlinroofnet-20061115.ipk

Now reboot your BRN meshnode and enjoy ....


For Netgear WGT634U

  1. Install a prepared image file as described here. Take an image from
  2. Build your toolchain (from OpenWrt sources) and berlinroofnet ipkg package -- pay attention to the right OpenWrt revision you are using on your router (e.g. 6945)
    1. Checkout sources
      svn co Kamikaze -r 6945
    2. (optional) Get the relating config file for OpenWrt:
      wget -O Kamikaze/.config
    3. Check out package description for berlinroofnet
      svn co Kamikaze/package/berlinroofnet
    4. Select berlinroofnet package to be built (Network -> berlinroofnet <M>):
      cd Kamikaze

make menuconfig

    1. Build:
  1. Install berlinroofnet ipkg package:
    scp bin/packages/berlinroofnet*.ipk bin/packages/libstdcpp*.ipk   # (at your development machine)

ipkg install /tmp/berlinroofnet*.ipk /tmp/libstdcpp*.ipk # (at your router wgt01)

For x86 desktop machine

General comments about click

  • Headers accessible through annotations should always be allocated inside a packet's data (for example via push_mac_header()). Like this they get freed when the packet is killed, thus avoiding memory leaks. Yet more important is that any other tricks - for example referencing to another packet's ethernet header via annotation - lead to nasty and hard to find memory management errors. Align elements for example may shift the header annotations along with the other data of the packet which would lead to invalid addresses. Align, however is only needed on some architectures which makes detecting these things a real pain.
  • Most operations on a packets that return another packet may or may not kill the original one. Examples are push(), put(). Never touch the original packet after that.

See also



  • Click-Tutorials [2]