[v3,10/14] Add support for second port of Nanostation M

Submitted by Adrian Schmutzler on April 22, 2019, 12:35 p.m.

Details

Message ID 20190422123537.5852-10-freifunk@adrianschmutzler.de
State Deferred
Headers show

Commit Message

Adrian Schmutzler April 22, 2019, 12:35 p.m.
Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>

---

This is not tested.

Changes in v2:
- Added patch

Changes in v3:
- Merged with "Fix/improve setup of one- and two-port devices"
  from FritzBox patchset
- Fixed uci -q

Please re-review after this merge
---
 .../files/etc/uci-defaults/22a-config-ports        |  6 +++-
 .../files/lib/functions/fff/networksetup           | 37 ++++++++++++++++++++++
 .../fff/fff-network/files/usr/sbin/settwoeth       | 34 ++++++++++++++++++++
 3 files changed, 76 insertions(+), 1 deletion(-)
 create mode 100755 src/packages/fff/fff-network/files/usr/sbin/settwoeth

Patch hide | download patch | download mbox

diff --git a/src/packages/fff/fff-network/files/etc/uci-defaults/22a-config-ports b/src/packages/fff/fff-network/files/etc/uci-defaults/22a-config-ports
index cc7ab277..4cd1387a 100644
--- a/src/packages/fff/fff-network/files/etc/uci-defaults/22a-config-ports
+++ b/src/packages/fff/fff-network/files/etc/uci-defaults/22a-config-ports
@@ -71,6 +71,11 @@  case "$BOARD" in
 		setupSwitch "eth0" "1 2 0t" "3 4 0t" "5 0t"
 		setupWan "eth0.2"
 		;;
+	ubnt-nano-m)
+		setupOnePort "eth0" "WAN"
+		setup2ndEth "eth1" "CLIENT"
+		uci set "fff.ui.portsetup=twoeth"
+		;;
 	cpe210-v2|\
 	cpe210-v3|\
 	tl-mr3020-v1|\
@@ -80,7 +85,6 @@  case "$BOARD" in
 	ubnt-bullet-m|\
 	ubnt-loco-m|\
 	ubnt-loco-m-xw|\
-	ubnt-nano-m|\
 	ubnt-pico-m|\
 	ubnt-power-m-xw|\
 	ubnt-unifi|\
diff --git a/src/packages/fff/fff-network/files/lib/functions/fff/networksetup b/src/packages/fff/fff-network/files/lib/functions/fff/networksetup
index ccc943df..4ce96953 100644
--- a/src/packages/fff/fff-network/files/lib/functions/fff/networksetup
+++ b/src/packages/fff/fff-network/files/lib/functions/fff/networksetup
@@ -161,3 +161,40 @@  setupOnePort() {
 	fi
 	uci commit network
 }
+
+setup2ndEth() {
+	# Set up second port for devices with to ports directly connected to ethX (no switch)
+	# This is intended for initial setup and for updates
+	#
+	# Use this in combination with setupOnePort() for the first port.
+	# Calling setupOnePort() will overwrite the settings made here, so always call in succession, e.g.
+	# setupOnePort eth0 "WAN"
+	# setup2ndEth eth1 "BATMAN"
+	#
+	# Usage: setup2ndEth <DEV, e.g. eth1> <ETHMODE: BATMAN or CLIENT>
+
+	local DEV=$1
+	local ETHMODE=$2
+
+	uci set "network.$DEV=interface"
+	uci set "network.$DEV.ifname=$DEV"
+
+	local meshif="$(uci -q get network.mesh.ifname)"
+
+	if [ "$ETHMODE" = "CLIENT" ] ; then
+		# Only write if not only there
+		echo "$meshif" | grep -q "$DEV" || uci set network.mesh.ifname="$meshif $DEV"
+	else
+		# Remove if there
+		uci set network.mesh.ifname="$(echo "$meshif" | sed "s/ *$DEV//")"
+	fi
+
+	if [ "$ETHMODE" = "BATMAN" ] ; then
+		# Always overwrite (if both ports are set to BATMAN, only the second will be)
+		uci set network.ethmesh.ifname="$DEV"
+	else
+		uci -q get network.ethmesh.ifname | grep -q "$DEV" && uci del network.ethmesh.ifname
+	fi
+
+	uci commit network
+}
diff --git a/src/packages/fff/fff-network/files/usr/sbin/settwoeth b/src/packages/fff/fff-network/files/usr/sbin/settwoeth
new file mode 100755
index 00000000..4b7478af
--- /dev/null
+++ b/src/packages/fff/fff-network/files/usr/sbin/settwoeth
@@ -0,0 +1,34 @@ 
+#!/bin/sh
+
+if ! [ "$(uci -q get fff.ui.portsetup)" = "twoeth" ] ; then
+	echo "Wrong device. This is for devices with two ethX without switch!"
+	exit 1
+fi
+
+. /lib/functions/fff/networksetup
+
+ETHMODE1=$1
+ETHMODE2=$2
+DEV1=$3
+DEV2=$4
+
+[ -n "$DEV1" ] || DEV1="eth0"
+[ -n "$DEV2" ] || DEV2="eth1"
+
+if ! ([ "$ETHMODE1" = "WAN" ] || [ "$ETHMODE1" = "CLIENT" ] || [ "$ETHMODE1" = "BATMAN" ]); then
+	echo "Wrong port mode for first port. Choose one of: WAN, CLIENT, BATMAN"
+	exit 1
+fi
+if ! ([ "$ETHMODE2" = "CLIENT" ] || [ "$ETHMODE2" = "BATMAN" ]); then
+	echo "Wrong port mode for second port. Choose one of: CLIENT, BATMAN"
+	exit 1
+fi
+if [ "$ETHMODE1" = "BATMAN" ] && [ "$ETHMODE2" = "BATMAN" ]; then
+	echo "Only one port can be set to BATMAN!"
+	exit 1
+fi
+
+setupOnePort "$DEV1" "$ETHMODE1"
+setup2ndEth "$DEV2" "$ETHMODE2"
+/etc/init.d/network restart
+echo "Port updated successfully."

