Message ID | 20190318215401.4082-3-fabian@blaese.de |
---|---|
State | Superseded |
Headers | show |
diff --git a/src/packages/fff/fff-gateway/files/etc/gateway.d/10-vlan b/src/packages/fff/fff-gateway/files/etc/gateway.d/10-vlan new file mode 100644 index 0000000..a8d64de --- /dev/null +++ b/src/packages/fff/fff-gateway/files/etc/gateway.d/10-vlan @@ -0,0 +1,39 @@ +configure() { + add_vlan() { + local vlan="$1" + local ports=$(uci get gateway.$vlan.ports) + local name="$SWITCHDEV"_$vlan + + uci set network.$name='switch_vlan' + uci set network.$name.device="$(uci get network.$SWITCHDEV.name)" + uci set network.$name.vlan="$vlan" + uci set network.$name.ports="$CPUPORT $ports" + } + + remove_vlan() { + local name="$1" + + local switchdev=$(echo $name | cut -d_ -f1) + local vlan=$(echo $name | cut -d_ -f2) + + # only remove vlans not present in gateway config + if ! uci -q get gateway.$vlan > /dev/null; then + # remove switch_vlan + uci del network.$name + fi + } + + config_load network + config_foreach remove_vlan switch_vlan + + config_load gateway + config_foreach add_vlan vlan +} + +apply() { + uci commit network +} + +revert() { + uci revert network +} diff --git a/src/packages/fff/fff-gateway/files/etc/gateway.d/20-network-client b/src/packages/fff/fff-gateway/files/etc/gateway.d/20-network-client new file mode 100644 index 0000000..330be54 --- /dev/null +++ b/src/packages/fff/fff-gateway/files/etc/gateway.d/20-network-client @@ -0,0 +1,66 @@ +configure() { + # ipaddr + #remove old ipaddr + uci -q del network.mesh.ipaddr + #set new ipaddr + if ipaddr=$(uci -q get gateway.@client[0].ipaddr); then + for ip in $ipaddr; do + uci add_list network.mesh.ipaddr=$ip + done + else + echo "WARNING: No client ipaddr set!" + fi + #put interface routes from set addresses into fff table + uci set network.mesh.ip4table='fff' + + # ip6addr + #remove old ip6addr + for ip in $(uci get network.mesh.ip6addr); do + if echo "$ip" | grep -v -e "fdff:" -e "fe80::1/64" > /dev/null; then + uci del_list network.mesh.ip6addr="$ip" + fi + done + #set new ip6addr + if ip6addr=$(uci -q get gateway.@client[0].ip6addr); then + for ip in $ip6addr; do + uci add_list network.mesh.ip6addr=$ip + done + else + echo "WARNING: No client ip6addr set!" + fi + #put interface routes from set addresses into fff table + uci set network.mesh.ip6table='fff' + + # dhcp + uci -q del dhcp.mesh.start + uci -q del dhcp.mesh.limit + if dhcp_start=$(uci -q get gateway.@client[0].dhcp_start); then + uci set dhcp.mesh=dhcp + uci set dhcp.mesh.interface=mesh + uci set dhcp.mesh.start=$dhcp_start + uci set dhcp.mesh.limit=$(uci -q get gateway.@client[0].dhcp_limit) + else + echo "WARNING: No DHCP range start and/or limit set!" + fi + + # set interface + #remove all eth interfaces + ifaces=$(uci get network.mesh.ifname | sed -e "s/ *eth\d\.\d//g" -e "s/ *eth\d//g" -e "s/^ //") + if vlan=$(uci -q get gateway.@client[0].vlan); then + uci set network.mesh.ifname="${SWITCHDEV}.$vlan $ifaces" + elif iface=$(uci -q get gateway.@client[0].iface); then + uci set network.mesh.ifname="$iface $ifaces" + else + echo "WARNING: No Interface for client specified" + fi +} + +apply() { + uci commit network + uci commit dhcp +} + +revert() { + uci revert network + uci revert dhcp +} diff --git a/src/packages/fff/fff-gateway/files/etc/sysctl.d/60-fff-gateway.conf b/src/packages/fff/fff-gateway/files/etc/sysctl.d/60-fff-gateway.conf new file mode 100644 index 0000000..62bda1b --- /dev/null +++ b/src/packages/fff/fff-gateway/files/etc/sysctl.d/60-fff-gateway.conf @@ -0,0 +1,5 @@ +# Enable forwarding +net.ipv4.conf.all.forwarding=1 +net.ipv4.ip_forward=1 +net.ipv6.conf.all.forwarding=1 +net.ipv6.conf.default.forwarding=1
Hallo Fabian, ich schaue mir das gelegentlich noch genauer an, zunächst nur eine Frage unten. > -----Original Message----- > From: franken-dev [mailto:franken-dev-bounces@freifunk.net] On Behalf > Of Fabian Bläse > Sent: Montag, 18. März 2019 22:54 > To: franken-dev@freifunk.net > Subject: [PATCH v2 3/3] gateway.d: Add scripts for network configuration > > This adds scripts to configure vlan and client network. > > This also adds sysctl settings to enable forwarding. > > Signed-off-by: Fabian Bläse <fabian@blaese.de> > --- > .../fff-gateway/files/etc/gateway.d/10-vlan | 39 +++++++++++ > .../files/etc/gateway.d/20-network-client | 66 +++++++++++++++++++ > .../files/etc/sysctl.d/60-fff-gateway.conf | 5 ++ > 3 files changed, 110 insertions(+) > create mode 100644 src/packages/fff/fff-gateway/files/etc/gateway.d/10- > vlan > create mode 100644 src/packages/fff/fff-gateway/files/etc/gateway.d/20- > network-client > create mode 100644 src/packages/fff/fff-gateway/files/etc/sysctl.d/60-fff- > gateway.conf > > diff --git a/src/packages/fff/fff-gateway/files/etc/gateway.d/10-vlan > b/src/packages/fff/fff-gateway/files/etc/gateway.d/10-vlan > new file mode 100644 > index 0000000..a8d64de > --- /dev/null > +++ b/src/packages/fff/fff-gateway/files/etc/gateway.d/10-vlan > @@ -0,0 +1,39 @@ > +configure() { Müssen die Funktionen hier nested sein? Hat das einen tieferen Sinn oder ist das Willkür? Grüße Adrian > + add_vlan() { > + local vlan="$1" > + local ports=$(uci get gateway.$vlan.ports) > + local name="$SWITCHDEV"_$vlan > + > + uci set network.$name='switch_vlan' > + uci set network.$name.device="$(uci get > network.$SWITCHDEV.name)" > + uci set network.$name.vlan="$vlan" > + uci set network.$name.ports="$CPUPORT $ports" > + } > + > + remove_vlan() { > + local name="$1" > + > + local switchdev=$(echo $name | cut -d_ -f1) > + local vlan=$(echo $name | cut -d_ -f2) > + > + # only remove vlans not present in gateway config > + if ! uci -q get gateway.$vlan > /dev/null; then > + # remove switch_vlan > + uci del network.$name > + fi > + } > + > + config_load network > + config_foreach remove_vlan switch_vlan > + > + config_load gateway > + config_foreach add_vlan vlan > +} > + > +apply() { > + uci commit network > +} > + > +revert() { > + uci revert network > +} > diff --git a/src/packages/fff/fff-gateway/files/etc/gateway.d/20-network- > client b/src/packages/fff/fff-gateway/files/etc/gateway.d/20-network-client > new file mode 100644 > index 0000000..330be54 > --- /dev/null > +++ b/src/packages/fff/fff-gateway/files/etc/gateway.d/20-network-client > @@ -0,0 +1,66 @@ > +configure() { > + # ipaddr > + #remove old ipaddr > + uci -q del network.mesh.ipaddr > + #set new ipaddr > + if ipaddr=$(uci -q get gateway.@client[0].ipaddr); then > + for ip in $ipaddr; do > + uci add_list network.mesh.ipaddr=$ip > + done > + else > + echo "WARNING: No client ipaddr set!" > + fi > + #put interface routes from set addresses into fff table > + uci set network.mesh.ip4table='fff' > + > + # ip6addr > + #remove old ip6addr > + for ip in $(uci get network.mesh.ip6addr); do > + if echo "$ip" | grep -v -e "fdff:" -e "fe80::1/64" > /dev/null; > then > + uci del_list network.mesh.ip6addr="$ip" > + fi > + done > + #set new ip6addr > + if ip6addr=$(uci -q get gateway.@client[0].ip6addr); then > + for ip in $ip6addr; do > + uci add_list network.mesh.ip6addr=$ip > + done > + else > + echo "WARNING: No client ip6addr set!" > + fi > + #put interface routes from set addresses into fff table > + uci set network.mesh.ip6table='fff' > + > + # dhcp > + uci -q del dhcp.mesh.start > + uci -q del dhcp.mesh.limit > + if dhcp_start=$(uci -q get gateway.@client[0].dhcp_start); then > + uci set dhcp.mesh=dhcp > + uci set dhcp.mesh.interface=mesh > + uci set dhcp.mesh.start=$dhcp_start > + uci set dhcp.mesh.limit=$(uci -q get > gateway.@client[0].dhcp_limit) > + else > + echo "WARNING: No DHCP range start and/or limit set!" > + fi > + > + # set interface > + #remove all eth interfaces > + ifaces=$(uci get network.mesh.ifname | sed -e "s/ *eth\d\.\d//g" -e > "s/ *eth\d//g" -e "s/^ //") > + if vlan=$(uci -q get gateway.@client[0].vlan); then > + uci set network.mesh.ifname="${SWITCHDEV}.$vlan $ifaces" > + elif iface=$(uci -q get gateway.@client[0].iface); then > + uci set network.mesh.ifname="$iface $ifaces" > + else > + echo "WARNING: No Interface for client specified" > + fi > +} > + > +apply() { > + uci commit network > + uci commit dhcp > +} > + > +revert() { > + uci revert network > + uci revert dhcp > +} > diff --git a/src/packages/fff/fff-gateway/files/etc/sysctl.d/60-fff- > gateway.conf b/src/packages/fff/fff-gateway/files/etc/sysctl.d/60-fff- > gateway.conf > new file mode 100644 > index 0000000..62bda1b > --- /dev/null > +++ b/src/packages/fff/fff-gateway/files/etc/sysctl.d/60-fff-gateway.conf > @@ -0,0 +1,5 @@ > +# Enable forwarding > +net.ipv4.conf.all.forwarding=1 > +net.ipv4.ip_forward=1 > +net.ipv6.conf.all.forwarding=1 > +net.ipv6.conf.default.forwarding=1 > -- > 2.21.0
Hi Fabian, s. inline Am 18.03.19 um 22:54 schrieb Fabian Bläse: > This adds scripts to configure vlan and client network. > > This also adds sysctl settings to enable forwarding. > > Signed-off-by: Fabian Bläse <fabian@blaese.de> > --- > .../fff-gateway/files/etc/gateway.d/10-vlan | 39 +++++++++++ > .../files/etc/gateway.d/20-network-client | 66 +++++++++++++++++++ > .../files/etc/sysctl.d/60-fff-gateway.conf | 5 ++ > 3 files changed, 110 insertions(+) > create mode 100644 src/packages/fff/fff-gateway/files/etc/gateway.d/10-vlan > create mode 100644 src/packages/fff/fff-gateway/files/etc/gateway.d/20-network-client > create mode 100644 src/packages/fff/fff-gateway/files/etc/sysctl.d/60-fff-gateway.conf > > diff --git a/src/packages/fff/fff-gateway/files/etc/gateway.d/10-vlan b/src/packages/fff/fff-gateway/files/etc/gateway.d/10-vlan > new file mode 100644 > index 0000000..a8d64de > --- /dev/null > +++ b/src/packages/fff/fff-gateway/files/etc/gateway.d/10-vlan > @@ -0,0 +1,39 @@ > +configure() { > + add_vlan() { > + local vlan="$1" > + local ports=$(uci get gateway.$vlan.ports) > + local name="$SWITCHDEV"_$vlan > + > + uci set network.$name='switch_vlan' > + uci set network.$name.device="$(uci get network.$SWITCHDEV.name)" > + uci set network.$name.vlan="$vlan" > + uci set network.$name.ports="$CPUPORT $ports" $SWITCHDEVund $CPUPORT ist unbekannt, du hast bei v2 1/3 das Sourcen von network.$BOARD rausgeworfen. Am besten hier rein holen, dann ist alles beisammen. Mehrfaches Sourcen schadet nicht. > + } > + > + remove_vlan() { > + local name="$1" > + > + local switchdev=$(echo $name | cut -d_ -f1) > + local vlan=$(echo $name | cut -d_ -f2) > + > + # only remove vlans not present in gateway config > + if ! uci -q get gateway.$vlan > /dev/null; then > + # remove switch_vlan > + uci del network.$name > + fi > + } > + > + config_load network > + config_foreach remove_vlan switch_vlan > + > + config_load gateway > + config_foreach add_vlan vlan > +} > + > +apply() { > + uci commit network > +} > + > +revert() { > + uci revert network > +} > diff --git a/src/packages/fff/fff-gateway/files/etc/gateway.d/20-network-client b/src/packages/fff/fff-gateway/files/etc/gateway.d/20-network-client > new file mode 100644 > index 0000000..330be54 > --- /dev/null > +++ b/src/packages/fff/fff-gateway/files/etc/gateway.d/20-network-client > @@ -0,0 +1,66 @@ > +configure() { > + # ipaddr > + #remove old ipaddr > + uci -q del network.mesh.ipaddr > + #set new ipaddr > + if ipaddr=$(uci -q get gateway.@client[0].ipaddr); then > + for ip in $ipaddr; do > + uci add_list network.mesh.ipaddr=$ip > + done > + else > + echo "WARNING: No client ipaddr set!" > + fi > + #put interface routes from set addresses into fff table > + uci set network.mesh.ip4table='fff' > + > + # ip6addr > + #remove old ip6addr > + for ip in $(uci get network.mesh.ip6addr); do > + if echo "$ip" | grep -v -e "fdff:" -e "fe80::1/64" > /dev/null; then > + uci del_list network.mesh.ip6addr="$ip" > + fi > + done > + #set new ip6addr > + if ip6addr=$(uci -q get gateway.@client[0].ip6addr); then > + for ip in $ip6addr; do > + uci add_list network.mesh.ip6addr=$ip > + done > + else > + echo "WARNING: No client ip6addr set!" > + fi > + #put interface routes from set addresses into fff table > + uci set network.mesh.ip6table='fff' > + > + # dhcp > + uci -q del dhcp.mesh.start > + uci -q del dhcp.mesh.limit > + if dhcp_start=$(uci -q get gateway.@client[0].dhcp_start); then > + uci set dhcp.mesh=dhcp > + uci set dhcp.mesh.interface=mesh > + uci set dhcp.mesh.start=$dhcp_start > + uci set dhcp.mesh.limit=$(uci -q get gateway.@client[0].dhcp_limit) > + else > + echo "WARNING: No DHCP range start and/or limit set!" > + fi > + > + # set interface > + #remove all eth interfaces > + ifaces=$(uci get network.mesh.ifname | sed -e "s/ *eth\d\.\d//g" -e "s/ *eth\d//g" -e "s/^ //") > + if vlan=$(uci -q get gateway.@client[0].vlan); then > + uci set network.mesh.ifname="${SWITCHDEV}.$vlan $ifaces" hier auch Robert > + elif iface=$(uci -q get gateway.@client[0].iface); then > + uci set network.mesh.ifname="$iface $ifaces" > + else > + echo "WARNING: No Interface for client specified" > + fi > +} > + > +apply() { > + uci commit network > + uci commit dhcp > +} > + > +revert() { > + uci revert network > + uci revert dhcp > +} > diff --git a/src/packages/fff/fff-gateway/files/etc/sysctl.d/60-fff-gateway.conf b/src/packages/fff/fff-gateway/files/etc/sysctl.d/60-fff-gateway.conf > new file mode 100644 > index 0000000..62bda1b > --- /dev/null > +++ b/src/packages/fff/fff-gateway/files/etc/sysctl.d/60-fff-gateway.conf > @@ -0,0 +1,5 @@ > +# Enable forwarding > +net.ipv4.conf.all.forwarding=1 > +net.ipv4.ip_forward=1 > +net.ipv6.conf.all.forwarding=1 > +net.ipv6.conf.default.forwarding=1
Hallo robert, On 19.03.19 02:05, robert wrote: >> + uci set network.$name='switch_vlan' >> + uci set network.$name.device="$(uci get network.$SWITCHDEV.name)" >> + uci set network.$name.vlan="$vlan" >> + uci set network.$name.ports="$CPUPORT $ports" > > $SWITCHDEVund $CPUPORT ist unbekannt, du hast bei v2 1/3 das Sourcen von > network.$BOARD rausgeworfen. Am besten hier rein holen, dann ist alles > beisammen. Mehrfaches Sourcen schadet nicht. Gut gesehen, danke! Wenn da sonst keine Einwände mehr sind und keiner was dagegen hat, würde ich das einfach fix beim applien reparieren. Gruß Fabian
Hallo Adrian, On 18.03.19 23:13, mail@adrianschmutzler.de wrote: > Müssen die Funktionen hier nested sein? > > Hat das einen tieferen Sinn oder ist das Willkür? _Müssen_ müssen sie nicht. Ich fand das so aber hübscher, weil man dann alles zusammen hat. Sind ja nur Hilfsfunktionen mit konkret für diese Funktion (configure) interessantem Code. Gruß Fabian
Hallo, auch hier: siehe unten: > -----Original Message----- > From: franken-dev [mailto:franken-dev-bounces@freifunk.net] On Behalf Of > Fabian Bläse > Sent: Montag, 18. März 2019 22:54 > To: franken-dev@freifunk.net > Subject: [PATCH v2 3/3] gateway.d: Add scripts for network configuration > > This adds scripts to configure vlan and client network. > > This also adds sysctl settings to enable forwarding. > > Signed-off-by: Fabian Bläse <fabian@blaese.de> > --- > .../fff-gateway/files/etc/gateway.d/10-vlan | 39 +++++++++++ > .../files/etc/gateway.d/20-network-client | 66 +++++++++++++++++++ > .../files/etc/sysctl.d/60-fff-gateway.conf | 5 ++ > 3 files changed, 110 insertions(+) > create mode 100644 src/packages/fff/fff-gateway/files/etc/gateway.d/10-vlan > create mode 100644 src/packages/fff/fff-gateway/files/etc/gateway.d/20- > network-client > create mode 100644 src/packages/fff/fff-gateway/files/etc/sysctl.d/60-fff- > gateway.conf > > diff --git a/src/packages/fff/fff-gateway/files/etc/gateway.d/10-vlan > b/src/packages/fff/fff-gateway/files/etc/gateway.d/10-vlan > new file mode 100644 > index 0000000..a8d64de > --- /dev/null > +++ b/src/packages/fff/fff-gateway/files/etc/gateway.d/10-vlan > @@ -0,0 +1,39 @@ > +configure() { > + add_vlan() { > + local vlan="$1" > + local ports=$(uci get gateway.$vlan.ports) > + local name="$SWITCHDEV"_$vlan > + > + uci set network.$name='switch_vlan' > + uci set network.$name.device="$(uci get > network.$SWITCHDEV.name)" > + uci set network.$name.vlan="$vlan" > + uci set network.$name.ports="$CPUPORT $ports" > + } > + > + remove_vlan() { > + local name="$1" > + > + local switchdev=$(echo $name | cut -d_ -f1) > + local vlan=$(echo $name | cut -d_ -f2) > + > + # only remove vlans not present in gateway config > + if ! uci -q get gateway.$vlan > /dev/null; then > + # remove switch_vlan > + uci del network.$name > + fi > + } > + > + config_load network > + config_foreach remove_vlan switch_vlan > + > + config_load gateway > + config_foreach add_vlan vlan > +} > + > +apply() { > + uci commit network > +} > + > +revert() { > + uci revert network > +} > diff --git a/src/packages/fff/fff-gateway/files/etc/gateway.d/20-network-client > b/src/packages/fff/fff-gateway/files/etc/gateway.d/20-network-client > new file mode 100644 > index 0000000..330be54 > --- /dev/null > +++ b/src/packages/fff/fff-gateway/files/etc/gateway.d/20-network-client > @@ -0,0 +1,66 @@ > +configure() { > + # ipaddr > + #remove old ipaddr > + uci -q del network.mesh.ipaddr > + #set new ipaddr > + if ipaddr=$(uci -q get gateway.@client[0].ipaddr); then > + for ip in $ipaddr; do > + uci add_list network.mesh.ipaddr=$ip > + done > + else > + echo "WARNING: No client ipaddr set!" > + fi Ich würde hier lieber ip4addr statt ipaddr lesen. Mindestens in der warning (ggf. auch direkt "IPv4 address"), man könnte aber auch überlegen, ob man es "jetzt noch" generell macht: Man könnte z.B. auch in der gateway-config ip4addr als option verwenden. Hat dann den Nachteil, dass es nicht konsistent mit der network-config ist, wäre aber ggf. einfacher für den Nutzer. > + #put interface routes from set addresses into fff table > + uci set network.mesh.ip4table='fff' > + > + # ip6addr > + #remove old ip6addr > + for ip in $(uci get network.mesh.ip6addr); do > + if echo "$ip" | grep -v -e "fdff:" -e "fe80::1/64" > /dev/null; then Wo wird in der GW-Firmware die fe80::1 denn gesetzt? Bei V2 ist es in der configurehood: https://github.com/adrianschmutzler/fff-firmware/blob/gwmod/src/packages/fff/fff-hoods/files/usr/sbin/configurehood#L57 > + uci del_list network.mesh.ip6addr="$ip" > + fi > + done > + #set new ip6addr > + if ip6addr=$(uci -q get gateway.@client[0].ip6addr); then > + for ip in $ip6addr; do > + uci add_list network.mesh.ip6addr=$ip > + done > + else > + echo "WARNING: No client ip6addr set!" > + fi > + #put interface routes from set addresses into fff table > + uci set network.mesh.ip6table='fff' > + > + # dhcp > + uci -q del dhcp.mesh.start > + uci -q del dhcp.mesh.limit > + if dhcp_start=$(uci -q get gateway.@client[0].dhcp_start); then > + uci set dhcp.mesh=dhcp > + uci set dhcp.mesh.interface=mesh > + uci set dhcp.mesh.start=$dhcp_start > + uci set dhcp.mesh.limit=$(uci -q get > gateway.@client[0].dhcp_limit) Im Prinzip muss man das Limit ja nicht setzen, dann würde der uci get ein Fehler werfen, der vom "-q" wiederum unterdrückt wird. Das funktioniert zwar, besser verständlich wäre meines Erachtens aber so: if dhcp_start=$(uci -q get gateway.@client[0].dhcp_start); then uci set dhcp.mesh=dhcp uci set dhcp.mesh.interface=mesh uci set dhcp.mesh.start=$dhcp_start dhcp_limit=$(uci -q get gateway.@client[0].dhcp_limit) && uci set dhcp.mesh.limit=$dhcp_limit else echo "WARNING: No DHCP range start set!" fi > + else > + echo "WARNING: No DHCP range start and/or limit set!" > + fi > + > + # set interface > + #remove all eth interfaces > + ifaces=$(uci get network.mesh.ifname | sed -e "s/ *eth\d\.\d//g" -e "s/ > *eth\d//g" -e "s/^ //") > + if vlan=$(uci -q get gateway.@client[0].vlan); then > + uci set network.mesh.ifname="${SWITCHDEV}.$vlan $ifaces" > + elif iface=$(uci -q get gateway.@client[0].iface); then > + uci set network.mesh.ifname="$iface $ifaces" > + else > + echo "WARNING: No Interface for client specified" "interface" klein schreiben. Wie schon zuvor festgestellt gefällt mir der Ansatz sehr gut, zumal ich das ja ohnehin in Funktionen zerstückeln wollte. Beste Grüße Adrian > + fi > +} > + > +apply() { > + uci commit network > + uci commit dhcp > +} > + > +revert() { > + uci revert network > + uci revert dhcp > +} > diff --git a/src/packages/fff/fff-gateway/files/etc/sysctl.d/60-fff-gateway.conf > b/src/packages/fff/fff-gateway/files/etc/sysctl.d/60-fff-gateway.conf > new file mode 100644 > index 0000000..62bda1b > --- /dev/null > +++ b/src/packages/fff/fff-gateway/files/etc/sysctl.d/60-fff-gateway.conf > @@ -0,0 +1,5 @@ > +# Enable forwarding > +net.ipv4.conf.all.forwarding=1 > +net.ipv4.ip_forward=1 > +net.ipv6.conf.all.forwarding=1 > +net.ipv6.conf.default.forwarding=1 > -- > 2.21.0
Hab ich jetzt beim Durchkucken in der Tat auch übersehen. Da es den CPUPORT im Moment noch gar nicht gibt, müsste man den streng genommen aber vorher noch bei den Geräten hinzufügen. Das sollte man in dem Fall dann am besten auch ordentlich in nem separaten Patch für ALLE Geräte machen. Ich finde das zwar hässlich, aber bisher ist mir auch nichts besseres eingefallen als der CPU-Port. Grüße Adrian From: franken-dev [mailto:franken-dev-bounces@freifunk.net] On Behalf Of Fabian Bläse Sent: Dienstag, 19. März 2019 08:22 To: robert <rlanghammer@web.de>; franken-dev@freifunk.net Subject: Re: [PATCH v2 3/3] gateway.d: Add scripts for network configuration Hallo robert, On 19.03.19 02:05, robert wrote: >> + uci set network.$name='switch_vlan' >> + uci set network.$name.device="$(uci get network.$SWITCHDEV.name)" >> + uci set network.$name.vlan="$vlan" >> + uci set network.$name.ports="$CPUPORT $ports" > > $SWITCHDEVund $CPUPORT ist unbekannt, du hast bei v2 1/3 das Sourcen von > network.$BOARD rausgeworfen. Am besten hier rein holen, dann ist alles > beisammen. Mehrfaches Sourcen schadet nicht. Gut gesehen, danke! Wenn da sonst keine Einwände mehr sind und keiner was dagegen hat, würde ich das einfach fix beim applien reparieren. Gruß Fabian
Stimmt. Auf einem 4900 kriegt man den CPU-Port mit "swconfig dev switch0 help" zur Laufzeit raus. Ich kann aber nicht sicher sagen, ob das für alle Geräte gilt. Ich würde nur ungern eine Abhängigkeit zu fff-network erzeugen (die hab ich ja im v2 extra raus genommen). Wo bringt man also diese Konfigurationen am besten unter? Gruß Fabian P.S.: Dein Mailclient erzeugt immer noch ziemlich kaputt aussehende (viel zu viele Zeilenumbrüche) Plaintext Mails. (siehe unten) On 20.03.19 16:47, Adrian Schmutzler wrote: > Hab ich jetzt beim Durchkucken in der Tat auch übersehen. > > > > Da es den CPUPORT im Moment noch gar nicht gibt, müsste man den streng genommen aber vorher noch bei den Geräten hinzufügen. > > Das sollte man in dem Fall dann am besten auch ordentlich in nem separaten Patch für ALLE Geräte machen. > > Ich finde das zwar hässlich, aber bisher ist mir auch nichts besseres eingefallen als der CPU-Port. > > > > Grüße > > > > Adrian
Hallo, On 20.03.19 16:25, Adrian Schmutzler wrote: >> +configure() { >> + # ipaddr >> + #remove old ipaddr >> + uci -q del network.mesh.ipaddr >> + #set new ipaddr >> + if ipaddr=$(uci -q get gateway.@client[0].ipaddr); then >> + for ip in $ipaddr; do >> + uci add_list network.mesh.ipaddr=$ip >> + done >> + else >> + echo "WARNING: No client ipaddr set!" >> + fi > > Ich würde hier lieber ip4addr statt ipaddr lesen. Mindestens in der warning (ggf. auch direkt "IPv4 address"), man könnte aber auch überlegen, ob man es "jetzt noch" generell macht: Man könnte z.B. auch in der gateway-config ip4addr als option verwenden. Hat dann den Nachteil, dass es nicht konsistent mit der network-config ist, wäre aber ggf. einfacher für den Nutzer. Ich tatsächlich auch. Aber ich würde da auf jeden Fall eher bei dem bleiben, wie es auch bei OpenWRT verwendet wird. Die Fehlermeldung kann man anpassen. > Wo wird in der GW-Firmware die fe80::1 denn gesetzt? Bei V2 ist es in der configurehood: > https://github.com/adrianschmutzler/fff-firmware/blob/gwmod/src/packages/fff/fff-hoods/files/usr/sbin/configurehood#L57 Nirgends. Überrest von Früher. Auch diese hart da reinkodierte fdff sollte wohl eher weg. Ich würde diesen ganzen Kram bei der Gatewayfirmware (inklusive configurenetwork Skript) bei der Gatewayfirmware komplett weglassen und lieber eine Standard-Konfiguration fürs Gateway mitbringen. Initiale Konfiguration kann dann über fe80 oder so funktionieren. Was meint ihr dazu? Gruß Fabian
hi ich bin aktuell wegen etwas Zeitmangel nur am überfliegen, ich hab mir den Code nicht weiter angeguckt aber auf Fragen antworte ich mal eben gerne ;) On 21.03.19 14:17, Fabian Bläse wrote: > Hallo, > > On 20.03.19 16:25, Adrian Schmutzler wrote: >>> +configure() { >>> + # ipaddr >>> + #remove old ipaddr >>> + uci -q del network.mesh.ipaddr >>> + #set new ipaddr >>> + if ipaddr=$(uci -q get gateway.@client[0].ipaddr); then >>> + for ip in $ipaddr; do >>> + uci add_list network.mesh.ipaddr=$ip >>> + done >>> + else >>> + echo "WARNING: No client ipaddr set!" >>> + fi >> Ich würde hier lieber ip4addr statt ipaddr lesen. Mindestens in der warning (ggf. auch direkt "IPv4 address"), man könnte aber auch überlegen, ob man es "jetzt noch" generell macht: Man könnte z.B. auch in der gateway-config ip4addr als option verwenden. Hat dann den Nachteil, dass es nicht konsistent mit der network-config ist, wäre aber ggf. einfacher für den Nutzer. > Ich tatsächlich auch. Aber ich würde da auf jeden Fall eher bei dem bleiben, wie es auch bei OpenWRT verwendet wird. > Die Fehlermeldung kann man anpassen. > >> Wo wird in der GW-Firmware die fe80::1 denn gesetzt? Bei V2 ist es in der configurehood: >> https://github.com/adrianschmutzler/fff-firmware/blob/gwmod/src/packages/fff/fff-hoods/files/usr/sbin/configurehood#L57 > Nirgends. Überrest von Früher. > > Auch diese hart da reinkodierte fdff sollte wohl eher weg. Ich würde diesen ganzen Kram bei der Gatewayfirmware (inklusive configurenetwork Skript) bei der Gatewayfirmware komplett weglassen und lieber eine Standard-Konfiguration fürs Gateway mitbringen. > Initiale Konfiguration kann dann über fe80 oder so funktionieren. > Was meint ihr dazu? ich würde schon gerne die fdff:: behalten. "Später" will man vllt. mal die Konfiguration des Gateways von SSH ins WebUI übertragen und WebUI per fe80 geht bekanntlich nicht. Gruß Christian > > Gruß > Fabian >
Hallo Fabian, für SWITCHDEV hast du doch ohnehin eine Abhängigkeit auf fff-network. Wenn du das mit dem CPU-Port im network.* vermeiden willst, fiele mir sonst noch folgendes ein: - man verlangt einfach vom Nutzer, das selbst im /etc/config/gateway einzutragen. Dann gibt es halt dort einen zusätzlichen Parameter. Ist zwar nicht schön, aber könnte man zumindest als Interimslösung machen. - Du wirfst für den CPU-Port ein eigenes File oder Skript in fff-gateway, dass die Information enthält (gibt dann aber ne Abhängigkeit auf fff-boardname). - Man könnte theoretisch auch in /etc/config/network bei den Ports rumlesen, das geht aber natürlich nur solange, wie da niemand andere tagged Ports reingeschrieben hat (und ist damit eigentlich nicht brauchbar). swconfig parsen mag ich gar nicht. Außerdem höre ich immer mal wieder, dass OpenWrt swconfig irgendwann loswerden will. Weiterhin geht sowas kaputt, wenn es kein Switch gibt. (z.B. ar150, auch wenn ich weiß, dass das absolute Nischenszenarien sind) Von allen vorhandenen schlechten Lösungen würde ich im Moment die „alte“ wählen und tatsächlich den CPU-Port jeweils in die network.* schreiben. (Ich würde den Patch sogar selbst bauen, wenn jemand vorher den hier reviewed: https://pw.freifunk-franken.de/patch/897/ ;-) ) Beste Grüße Adrian From: Fabian Bläse [mailto:fabian@blaese.de] Sent: Donnerstag, 21. März 2019 14:14 To: Adrian Schmutzler <mail@adrianschmutzler.de>; franken-dev@freifunk.net Subject: Re: [PATCH v2 3/3] gateway.d: Add scripts for network configuration Stimmt. Auf einem 4900 kriegt man den CPU-Port mit "swconfig dev switch0 help" zur Laufzeit raus. Ich kann aber nicht sicher sagen, ob das für alle Geräte gilt. Ich würde nur ungern eine Abhängigkeit zu fff-network erzeugen (die hab ich ja im v2 extra raus genommen). Wo bringt man also diese Konfigurationen am besten unter? Gruß Fabian P.S.: Dein Mailclient erzeugt immer noch ziemlich kaputt aussehende (viel zu viele Zeilenumbrüche) Plaintext Mails. (siehe unten) On 20.03.19 16:47, Adrian Schmutzler wrote: > Hab ich jetzt beim Durchkucken in der Tat auch übersehen. > > > > Da es den CPUPORT im Moment noch gar nicht gibt, müsste man den streng genommen aber vorher noch bei den Geräten hinzufügen. > > Das sollte man in dem Fall dann am besten auch ordentlich in nem separaten Patch für ALLE Geräte machen. > > Ich finde das zwar hässlich, aber bisher ist mir auch nichts besseres eingefallen als der CPU-Port. > > > > Grüße > > > > Adrian
Hallo Fabian, aus aktuellem Anlass habe ich mir den Patch nochmal aus einem etwas anderen Blickwinkel angesehen. > + config_load network > + config_foreach remove_vlan switch_vlan > + > + config_load gateway > + config_foreach add_vlan vlan Ich habe erst länger rumüberlegt, ob man das irgendwie hinkriegt, ohne alles zu löschen und neu zu schreiben. Da man bei dir aber variabel neue VLANs definieren kann, geht es glaube ich nur so. Hier besteht jetzt das Problem mit dem SWITCHDEV. Wenn man das nicht aus network.* auslesen möchte, gibt es mehrere Möglichkeiten: 1. Das Switch ist im uci noch da. Switch gibt es bei uns immer nur eines. D.h. auch ohne Namen kann ich mit network.@switch[0] arbeiten. Leider kriegt man mit uci bei dieser Syntax den Namen der section nur mit viel Murks: DEV=$(uci show network.@switch[0] | grep "=switch" | sed "s#network.\([^=]*\)=switch.*#\1#") Finde ich nicht so geil. Allerdings brauchen wir den Namen des ethX gar nicht, denn: 2. Das Switch enthält den Namen des Hardware-Device (?) unter network.@switch[0].name (beim 1043v2 z.B. „ag71xx-mdio.0“). Da uns keiner zwingt, die switch_vlans zu benennen, und wenn wir alle alten gelöscht haben (hierzu müsste man dann remove_vlan ändern), können wir dann swvlan=$(uci add network switch_vlan) uci set network.$swvlan.device="$(uci get network.@switch[0].name)" uci set network.$swvlan.vlan="$vlan" uci set network.$swvlan.ports="$CPUPORT $ports" Und schon sind wir unabhängig von fff-network. Das ginge so btw auch mit der OpenWrt Standardconfig, die benennen übrigens ihre switch_vlan Einträge auch nicht. Nebenbei ist der Code trotzdem schlank. Mit dieser Lösung wären wir unabhängig von irgendwelchen spezifischen Informationen über das Gerät, solange es ein Switch hat. Für den CPUPORT würde ich jetzt wie bereits an anderer Stelle erwähnt einfach das Skript aus meinem Patchset sourcen und fertig. Würde dann wohl so aussehen: +. /lib/functions/fff/cpuport + +configure() { + add_vlan() { + local vlan="$1" + local device="$(uci get network.@switch[0].name)" + local ports="$(uci get gateway.$vlan.ports)" + + local name="$(uci add network 'switch_vlan')" + uci set network.$name.device="$device" + uci set network.$name.vlan="$vlan" + uci set network.$name.ports="$CPUPORT $ports" + } + + remove_vlan() { + local name="$1" + + # remove switch_vlan + uci del network.$name + } + + config_load network + config_foreach remove_vlan switch_vlan + + config_load gateway + config_foreach add_vlan vlan +} Ich finde es zwar durchaus blöd, erst alle switch_vlan platt zu machen, aber in meinen Augen ist die allgemeinere Lösung erstrebenswerter. Zudem wird das Skript in der Praxis ja sehr selten laufen, also ist das Löschen auch von der Speicherbelastung marginal. Grüße Adrian
Nachtrag: Man könnte auch hier (wie beim network-Patchset) die switch_vlan Einträge einfach mit „vlan1“, „vlan2“, „vlan11“ benennen. Dann wäre sie vom Gerätenamen unabhängig, aber trotzdem per Name ansprechbar: uci set network.vlan2.ports=’1 2 0t’ Ich fände es super, wenn wir zumindest 1/3 und 3/3 zeitnah mal in eine neue Version kriegen. Wenn du willst, kann ich das auch übernehmen. Grüße Adrian From: franken-dev [mailto:franken-dev-bounces@freifunk.net] On Behalf Of Adrian Schmutzler Sent: Freitag, 12. April 2019 17:13 To: franken-dev@freifunk.net Subject: RE: [PATCH v2 3/3] gateway.d: Add scripts for network configuration Hallo Fabian, aus aktuellem Anlass habe ich mir den Patch nochmal aus einem etwas anderen Blickwinkel angesehen. > + config_load network > + config_foreach remove_vlan switch_vlan > + > + config_load gateway > + config_foreach add_vlan vlan Ich habe erst länger rumüberlegt, ob man das irgendwie hinkriegt, ohne alles zu löschen und neu zu schreiben. Da man bei dir aber variabel neue VLANs definieren kann, geht es glaube ich nur so. Hier besteht jetzt das Problem mit dem SWITCHDEV. Wenn man das nicht aus network.* auslesen möchte, gibt es mehrere Möglichkeiten: 1. Das Switch ist im uci noch da. Switch gibt es bei uns immer nur eines. D.h. auch ohne Namen kann ich mit network.@switch[0 <mailto:network.@switch[0> ] arbeiten. Leider kriegt man mit uci bei dieser Syntax den Namen der section nur mit viel Murks: DEV=$(uci show network.@switch[0 <mailto:network.@switch[0> ] | grep "=switch" | sed "s#network.\([^=]*\)=switch.*#\1#") Finde ich nicht so geil. Allerdings brauchen wir den Namen des ethX gar nicht, denn: 2. Das Switch enthält den Namen des Hardware-Device (?) unter network.@switch[0].name <mailto:network.@switch[0].name> (beim 1043v2 z.B. „ag71xx-mdio.0“). Da uns keiner zwingt, die switch_vlans zu benennen, und wenn wir alle alten gelöscht haben (hierzu müsste man dann remove_vlan ändern), können wir dann swvlan=$(uci add network switch_vlan) uci set network.$swvlan.device="$(uci get network.@switch[0].name <mailto:network.@switch[0].name> )" uci set network.$swvlan.vlan="$vlan" uci set network.$swvlan.ports="$CPUPORT $ports" Und schon sind wir unabhängig von fff-network. Das ginge so btw auch mit der OpenWrt Standardconfig, die benennen übrigens ihre switch_vlan Einträge auch nicht. Nebenbei ist der Code trotzdem schlank. Mit dieser Lösung wären wir unabhängig von irgendwelchen spezifischen Informationen über das Gerät, solange es ein Switch hat. Für den CPUPORT würde ich jetzt wie bereits an anderer Stelle erwähnt einfach das Skript aus meinem Patchset sourcen und fertig. Würde dann wohl so aussehen: +. /lib/functions/fff/cpuport + +configure() { + add_vlan() { + local vlan="$1" + local device="$(uci get network.@switch[0].name <mailto:network.@switch[0].name> )" + local ports="$(uci get gateway.$vlan.ports)" + + local name="$(uci add network 'switch_vlan')" + uci set network.$name.device="$device" + uci set network.$name.vlan="$vlan" + uci set network.$name.ports="$CPUPORT $ports" + } + + remove_vlan() { + local name="$1" + + # remove switch_vlan + uci del network.$name + } + + config_load network + config_foreach remove_vlan switch_vlan + + config_load gateway + config_foreach add_vlan vlan +} Ich finde es zwar durchaus blöd, erst alle switch_vlan platt zu machen, aber in meinen Augen ist die allgemeinere Lösung erstrebenswerter. Zudem wird das Skript in der Praxis ja sehr selten laufen, also ist das Löschen auch von der Speicherbelastung marginal. Grüße Adrian
This adds scripts to configure vlan and client network. This also adds sysctl settings to enable forwarding. Signed-off-by: Fabian Bläse <fabian@blaese.de> --- .../fff-gateway/files/etc/gateway.d/10-vlan | 39 +++++++++++ .../files/etc/gateway.d/20-network-client | 66 +++++++++++++++++++ .../files/etc/sysctl.d/60-fff-gateway.conf | 5 ++ 3 files changed, 110 insertions(+) create mode 100644 src/packages/fff/fff-gateway/files/etc/gateway.d/10-vlan create mode 100644 src/packages/fff/fff-gateway/files/etc/gateway.d/20-network-client create mode 100644 src/packages/fff/fff-gateway/files/etc/sysctl.d/60-fff-gateway.conf