127 lines
3.2 KiB
Bash
Executable File
127 lines
3.2 KiB
Bash
Executable File
#!/bin/sh
|
|
# /etc/bewan/lib/lan
|
|
|
|
# Common function used by lan scripts
|
|
# setparam must be included
|
|
|
|
[ ${LAN_LIB:-0} = 1 ] && return
|
|
|
|
LAN_LIB=1
|
|
|
|
add_ipv6_linklocal() {
|
|
local ifname=${1:-}
|
|
local macaddr=${2:-}
|
|
local current; current=`ip -6 addr show dev $ifname scope link 2>/dev/null`
|
|
# No need to create a link local address, we already have one
|
|
[ -n "$current" ] && return
|
|
|
|
[ -z "$macaddr" ] && macaddr=`cat $INTFD/$ifname/macaddr 2>/dev/null`
|
|
[ -z "$macaddr" ] && macaddr=`ifconfig $ifname | grep HWaddr | sed "s/.*HWaddr //"`
|
|
local lladdr; lladdr=`compute_linklocal $macaddr`
|
|
[ -z "$lladdr" ] && return
|
|
ip -6 addr add $lladdr/64 dev $ifname 2>/dev/null
|
|
}
|
|
|
|
get_ipv6_linklocal() {
|
|
local ifname=${1:-}
|
|
local lladdr="$(ip -6 addr show dev $ifname scope link |grep inet6)"
|
|
[ "$lladdr" != '' ] && {
|
|
lladdr=${lladdr##*fe80:}
|
|
lladdr=${lladdr%% scope link*}
|
|
lladdr=fe80:$lladdr
|
|
echo "$lladdr"
|
|
}
|
|
}
|
|
|
|
remove_ipv6_linklocal() {
|
|
local ifname=${1:-}
|
|
ip -6 addr flush dev $ifname scope link
|
|
}
|
|
|
|
# $1 = network interface to remove
|
|
remove_interface_from_lan_bridge() {
|
|
local ifname=${1:-}
|
|
[ "$ifname" = '' ] && return
|
|
[ ! -d $INTFD/$ifname ] && return
|
|
|
|
local lanid=`cat $INTFD/$ifname/bridge 2>/dev/null`
|
|
[ "$lanid" = '' ] && return
|
|
|
|
local brname=`cat $LAND/$lanid/ifname`
|
|
[ "$brname" = '' ] && return
|
|
|
|
base_log "remove $ifname from $brname bridge" debug
|
|
brctl delif $brname $ifname
|
|
rm -f $INTFD/$ifname/bridge
|
|
}
|
|
|
|
# $1 = all or network interface to add
|
|
# $2 = all or lanid
|
|
add_interface_to_lan_bridge() {
|
|
local ifname=${1:-}
|
|
[ "$ifname" = '' ] && return
|
|
|
|
local lanids="${2:-}"
|
|
[ "$lanids" = '' ] && return
|
|
|
|
[ "$lanids" = 'all' ] && lanids="`ls $LAND 2>/dev/null`"
|
|
|
|
local lanid
|
|
for lanid in $lanids; do
|
|
local intfs="`cat $LAND/$lanid/intfs`"
|
|
[ "$intfs" = '' ] && continue
|
|
|
|
local brname=`cat $LAND/$lanid/ifname`
|
|
[ "$brname" = '' ] && continue
|
|
|
|
local intf
|
|
for intf in $intfs; do
|
|
[ "$ifname" != all ] && [ "$intf" != "$ifname" ] && continue
|
|
[ ! -d $INTFD/$intf ] && continue
|
|
[ -f $INTFD/$intf/bridge ] && continue
|
|
|
|
base_log "add $intf to $brname bridge" debug
|
|
|
|
# Remove any ip (ipv4 and/or ipv6)
|
|
ip addr flush dev $intf
|
|
brctl addif $brname $intf
|
|
echo $lanid >$INTFD/$intf/bridge
|
|
done
|
|
done
|
|
}
|
|
|
|
restart_delegated_prefix() {
|
|
[ "${WANID:-0}" = 0 ] && return
|
|
[ -z "${IFNAME:-}" ] && return
|
|
|
|
[ ! -f $WAND/$WANID/ip6/dprefix ] && return
|
|
[ ! -f $INTFD/$IFNAME/assoclan ] && return
|
|
|
|
local lanlist; lanlist=`cat $INTFD/$IFNAME/assoclan`
|
|
local ARG; ARG=restart
|
|
local LANID; for LANID in `strip $lanlist`; do
|
|
[ -f $LAND/$LANID/ifname ] && {
|
|
local lanif; eval lanif=`cat $LAND/$LANID/ifname`
|
|
echo $WANID > $INTFD/$lanif/assocwan
|
|
base_call_initd 'lanip6'
|
|
}
|
|
done
|
|
}
|
|
|
|
stop_delegated_prefix() {
|
|
[ "${WANID:-0}" = 0 ] && return
|
|
[ -z "${IFNAME:-}" ] && return
|
|
|
|
[ ! -f $INTFD/$IFNAME/assoclan ] && return
|
|
|
|
local lanlist; lanlist=`cat $INTFD/$IFNAME/assoclan`
|
|
local ARG; ARG=restart
|
|
local LANID; for LANID in `strip $lanlist`; do
|
|
[ -f $LAND/$LANID/ifname ] && {
|
|
local lanif; eval lanif=`cat $LAND/$LANID/ifname`
|
|
rm -f $INTFD/$lanif/assocwan
|
|
base_call_initd 'lanip6'
|
|
}
|
|
done
|
|
}
|