mirror of
https://dev.iopsys.eu/feed/iopsys.git
synced 2025-12-10 07:44:50 +01:00
On DSA platform we could have lan/lanX/wan ports. Tested on ex400. Version: 2.10.2.0 Signed-off-by: Janusz Dziedzic <janusz.dziedzic@iopsys.eu>
125 lines
2.5 KiB
Bash
Executable file
125 lines
2.5 KiB
Bash
Executable file
#!/bin/sh
|
|
|
|
. /lib/functions.sh
|
|
|
|
AL_BRIDGE=${AL_BRIDGE-"br-lan"}
|
|
PRIMARY_VID=${PRIMARY_VID-1}
|
|
|
|
### Traffic Separation ###
|
|
|
|
dbg() {
|
|
logger -t traffic_separation $@
|
|
}
|
|
|
|
ts_sub() {
|
|
ts_usage() {
|
|
cat <<EOF
|
|
Usage: $0 [create|reload]
|
|
Traffic Separation related functions.
|
|
create vid - create vlan configuration with vlan_id
|
|
reload - reload network with new configuration
|
|
EOF
|
|
exit 1
|
|
}
|
|
|
|
ts_create() {
|
|
_net_setup() {
|
|
local vid=$1
|
|
local name="vlan${vid}"
|
|
local br_dev="${AL_BRIDGE/-/_}"
|
|
local tag=":t"
|
|
local self_flags="untagged"
|
|
|
|
[ -z "$(uci -q get network.${name})" ] || return
|
|
|
|
uci -q set network.${name}="bridge-vlan"
|
|
uci -q set network.${name}.name="${name}"
|
|
uci -q set network.${name}.device="$AL_BRIDGE"
|
|
uci -q set network.${name}.vlan="$vid"
|
|
|
|
[ "${vid}" = "${PRIMARY_VID}" ] && self_flags="untagged pvid"
|
|
uci -q set network.${name}.flags="${self_flags}"
|
|
uci -q set network.${name}.local='1'
|
|
|
|
for port in $(uci -q get network.${br_dev}.ports) ; do
|
|
uci -q get network.${name}.ports | grep -q "${port}${tag}" && continue
|
|
uci -q add_list network.${name}.ports="${port}${tag}"
|
|
done
|
|
|
|
uci -q commit network
|
|
}
|
|
|
|
vid=$1
|
|
|
|
[ -n "$vid" ] || {
|
|
cat <<EOF
|
|
VID required to configure.
|
|
EOF
|
|
exit 1
|
|
}
|
|
|
|
logger -t vlan "setup ts vid $vid"
|
|
_net_setup ${vid}
|
|
|
|
echo 0 > /proc/pktfwd_dhd/enable
|
|
echo 0 > /proc/pktfwd_wl/enable
|
|
}
|
|
|
|
ts_reload() {
|
|
# TODO check it again
|
|
local dhcp_reload=$1
|
|
restart=""
|
|
|
|
bridge_verify_vid_mapping() {
|
|
local section=$1
|
|
|
|
check__port_vid() {
|
|
local port="$1"
|
|
local vlan="$2"
|
|
|
|
added=$(bridge vlan show dev $port | grep -w "$vlan")
|
|
if [ "$added" = "" ]; then
|
|
restart="1"
|
|
break
|
|
fi
|
|
}
|
|
|
|
config_get vlan "$section" vlan "0"
|
|
|
|
[ "$vlan" = "0" ] && continue
|
|
|
|
config_list_foreach "$section" "ports" check_port_vid "$vlan"
|
|
[ "$restart" = "1" ] && break
|
|
}
|
|
|
|
|
|
|
|
config_load network
|
|
config_foreach bridge_verify_vid_mapping bridge-vlan
|
|
|
|
|
|
[ -n "dhcp_reload" ] && /etc/init.d/dnsmasq reload
|
|
if [ "$restart" = "1" ]; then
|
|
dbg "trigger network restart"
|
|
/etc/init.d/network restart
|
|
else
|
|
ubus call uci commit '{"config":"network"}'
|
|
fi
|
|
/etc/init.d/firewall reload
|
|
|
|
|
|
#for sink in $(ubus list network.interface.sink*) ; do
|
|
# local sink_vlan=${sink/network.interface./}_vlan
|
|
#done
|
|
}
|
|
|
|
local func=$1
|
|
shift
|
|
|
|
case "$func" in
|
|
create) dbg "create $@"; ts_create $@;;
|
|
reload) dbg "reload $@"; ts_reload $@;;
|
|
--help|help) ts_usage;;
|
|
*) ts_usage; exit 1;;
|
|
esac
|
|
}
|