[packages] Port the wing package to the new netifd infrastructure.
Signed-off-by: Roberto Riggio <roberto.riggio@create-net.org> git-svn-id: svn://svn.openwrt.org/openwrt/packages@32826 3c298f89-4303-0410-b956-a3cf2f4a3e73
This commit is contained in:
160
net/wing/files/lib/netifd/proto/wing.sh
Normal file
160
net/wing/files/lib/netifd/proto/wing.sh
Normal file
@ -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
|
||||
|
Reference in New Issue
Block a user