Message ID | 20190513213048.26794-1-fabian@blaese.de |
---|---|
State | Accepted |
Headers | show |
diff --git a/src/packages/fff/fff-gateway/Makefile b/src/packages/fff/fff-gateway/Makefile index 7c1dd55..f9ef8cc 100644 --- a/src/packages/fff/fff-gateway/Makefile +++ b/src/packages/fff/fff-gateway/Makefile @@ -13,6 +13,7 @@ define Package/fff-gateway CATEGORY:=Freifunk TITLE:= Freifunk-Franken gateway configuration URL:=https://www.freifunk-franken.de + DEPENDS:=+fff-boardname +fff-network endef define Package/fff-gateway/description diff --git a/src/packages/fff/fff-gateway/files/etc/gateway.d/20-vlan b/src/packages/fff/fff-gateway/files/etc/gateway.d/20-vlan new file mode 100644 index 0000000..cfc8e69 --- /dev/null +++ b/src/packages/fff/fff-gateway/files/etc/gateway.d/20-vlan @@ -0,0 +1,48 @@ +# load uci functions +. /lib/functions.sh + +# load board specific properties +BOARD="$(uci get board.model.name)" +. /etc/network.$BOARD +. /lib/functions/fff/cpuport + + +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/30-network-client b/src/packages/fff/fff-gateway/files/etc/gateway.d/30-network-client new file mode 100644 index 0000000..d5ae34c --- /dev/null +++ b/src/packages/fff/fff-gateway/files/etc/gateway.d/30-network-client @@ -0,0 +1,71 @@ +# load board specific properties +BOARD="$(uci get board.model.name)" +. /etc/network.$BOARD + + +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[^ ]* //g') + 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
Hi Fabian, mein sed Hinweis war nicht getestet. Sorry. Man erwischt zwar alle ethxx.xxx aber nicht am Zeilenende. Und ein veth.0 wird zerhackt. Musste das auch erst mal ausprobieren. Ein sed 's/\beth[^ ]* *//g' tut was es soll. Probiere es bitte auch noch mal aus. Kannst du dann beim Applien anpassen. Reviewed-by: Robert Langhammer <rlanghammer@web.de> Am 13.05.19 um 23:30 schrieb Fabian Bläse: > From: Fabian Blaese <fabian@blaese.de> > > This adds scripts to configure vlan and client network. > This also adds sysctl settings to enable forwarding. > > Note: > Devices specific properties are sourced from fff-network package. > This creates a dependency on fff-boardname and fff-network. > These properties should be located elsewhere in the future. > > Signed-off-by: Fabian Bläse <fabian@blaese.de> > Reviewed-by: Tim Niemeyer <tim@tn-x.org> > --- > Changes in v3: > - Rename 10-vlan to 20-vlan > - Rename 20-network-client to 30-network-client > - Source necessary uci functions and board properties > - Add dependency on fff-boardname and fff-network > > Changes in v4: > - Source cpuport script > - Simplyfy sed expression as suggested by Robert > --- > src/packages/fff/fff-gateway/Makefile | 1 + > .../fff-gateway/files/etc/gateway.d/20-vlan | 48 +++++++++++++ > .../files/etc/gateway.d/30-network-client | 71 +++++++++++++++++++ > .../files/etc/sysctl.d/60-fff-gateway.conf | 5 ++ > 4 files changed, 125 insertions(+) > create mode 100644 src/packages/fff/fff-gateway/files/etc/gateway.d/20-vlan > create mode 100644 src/packages/fff/fff-gateway/files/etc/gateway.d/30-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/Makefile b/src/packages/fff/fff-gateway/Makefile > index 7c1dd55..f9ef8cc 100644 > --- a/src/packages/fff/fff-gateway/Makefile > +++ b/src/packages/fff/fff-gateway/Makefile > @@ -13,6 +13,7 @@ define Package/fff-gateway > CATEGORY:=Freifunk > TITLE:= Freifunk-Franken gateway configuration > URL:=https://www.freifunk-franken.de > + DEPENDS:=+fff-boardname +fff-network > endef > > define Package/fff-gateway/description > diff --git a/src/packages/fff/fff-gateway/files/etc/gateway.d/20-vlan b/src/packages/fff/fff-gateway/files/etc/gateway.d/20-vlan > new file mode 100644 > index 0000000..cfc8e69 > --- /dev/null > +++ b/src/packages/fff/fff-gateway/files/etc/gateway.d/20-vlan > @@ -0,0 +1,48 @@ > +# load uci functions > +. /lib/functions.sh > + > +# load board specific properties > +BOARD="$(uci get board.model.name)" > +. /etc/network.$BOARD > +. /lib/functions/fff/cpuport > + > + > +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/30-network-client b/src/packages/fff/fff-gateway/files/etc/gateway.d/30-network-client > new file mode 100644 > index 0000000..d5ae34c > --- /dev/null > +++ b/src/packages/fff/fff-gateway/files/etc/gateway.d/30-network-client > @@ -0,0 +1,71 @@ > +# load board specific properties > +BOARD="$(uci get board.model.name)" > +. /etc/network.$BOARD > + > + > +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[^ ]* //g') > + 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
Verdammt. Ich bin zwar davon ausgegangen, dass das nur ein Vorschlag war, perfekt getestet hab ichs aber nicht. Es war auf jeden Fall schon deutlich weniger kaputt, als die vorherige Version, das hat mir erstmal genügt. On 14.05.19 08:42, robert wrote: > Hi Fabian, > > mein sed Hinweis war nicht getestet. Sorry. > > Man erwischt zwar alle ethxx.xxx aber nicht am Zeilenende. Warum nicht? Kannst du ein konkretes Beispiel zeigen, wo es bricht? > Und ein veth.0 wird zerhackt. Randfall, aber stimmt. Das \b sollten wir auf jeden Fall noch mit rein nehmen. Falls es dabei bleibt -> beim applien. Gruß Fabian
Ah, whupps. Da hab ich vorhin mit ner falschen Version getestet. On 14.05.19 14:22, Robert Langhammer wrote: > Am 14. Mai 2019 14:00:24 MESZ schrieb "Fabian Bläse" <fabian@blaese.de>: >> Warum nicht? Kannst du ein konkretes Beispiel zeigen, wo es bricht? > Im "alten" regex muss hinten noch ein Space sein - ist nicht, wenn ethxxx am Zeilenende steht. Drum noch ein Stern, dann ist der optional. Dann nehmen wir den * auch noch mit dazu. :-) Gruß Fabian
Hallo, mit dem sed erwischt man in folgendem Fall das Leerzeichen nicht: "bat0 eth0.1" => "bat0 " Ich wurde folgendes verwenden: uci get ... | sed "s/\beth[^ ]* //" | sed "s/ *eth[^ ]*$//g") So entfernt man das Leerzeichen immer auf der richtigen Seite mit. Grüße Adrian > -----Original Message----- > From: franken-dev [mailto:franken-dev-bounces@freifunk.net] On Behalf Of > robert > Sent: Dienstag, 14. Mai 2019 08:42 > To: franken-dev@freifunk.net > Subject: Re: [PATCH v4] gateway.d: Add scripts for network configuration > > Hi Fabian, > > mein sed Hinweis war nicht getestet. Sorry. > > Man erwischt zwar alle ethxx.xxx aber nicht am Zeilenende. Und ein > veth.0 wird zerhackt. > > Musste das auch erst mal ausprobieren. Ein > > sed 's/\beth[^ ]* *//g' > > tut was es soll. Probiere es bitte auch noch mal aus. > > Kannst du dann beim Applien anpassen. > > Reviewed-by: Robert Langhammer <rlanghammer@web.de> > > > Am 13.05.19 um 23:30 schrieb Fabian Bläse: > > From: Fabian Blaese <fabian@blaese.de> > > > > This adds scripts to configure vlan and client network. > > This also adds sysctl settings to enable forwarding. > > > > Note: > > Devices specific properties are sourced from fff-network package. > > This creates a dependency on fff-boardname and fff-network. > > These properties should be located elsewhere in the future. > > > > Signed-off-by: Fabian Bläse <fabian@blaese.de> > > Reviewed-by: Tim Niemeyer <tim@tn-x.org> > > --- > > Changes in v3: > > - Rename 10-vlan to 20-vlan > > - Rename 20-network-client to 30-network-client > > - Source necessary uci functions and board properties > > - Add dependency on fff-boardname and fff-network > > > > Changes in v4: > > - Source cpuport script > > - Simplyfy sed expression as suggested by Robert > > --- > > src/packages/fff/fff-gateway/Makefile | 1 + > > .../fff-gateway/files/etc/gateway.d/20-vlan | 48 +++++++++++++ > > .../files/etc/gateway.d/30-network-client | 71 +++++++++++++++++++ > > .../files/etc/sysctl.d/60-fff-gateway.conf | 5 ++ > > 4 files changed, 125 insertions(+) > > create mode 100644 src/packages/fff/fff-gateway/files/etc/gateway.d/20- > vlan > > create mode 100644 src/packages/fff/fff-gateway/files/etc/gateway.d/30- > 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/Makefile b/src/packages/fff/fff- > gateway/Makefile > > index 7c1dd55..f9ef8cc 100644 > > --- a/src/packages/fff/fff-gateway/Makefile > > +++ b/src/packages/fff/fff-gateway/Makefile > > @@ -13,6 +13,7 @@ define Package/fff-gateway > > CATEGORY:=Freifunk > > TITLE:= Freifunk-Franken gateway configuration > > URL:=https://www.freifunk-franken.de > > + DEPENDS:=+fff-boardname +fff-network > > endef > > > > define Package/fff-gateway/description > > diff --git a/src/packages/fff/fff-gateway/files/etc/gateway.d/20-vlan > b/src/packages/fff/fff-gateway/files/etc/gateway.d/20-vlan > > new file mode 100644 > > index 0000000..cfc8e69 > > --- /dev/null > > +++ b/src/packages/fff/fff-gateway/files/etc/gateway.d/20-vlan > > @@ -0,0 +1,48 @@ > > +# load uci functions > > +. /lib/functions.sh > > + > > +# load board specific properties > > +BOARD="$(uci get board.model.name)" > > +. /etc/network.$BOARD > > +. /lib/functions/fff/cpuport > > + > > + > > +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/30-network- > client b/src/packages/fff/fff-gateway/files/etc/gateway.d/30-network-client > > new file mode 100644 > > index 0000000..d5ae34c > > --- /dev/null > > +++ b/src/packages/fff/fff-gateway/files/etc/gateway.d/30-network-client > > @@ -0,0 +1,71 @@ > > +# load board specific properties > > +BOARD="$(uci get board.model.name)" > > +. /etc/network.$BOARD > > + > > + > > +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[^ ]* //g') > > + 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
Hi, Am 16.05.2019 um 14:33 schrieb Adrian Schmutzler: > Hallo, > > mit dem sed erwischt man in folgendem Fall das Leerzeichen nicht: > > "bat0 eth0.1" => "bat0 " > > Ich wurde folgendes verwenden: > > uci get ... | sed "s/\beth[^ ]* //" | sed > "s/ *eth[^ ]*$//g") Ah ja stimmt, das Leer gehört immer zum nachfolgendem Wort. @Fabian: Adrians Variante ist noch besser. Aber bitte nicht hinten dran. Man sollte Regex auch immer mit ' quoten. " schaltet $ nicht aus. Robert > So entfernt man das Leerzeichen immer auf der richtigen Seite mit. > > Grüße > > Adrian > >> -----Original Message----- >> From: franken-dev [mailto:franken-dev-bounces@freifunk.net] On Behalf Of >> robert >> Sent: Dienstag, 14. Mai 2019 08:42 >> To: franken-dev@freifunk.net >> Subject: Re: [PATCH v4] gateway.d: Add scripts for network configuration >> >> Hi Fabian, >> >> mein sed Hinweis war nicht getestet. Sorry. >> >> Man erwischt zwar alle ethxx.xxx aber nicht am Zeilenende. Und ein >> veth.0 wird zerhackt. >> >> Musste das auch erst mal ausprobieren. Ein >> >> sed 's/\beth[^ ]* *//g' >> >> tut was es soll. Probiere es bitte auch noch mal aus. >> >> Kannst du dann beim Applien anpassen. >> >> Reviewed-by: Robert Langhammer <rlanghammer@web.de> >> >> >> Am 13.05.19 um 23:30 schrieb Fabian Bläse: >>> From: Fabian Blaese <fabian@blaese.de> >>> >>> This adds scripts to configure vlan and client network. >>> This also adds sysctl settings to enable forwarding. >>> >>> Note: >>> Devices specific properties are sourced from fff-network package. >>> This creates a dependency on fff-boardname and fff-network. >>> These properties should be located elsewhere in the future. >>> >>> Signed-off-by: Fabian Bläse <fabian@blaese.de> >>> Reviewed-by: Tim Niemeyer <tim@tn-x.org> >>> --- >>> Changes in v3: >>> - Rename 10-vlan to 20-vlan >>> - Rename 20-network-client to 30-network-client >>> - Source necessary uci functions and board properties >>> - Add dependency on fff-boardname and fff-network >>> >>> Changes in v4: >>> - Source cpuport script >>> - Simplyfy sed expression as suggested by Robert >>> --- >>> src/packages/fff/fff-gateway/Makefile | 1 + >>> .../fff-gateway/files/etc/gateway.d/20-vlan | 48 +++++++++++++ >>> .../files/etc/gateway.d/30-network-client | 71 +++++++++++++++++++ >>> .../files/etc/sysctl.d/60-fff-gateway.conf | 5 ++ >>> 4 files changed, 125 insertions(+) >>> create mode 100644 src/packages/fff/fff-gateway/files/etc/gateway.d/20- >> vlan >>> create mode 100644 src/packages/fff/fff-gateway/files/etc/gateway.d/30- >> 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/Makefile b/src/packages/fff/fff- >> gateway/Makefile >>> index 7c1dd55..f9ef8cc 100644 >>> --- a/src/packages/fff/fff-gateway/Makefile >>> +++ b/src/packages/fff/fff-gateway/Makefile >>> @@ -13,6 +13,7 @@ define Package/fff-gateway >>> CATEGORY:=Freifunk >>> TITLE:= Freifunk-Franken gateway configuration >>> URL:=https://www.freifunk-franken.de >>> + DEPENDS:=+fff-boardname +fff-network >>> endef >>> >>> define Package/fff-gateway/description >>> diff --git a/src/packages/fff/fff-gateway/files/etc/gateway.d/20-vlan >> b/src/packages/fff/fff-gateway/files/etc/gateway.d/20-vlan >>> new file mode 100644 >>> index 0000000..cfc8e69 >>> --- /dev/null >>> +++ b/src/packages/fff/fff-gateway/files/etc/gateway.d/20-vlan >>> @@ -0,0 +1,48 @@ >>> +# load uci functions >>> +. /lib/functions.sh >>> + >>> +# load board specific properties >>> +BOARD="$(uci get board.model.name)" >>> +. /etc/network.$BOARD >>> +. /lib/functions/fff/cpuport >>> + >>> + >>> +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/30-network- >> client b/src/packages/fff/fff-gateway/files/etc/gateway.d/30-network-client >>> new file mode 100644 >>> index 0000000..d5ae34c >>> --- /dev/null >>> +++ b/src/packages/fff/fff-gateway/files/etc/gateway.d/30-network-client >>> @@ -0,0 +1,71 @@ >>> +# load board specific properties >>> +BOARD="$(uci get board.model.name)" >>> +. /etc/network.$BOARD >>> + >>> + >>> +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[^ ]* //g') >>> + 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 Adrian, danke für den Hinweis! Über diesen Randfall hab ich mir bei der Version vom Robert auch schon Gedanken gemacht, allerdings weniger konkret. Schlussendlich tut das Leerzeichen niemandem weh, daher würde ich ein einfacheres sed deutlich bevorzugen und einfach mit dem Leerzeichen leben. Ggf. kann man auch einfach zum Schluss am String-Anfang und -Ende einfach die Leerzeichen wegtrimmen. Gruß Fabian On 16.05.19 14:33, Adrian Schmutzler wrote: > Hallo, > > mit dem sed erwischt man in folgendem Fall das Leerzeichen nicht: > > "bat0 eth0.1" => "bat0 " > > Ich wurde folgendes verwenden: > > uci get ... | sed "s/\beth[^ ]* //" | sed > "s/ *eth[^ ]*$//g") > > So entfernt man das Leerzeichen immer auf der richtigen Seite mit. > > Grüße > > Adrian
Da solltet ihr dann aber mal kucken, ob das dann auch von der config richtig verarbeitet wird. Bei normalen Interfaces hatte ich schon Probleme, wenn da ein Space im ifname stand. Da das hier ne bridge ist (mit mehreren Elementen im ifname), ist es wahrscheinlicher, dass das weggeparst wird, aber sicher bin ich mir nicht. Trimmen geht natürlich genauso. Grüße Adrian From: Fabian Bläse [mailto:fabian@blaese.de] Sent: Freitag, 17. Mai 2019 14:36 To: Adrian Schmutzler <mail@adrianschmutzler.de>; franken-dev@freifunk.net; 'robert' <rlanghammer@web.de> Subject: Re: [PATCH v4] gateway.d: Add scripts for network configuration Hallo Adrian, danke für den Hinweis! Über diesen Randfall hab ich mir bei der Version vom Robert auch schon Gedanken gemacht, allerdings weniger konkret. Schlussendlich tut das Leerzeichen niemandem weh, daher würde ich ein einfacheres sed deutlich bevorzugen und einfach mit dem Leerzeichen leben. Ggf. kann man auch einfach zum Schluss am String-Anfang und -Ende einfach die Leerzeichen wegtrimmen. Gruß Fabian On 16.05.19 14:33, Adrian Schmutzler wrote: > Hallo, > > mit dem sed erwischt man in folgendem Fall das Leerzeichen nicht: > > "bat0 eth0.1" => "bat0 " > > Ich wurde folgendes verwenden: > > uci get ... | sed "s/\beth[^ ]* //" | sed > "s/ *eth[^ ]*$//g") > > So entfernt man das Leerzeichen immer auf der richtigen Seite mit. > > Grüße > > Adrian
Hallo Adrian, jo, das funktioniert. Meine ursprüngliche Version hatte dieses Problem in bestimmten anderen Situationen auch. Gruß Fabian On 17.05.19 14:39, Adrian Schmutzler wrote: > Da solltet ihr dann aber mal kucken, ob das dann auch von der config richtig verarbeitet wird. > > > > Bei normalen Interfaces hatte ich schon Probleme, wenn da ein Space im ifname stand. > > > > Da das hier ne bridge ist (mit mehreren Elementen im ifname), ist es wahrscheinlicher, dass das weggeparst wird, aber sicher bin ich mir nicht. > > > > Trimmen geht natürlich genauso. > > > > Grüße > > > > Adrian
Mit dem von Robert vorgeschlagenen, nochmals verbesserten Regex applied. On 13.05.19 23:30, Fabian Bläse wrote: > From: Fabian Blaese <fabian@blaese.de> > > This adds scripts to configure vlan and client network. > This also adds sysctl settings to enable forwarding. > > Note: > Devices specific properties are sourced from fff-network package. > This creates a dependency on fff-boardname and fff-network. > These properties should be located elsewhere in the future. > > Signed-off-by: Fabian Bläse <fabian@blaese.de> > Reviewed-by: Tim Niemeyer <tim@tn-x.org> > --- > Changes in v3: > - Rename 10-vlan to 20-vlan > - Rename 20-network-client to 30-network-client > - Source necessary uci functions and board properties > - Add dependency on fff-boardname and fff-network > > Changes in v4: > - Source cpuport script > - Simplyfy sed expression as suggested by Robert > --- > src/packages/fff/fff-gateway/Makefile | 1 + > .../fff-gateway/files/etc/gateway.d/20-vlan | 48 +++++++++++++ > .../files/etc/gateway.d/30-network-client | 71 +++++++++++++++++++ > .../files/etc/sysctl.d/60-fff-gateway.conf | 5 ++ > 4 files changed, 125 insertions(+) > create mode 100644 src/packages/fff/fff-gateway/files/etc/gateway.d/20-vlan > create mode 100644 src/packages/fff/fff-gateway/files/etc/gateway.d/30-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/Makefile b/src/packages/fff/fff-gateway/Makefile > index 7c1dd55..f9ef8cc 100644 > --- a/src/packages/fff/fff-gateway/Makefile > +++ b/src/packages/fff/fff-gateway/Makefile > @@ -13,6 +13,7 @@ define Package/fff-gateway > CATEGORY:=Freifunk > TITLE:= Freifunk-Franken gateway configuration > URL:=https://www.freifunk-franken.de > + DEPENDS:=+fff-boardname +fff-network > endef > > define Package/fff-gateway/description > diff --git a/src/packages/fff/fff-gateway/files/etc/gateway.d/20-vlan b/src/packages/fff/fff-gateway/files/etc/gateway.d/20-vlan > new file mode 100644 > index 0000000..cfc8e69 > --- /dev/null > +++ b/src/packages/fff/fff-gateway/files/etc/gateway.d/20-vlan > @@ -0,0 +1,48 @@ > +# load uci functions > +. /lib/functions.sh > + > +# load board specific properties > +BOARD="$(uci get board.model.name)" > +. /etc/network.$BOARD > +. /lib/functions/fff/cpuport > + > + > +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/30-network-client b/src/packages/fff/fff-gateway/files/etc/gateway.d/30-network-client > new file mode 100644 > index 0000000..d5ae34c > --- /dev/null > +++ b/src/packages/fff/fff-gateway/files/etc/gateway.d/30-network-client > @@ -0,0 +1,71 @@ > +# load board specific properties > +BOARD="$(uci get board.model.name)" > +. /etc/network.$BOARD > + > + > +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[^ ]* //g') > + 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 >