Rework network configuration #209

Closed
fbl wants to merge 4 commits from fbl:network-overhaul into master
3 changed files with 149 additions and 144 deletions

View File

@ -0,0 +1,141 @@
#!/bin/sh
# SPDX-License-Identifier: GPL-3.0-or-later
. /lib/functions/system.sh
. /lib/functions/fff/network
BOARD="$(uci get board.model.name)"
. /etc/network.$BOARD
[ -n "$ROUTERMAC" ] || ROUTERMAC=$(get_mac_label)
# Clear possibly existing network configuration
> /etc/config/network
# Add basic network configuration
uci batch <<-__EOF__
set network.loopback='interface'
set network.loopback.ifname='lo'
set network.loopback.proto='static'
set network.loopback.ipaddr='127.0.0.1'
set network.loopback.netmask='255.0.0.0'
set network.client='interface'
set network.client.type='bridge'
set network.client.auto='1'
set network.wan='interface'
set network.wan.proto='none'
set network.wan.ifname="$WANDEV"
set network.wan4='interface'
set network.wan4.proto='dhcp'
set network.wan4.ifname='@wan'
set network.wan6='interface'
set network.wan6.proto='dhcpv6'
set network.wan6.reqprefix='no'
set network.wan6.sourcefilter='0'
set network.wan6.ifname='@wan'
set network.ethmesh='interface'
set network.ethmesh.proto='batadv_hardif'
set network.ethmesh.master='bat0'
__EOF__
SWITCHHW=$(swconfig list | awk '{ print $4 }')
if [ "$DSA" = "1" ]; then
uci batch <<-__EOF__
set network.$SWITCHDEV=device
set network.$SWITCHDEV.name=$SWITCHDEV
set network.$SWITCHDEV.type=bridge
# temporary workaround for netifd bug present in OpenWrt 21.02.0 (FS#4104)
fbl marked this conversation as resolved Outdated

Hi Fabian,
der Block kommt doch mit fff-batman-adv rein. Sollte nicht default sein. Oder moechtest du den auch in der l3 haben?
Robert

Hi Fabian, der Block kommt doch mit fff-batman-adv rein. Sollte nicht default sein. Oder moechtest du den auch in der l3 haben? Robert
Outdated
Review

Ich möchte die l3 config langfristig komplett unabhängig von dieser Basiskonfiguration machen. Kurzfristig würde ich diesen Umstand einfach - wie bisher - hinnehmen.

Ich möchte die l3 config langfristig komplett unabhängig von dieser Basiskonfiguration machen. Kurzfristig würde ich diesen Umstand einfach - wie bisher - hinnehmen.

So ist es halt doppelt. Einmal hier und im package fff-batman-adv.

So ist es halt doppelt. Einmal hier und im package fff-batman-adv.
Outdated
Review

Ah, an mir ist total vorbei gegangen, was du eigentlich meinst. Das war vorher ja auch nicht da und gehört hier entsprechend auch überhaupt nicht hin.

Ich hab da einen relativ alten Patch von mir wiederverwertet, möglicherweise ist da was übrig geblieben.

Würde ich entsprechend entfernen, gut aufgepasst!

