2018-02-24 13:30:42 +00:00
|
|
|
#!/bin/sh /etc/rc.common
|
2018-01-23 14:36:03 +00:00
|
|
|
|
2018-09-05 20:58:12 +00:00
|
|
|
START=4
|
2018-02-24 13:30:42 +00:00
|
|
|
USE_PROCD=1
|
2018-01-23 14:36:03 +00:00
|
|
|
|
|
|
|
_setup_macaddr() {
|
|
|
|
uci -q get "network.$1_dev.macaddr" >/dev/null && return
|
|
|
|
uci -q set "network.$1_dev.macaddr=$2"
|
|
|
|
}
|
|
|
|
|
2018-09-05 20:58:12 +00:00
|
|
|
_save_macaddr() {
|
|
|
|
local _ifname
|
|
|
|
loval _macaddr
|
|
|
|
uci -q get "network.$1_dev.ifname" >/dev/null && {
|
|
|
|
_ifname=$(uci -q get "network.$1.ifname")
|
|
|
|
_macaddr=$(ip link show dev $_ifname | grep link | awk '{print $2}')
|
|
|
|
[ -n "$_macaddr" ] && uci -q set network.$1_dev.macaddr=$_macaddr
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-01-23 14:36:03 +00:00
|
|
|
# Configuration by interface
|
|
|
|
_setup_interface() {
|
|
|
|
# do not create macvlan for vlan
|
|
|
|
local _ifname
|
|
|
|
config_get _ifname "$1" ifname
|
|
|
|
case "$_ifname" in
|
|
|
|
eth*.*) return ;;
|
|
|
|
esac
|
|
|
|
|
2018-07-01 05:29:41 +00:00
|
|
|
[ "$(echo $1 | grep _dev)" != "" ] && {
|
2018-06-29 16:27:37 +00:00
|
|
|
local _intfdev=$(sed 's/_dev//' $1)
|
|
|
|
uci -q get "network.$_intfdev.ifname" >/dev/null && {
|
|
|
|
uci -q batch <<-EOF
|
|
|
|
delete network.$1
|
|
|
|
commit network
|
|
|
|
EOF
|
|
|
|
}
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
2018-01-23 14:36:03 +00:00
|
|
|
local _type
|
|
|
|
config_get _type "$1" type
|
2018-02-24 09:19:34 +00:00
|
|
|
|
|
|
|
uci -q get "network.$1_dev.ifname" >/dev/null && {
|
2018-08-13 20:45:44 +00:00
|
|
|
uci -q set network.$1_dev.mtu=$(uci -q get network.$1.mtu)
|
2018-09-01 19:59:02 +00:00
|
|
|
[ -n "$(uci -q get network.$1.masterintf)" ] && uci -q set network.$1_dev.ifname=$(uci -q get network.$1.masterintf)
|
|
|
|
[ -z "$(uci -q get network.$1.masterintf)" ] && uci -q set network.$1.masterintf=$(uci -q get network.$1_dev.ifname)
|
2018-09-05 20:58:12 +00:00
|
|
|
[ -z "$(uci -q get network.$1.macaddr)" ] && uci -q set network.$1_dev.macaddr=$(uci -q get network.$1.macaddr)
|
2018-02-24 09:19:34 +00:00
|
|
|
[ "$_type" = "macvlan" ] || {
|
|
|
|
uci -q batch <<-EOF
|
|
|
|
delete network.$1_dev
|
|
|
|
EOF
|
|
|
|
}
|
2018-06-27 17:57:08 +00:00
|
|
|
[ "$_type" = "macvlan" ] && {
|
|
|
|
local _interface
|
|
|
|
config_get _interface "$1" interface
|
|
|
|
[ -n "$_interface" ] && {
|
|
|
|
uci -q batch <<-EOF
|
|
|
|
delete network.$1.interface
|
|
|
|
set network.$1_dev.ifname=$_interface
|
|
|
|
EOF
|
|
|
|
}
|
|
|
|
}
|
2018-09-01 19:59:02 +00:00
|
|
|
uci -q commit network
|
2018-02-24 09:19:34 +00:00
|
|
|
return 0
|
|
|
|
}
|
|
|
|
|
2018-01-23 14:36:03 +00:00
|
|
|
[ "$_type" = "macvlan" ] || return 0
|
|
|
|
|
|
|
|
uci -q batch <<-EOF
|
|
|
|
set network.$1_dev=device
|
|
|
|
set network.$1_dev.name=$1
|
|
|
|
set network.$1_dev.type=macvlan
|
2018-04-25 16:15:08 +00:00
|
|
|
set network.$1_dev.ifname=$_ifname
|
2018-01-23 14:36:03 +00:00
|
|
|
set network.$1.ifname=$1
|
2018-09-01 19:59:02 +00:00
|
|
|
set network.$1.masterintf=$_ifname
|
|
|
|
set network.$1.type=macvlan
|
2018-01-23 14:36:03 +00:00
|
|
|
set network.$1.defaultroute=0
|
|
|
|
EOF
|
|
|
|
|
|
|
|
_macaddr=$(uci -q get "network.$1.macaddr")
|
|
|
|
_setup_macaddr "$1" "${_macaddr:-auto$(date +%s)}"
|
2018-08-13 20:45:44 +00:00
|
|
|
uci -q set network.$1_dev.mtu=$(uci -q get network.$1.mtu)
|
2018-02-23 12:53:33 +00:00
|
|
|
uci -q commit network
|
2018-01-23 14:36:03 +00:00
|
|
|
}
|
2018-02-24 13:30:42 +00:00
|
|
|
|
|
|
|
start_service() {
|
|
|
|
. /lib/functions.sh
|
|
|
|
config_load network
|
|
|
|
config_foreach _setup_interface interface
|
2018-09-05 20:58:12 +00:00
|
|
|
config_foreach _save_macaddr interface
|
|
|
|
uci -q commit network
|
2018-02-24 13:30:42 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
reload_service() {
|
|
|
|
start
|
|
|
|
}
|
|
|
|
|
|
|
|
service_triggers() {
|
|
|
|
procd_add_reload_trigger network
|
|
|
|
}
|