1
0
Fork 0
mirror of https://github.com/Ysurac/openmptcprouter.git synced 2025-03-09 15:40:20 +00:00

fixnetwork

This commit is contained in:
suyuan 2021-01-08 03:33:39 +08:00
parent 34bb7db35b
commit 10d2bdc1e5
2 changed files with 112 additions and 55 deletions

View file

@ -7,6 +7,35 @@ CFG=/etc/board.json
[ -s $CFG ] || /bin/board_detect || exit 1 [ -s $CFG ] || /bin/board_detect || exit 1
[ -s /etc/config/network -a -s /etc/config/system ] && exit 0 [ -s /etc/config/network -a -s /etc/config/system ] && exit 0
generate_bridge() {
local name=$1
local macaddr=$2
uci -q batch <<-EOF
set network.$name=device
set network.$name.name=$name
set network.$name.type=bridge
EOF
if [ -n "$macaddr" ]; then
uci -q batch <<-EOF
set network.$name.macaddr=$macaddr
EOF
fi
}
bridge_vlan_id=0
generate_bridge_vlan() {
local name=$1_vlan
local device=$2
local ports="$3"
local vlan="$4"
uci -q batch <<-EOF
set network.$name=bridge-vlan
set network.$name.device='$device'
set network.$name.vlan='$vlan'
set network.$name.ports='$ports'
EOF
}
generate_static_network() { generate_static_network() {
uci -q batch <<-EOF uci -q batch <<-EOF
delete network.loopback delete network.loopback
@ -15,17 +44,21 @@ generate_static_network() {
set network.loopback.proto='static' set network.loopback.proto='static'
set network.loopback.ipaddr='127.0.0.1' set network.loopback.ipaddr='127.0.0.1'
set network.loopback.netmask='255.0.0.0' set network.loopback.netmask='255.0.0.0'
delete network.globals
set network.globals='globals'
set network.globals.ula_prefix='auto'
EOF EOF
[ -e /proc/sys/net/ipv6 ] && {
uci -q batch <<-EOF
delete network.globals
set network.globals='globals'
set network.globals.ula_prefix='auto'
EOF
}
if json_is_a dsl object; then if json_is_a dsl object; then
json_select dsl json_select dsl
if json_is_a atmbridge object; then if json_is_a atmbridge object; then
json_select atmbridge json_select atmbridge
local vpi vci encaps payload local vpi vci encaps payload nameprefix
json_get_vars vpi vci encaps payload json_get_vars vpi vci encaps payload nameprefix
uci -q batch <<-EOF uci -q batch <<-EOF
delete network.atm delete network.atm
set network.atm='atm-bridge' set network.atm='atm-bridge'
@ -33,6 +66,7 @@ generate_static_network() {
set network.atm.vci='$vci' set network.atm.vci='$vci'
set network.atm.encaps='$encaps' set network.atm.encaps='$encaps'
set network.atm.payload='$payload' set network.atm.payload='$payload'
set network.atm.nameprefix='$nameprefix'
EOF EOF
json_select .. json_select ..
fi fi
@ -57,35 +91,31 @@ generate_static_network() {
addr_offset=2 addr_offset=2
generate_network() { generate_network() {
local ifname macaddr protocol type ipaddr netmask local ifname macaddr protocol type ipaddr netmask vlan
local bridge=$2
json_select network json_select network
json_select "$1" json_select "$1"
json_get_vars ifname macaddr protocol ipaddr netmask json_get_vars ifname macaddr protocol ipaddr netmask vlan
json_select .. json_select ..
json_select .. json_select ..
[ -n "$ifname" ] || return [ -n "$ifname" ] || return
case "$1" in # force bridge for multi-interface devices (and lan)
# hack (see /etc/board.d/02_network) case "$1:$ifname" in
none) return ;; *\ * | lan:*) type="bridge" ;;
lan*) proto=${proto:-static} ;;
wan*) proto=${proto:-dhcp} ;;
esac esac
if [ -n "$macaddr" ]; then [ -n "$bridge" ] && {
type=macvlan # useless, only for legacy if [ -z "$vlan" ]; then
uci -q batch <<-EOF bridge_vlan_id=$((bridge_vlan_id + 1))
delete network.${1}_dev vlan=$bridge_vlan_id
set network.${1}_dev='device' fi
set network.${1}_dev.name='$1' generate_bridge_vlan $1 $bridge "$ifname" $vlan
set network.${1}_dev.type='$type' ifname=$bridge.$vlan
set network.${1}_dev.ifname='$ifname' type=""
set network.${1}_dev.macaddr='$macaddr' }
EOF
ifname=$1
fi
uci -q batch <<-EOF uci -q batch <<-EOF
delete network.$1 delete network.$1
@ -95,11 +125,22 @@ generate_network() {
set network.$1.proto='none' set network.$1.proto='none'
EOF EOF
if [ -n "$macaddr" ]; then
for name in $ifname; do
uci -q batch <<-EOF
delete network.$1_${name/./_}_dev
set network.$1_${name/./_}_dev='device'
set network.$1_${name/./_}_dev.name='$name'
set network.$1_${name/./_}_dev.macaddr='$macaddr'
EOF
done
fi
case "$protocol" in case "$protocol" in
static) static)
local ipad local ipad
case "$1" in case "$1" in
lan) ipad=${ipaddr:-"192.168.100.1"} ;; lan) ipad=${ipaddr:-"192.168.1.1"} ;;
*) ipad=${ipaddr:-"192.168.$((addr_offset++)).1"} ;; *) ipad=${ipaddr:-"192.168.$((addr_offset++)).1"} ;;
esac esac
@ -109,17 +150,23 @@ generate_network() {
set network.$1.proto='static' set network.$1.proto='static'
set network.$1.ipaddr='$ipad' set network.$1.ipaddr='$ipad'
set network.$1.netmask='$netm' set network.$1.netmask='$netm'
set network.$1.ip6assign='60'
EOF EOF
[ -e /proc/sys/net/ipv6 ] && uci set network.$1.ip6assign='60'
;; ;;
dhcp) dhcp)
# fixup IPv6 slave interface if parent is a bridge # fixup IPv6 slave interface if parent is a bridge
[ "$type" = "bridge" ] && ifname="br-$1" [ "$type" = "bridge" ] && ifname="br-$1"
uci -q batch <<-EOF uci set network.$1.proto='dhcp'
set network.$1.proto='dhcp' [ -e /proc/sys/net/ipv6 ] && {
EOF uci -q batch <<-EOF
delete network.${1}6
set network.${1}6='interface'
set network.${1}6.ifname='$ifname'
set network.${1}6.proto='dhcpv6'
EOF
}
;; ;;
pppoe) pppoe)
@ -127,12 +174,16 @@ generate_network() {
set network.$1.proto='pppoe' set network.$1.proto='pppoe'
set network.$1.username='username' set network.$1.username='username'
set network.$1.password='password' set network.$1.password='password'
set network.$1.ipv6='1'
delete network.${1}6
set network.${1}6='interface'
set network.${1}6.ifname='@${1}'
set network.${1}6.proto='dhcpv6'
EOF EOF
[ -e /proc/sys/net/ipv6 ] && {
uci -q batch <<-EOF
set network.$1.ipv6='1'
delete network.${1}6
set network.${1}6='interface'
set network.${1}6.ifname='@${1}'
set network.${1}6.proto='dhcpv6'
EOF
}
;; ;;
esac esac
} }
@ -206,7 +257,8 @@ generate_switch() {
json_select switch json_select switch
json_select "$key" json_select "$key"
json_get_vars enable reset blinkrate cpu_port json_get_vars enable reset blinkrate cpu_port \
ar8xxx_mib_type ar8xxx_mib_poll_interval
uci -q batch <<-EOF uci -q batch <<-EOF
add network switch add network switch
@ -214,6 +266,8 @@ generate_switch() {
set network.@switch[-1].reset='$reset' set network.@switch[-1].reset='$reset'
set network.@switch[-1].enable_vlan='$enable' set network.@switch[-1].enable_vlan='$enable'
set network.@switch[-1].blinkrate='$blinkrate' set network.@switch[-1].blinkrate='$blinkrate'
set network.@switch[-1].ar8xxx_mib_type='$ar8xxx_mib_type'
set network.@switch[-1].ar8xxx_mib_poll_interval='$ar8xxx_mib_poll_interval'
EOF EOF
generate_switch_vlans_ports "$1" generate_switch_vlans_ports "$1"
@ -222,7 +276,6 @@ generate_switch() {
json_select .. json_select ..
} }
generate_static_system() { generate_static_system() {
uci -q batch <<-EOF uci -q batch <<-EOF
delete system.@system[0] delete system.@system[0]
@ -250,6 +303,13 @@ generate_static_system() {
uci -q set "system.@system[-1].hostname=$hostname" uci -q set "system.@system[-1].hostname=$hostname"
fi fi
local compat_version
if json_get_var compat_version compat_version; then
uci -q set "system.@system[-1].compat_version=$compat_version"
else
uci -q set "system.@system[-1].compat_version=1.0"
fi
if json_is_a ntpserver array; then if json_is_a ntpserver array; then
local keys key local keys key
json_get_keys keys ntpserver json_get_keys keys ntpserver
@ -359,11 +419,12 @@ generate_led() {
;; ;;
switch) switch)
local port_mask speed_mask local port_mask speed_mask mode
json_get_vars port_mask speed_mask json_get_vars port_mask speed_mask mode
uci -q batch <<-EOF uci -q batch <<-EOF
set system.$cfg.port_mask='$port_mask' set system.$cfg.port_mask='$port_mask'
set system.$cfg.speed_mask='$speed_mask' set system.$cfg.speed_mask='$speed_mask'
set system.$cfg.mode='$mode'
EOF EOF
;; ;;
@ -411,12 +472,24 @@ generate_gpioswitch() {
json_init json_init
json_load "$(cat ${CFG})" json_load "$(cat ${CFG})"
umask 077
if [ ! -s /etc/config/network ]; then if [ ! -s /etc/config/network ]; then
bridge_name=""
touch /etc/config/network touch /etc/config/network
generate_static_network generate_static_network
json_get_vars bridge
[ -n "$bridge" ] && {
json_select bridge
json_get_vars name macaddr
generate_bridge "$name" "$macaddr"
json_select ..
bridge_name=$name
}
json_get_keys keys network json_get_keys keys network
for key in $keys; do generate_network $key; done for key in $keys; do generate_network $key $bridge_name; done
json_get_keys keys switch json_get_keys keys switch
for key in $keys; do generate_switch $key; done for key in $keys; do generate_switch $key; done

View file

@ -1,16 +0,0 @@
#!/bin/sh
#
# Copyright (C) 2013-2015 OpenWrt.org
#
. /lib/functions/uci-defaults.sh
board_config_update
json_is_a network object && exit 0
ucidef_set_interface_lan 'eth0'
board_config_flush
exit 0