1
0
This repository has been archived on 2025-01-10. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
Anderson Luiz Alves 0464e230c1 stock 103961
2017-07-30 16:48:04 -03:00

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
}