Ah, an mir ist total vorbei gegangen, was du eigentlich meinst. Das war vorher ja auch nicht da und gehört hier entsprechend auch überhaupt nicht hin. Ich hab da einen relativ alten Patch von mir wiederverwertet, möglicherweise ist da was übrig geblieben. Würde ich entsprechend entfernen, gut aufgepasst!
set network.$SWITCHDEV.bridge_empty='1'
set network.${SWITCHDEV}_1=bridge-vlan
set network.${SWITCHDEV}_1.device=$SWITCHDEV
set network.${SWITCHDEV}_1.vlan=1
set network.${SWITCHDEV}_1.ports="$CLIENT_PORTS"
set network.${SWITCHDEV}_3=bridge-vlan
set network.${SWITCHDEV}_3.device=$SWITCHDEV
set network.${SWITCHDEV}_3.vlan=3
set network.${SWITCHDEV}_3.ports="$BATMAN_PORTS"
__EOF__
if [ "$WANDEV" = "$SWITCHDEV" ] || ! [ -z "$WAN_PORTS" ]; then
uci batch <<-__EOF__
set network.${SWITCHDEV}_2=bridge-vlan
set network.${SWITCHDEV}_2.device=$SWITCHDEV
set network.${SWITCHDEV}_2.vlan=2
set network.${SWITCHDEV}_2.ports="$WAN_PORTS"
__EOF__
fi
elif [ -n "$SWITCHHW" ]; then
uci batch <<-__EOF__
set network.$SWITCHDEV=switch
set network.$SWITCHDEV.name=$SWITCHHW
set network.$SWITCHDEV.enable=1
set network.$SWITCHDEV.reset=1
set network.$SWITCHDEV.enable_vlan=1
set network.${SWITCHDEV}_1=switch_vlan
set network.${SWITCHDEV}_1.device=$SWITCHHW
set network.${SWITCHDEV}_1.vlan=1
set network.${SWITCHDEV}_1.ports="$CLIENT_PORTS"
set network.${SWITCHDEV}_3=switch_vlan
set network.${SWITCHDEV}_3.device=$SWITCHHW
set network.${SWITCHDEV}_3.vlan=3
set network.${SWITCHDEV}_3.ports="$BATMAN_PORTS"
__EOF__
if [ "$WANDEV" = "$SWITCHDEV" ] || [ -n "$WAN_PORTS" ]; then
uci batch <<-__EOF__
set network.${SWITCHDEV}_2=switch_vlan
set network.${SWITCHDEV}_2.device=$SWITCHHW
set network.${SWITCHDEV}_2.vlan=2
set network.${SWITCHDEV}_2.ports="$WAN_PORTS"
__EOF__
fi
fi
if [ -n "$SWITCHHW" ] || [ "$DSA" = "1" ]; then
uci set network.client.ifname="$SWITCHDEV.1 bat0"
uci set network.ethmesh.ifname="$SWITCHDEV.3"
if [ "$WANDEV" = "$SWITCHDEV" ]; then
uci set network.wan.ifname=$WANDEV.2
fi
fi
if [ -n "$ETHMESHMAC" ]; then
uci set network.ethmesh.macaddr=$ETHMESHMAC
fi
if [ -n "$ROUTERMAC" ]; then
uci set network.client.macaddr=$ROUTERMAC
fi
prefix="fdff::/64"
# Set $prefix::1 as IP
addr1=$(owipcalc "$prefix" add ::1)
# Set $prefix::MAC as IP
addr2=$(owipcalc "$prefix" add "::$(ipMacSuffix "$ROUTERMAC")")
# Set $prefix::EUI64 as IP
addr3=$(owipcalc "$prefix" add "::$(ipEUISuffix "$ROUTERMAC")")
uci batch <<-__EOF__
del network.globals
set network.globals=globals
set network.globals.ula_prefix=$prefix
add_list network.client.ip6addr=$addr1
add_list network.client.ip6addr=$addr2
add_list network.client.ip6addr=$addr3
set network.client.proto=static
__EOF__
uci -q commit network

View File

