[PATCH v2 3/3] gateway.d: Add scripts for network configuration

Adrian Schmutzler mail at adrianschmutzler.de
Do Apr 18 11:29:39 CEST 2019


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 at freifunk.net] On Behalf Of Adrian Schmutzler
Sent: Freitag, 12. April 2019 17:13
To: franken-dev at 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. at switch[0 <mailto:network. at switch[0> ] arbeiten.

Leider kriegt man mit uci bei dieser Syntax den Namen der section nur mit viel Murks: 
DEV=$(uci show network. at switch[0 <mailto:network. at 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. at switch[0].name <mailto:network. at 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. at switch[0].name <mailto:network. at 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. at switch[0].name <mailto:network. at 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 

 
-------------- nächster Teil --------------
Ein Dateianhang mit HTML-Daten wurde abgetrennt...
URL: <https://{'listname': 'franken-dev-freifunk.net', 'hostname': 'lists.freifunk.net'}/pipermail/franken-dev-freifunk.net/attachments/20190418/0f048d25/attachment.html>
-------------- nächster Teil --------------
Ein Dateianhang mit Binärdaten wurde abgetrennt...
Dateiname   : nicht verfügbar
Dateityp    : application/pgp-signature
Dateigröße  : 834 bytes
Beschreibung: nicht verfügbar
URL         : <https://{'listname': 'franken-dev-freifunk.net', 'hostname': 'lists.freifunk.net'}/pipermail/franken-dev-freifunk.net/attachments/20190418/0f048d25/attachment.sig>


Mehr Informationen über die Mailingliste franken-dev