which then links to http://www.wing-project.org/
On Wed, Aug 11, 2010 at 7:37 AM, L. Aaron Kaplan <aa...@lo-res.org> wrote: > is there any docu on WING? > > > On Aug 11, 2010, at 11:55 AM, Roberto Riggio wrote: > > > Hi, > > > > this patch adds support for WING a new routing protocol for wireless > > mesh networks. WING is an extension of the Roofnet routing protocol > > developed by MIT. The new features are: support for multiple radio > > interfaces, and link quality based routing using the WCETT metric. > > > > The source code is hosted at github. > > > > Upon install, this package will create a new entry in the network > section: > > > > config 'interface' 'mesh' > > option 'proto' 'wing' > > option 'profile' 'bulk' > > option 'rc' 'static' > > option 'ls' 'fcfs' > > option 'metric' 'wcett' > > option 'prefix' '6' > > option 'period' '36000' > > option 'tau' '360000' > > option 'debug' 'true' > > > > The only mandatory field is "proto". After running ifup mesh a new > interface > > will be created. This interface is called wing-$(ifname) and uses > multi-hopping. > > > > Here follows a short description for the other parameters: > > > > profile, profile to be used for building the configuration for the click > > router (at the moment only one profile is defined) > > > > rc, rate control algorithm (static, madwifi, autoratefallback) > > > > ls, outgoing link scheduling policy (fcfs, drr) > > > > metric, routing metric (etx, ett, wcett) > > > > period, tau, averaging period for network probes, smoothing window > > > > Signed-off-by: Roberto Riggio <roberto.rig...@create-net.org> > > > > -- > > > > Index: net/wing/files/lib/network/wing.sh > > =================================================================== > > --- net/wing/files/lib/network/wing.sh (revision 0) > > +++ net/wing/files/lib/network/wing.sh (revision 0) > > @@ -0,0 +1,145 @@ > > + > > +scan_wing() { > > + config_set "$1" device "wing-$1" > > +} > > + > > +coldplug_interface_wing() { > > + setup_interface_wing "wing-$1" "$1" > > +} > > + > > +stop_interface_wing() { > > + local config="$1" > > + local iface="wing-$config" > > + env -i ACTION="ifdown" INTERFACE="$config" DEVICE="$iface" > PROTO=wing /sbin/hotplug-call "iface"& > > + [ -f "/var/run/$iface.pid" ]&& { > > + kill -9 $(cat /var/run/$iface.pid) > > + rm /var/run/$iface.pid > > + } > > +} > > + > > +setup_interface_wing() { > > + > > + local iface="$1" > > + local config="$2" > > + > > + local hwmodes="" > > + local freqs="" > > + local ifnames="" > > + local hwaddrs="" > > + > > + config_load wireless > > + config_foreach wing_list_interfaces wifi-iface > > + > > + # start click router > > + if [ "$hwmodes" = "" -o "$freqs" = "" -o "$ifnames" = "" -o > "$hwaddrs" = "" ]; then > > + logger -t "$config" "No raw interfaces available. Exiting." > > + exit 1 > > + fi > > + > > + local profile rc ls prefix debug > > + > > + config_get profile $config profile "bulk" > > + config_get rc $config rc "static" > > + config_get ls $config ls "fcfs" > > + config_get metric $config metric "wcett" > > + config_get prefix $config prefix "6" > > + config_get period $config period "10000" > > + config_get tau $config tau "100000" > > + config_get_bool debug $config debug "False" > > + > > + local hwaddr=$(echo $hwaddrs | sed 's/ .*//'); > > + local ipaddr=$(printf "$prefix.%d.%d.%d" $(echo $hwaddr | awk -F: > '{printf "0x%s 0x%s 0x%s",$4,$5,$6}')) > > + local netmask=255.0.0.0 > > + > > + if ! wing_template_available "profile" "$profile" "bulk"; then > > + logger -t "$config" "Unable to configure router. Exiting." > > + exit 1 > > + fi > > + > > + if ! wing_template_available "rc" "$rc" "static"; then > > + logger -t "$config" "Unable to configure rate control. > Exiting." > > + exit 1 > > + fi > > + > > + if ! wing_template_available "ls" "$ls" "radiotap"; then > > + logger -t "$config" "Unable to configure link scheduler. > Exiting." > > + exit 1 > > + fi > > + > > + if [ "$profile" = "" -o "$rc" = "" ]; then > > + logger -t "$config" "Unable to generate template. Exiting." > > + exit 1 > > + fi > > + > > + [ "$debug" == 0 ]&& dbg="" || dbg="-d" > > + > > + /usr/bin/click_config -p $profile -r $rc -s $ls -l $metric \ > > + -m "$hwmodes" -c "$freqs" -n "$ifnames" -a "$hwaddrs" $dbg > \ > > + | sed -e "s/__XR_IFNAME__/$iface/g" \ > > + | sed -e "s/__XR_IP__/$ipaddr/g" \ > > + | sed -e "s/__XR_NM__/$netmask/g" \ > > + | sed -e "s/__XR_PERIOD__/$period/g" \ > > + | sed -e "s/__XR_TAU__/$tau/g"> /tmp/$iface.click > > + > > + /usr/bin/click-align /tmp/$iface.click> /tmp/$iface-aligned.click > 2>/var/log/$iface.log > > + [ ! -c /dev/net/tun ]&& { > > + mkdir -p /dev/net/ > > + mknod /dev/net/tun c 10 200 > > + if [ ! -c /dev/net/tun ]; then > > + logger -t "$config" "Device not available > (/dev/net/tun). Exiting." > > + exit 1 > > + fi > > + } > > + > > + # creating the tun interface below will trigger a net subsystem > event > > + # prevent it from touching iface by disabling .auto here > > + uci_set_state network "$config" auto 0 > > + > > + (/usr/bin/click /tmp/$iface-aligned.click>> /var/log/$iface.log > 2>&1&)& > > + sleep 2 > > + ps | grep /usr/bin/click | grep -q -v grep || { > > + logger -t "$config" "Unable to start click. Exiting." > > + exit 1 > > + } > > + > > + ps | grep /usr/bin/click | grep -v grep | awk '{print $1}'> > /var/run/$iface.pid > > + > > + ifconfig "$iface" "$ipaddr" netmask "$netmask" > > + uci_set_state network $config ipaddr "$ipaddr" > > + uci_set_state network $config netmask "$netmask" > > + > > + env -i ACTION="ifup" INTERFACE="$config" DEVICE="$iface" PROTO=wing > /sbin/hotplug-call "iface"& > > + > > +} > > + > > +wing_template_available() { # prefix, template, default > > + local template="/etc/wing/$1.$2.click" > > + [ ! -f $template ]&& { > > + template="/etc/wing/$1.$3.click" > > + [ ! -f $template ]&& { > > + return 1 > > + } > > + } > > + return 0 > > +} > > + > > +wing_list_interfaces() { > > + local channel freq hwmode hwaddr ifname mode > > + config_get ifname $1 ifname > > + config_get mode $1 mode > > + config_get device $1 device > > + config_get_bool up $1 up > > + [ "$up" = "1" -a "$mode" = "monitor" ] || return 0 > > + config_get hwmode $device hwmode "11b" > > + config_get channel $device channel "1" > > + freq=$(iwlist $ifname freq | sed -n "s/^.*Channel 0*$channel : > \([0-9.]*\).*/\1/p" | awk '{print $1*1000}') > > + hwaddr=$(/sbin/ifconfig $ifname 2>&1 | sed -n 's/^.*HWaddr > \([0-9A-Za-z\-]*\).*/\1/p' | sed -e 's/\-/:/g' | cut -c1-17) > > + freqs=${freqs:+"$freqs "}$freq > > + hwmodes=${hwmodes:+"$hwmodes "}$hwmode > > + hwaddrs=${hwaddrs:+"$hwaddrs "}$hwaddr > > + ifnames=${ifnames:+"$ifnames "}$ifname > > + /sbin/ifconfig $ifname mtu 1900 > > + /sbin/ifconfig $ifname txqueuelen 5 > > + /sbin/ifconfig $ifname up > > +} > > + > > > > Property changes on: net/wing/files/lib/network/wing.sh > > ___________________________________________________________________ > > Added: svn:executable > > + * > > > > Index: net/wing/files/etc/uci-defaults/wing > > =================================================================== > > --- net/wing/files/etc/uci-defaults/wing (revision 0) > > +++ net/wing/files/etc/uci-defaults/wing (revision 0) > > @@ -0,0 +1,26 @@ > > +uci set network.mesh=interface > > +uci set network.mesh.proto=wing > > +uci set network.mesh.profile=bulk > > +uci set network.mesh.rc=static > > +uci set network.mesh.ls=fcfs > > +uci set network.mesh.metric=wcett > > +uci set network.mesh.prefix=6 > > +uci set network.mesh.period=36000 > > +uci set network.mesh.tau=360000 > > +uci set network.mesh.debug=true > > + > > +cfg=$(uci add firewall zone) > > +uci set firewall.$cfg.name="mesh" > > +uci set firewall.$cfg.input="ACCEPT" > > +uci set firewall.$cfg.output="ACCEPT" > > +uci set firewall.$cfg.forward="REJECT" > > +uci set firewall.$cfg.masq="1" > > + > > +cfg=$(uci add firewall forwarding) > > +uci set firewall.$cfg.src="lan" > > +uci set firewall.$cfg.dest="mesh" > > + > > +cfg=$(uci add firewall forwarding) > > +uci set firewall.$cfg.src="mesh" > > +uci set firewall.$cfg.dest="wan" > > + > > Index: net/wing/Config.in > > =================================================================== > > --- net/wing/Config.in (revision 0) > > +++ net/wing/Config.in (revision 0) > > @@ -0,0 +1,17 @@ > > +# Wing configuration > > + > > +choice > > + prompt "Version" > > + depends on PACKAGE_wing > > + default WING_STABLE > > + help > > + This option allows you to select the version of Wing to be built. > > + > > +config WING_STABLE > > + bool "Use the stable version (multi-interface)" > > + > > +config WING_TESTING > > + bool "Use the unstable version (multi-interfaces w/ ITACA)" > > + > > +endchoice > > + > > Index: net/wing/Makefile > > =================================================================== > > --- net/wing/Makefile (revision 0) > > +++ net/wing/Makefile (revision 0) > > @@ -0,0 +1,112 @@ > > +# > > +# Copyright (C) 2006-2009 OpenWrt.org > > +# > > +# This is free software, licensed under the GNU General Public License > v2. > > +# See /LICENSE for more information. > > +# > > + > > +include $(TOPDIR)/rules.mk > > + > > +PKG_NAME:=wing > > + > > +ifneq ($(CONFIG_WING_STABLE),) > > + PKG_VERSION:=20100805 > > + PKG_RELEASE:=1 > > + PKG_REV:=21aae2ae5bea85426aded47b055b4fe62c2cea2e > > +else > > + PKG_VERSION:=$(shell date +%Y%m%d) > > + PKG_RELEASE:=1 > > + PKG_REV:=HEAD > > +endif > > + > > +PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2 > > +PKG_SOURCE_URL:=http://github.com/create-net/click-wing.git > > +PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION) > > +PKG_SOURCE_VERSION:=$(PKG_REV) > > +PKG_SOURCE_PROTO:=git > > + > > +PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION) > > + > > +include $(INCLUDE_DIR)/package.mk > > + > > +define Package/wing > > + TITLE:=Wireless mesh networking toolkit > > + SECTION:=net > > + CATEGORY:=Network > > + MAINTAINER:=Roberto Riggio (roberto.rig...@create-net.org) > > + DEPENDS:=+kmod-tun > > + URL:=http://www.wing-project.org/ > > +endef > > + > > +define Package/wing/Description > > + Wing is a wireless mesh routing software. The routing protocol > > + is derived from Roofnet. It supports multiple radio interfaces and > > + link quality routing using the ETX, ETT, and WCETT metrics. > > +endef > > + > > +define Package/wing/config > > + source "$(SOURCE)/Config.in" > > +endef > > + > > +define Build/Configure > > + (cd $(PKG_BUILD_DIR); \ > > + rm -rf config.{cache,status}; \ > > + ./configure \ > > + --prefix=/usr \ > > + --enable-userlevel \ > > + --enable-wifi \ > > + --enable-wing \ > > + --disable-linuxmodule \ > > + ); > > + $(MAKE) -C $(PKG_BUILD_DIR) tools elementmap.xml > > + (cd $(PKG_BUILD_DIR)/userlevel; \ > > + ../tools/click-mkmindriver/click-mkmindriver -p $(PKG_NAME) > -C .. \ > > + -f $(PKG_BUILD_DIR)/conf/wing/sample.click \ > > + -A --all -E Discard -E Print -E Null \ > > + -E InfiniteSource -E RatedSource -E EtherEncap -E > UDPIPEncap \ > > + -E AthdescEncap -E AthdescDecap -E RadiotapDecap -E > RadiotapEncap \ > > + -E ProbeTXRate -E MadwifiRate -E AutoRateFallback \ > > + -E RoundRobinSched -E DRRSched; \ > > + ) > > + (cd $(PKG_BUILD_DIR); \ > > + rm -rf config.{cache,status} ; \ > > + $(TARGET_CONFIGURE_OPTS) \ > > + CXXFLAGS="-static -O2 -MD" CFLAGS="-static -MD" \ > > + CPPFLAGS="-I$(STAGING_DIR)/usr/include > -I$(STAGING_DIR)/include" \ > > + LDFLAGS="-L$(STAGING_DIR)/usr/lib -L$(STAGING_DIR)/lib" \ > > + ./configure \ > > + --prefix=/usr \ > > + --target=$(GNU_TARGET_NAME) \ > > + --host=$(GNU_TARGET_NAME) \ > > + --build=$(GNU_HOST_NAME) \ > > + --enable-tools=mixed \ > > + --enable-userlevel \ > > + --enable-wifi \ > > + --enable-wing \ > > + --disable-linuxmodule \ > > + ); > > +endef > > + > > +define Build/Compile > > + $(MAKE) -C $(PKG_BUILD_DIR) \ > > + MINDRIVER=$(PKG_NAME) \ > > + DESTDIR="$(PKG_INSTALL_DIR)" \ > > + all install > > +endef > > + > > +define Package/wing/install > > + $(INSTALL_DIR) $(1)/usr/bin > > + $(INSTALL_DIR) $(1)/etc/wing > > + $(INSTALL_DIR) $(1)/usr/share/click > > + $(CP) ./files/* $(1)/ > > + $(CP) $(PKG_BUILD_DIR)/conf/wing/click_config $(1)/usr/bin/ > > + $(CP) $(PKG_BUILD_DIR)/conf/wing/write_handler $(1)/usr/bin/ > > + $(CP) $(PKG_BUILD_DIR)/conf/wing/read_handler $(1)/usr/bin/ > > + $(CP) $(PKG_INSTALL_DIR)/usr/bin/$(PKG_NAME)click > $(1)/usr/bin/click > > + $(CP) $(PKG_INSTALL_DIR)/usr/bin/click-align > $(1)/usr/bin/click-align > > + $(CP) $(PKG_BUILD_DIR)/conf/wing/*click $(1)/etc/wing/ > > + $(CP) $(PKG_INSTALL_DIR)/usr/share/click/elementmap.xml > $(1)/usr/share/click/elementmap.xml > > +endef > > + > > +$(eval $(call BuildPackage,wing)) > > + > > > > > > _______________________________________________ > > openwrt-devel mailing list > > openwrt-devel@lists.openwrt.org > > https://lists.openwrt.org/mailman/listinfo/openwrt-devel > > > _______________________________________________ > openwrt-devel mailing list > openwrt-devel@lists.openwrt.org > https://lists.openwrt.org/mailman/listinfo/openwrt-devel > >
_______________________________________________ openwrt-devel mailing list openwrt-devel@lists.openwrt.org https://lists.openwrt.org/mailman/listinfo/openwrt-devel