@ -6,7 +6,6 @@
BOARD="$(uci get board.model.name)"
. /etc/network.$BOARD
[ -n "$ROUTERMAC" ] || ROUTERMAC=$(get_mac_label)
if [ -s /etc/network.config ] ; then
. /etc/network.config
@ -105,109 +104,6 @@ elif [ "$TWO_PORT" = "YES" ]; then
uci commit network
fi
else
if ! uci -q get network.$SWITCHDEV > /dev/null ; then
if [ "$DSA" = "1" ]; then
uci set network.$SWITCHDEV=device
uci set network.$SWITCHDEV.name=$SWITCHDEV
uci set network.$SWITCHDEV.type=bridge
# temporary workaround for netifd bug present in OpenWrt 21.02.0 (FS#4104)
uci set network.$SWITCHDEV.bridge_empty='1'
uci set network.${SWITCHDEV}_1=bridge-vlan
uci set network.${SWITCHDEV}_1.device=$SWITCHDEV
uci set network.${SWITCHDEV}_1.vlan=1
uci set network.${SWITCHDEV}_1.ports="$CLIENT_PORTS"
if [ "$WANDEV" = "$SWITCHDEV" ] || ! [ -z "$WAN_PORTS" ]; then
uci set network.${SWITCHDEV}_2=bridge-vlan
uci set network.${SWITCHDEV}_2.device=$SWITCHDEV
uci set network.${SWITCHDEV}_2.vlan=2
uci set network.${SWITCHDEV}_2.ports="$WAN_PORTS"
fi
uci set network.${SWITCHDEV}_3=bridge-vlan
uci set network.${SWITCHDEV}_3.device=$SWITCHDEV
uci set network.${SWITCHDEV}_3.vlan=3
uci set network.${SWITCHDEV}_3.ports="$BATMAN_PORTS"
else
SWITCHHW=$(swconfig list | awk '{ print $4 }')
uci set network.$SWITCHDEV=switch
uci set network.$SWITCHDEV.name=$SWITCHHW
uci set network.$SWITCHDEV.enable=1
uci set network.$SWITCHDEV.reset=1
uci set network.$SWITCHDEV.enable_vlan=1
uci set network.${SWITCHDEV}_1=switch_vlan
uci set network.${SWITCHDEV}_1.device=$SWITCHHW
uci set network.${SWITCHDEV}_1.vlan=1
uci set network.${SWITCHDEV}_1.ports="$CLIENT_PORTS"
if [ "$WANDEV" = "$SWITCHDEV" ] || [ -n "$WAN_PORTS" ]; then
uci set network.${SWITCHDEV}_2=switch_vlan
uci set network.${SWITCHDEV}_2.device=$SWITCHHW
uci set network.${SWITCHDEV}_2.vlan=2
uci set network.${SWITCHDEV}_2.ports="$WAN_PORTS"
fi
uci set network.${SWITCHDEV}_3=switch_vlan
uci set network.${SWITCHDEV}_3.device=$SWITCHHW
uci set network.${SWITCHDEV}_3.vlan=3
uci set network.${SWITCHDEV}_3.ports="$BATMAN_PORTS"
fi
uci set network.client.ifname="$SWITCHDEV.1 bat0"
uci set network.ethmesh.ifname="$SWITCHDEV.3"
if [ "$WANDEV" = "$SWITCHDEV" ]; then
uci set network.wan.ifname=$WANDEV.2
else
uci set network.wan.ifname=$WANDEV
fi
uci commit network
fi
fi
/etc/init.d/network restart
if [ -n "$ETHMESHMAC" ]; then
if uci get network.ethmesh.macaddr
then
echo "MAC for ethmesh is set already"
else
echo "Fixing MAC on $SWITCHDEV.3 (ethmesh)"
sleep 10
uci set network.ethmesh.macaddr=$ETHMESHMAC
uci commit network
ifconfig $SWITCHDEV.3 down
ifconfig $SWITCHDEV.3 hw ether $ETHMESHMAC
ifconfig $SWITCHDEV.3 up
/etc/init.d/network restart
fi
fi
if [ -n "$ROUTERMAC" ]; then
if uci get network.client.macaddr
then
echo "MAC for client is set already"
else
echo "Fixing MAC on br-client"
sleep 10
uci set network.client.macaddr=$ROUTERMAC
uci commit network
ifconfig br-client down
ifconfig br-client hw ether $ROUTERMAC
ifconfig br-client up
/etc/init.d/network restart
fi
fi
if [ -n "$ETH0MAC" ]; then
@ -216,44 +112,6 @@ if [ -n "$ETH0MAC" ]; then
NEW_MACADDR=$(cat "/sys/class/net/${ETH0MAC}/address")
uci set network.$ETH0DEV.macaddr=$NEW_MACADDR
uci commit network
ifconfig $ETH0DEV down
ifconfig $ETH0DEV hw ether $NEW_MACADDR
ifconfig $ETH0DEV up
/etc/init.d/network restart
fi
if uci -q get "network.client.ip6addr" > /dev/null
then
echo "IPv6 for client is set already"
else
echo "Setting IPv6 addresses"
# Some time needed :(
sleep 5
for ip in $(ip -6 addr show br-client | awk '/fdff/{ print $2 }'); do
ip -6 addr del $ip dev br-client
done
prefix="fdff::/64"
# Set $prefix::MAC as IP
addr=$(owipcalc "$prefix" add "::$(ipMacSuffix "$ROUTERMAC")")
ip -6 addr add $addr dev br-client
uci -q set network.globals.ula_prefix=$prefix
uci -q add_list network.client.ip6addr=$addr
uci -q set network.client.proto=static
# Set $prefix::1 as IP
addr=$(owipcalc "$prefix" add ::1)
ip -6 addr add $addr dev br-client
uci -q add_list network.client.ip6addr=$addr
# Set $prefix::link-local as IP
addr=$(owipcalc "$prefix" add "::$(ipEUISuffix "$ROUTERMAC")")
ip -6 addr add $addr dev br-client
uci -q add_list network.client.ip6addr=$addr
uci -q commit network
[ -s /etc/init.d/fff-uradvd ] && /etc/init.d/fff-uradvd restart
fi
reload_config

View File

@ -11,10 +11,16 @@ URADVD_BIN=/usr/sbin/uradvd
service_triggers()
{
procd_add_reload_trigger "fff-uradvd"
procd_add_reload_trigger "fff-uradvd" "network"
}
start_service() {
procd_open_instance
procd_set_param command "$URADVD_BIN" -i br-client -p $(uci get network.globals.ula_prefix)
}
reload_service()
{
stop
start
}