[packages] Port the wing package to the new netifd infrastructure.
authorJohn Crispin <john@openwrt.org>
Tue, 24 Jul 2012 21:46:18 +0000 (21:46 +0000)
committerJohn Crispin <john@openwrt.org>
Tue, 24 Jul 2012 21:46:18 +0000 (21:46 +0000)
Signed-off-by: Roberto Riggio <roberto.riggio@create-net.org>
SVN-Revision: 32826

net/wing/Makefile
net/wing/files/etc/uci-defaults/wing
net/wing/files/lib/netifd/proto/wing.sh [new file with mode: 0644]
net/wing/files/lib/network/wing.sh [deleted file]
net/wing/patches/011-perl-compat.patch [deleted file]

index cb351d7aa97d109f63da894240ceb6dd66f2a7ff..333603d6a5f9d0cfba20d2c357fb071bd93ebeed 100644 (file)
@@ -1,5 +1,5 @@
 #
-# Copyright (C) 2006-2011 OpenWrt.org
+# Copyright (C) 2006-2012 OpenWrt.org
 #
 # This is free software, licensed under the GNU General Public License v2.
 # See /LICENSE for more information.
@@ -8,9 +8,9 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=wing
-PKG_VERSION:=20111103
+PKG_VERSION:=20120625
 PKG_RELEASE:=1
-PKG_REV:=23e6455a1cfe0877334f0d18068a3fb47425b8a4
+PKG_REV:=ce245718dd01fad9a9bd78dd5792245b7cdd09aa
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
 PKG_SOURCE_URL:=git://github.com/rriggio/click.git
@@ -67,7 +67,6 @@ define Build/Compile
                -f $(PKG_BUILD_DIR)/conf/wing/sample.click \
                -A --all -E Discard -E Print -E PrintWifi -E Strip -E Null \
                -E InfiniteSource -E RatedSource -E EtherEncap -E UDPIPEncap \
-               -E AggregateWingPacketType -E AggregateCounter \
                -E RadiotapEncapHT -E SetTXRateHT \
                -E WINGETTMetric -E WINGETXMetric -E WINGHopCountMetric \
                -E ProbeTXRate -E MadwifiRate -E AutoRateFallback -E Minstrel \
index f8ba78f5d76c3cb9e214db683e972f817b0f993e..2a8c35e20e8d804a1d2998023a13e1ef35a82507 100644 (file)
@@ -2,18 +2,23 @@ uci delete network.mesh
 uci set network.mesh=interface
 uci set network.mesh.proto=wing
 
-uci add firewall zone
-uci set firewall.@zone[-1].name="mesh"
-uci set firewall.@zone[-1].input="ACCEPT"
-uci set firewall.@zone[-1].output="ACCEPT"
-uci set firewall.@zone[-1].forward="REJECT"
-uci set firewall.@zone[-1].masq="1"
+uci delete firewall.zone_mesh
+uci set firewall.zone_mesh=zone
+uci set firewall.zone_mesh.name="mesh"
+uci set firewall.zone_mesh.input="ACCEPT"
+uci set firewall.zone_mesh.output="ACCEPT"
+uci set firewall.zone_mesh.forward="REJECT"
+uci set firewall.zone_mesh.masq="1"
 
-uci add firewall forwarding
-uci set firewall.@forwarding[-1].src="lan"
-uci set firewall.@forwarding[-1].dest="mesh"
+uci delete firewall.fwd_lan_mesh
+uci set firewall.fwd_lan_mesh=forwarding
+uci set firewall.fwd_lan_mesh.src="lan"
+uci set firewall.fwd_lan_mesh.dest="mesh"
 
-uci add firewall forwarding
-uci set firewall.@forwarding[-1].src="mesh"
-uci set firewall.@forwarding[-1].dest="wan"
+uci delete firewall.fwd_mesh_wan
+uci set firewall.fwd_mesh_wan=forwarding
+uci set firewall.fwd_mesh_wan.src="mesh"
+uci set firewall.fwd_mesh_wan.dest="wan"
+
+uci commit
 
