scan_wing() {
- config_set "$1" device "wing-$1"
+ config_set "$1" device "wing-$1"
}
coldplug_interface_wing() {
- setup_interface_wing "wing-$1" "$1"
+ 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
- }
+ 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"&
-
-}
+ 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
+ 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
+ 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"
+ freq=$(iwlist $ifname freq | grep "Current Frequency" | sed -n "s/^.*Current Frequency:\([0-9.]*\) GHz (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
}