Operating Systems Principles SS2005
Lab 0: Hardware
Bei den Knoten in unserem Mesh-Netzwerk handelt es sich um Router der Firma Linksys (WRT54GS). Hierbei haben wir die vorhandene Firmware durch OpenWrt http://openwrt.org ausgetauscht. Nähere Informationen finden Sie dabei unter Programming_the_Linksys_WRT54GS_Wireless_Broadband_Router.
Für das Praktikum sei folgende sehr einfache Netztopologie für eine Multi-Hop Mesh-Netzwerk gegeben (siehe Abbildung):
Erkennbar hierbei ist, dass Knoten WRT1 direkt mit Knoten WRT2, jedoch nicht direkt mit Knoten WRT3 kommunizieren kann (er benötigt die Hilfe von Knoten WRT2). Als Routing-Protokoll haben wir das Dynamic Source Routing (http://www-2.cs.cmu.edu/~dmaltz/dsr.html ) Protokoll auf Layer 2 (Sicherungsschicht) prototypisch implementiert. Dieses soll auch im Praktikum verwendet werden.
Der Zugriff auf die Router erfolgt über telnet:
zubow@linux:~> telnet wrt1
Lab 1: Cross-Compilation
Dieses Praktikum soll Ihnen einen Einblick in die Entwicklung von Software für Embedded Devices (Cross-Compilation) geben. Hierbei werden Sie mit Hilfe von OpenWrt Software für WRT54GS entwickeln. Zu diesem Zweck haben wir eine Linux-Entwicklungsumgebung (Toolchain, ect.) aufgebaut. Nähere Informationen dazu finden Sie unter Using_StandardizedDevelopmentEnvironment.
Für das Praktikum kann die Toolchain wie folgt gebaut und verwendet werden:
OpenWrt-Quellen
Die Quellen des OpenWRT-Projektes können über cvs abgerufen werden:
cvs -d:pserver:anonymous@openwrt.org:/openwrt login cvs -d:pserver:anonymous@openwrt.org:/openwrt co buildroot
Benötigte Tools/Bibliotheken
Damit sich die Toolchain übersetzen lässt, werden die folgenden Tools bzw. Bibliotheken benötigt:
- wget, tftp
- cvs, subversion
- gcc, gcc-c++, bison, flex
- patch, gettext
- autoconf, automake
- zlib-devel
OpenWRT-Build-Prozess
Für die spätere Verwendung von Click wird ein C++-Compiler benötigt. Daher ist die folgende Änderung im $OPENWRT/buildroot/Makefile vorzunehmen:
INSTALL_LIBSTDCPP:=true
Sollten alle benötigten Bibliotheken vorliegen, so kann OpenWRT mit Hilfe von make gebaut werden:
linux:/home/wrt/buildroot/# make
Hinweis: Der initiale Build-Prozess ist sehr zeitaufwändig.
Andere Ansätze
Verwendung von CrossTool
Zugriff vom WRT auf Bibliotheken/Tools
Der (Flash-)Speicher auf den WRTs ist nicht nur limitiert, sondern auch extrem langsam. Für den Entwicklungsprozess kann man auf den WRTs Verzeichnisse via NFS mounten:
@wrt1:/# mount MY_NFS_SERVER:/share/ /mnt/share -o nolock
Datenbank compilieren
Da das configure - Skript von der Datenbank buggy ist, zunächst ein Patch dafür:
http://www.informatik.hu-berlin.de/~sborcher/sar/db.patch
Diesen Patch in das Verzeichnis src kopieren.
Anschließend das Makefile für die Datenbank in das Verzeichnis make kopieren:
http://www.informatik.hu-berlin.de/~sborcher/sar/db.mk
(wie quotet man ein tab-erhaltendes Makefile in ein Wiki?)
Anschliessend ein make DB.
IPKG
Die portierte Berkley-DB sollte als ipkg-File von der URL http://sar.informatik.hu-berlin.de/research/roofnet/ipkg/ heruntergeladen werden können.
Lab 2: Click
http://www.pdos.csail.mit.edu/click/click.gif
Click ist ein vom MIT entwickelter modularer Software-Router. Mit Hilfe der umfangreichen Click-API lassen sich schnell neue Router-Konfigurationen entwickeln. Auch wir werden uns bei der Entwicklung auf Click stützen.
Um Click mit Hilfe von OpenWRT zu bauen, muss das Makefile click.mk in das $OPENWRT/buildroot/make-Verzeichnis kopiert werden:
############################################################# # # click # ############################################################# CLICK_DIR:=$(BUILD_DIR)/click click-source: $(CLICK_DIR)/.unpacked $(CLICK_DIR)/.unpacked: $(DL_DIR)/$(CLICK_SOURCE) (cd $(BUILD_DIR); \ svn co svn://merkur.sardmn.informatik.hu-berlin.de/click) touch $(CLICK_DIR)/.unpacked $(CLICK_DIR)/.configured: $(CLICK_DIR)/.unpacked (cd $(CLICK_DIR); rm -rf config.cache; \ $(TARGET_CONFIGURE_OPTS) \ CFLAGS="$(TARGET_CFLAGS)" \ AR_CREATEFLAGS="cru" \ ./configure \ --build=i686-pc-linux-gnu \ --host=mipsel-linux \ --disable-linuxmodule \ --enable-brn \ --enable-wifi \ --enable-tools=mixed \ ); touch $(CLICK_DIR)/.configured $(CLICK_DIR)/click: $(CLICK_DIR)/.configured $(MAKE) CC=$(TARGET_CC) -C $(CLICK_DIR) $(TARGET_DIR)/usr/bin/click: $(CLICK_DIR)/click install -c $(CLICK_DIR)/userlevel/click $(TARGET_DIR)/usr/bin/click $(STRIP) $(TARGET_DIR)/usr/bin/click > /dev/null 2>&1 click: uclibc $(TARGET_DIR)/usr/bin/click click-clean: $(MAKE) -C $(CLICK_DIR) clean rm -rf $(TARGET_DIR)/usr/bin/click click-dirclean: rm -rf $(CLICK_DIR)
Anschließend kann Click über den Aufruf:
linux:/home/wrt/buildroot/# make click
gebaut werden.
Lab 3: Address Resolution Protocol (ARP)
Das ARP-Protokoll ( http://www.erg.abdn.ac.uk/users/gorry/course/inet-pages/arp.html ) wird vom Internet-Protokoll (IPv4) dazu verwendet IP-Netzwerkadressen auf Hardware-Addressen (Data-Link-Protocol) abzubilden. Hierbei wird in aller Regel eine Anfrage mit Hilfe eines Broadcasts (ARP-Request) realisiert. Im Falle eines Multi-Hop Mesh-Netzwerkes ist dies jedoch keine praktikable Lösung. Eine Lösung hierfür könnten die aus dem Bereich der P2P-Netzwerke bekannten Distributed Hashtables ( http://www.infoanarchy.org/wiki/index.php/Distributed_hash_table ) darstellen.
Durchführung des Praktikums
Folgende Fragestellungen bzw. Aktivitäten sind im Rahmen des Praktikums zu klären bzw. durchzuführen:
- Welche Besonderheiten sind bei der Realisierung von ARP in AdHoc-Mesh-Netzwerken zu beachten?
- Wie können Informationen in einem solchen Netzwerk gespeichert werden?
- Dezentrale Speicherung(siehe Distributed Hashtable)
- Redundante Speicherung
- generisches Interface zu einer DHT (APIs)
- Eigenentwicklung vs. Verwendung einer bereits vorhandenen Bibliothek
- Welche Anforderungen werden an einen ARP-Proxy gestellt?
- Fallback-Strategien
- Transparenz des ARP-Dienstens
- Selbstorganisation (keine manuellen Vorgänge)