diff --git a/net/wing/files/lib/netifd/proto/wing.sh b/net/wing/files/lib/netifd/proto/wing.sh
new file mode 100644 (file)
index 0000000..18642f8
--- /dev/null
@@ -0,0 +1,160 @@
+#!/bin/sh
+
+. /etc/functions.sh
+. ../netifd-proto.sh
+init_proto "$@"
+
+proto_wing_init_config() {
+       no_device=1
+       available=1
+        proto_config_add_string "ipaddr"
+       proto_config_add_string "netmask"
+}
+
+proto_wing_teardown() {
+       local config="$1"
+       local link="wing-$config"
+       [ -f "/var/run/$link.pid" ] && {
+               kill -9 $(cat /var/run/$link.pid)
+               rm /var/run/$link.pid
+       }
+       env -i ACTION="ifdown" INTERFACE="$config" DEVICE="$link" PROTO=wing /sbin/hotplug-call "link" &
+}
+
+proto_wing_setup() {
+
+       local iface="$2"
+       local config="$1"
+       local link="wing-$config"
+
+       local hwmodes=""
+       local freqs=""
+       local ifnames=""
+       local hwaddrs=""
+
+       # temporary hack waiting for a way to delay wing interfaces until the
+       # wifi sub-system has been brought up
+       sleep 15
+
+       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 metric prefix period tau debug
+
+       config_get profile $config profile "bulk"
+       config_get rc $config rc "minstrel"
+       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 bcast="$prefix.255.255.255"
+       local netmask=255.0.0.0
+
+       if ! wing_template_available "profile" "$profile"; then
+               logger -t "$config" "Unable to configure router. Exiting."
+               exit 1
+       fi
+
+       if ! wing_template_available "rc" "$rc"; then
+               logger -t "$config" "Unable to configure rate control. Exiting."
+               exit 1
+       fi
+
+       if ! wing_template_available "ls" "$ls"; 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__/$link/g" \
+               | sed -e "s/__XR_IP__/$ipaddr/g" \
+               | sed -e "s/__XR_BCAST__/$bcast/g" \
+               | sed -e "s/__XR_NM__/$netmask/g" \
+               | sed -e "s/__XR_PERIOD__/$period/g" \
+               | sed -e "s/__XR_TAU__/$tau/g" > /tmp/$link.click
+
+       /usr/bin/click-align /tmp/$link.click > /tmp/$link-aligned.click 2>/var/log/$link.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
+       }
+
+       (/usr/bin/click /tmp/$link-aligned.click >> /var/log/$link.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/$link.pid
+
+       env -i ACTION="ifup" INTERFACE="$config" DEVICE="$link" PROTO=wing /sbin/hotplug-call "link" &
+
+       proto_init_update "$link" 1
+       proto_add_ipv4_address "$ipaddr" "$netmasj"
+
+       route -n | grep -q '^0.0.0.0' || {
+               proto_add_ipv4_route "0.0.0.0" 0
+       }
+       
+       proto_send_update "$config"
+
+}
+
+wing_template_available() { # prefix, template, default
+       local template="/etc/wing/$1.$2.click"
+       [ ! -f $template ] && {
+               return 1
+       }
+       return 0
+}
+
+wing_list_interfaces() {
+       local channel freq hwmode hwaddr ifname mode
+       config_get mode $1 mode
+       config_get_bool up $1 up
+       [ "$up" = "1" -a "$mode" = "monitor" ] || return 0
+       config_get ifname $1 ifname
+       config_get device $1 device
+       config_get hwmode $device hwmode "11bg"
+       config_get channel $device channel "0"
+       [ "$channel" = "0" -o "$channel" = "auto" ] && {
+               logger -t "$device" "Channel not specified. Ignoring."
+               return 0
+       }
+       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
+}
+
+add_protocol wing
+
diff --git a/net/wing/files/lib/network/wing.sh b/net/wing/files/lib/network/wing.sh
deleted file mode 100644 (file)
index d8a5dd0..0000000
+++ /dev/null
@@ -1,154 +0,0 @@
-
-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 metric prefix period tau debug
-
-       config_get profile $config profile "bulk"
-       config_get rc $config rc "minstrel"
-       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 bcast="$prefix.255.255.255"
-       local netmask=255.0.0.0
-
-       if ! wing_template_available "profile" "$profile"; then
-               logger -t "$config" "Unable to configure router. Exiting."
-               exit 1
-       fi
-
-       if ! wing_template_available "rc" "$rc"; then
-               logger -t "$config" "Unable to configure rate control. Exiting."
-               exit 1
-       fi
-
-       if ! wing_template_available "ls" "$ls"; 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_BCAST__/$bcast/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"
-        route -n | grep -q '^0.0.0.0' || {
-        route add default dev "$iface"
-       }
-
-       uci_set_state network $config ifname "$iface"
-       uci_set_state network $config ipaddr "$ipaddr"
-       uci_set_state network $config netmask "$netmask"
-       uci_set_state network $config gateway "0.0.0.0"
-
-       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 ] && {
-               return 1
-       }
-       return 0
-}
-
-wing_list_interfaces() {
-       local channel freq hwmode hwaddr ifname mode
-       config_get mode $1 mode
-       config_get_bool up $1 up
-       [ "$up" = "1" -a "$mode" = "monitor" ] || return 0
-       config_get ifname $1 ifname
-       config_get device $1 device
-       config_get hwmode $device hwmode "11bg"
-       config_get channel $device channel "0"
-       [ "$channel" = "0" -o "$channel" = "auto" ] && {
-               logger -t "$device" "Channel not specified. Ignoring."
-               return 0
-       }
-       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
-}
-
diff --git a/net/wing/patches/011-perl-compat.patch b/net/wing/patches/011-perl-compat.patch
deleted file mode 100644 (file)
index 2c4a7d9..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
---- a/doc/click-elem2man
-+++ b/doc/click-elem2man
-@@ -227,14 +227,15 @@ sub nroff_fixfP ($$) {
- }
- sub nroff_manref ($$$$) {
--    map { $_ = "\"$_\"" if (s/\"/\\(dq/g) } @_;
-+    my @x = @_;
-+    map { $_ = "\"$_\"" if (s/\"/\\(dq/g) } @x;
-     my($x);
--    if ($_[0] eq "") {
--      $x = "\n.M " . $_[1] . " " . $_[2];
-+    if ($x[0] eq "") {
-+      $x = "\n.M " . $x[1] . " " . $x[2];
-     } else {
--      $x = "\n.RM " . $_[0] . " " . $_[1] . " " . $_[2];
-+      $x = "\n.RM " . $x[0] . " " . $x[1] . " " . $x[2];
-     }
--    $x .= " " . $_[3] if $_[3] ne "";
-+    $x .= " " . $x[3] if $x[3] ne "";
-     $x . "\n";
- }