BRN-Development

From
Jump to: navigation, 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:

wget http://sarwiki.informatik.hu-berlin.de/~mj/openwrt-wgt634u-2.6-squashfs-20061115.bin

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

wget http://sarwiki.informatik.hu-berlin.de/~mj/berlinroofnet-20061115.ipk

Installing BRN is quite simple:

ipkg install berlinroofnet-20061115.ipk

Now reboot your BRN meshnode and enjoy ....

Development

For Netgear WGT634U

  1. Install a prepared image file as described here. Take an image from https://sarwiki.informatik.hu-berlin.de/~mj/openwrt/images/
  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 https://svn.openwrt.org/openwrt/trunk Kamikaze -r 6945
    2. (optional) Get the relating config file for OpenWrt:
      wget http://sarwiki.informatik.hu-berlin.de/~mj/openwrt/images/2007-04-13/Kamikaze-config -O Kamikaze/.config
    3. Check out package description for berlinroofnet
      svn co https://sarforge.informatik.hu-berlin.de/svn/brn-core/BerlinRoofNet/trunk/click/ipkg/ Kamikaze/package/berlinroofnet
    4. Select berlinroofnet package to be built (Network -> berlinroofnet <M>):
      cd Kamikaze
make menuconfig
    1. Build:
      make
  1. Install berlinroofnet ipkg package:
    scp bin/packages/berlinroofnet*.ipk bin/packages/libstdcpp*.ipk wgt01.sar.informatik.hu-berlin.de:/tmp   # (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

Bug-Tracking

Other

  • Click-Tutorials [2]