mirror of
https://gitlab.alpinelinux.org/alpine/aports.git
synced 2026-02-15 04:43:01 +01:00
We set the metric to 300 + ifindex for wifi and 200 + ifindex for others. This is basically what dhcpcd does. Also allow overriding the metric in interfaces file. This makes multi isp setups easier.
128 lines
2.0 KiB
Bash
128 lines
2.0 KiB
Bash
#!/bin/sh
|
|
|
|
# script for udhcpc
|
|
# Copyright (c) 2008 Natanael Copa <natanael.copa@gmail.com>
|
|
|
|
UDHCPC="/etc/udhcpc"
|
|
UDHCPC_CONF="$UDHCPC/udhcpc.conf"
|
|
|
|
RESOLV_CONF="/etc/resolv.conf"
|
|
[ -f $UDHCPC_CONF ] && . $UDHCPC_CONF
|
|
|
|
export broadcast
|
|
export dns
|
|
export domain
|
|
export interface
|
|
export ip
|
|
export mask
|
|
export metric
|
|
export router
|
|
export subnet
|
|
|
|
export PATH=/usr/bin:/bin:/usr/sbin:/sbin
|
|
|
|
run_scripts() {
|
|
local dir=$1
|
|
if [ -d $dir ]; then
|
|
for i in $dir/*; do
|
|
[ -f $i ] && $i
|
|
done
|
|
fi
|
|
}
|
|
|
|
deconfig() {
|
|
ip addr flush dev $interface
|
|
}
|
|
|
|
is_wifi() {
|
|
test -e /sys/class/net/$interface/phy80211
|
|
}
|
|
|
|
if_index() {
|
|
cat /sys/class/net/$interface/ifindex
|
|
}
|
|
|
|
calc_metric() {
|
|
local base=
|
|
if is_wifi; then
|
|
base=300
|
|
else
|
|
base=200
|
|
fi
|
|
echo $(( $base + $(if_index) ))
|
|
}
|
|
|
|
routes() {
|
|
[ -z "$router" ] && return
|
|
local gw= num=
|
|
while ip route del default via dev $interface 2>/dev/null; do
|
|
:
|
|
done
|
|
num=0
|
|
for gw in $router; do
|
|
ip route add 0.0.0.0/0 via $gw dev $interface \
|
|
metric $(( $num + ${IF_METRIC:-$(calc_metric)} ))
|
|
num=$(( $num + 1 ))
|
|
done
|
|
}
|
|
|
|
resolvconf() {
|
|
local i
|
|
if [ "$RESOLV_CONF" = "no" ] || [ "$RESOLV_CONF" = "NO" ] \
|
|
|| [ -z "$RESOLV_CONF" ]; then
|
|
return
|
|
fi
|
|
echo -n > "$RESOLV_CONF"
|
|
[ -n "$domain" ] && echo "search $domain" >> "$RESOLV_CONF"
|
|
for i in $dns; do
|
|
echo "nameserver $i" >> "$RESOLV_CONF"
|
|
done
|
|
}
|
|
|
|
bound() {
|
|
ip addr add $ip/$mask dev $interface
|
|
ip link set dev $interface up
|
|
routes
|
|
resolvconf
|
|
}
|
|
|
|
renew() {
|
|
if ! ip addr show dev $interface | grep $ip/$mask; then
|
|
ip addr flush dev $interface
|
|
ip addr add $ip/$mask dev $interface
|
|
fi
|
|
|
|
local i
|
|
for i in $router; do
|
|
if ! ip route show | grep ^default | grep $i; then
|
|
routes
|
|
break
|
|
fi
|
|
done
|
|
|
|
if ! grep "^search $domain"; then
|
|
resolvconf
|
|
return
|
|
fi
|
|
for i in $dns; do
|
|
if ! grep "^nameserver $i"; then
|
|
resolvconf
|
|
return
|
|
fi
|
|
done
|
|
}
|
|
|
|
case "$1" in
|
|
deconfig|renew|bound)
|
|
run_scripts $UDHCPC/pre-$1
|
|
$1
|
|
run_scripts $UDHCPC/post-$1
|
|
;;
|
|
*)
|
|
echo "Error: this script should be called from udhcpc" >&2
|
|
exit 1
|
|
;;
|
|
esac
|
|
exit 0
|
|
|