Comments

Christian Dresel April 22, 2019, 3:37 p.m.
Hi

sieht soweit plausibel aus, gerade hier wäre es mir aber extrem wichtig
das noch jemand drüber guckt, gerade mit den sed stolper ich jedes mal
rum. Ansonsten:

Reviewed-by: Christian Dresel <fff@chrisi01.de>

Gruß

Christian

On 22.04.19 14:35, Adrian Schmutzler wrote:
> Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>
>
> ---
>
> This is not tested.
>
> Changes in v2:
> - Added patch
>
> Changes in v3:
> - Merged with "Fix/improve setup of one- and two-port devices"
>   from FritzBox patchset
> - Fixed uci -q
>
> Please re-review after this merge
> ---
>  .../files/etc/uci-defaults/22a-config-ports        |  6 +++-
>  .../files/lib/functions/fff/networksetup           | 37 ++++++++++++++++++++++
>  .../fff/fff-network/files/usr/sbin/settwoeth       | 34 ++++++++++++++++++++
>  3 files changed, 76 insertions(+), 1 deletion(-)
>  create mode 100755 src/packages/fff/fff-network/files/usr/sbin/settwoeth
>
> diff --git a/src/packages/fff/fff-network/files/etc/uci-defaults/22a-config-ports b/src/packages/fff/fff-network/files/etc/uci-defaults/22a-config-ports
> index cc7ab277..4cd1387a 100644
> --- a/src/packages/fff/fff-network/files/etc/uci-defaults/22a-config-ports
> +++ b/src/packages/fff/fff-network/files/etc/uci-defaults/22a-config-ports
> @@ -71,6 +71,11 @@ case "$BOARD" in
>  		setupSwitch "eth0" "1 2 0t" "3 4 0t" "5 0t"
>  		setupWan "eth0.2"
>  		;;
> +	ubnt-nano-m)
> +		setupOnePort "eth0" "WAN"
> +		setup2ndEth "eth1" "CLIENT"
> +		uci set "fff.ui.portsetup=twoeth"
> +		;;
>  	cpe210-v2|\
>  	cpe210-v3|\
>  	tl-mr3020-v1|\
> @@ -80,7 +85,6 @@ case "$BOARD" in
>  	ubnt-bullet-m|\
>  	ubnt-loco-m|\
>  	ubnt-loco-m-xw|\
> -	ubnt-nano-m|\
>  	ubnt-pico-m|\
>  	ubnt-power-m-xw|\
>  	ubnt-unifi|\
> diff --git a/src/packages/fff/fff-network/files/lib/functions/fff/networksetup b/src/packages/fff/fff-network/files/lib/functions/fff/networksetup
> index ccc943df..4ce96953 100644
> --- a/src/packages/fff/fff-network/files/lib/functions/fff/networksetup
> +++ b/src/packages/fff/fff-network/files/lib/functions/fff/networksetup
> @@ -161,3 +161,40 @@ setupOnePort() {
>  	fi
>  	uci commit network
>  }
> +
> +setup2ndEth() {
> +	# Set up second port for devices with to ports directly connected to ethX (no switch)
> +	# This is intended for initial setup and for updates
> +	#
> +	# Use this in combination with setupOnePort() for the first port.
> +	# Calling setupOnePort() will overwrite the settings made here, so always call in succession, e.g.
> +	# setupOnePort eth0 "WAN"
> +	# setup2ndEth eth1 "BATMAN"
> +	#
> +	# Usage: setup2ndEth <DEV, e.g. eth1> <ETHMODE: BATMAN or CLIENT>
> +
> +	local DEV=$1
> +	local ETHMODE=$2
> +
> +	uci set "network.$DEV=interface"
> +	uci set "network.$DEV.ifname=$DEV"
> +
> +	local meshif="$(uci -q get network.mesh.ifname)"
> +
> +	if [ "$ETHMODE" = "CLIENT" ] ; then
> +		# Only write if not only there
> +		echo "$meshif" | grep -q "$DEV" || uci set network.mesh.ifname="$meshif $DEV"
> +	else
> +		# Remove if there
> +		uci set network.mesh.ifname="$(echo "$meshif" | sed "s/ *$DEV//")"
> +	fi
> +
> +	if [ "$ETHMODE" = "BATMAN" ] ; then
> +		# Always overwrite (if both ports are set to BATMAN, only the second will be)
> +		uci set network.ethmesh.ifname="$DEV"
> +	else
> +		uci -q get network.ethmesh.ifname | grep -q "$DEV" && uci del network.ethmesh.ifname
> +	fi
> +
> +	uci commit network
> +}
> diff --git a/src/packages/fff/fff-network/files/usr/sbin/settwoeth b/src/packages/fff/fff-network/files/usr/sbin/settwoeth
> new file mode 100755
> index 00000000..4b7478af
> --- /dev/null
> +++ b/src/packages/fff/fff-network/files/usr/sbin/settwoeth
> @@ -0,0 +1,34 @@
> +#!/bin/sh
> +
> +if ! [ "$(uci -q get fff.ui.portsetup)" = "twoeth" ] ; then
> +	echo "Wrong device. This is for devices with two ethX without switch!"
> +	exit 1
> +fi
> +
> +. /lib/functions/fff/networksetup
> +
> +ETHMODE1=$1
> +ETHMODE2=$2
> +DEV1=$3
> +DEV2=$4
> +
> +[ -n "$DEV1" ] || DEV1="eth0"
> +[ -n "$DEV2" ] || DEV2="eth1"
> +
> +if ! ([ "$ETHMODE1" = "WAN" ] || [ "$ETHMODE1" = "CLIENT" ] || [ "$ETHMODE1" = "BATMAN" ]); then
> +	echo "Wrong port mode for first port. Choose one of: WAN, CLIENT, BATMAN"
> +	exit 1
> +fi
> +if ! ([ "$ETHMODE2" = "CLIENT" ] || [ "$ETHMODE2" = "BATMAN" ]); then
> +	echo "Wrong port mode for second port. Choose one of: CLIENT, BATMAN"
> +	exit 1
> +fi
> +if [ "$ETHMODE1" = "BATMAN" ] && [ "$ETHMODE2" = "BATMAN" ]; then
> +	echo "Only one port can be set to BATMAN!"
> +	exit 1
> +fi
> +
> +setupOnePort "$DEV1" "$ETHMODE1"
> +setup2ndEth "$DEV2" "$ETHMODE2"
> +/etc/init.d/network restart
> +echo "Port updated successfully."
Robert Langhammer April 22, 2019, 9:13 p.m.
Schaut gut aus

