From: John Crispin Date: Tue, 24 Jul 2012 21:46:18 +0000 (+0000) Subject: [packages] Port the wing package to the new netifd infrastructure. X-Git-Url: http://git.openwrt.org/?p=openwrt%2Fsvn-archive%2Farchive.git;a=commitdiff_plain;hb=ce1eb23e28c0fd5c5fadbf864552af2dd3958201 [packages] Port the wing package to the new netifd infrastructure. Signed-off-by: Roberto Riggio SVN-Revision: 32826 --- diff --git a/net/wing/Makefile b/net/wing/Makefile index cb351d7aa9..333603d6a5 100644 --- a/net/wing/Makefile +++ b/net/wing/Makefile @@ -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 \ diff --git a/net/wing/files/etc/uci-defaults/wing b/net/wing/files/etc/uci-defaults/wing index f8ba78f5d7..2a8c35e20e 100644 --- a/net/wing/files/etc/uci-defaults/wing +++ b/net/wing/files/etc/uci-defaults/wing @@ -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 index 0000000000..18642f8bd2 --- /dev/null +++ b/net/wing/files/lib/netifd/proto/wing.sh @@ -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 index d8a5dd06a6..0000000000 --- a/net/wing/files/lib/network/wing.sh +++ /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 index 2c4a7d91ef..0000000000 --- a/net/wing/patches/011-perl-compat.patch +++ /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"; - } -