#!/bin/sh # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. BOARD="$(uci get board.model.name)" . /etc/network.$BOARD if ! uci get network.$SWITCHDEV.ifname; then 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" echo "# Allow IPv6 RAs on WAN Port" >> /etc/sysctl.conf if [[ "$WANDEV" = "$SWITCHDEV" ]]; 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" echo "net.ipv6.conf.$WANDEV.2.accept_ra_defrtr = 1" >> /etc/sysctl.conf echo "net.ipv6.conf.$WANDEV.2.accept_ra_pinfo = 1" >> /etc/sysctl.conf echo "net.ipv6.conf.$WANDEV.2.autoconf = 1" >> /etc/sysctl.conf echo "net.ipv6.conf.$WANDEV.2.accept_ra_rtr_pref = 1" >> /etc/sysctl.conf else echo "net.ipv6.conf.$WANDEV.accept_ra_defrtr = 1" >> /etc/sysctl.conf echo "net.ipv6.conf.$WANDEV.accept_ra_pinfo = 1" >> /etc/sysctl.conf echo "net.ipv6.conf.$WANDEV.autoconf = 1" >> /etc/sysctl.conf echo "net.ipv6.conf.$WANDEV.accept_ra_rtr_pref = 1" >> /etc/sysctl.conf 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" uci set network.mesh.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 /etc/init.d/network restart fi if [[ -n "$ETHMESHMAC" ]]; then if uci get network.ethmesh.macaddr then echo "MAC for ethmesh is set already" else echo "Fixing MAC on eth0.3 (ethmesh)" sleep 10 NEW_MACADDR=$(cat /sys/class/net/$ETHMESHMAC/address) uci set network.ethmesh.macaddr=$NEW_MACADDR uci commit ifconfig eth0.3 down ifconfig eth0.3 hw ether $NEW_MACADDR ifconfig eth0.3 up /etc/init.d/network restart fi fi if [[ -n "$ROUTERMAC" ]]; then if uci get network.mesh.macaddr then echo "MAC for mesh is set already" else echo "Fixing MAC on br-mesh (mesh)" sleep 10 NEW_MACADDR=$(cat /sys/class/net/$ROUTERMAC/address) uci set network.mesh.macaddr=$NEW_MACADDR uci commit ifconfig br-mesh down ifconfig br-mesh hw ether $NEW_MACADDR ifconfig br-mesh up /etc/init.d/network restart fi fi if [[ -n "$ETH0MAC" ]]; then echo "Fixing MAC on eth0" sleep 10 NEW_MACADDR=$(cat "/sys/class/net/${ETH0MAC}/address") uci set network.eth0.macaddr=$NEW_MACADDR uci commit ifconfig eth0 down ifconfig eth0 hw ether $NEW_MACADDR ifconfig eth0 up /etc/init.d/network restart fi if uci get network.mesh.ip6addr then echo "IPv6 for mesh is set already" else # Some time needed :( sleep 5 for ip in $(ip -6 addr show br-mesh | awk '/fdff/{ print $2 }'); do ip -6 addr del $ip dev br-mesh done prefix="fdff:0::/64" # Set $prefix::MAC as IP suffix=$(awk -F: '{ print $1$2":"$3$4":"$5$6 }' /sys/class/net/br-mesh/address) addr=$(echo $prefix | sed -e 's/\//'$suffix'\//') ip -6 addr add $addr dev br-mesh uci -q del network.globals uci -q set network.globals=globals uci -q set network.globals.ula_prefix=$prefix uci -q add_list network.mesh.ip6addr=$addr uci -q set network.mesh.proto=static # Set $prefix::1 as IP suffix="1" addr=$(echo $prefix | sed -e 's/\//'$suffix'\//') ip -6 addr add $addr dev br-mesh uci -q add_list network.mesh.ip6addr=$addr # Set $prefix::link-local as IP suffix=$(awk -F: '{ printf("%02x%s:%sff:fe%s:%s%s\n", xor(("0x"$1),2), $2, $3, $4, $5, $6) }' /sys/class/net/br-mesh/address) addr=$(echo $prefix | sed -e 's/\//'$suffix'\//') ip -6 addr add $addr dev br-mesh uci -q add_list network.mesh.ip6addr=$addr uci -q commit network /etc/init.d/fff-uradvd restart fi