Reviewed-by: Robert Langhammer <rlanghammer@web.de>

Am 22.04.19 um 14:35 schrieb Adrian Schmutzler:
> Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>
>
> ---
>
> This is not tested.
>
> Changes in v2:
> - Added patch
>
> Changes in v3:
> - Merged with "Fix/improve setup of one- and two-port devices"
>   from FritzBox patchset
> - Fixed uci -q
>
> Please re-review after this merge
> ---
>  .../files/etc/uci-defaults/22a-config-ports        |  6 +++-
>  .../files/lib/functions/fff/networksetup           | 37 ++++++++++++++++++++++
>  .../fff/fff-network/files/usr/sbin/settwoeth       | 34 ++++++++++++++++++++
>  3 files changed, 76 insertions(+), 1 deletion(-)
>  create mode 100755 src/packages/fff/fff-network/files/usr/sbin/settwoeth
>
> diff --git a/src/packages/fff/fff-network/files/etc/uci-defaults/22a-config-ports b/src/packages/fff/fff-network/files/etc/uci-defaults/22a-config-ports
> index cc7ab277..4cd1387a 100644
> --- a/src/packages/fff/fff-network/files/etc/uci-defaults/22a-config-ports
> +++ b/src/packages/fff/fff-network/files/etc/uci-defaults/22a-config-ports
> @@ -71,6 +71,11 @@ case "$BOARD" in
>  		setupSwitch "eth0" "1 2 0t" "3 4 0t" "5 0t"
>  		setupWan "eth0.2"
>  		;;
> +	ubnt-nano-m)
> +		setupOnePort "eth0" "WAN"
> +		setup2ndEth "eth1" "CLIENT"
> +		uci set "fff.ui.portsetup=twoeth"
> +		;;
>  	cpe210-v2|\
>  	cpe210-v3|\
>  	tl-mr3020-v1|\
> @@ -80,7 +85,6 @@ case "$BOARD" in
>  	ubnt-bullet-m|\
>  	ubnt-loco-m|\
>  	ubnt-loco-m-xw|\
> -	ubnt-nano-m|\
>  	ubnt-pico-m|\
>  	ubnt-power-m-xw|\
>  	ubnt-unifi|\
> diff --git a/src/packages/fff/fff-network/files/lib/functions/fff/networksetup b/src/packages/fff/fff-network/files/lib/functions/fff/networksetup
> index ccc943df..4ce96953 100644
> --- a/src/packages/fff/fff-network/files/lib/functions/fff/networksetup
> +++ b/src/packages/fff/fff-network/files/lib/functions/fff/networksetup
> @@ -161,3 +161,40 @@ setupOnePort() {
>  	fi
>  	uci commit network
>  }
> +
> +setup2ndEth() {
> +	# Set up second port for devices with to ports directly connected to ethX (no switch)
> +	# This is intended for initial setup and for updates
> +	#
> +	# Use this in combination with setupOnePort() for the first port.
> +	# Calling setupOnePort() will overwrite the settings made here, so always call in succession, e.g.
> +	# setupOnePort eth0 "WAN"
> +	# setup2ndEth eth1 "BATMAN"
> +	#
> +	# Usage: setup2ndEth <DEV, e.g. eth1> <ETHMODE: BATMAN or CLIENT>
> +
> +	local DEV=$1
> +	local ETHMODE=$2
> +
> +	uci set "network.$DEV=interface"
> +	uci set "network.$DEV.ifname=$DEV"
> +
> +	local meshif="$(uci -q get network.mesh.ifname)"
> +
> +	if [ "$ETHMODE" = "CLIENT" ] ; then
> +		# Only write if not only there
> +		echo "$meshif" | grep -q "$DEV" || uci set network.mesh.ifname="$meshif $DEV"
> +	else
> +		# Remove if there
> +		uci set network.mesh.ifname="$(echo "$meshif" | sed "s/ *$DEV//")"
> +	fi
> +
> +	if [ "$ETHMODE" = "BATMAN" ] ; then
> +		# Always overwrite (if both ports are set to BATMAN, only the second will be)
> +		uci set network.ethmesh.ifname="$DEV"
> +	else
> +		uci -q get network.ethmesh.ifname | grep -q "$DEV" && uci del network.ethmesh.ifname
> +	fi
> +
> +	uci commit network
> +}
> diff --git a/src/packages/fff/fff-network/files/usr/sbin/settwoeth b/src/packages/fff/fff-network/files/usr/sbin/settwoeth
> new file mode 100755
> index 00000000..4b7478af
> --- /dev/null
> +++ b/src/packages/fff/fff-network/files/usr/sbin/settwoeth
> @@ -0,0 +1,34 @@
> +#!/bin/sh
> +
> +if ! [ "$(uci -q get fff.ui.portsetup)" = "twoeth" ] ; then
> +	echo "Wrong device. This is for devices with two ethX without switch!"
> +	exit 1
> +fi
> +
> +. /lib/functions/fff/networksetup
> +
> +ETHMODE1=$1
> +ETHMODE2=$2
> +DEV1=$3
> +DEV2=$4
> +
> +[ -n "$DEV1" ] || DEV1="eth0"
> +[ -n "$DEV2" ] || DEV2="eth1"
> +
> +if ! ([ "$ETHMODE1" = "WAN" ] || [ "$ETHMODE1" = "CLIENT" ] || [ "$ETHMODE1" = "BATMAN" ]); then
> +	echo "Wrong port mode for first port. Choose one of: WAN, CLIENT, BATMAN"
> +	exit 1
> +fi
> +if ! ([ "$ETHMODE2" = "CLIENT" ] || [ "$ETHMODE2" = "BATMAN" ]); then
> +	echo "Wrong port mode for second port. Choose one of: CLIENT, BATMAN"
> +	exit 1
> +fi
> +if [ "$ETHMODE1" = "BATMAN" ] && [ "$ETHMODE2" = "BATMAN" ]; then
> +	echo "Only one port can be set to BATMAN!"
> +	exit 1
> +fi
> +
> +setupOnePort "$DEV1" "$ETHMODE1"
> +setup2ndEth "$DEV2" "$ETHMODE2"
> +/etc/init.d/network restart
> +echo "Port updated successfully."