From ca7625ef11dee3fb13b79ed2b39eb9c0c4aa0a40 Mon Sep 17 00:00:00 2001 From: Florian Eckert Date: Wed, 4 Nov 2020 11:39:36 +0100 Subject: [PATCH 1/9] mwan3: remove not needes jshn.sh include Remove not needed jshn.sh include. Signed-off-by: Florian Eckert --- net/mwan3/files/etc/hotplug.d/iface/15-mwan3 | 1 - 1 file changed, 1 deletion(-) diff --git a/net/mwan3/files/etc/hotplug.d/iface/15-mwan3 b/net/mwan3/files/etc/hotplug.d/iface/15-mwan3 index 320e7f787..20fee845a 100644 --- a/net/mwan3/files/etc/hotplug.d/iface/15-mwan3 +++ b/net/mwan3/files/etc/hotplug.d/iface/15-mwan3 @@ -3,7 +3,6 @@ . /lib/functions.sh . /lib/functions/network.sh . /lib/mwan3/mwan3.sh -. /usr/share/libubox/jshn.sh . /lib/mwan3/common.sh SCRIPTNAME="mwan3-hotplug" From 81e6a8fd3be57cba3b5bcbeb40fbbef52779f70b Mon Sep 17 00:00:00 2001 From: Florian Eckert Date: Wed, 4 Nov 2020 11:40:45 +0100 Subject: [PATCH 2/9] mwan3: move mwan3_init call in mwwan3track into main Initialize TRACK_OUTPUT has been set after INTERFACE variable initialization. Move definition into main fixes this issue. Signed-off-by: Florian Eckert --- net/mwan3/files/usr/sbin/mwan3track | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/net/mwan3/files/usr/sbin/mwan3track b/net/mwan3/files/usr/sbin/mwan3track index d97933e09..1cd9e97fa 100755 --- a/net/mwan3/files/usr/sbin/mwan3track +++ b/net/mwan3/files/usr/sbin/mwan3track @@ -9,9 +9,6 @@ DEVICE="" IFDOWN_EVENT=0 IFUP_EVENT=0 -TRACK_OUTPUT=$MWAN3TRACK_STATUS_DIR/$INTERFACE/TRACK_OUTPUT - -mwan3_init stop_subprocs() { [ -n "$SLEEP_PID" ] && kill "$SLEEP_PID" && unset SLEEP_PID @@ -169,6 +166,10 @@ main() { INTERFACE=$1 STATUS="" STARTED=0 + TRACK_OUTPUT=$MWAN3TRACK_STATUS_DIR/$INTERFACE/TRACK_OUTPUT + + mwan3_init + mkdir -p $MWAN3TRACK_STATUS_DIR/$INTERFACE trap clean_up TERM From 94a25dbd92adcf070e10a508f5103d6914449f2a Mon Sep 17 00:00:00 2001 From: Florian Eckert Date: Fri, 6 Nov 2020 09:07:08 +0100 Subject: [PATCH 3/9] mwan3: fix wait conditions in mwan3track Will only run when no events are pending. Signed-off-by: Aaron Goodman [ Update description and split into own commit ] Signed-off-by: Florian Eckert --- net/mwan3/files/usr/sbin/mwan3track | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/net/mwan3/files/usr/sbin/mwan3track b/net/mwan3/files/usr/sbin/mwan3track index 1cd9e97fa..d4a5f44ab 100755 --- a/net/mwan3/files/usr/sbin/mwan3track +++ b/net/mwan3/files/usr/sbin/mwan3track @@ -346,7 +346,7 @@ main() { get_uptime > $MWAN3TRACK_STATUS_DIR/$INTERFACE/TIME host_up_count=0 - if [ "${IFDOWN_EVENT}" -ne 0 ] && [ "${IFUP_EVENT}" -ne 0 ]; then + if [ "${IFDOWN_EVENT}" -eq 0 ] && [ "${IFUP_EVENT}" -eq 0 ]; then sleep "${sleep_time}" & SLEEP_PID=$! wait From 6834f8e3a6d8f94501500609fda0a82b9a458a19 Mon Sep 17 00:00:00 2001 From: Florian Eckert Date: Wed, 4 Nov 2020 12:07:14 +0100 Subject: [PATCH 4/9] mwan3: use common makefile install wrappers With this change you can see at a glance which files will be installed on the system. Signed-off-by: Florian Eckert --- net/mwan3/Makefile | 37 +++++++++++++++++++++++++- net/mwan3/files/etc/init.d/mwan3 | 0 net/mwan3/files/usr/libexec/rpcd/mwan3 | 0 net/mwan3/files/usr/sbin/mwan3 | 0 net/mwan3/files/usr/sbin/mwan3rtmon | 0 net/mwan3/files/usr/sbin/mwan3track | 0 6 files changed, 36 insertions(+), 1 deletion(-) mode change 100755 => 100644 net/mwan3/files/etc/init.d/mwan3 mode change 100755 => 100644 net/mwan3/files/usr/libexec/rpcd/mwan3 mode change 100755 => 100644 net/mwan3/files/usr/sbin/mwan3 mode change 100755 => 100644 net/mwan3/files/usr/sbin/mwan3rtmon mode change 100755 => 100644 net/mwan3/files/usr/sbin/mwan3track diff --git a/net/mwan3/Makefile b/net/mwan3/Makefile index 99990e4cc..c603397da 100644 --- a/net/mwan3/Makefile +++ b/net/mwan3/Makefile @@ -67,8 +67,43 @@ define Build/Compile endef define Package/mwan3/install - $(CP) ./files/* $(1) + $(INSTALL_DIR) $(1)/etc/config + $(INSTALL_CONF) ./files/etc/config/mwan3 \ + $(1)/etc/config/ + + $(INSTALL_DIR) $(1)/etc/hotplug.d/iface + $(INSTALL_DATA) ./files/etc/hotplug.d/iface/15-mwan3 \ + $(1)/etc/hotplug.d/iface/ + $(INSTALL_DATA) ./files/etc/hotplug.d/iface/16-mwan3-user \ + $(1)/etc/hotplug.d/iface/ + + $(INSTALL_DIR) $(1)/etc/init.d + $(INSTALL_BIN) ./files/etc/init.d/mwan3 \ + $(1)/etc/init.d/ + + $(INSTALL_DIR) $(1)/lib/mwan3 + $(INSTALL_DATA) ./files/lib/mwan3/common.sh \ + $(1)/lib/mwan3/ + $(INSTALL_DATA) ./files/lib/mwan3/mwan3.sh \ + $(1)/lib/mwan3/ + + $(INSTALL_DIR) $(1)/usr/libexec/rpcd + $(INSTALL_BIN) ./files/usr/libexec/rpcd/mwan3 \ + $(1)/usr/libexec/rpcd/ + + $(INSTALL_DIR) $(1)/usr/sbin + $(INSTALL_BIN) ./files/usr/sbin/mwan3 \ + $(1)/usr/sbin/ + $(INSTALL_BIN) ./files/usr/sbin/mwan3rtmon \ + $(1)/usr/sbin/ + $(INSTALL_BIN) ./files/usr/sbin/mwan3track \ + $(1)/usr/sbin/ + $(CP) $(PKG_BUILD_DIR)/libwrap_mwan3_sockopt.so.1.0 $(1)/lib/mwan3/ + + $(INSTALL_DIR) $(1)/etc/uci-defaults + $(INSTALL_DATA) ./files/etc/uci-defaults/mwan3-migrate-flush_conntrack \ + $(1)/etc/uci-defaults/ endef $(eval $(call BuildPackage,mwan3)) diff --git a/net/mwan3/files/etc/init.d/mwan3 b/net/mwan3/files/etc/init.d/mwan3 old mode 100755 new mode 100644 diff --git a/net/mwan3/files/usr/libexec/rpcd/mwan3 b/net/mwan3/files/usr/libexec/rpcd/mwan3 old mode 100755 new mode 100644 diff --git a/net/mwan3/files/usr/sbin/mwan3 b/net/mwan3/files/usr/sbin/mwan3 old mode 100755 new mode 100644 diff --git a/net/mwan3/files/usr/sbin/mwan3rtmon b/net/mwan3/files/usr/sbin/mwan3rtmon old mode 100755 new mode 100644 diff --git a/net/mwan3/files/usr/sbin/mwan3track b/net/mwan3/files/usr/sbin/mwan3track old mode 100755 new mode 100644 From 26fb7129ade594fc4ede869069dec07ee2508149 Mon Sep 17 00:00:00 2001 From: Florian Eckert Date: Wed, 4 Nov 2020 12:10:23 +0100 Subject: [PATCH 5/9] mwan3: fix boundary he line is too long. For the future it is better to split it into several lines and make it more clearly arranged. In case of a future change, not the whole line will be marked as a change. Signed-off-by: Florian Eckert --- net/mwan3/Makefile | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/net/mwan3/Makefile b/net/mwan3/Makefile index c603397da..a97a0db6a 100644 --- a/net/mwan3/Makefile +++ b/net/mwan3/Makefile @@ -63,7 +63,12 @@ exit 0 endef define Build/Compile - $(TARGET_CC) $(CFLAGS) $(LDFLAGS) $(FPIC) -shared -o $(PKG_BUILD_DIR)/libwrap_mwan3_sockopt.so.1.0 $(if $(CONFIG_IPV6),-DCONFIG_IPV6) $(PKG_BUILD_DIR)/sockopt_wrap.c -ldl + $(TARGET_CC) $(CFLAGS) $(LDFLAGS) $(FPIC) \ + -shared \ + -o $(PKG_BUILD_DIR)/libwrap_mwan3_sockopt.so.1.0 \ + $(if $(CONFIG_IPV6),-DCONFIG_IPV6) \ + $(PKG_BUILD_DIR)/sockopt_wrap.c \ + -ldl endef define Package/mwan3/install From bec7a1086f3f94a88875e11e99d80009b58c58f2 Mon Sep 17 00:00:00 2001 From: Aaron Goodman Date: Wed, 4 Nov 2020 22:06:17 -0500 Subject: [PATCH 6/9] mwan3: reload unreachable/blackhole rules on hotplug when the network procd service restarts, it flushes the ip rules. We need to add these rules back. Since hotplug events are triggered when the networks come back online, adding this call to the hotplug script is the most convenient place to refresh the rules. Signed-off-by: Aaron Goodman --- net/mwan3/files/etc/hotplug.d/iface/15-mwan3 | 1 + 1 file changed, 1 insertion(+) diff --git a/net/mwan3/files/etc/hotplug.d/iface/15-mwan3 b/net/mwan3/files/etc/hotplug.d/iface/15-mwan3 index 20fee845a..5c60128d4 100644 --- a/net/mwan3/files/etc/hotplug.d/iface/15-mwan3 +++ b/net/mwan3/files/etc/hotplug.d/iface/15-mwan3 @@ -74,6 +74,7 @@ case "$ACTION" in mwan3_set_iface_hotplug_state $INTERFACE "$status" if [ "$MWAN3_STARTUP" != 1 ]; then mwan3_create_iface_route $INTERFACE $DEVICE + mwan3_set_general_rules [ "$status" = "online" ] && mwan3_set_policies_iptables fi [ "$ACTION" = ifup ] && procd_running mwan3 "track_$INTERFACE" && procd_send_signal mwan3 "track_$INTERFACE" USR2 From 59d12598b50edbc5a7a1f178c3c291524bd85b13 Mon Sep 17 00:00:00 2001 From: Aaron Goodman Date: Thu, 5 Nov 2020 20:37:37 -0500 Subject: [PATCH 7/9] mwan3: use procd for locking everywhere Replace locks on /var/run/mwan3.lock with locks via procd. This fixes a deadlock issue where mwan3 stop would have a procd lock, but a hotplug script would have the /var/run/mwan3.lock Locking can be removed from mwan3rtmon since: 1) procd will have sent the KILL signal to the process during shutdown, so it will not add routes to already removed interfaces on mwan3 shutdown and 2) mwan3rtmon checks if an interface is active based on the mwan3_iface_in_ entry in iptables, and the hotplug script always adds this before creating the route table and removes it before deleting the route table Fixes github issue #13704 (https://github.com/openwrt/packages/issues/13704) --- net/mwan3/files/etc/hotplug.d/iface/15-mwan3 | 16 ++++++---------- .../files/etc/hotplug.d/iface/16-mwan3-user | 7 +++---- net/mwan3/files/etc/init.d/mwan3 | 7 ------- net/mwan3/files/lib/mwan3/mwan3.sh | 10 ---------- net/mwan3/files/usr/sbin/mwan3rtmon | 4 ---- 5 files changed, 9 insertions(+), 35 deletions(-) diff --git a/net/mwan3/files/etc/hotplug.d/iface/15-mwan3 b/net/mwan3/files/etc/hotplug.d/iface/15-mwan3 index 5c60128d4..5fe3e33e0 100644 --- a/net/mwan3/files/etc/hotplug.d/iface/15-mwan3 +++ b/net/mwan3/files/etc/hotplug.d/iface/15-mwan3 @@ -5,6 +5,10 @@ . /lib/mwan3/mwan3.sh . /lib/mwan3/common.sh +initscript=/etc/init.d/mwan3 +. /lib/functions/procd.sh + + SCRIPTNAME="mwan3-hotplug" [ "$ACTION" = "ifup" ] || [ "$ACTION" = "ifdown" ] || [ "$ACTION" = "connected" ] || [ "$ACTION" = "disconnected" ] || exit 1 [ -n "$INTERFACE" ] || exit 2 @@ -15,18 +19,17 @@ if { [ "$ACTION" = "ifup" ] || [ "$ACTION" = "connected" ] ; } && [ -z "$DEVICE" exit 3 fi -[ "$MWAN3_STARTUP" = 1 ] || mwan3_lock "$ACTION" "$INTERFACE" +[ "$MWAN3_STARTUP" = 1 ] || procd_lock config_load mwan3 /etc/init.d/mwan3 running || { - [ "$MWAN3_STARTUP" = 1 ] || mwan3_unlock "$ACTION" "$INTERFACE" + [ "$MWAN3_STARTUP" = 1 ] || procd_lock LOG notice "mwan3 hotplug $ACTION on $INTERFACE not called because globally disabled" mwan3_flush_conntrack "$INTERFACE" "$ACTION" exit 0 } $IPT4 -S mwan3_hook &>/dev/null || { - mwan3_unlock "$ACTION" "$INTERFACE" LOG warn "hotplug called on $INTERFACE before mwan3 has been set up" exit 0 } @@ -43,7 +46,6 @@ fi config_get_bool enabled $INTERFACE 'enabled' '0' [ "${enabled}" -eq 1 ] || { - [ "$MWAN3_STARTUP" = 1 ] || mwan3_unlock "$ACTION" "$INTERFACE" LOG notice "mwan3 hotplug on $INTERFACE not called because interface disabled" exit 0 } @@ -56,11 +58,6 @@ else status=online fi -if [ "$ACTION" = ifup ] || [ "$ACTION" = ifdown ]; then - initscript=/etc/init.d/mwan3 - . /lib/functions/procd.sh -fi - LOG notice "Execute $ACTION event on interface $INTERFACE (${DEVICE:-unknown})" case "$ACTION" in @@ -93,5 +90,4 @@ case "$ACTION" in mwan3_set_policies_iptables ;; esac -[ "$MWAN3_STARTUP" = 1 ] || mwan3_unlock "$ACTION" "$INTERFACE" exit 0 diff --git a/net/mwan3/files/etc/hotplug.d/iface/16-mwan3-user b/net/mwan3/files/etc/hotplug.d/iface/16-mwan3-user index 698fe0909..be857e8ff 100644 --- a/net/mwan3/files/etc/hotplug.d/iface/16-mwan3-user +++ b/net/mwan3/files/etc/hotplug.d/iface/16-mwan3-user @@ -3,11 +3,12 @@ [ -f "/etc/mwan3.user" ] && { . /lib/functions.sh . /lib/mwan3/mwan3.sh + initscript=/etc/init.d/mwan3 + . /lib/functions/procd.sh - [ "$MWAN3_SHUTDOWN" != 1 ] && mwan3_lock "$ACTION" "$DEVICE-user" + [ "$MWAN3_SHUTDOWN" != 1 ] && procd_lock [ "$MWAN3_SHUTDOWN" != 1 ] && ! /etc/init.d/mwan3 running && { - mwan3_unlock "$ACTION" "$DEVICE-user" exit 0 } @@ -19,8 +20,6 @@ exit 0 } - [ "$MWAN3_SHUTDOWN" != 1 ] && mwan3_unlock "$ACTION" "$DEVICE-user" - env -i ACTION="$ACTION" INTERFACE="$INTERFACE" DEVICE="$DEVICE" \ /bin/sh /etc/mwan3.user } diff --git a/net/mwan3/files/etc/init.d/mwan3 b/net/mwan3/files/etc/init.d/mwan3 index b7cf91eb1..bd1ea7260 100644 --- a/net/mwan3/files/etc/init.d/mwan3 +++ b/net/mwan3/files/etc/init.d/mwan3 @@ -31,8 +31,6 @@ start_service() { mwan3_init config_foreach start_tracker interface - mwan3_lock "command" "mwan3" - mwan3_update_iface_to_table mwan3_set_connected_ipset mwan3_set_custom_ipset @@ -43,8 +41,6 @@ start_service() { mwan3_set_policies_iptables mwan3_set_user_rules - mwan3_unlock "command" "mwan3" - procd_open_instance rtmon_ipv4 procd_set_param command /usr/sbin/mwan3rtmon ipv4 procd_set_param respawn @@ -61,8 +57,6 @@ start_service() { stop_service() { local ipset rule IP IPTR IPT family table tid - mwan3_lock "command" "mwan3" - config_load mwan3 mwan3_init config_foreach mwan3_interface_shutdown interface @@ -108,7 +102,6 @@ stop_service() { rm -rf $MWAN3_STATUS_DIR $MWAN3TRACK_STATUS_DIR - mwan3_unlock "command" "mwan3" } reload_service() { diff --git a/net/mwan3/files/lib/mwan3/mwan3.sh b/net/mwan3/files/lib/mwan3/mwan3.sh index e6e43ebe8..8a5fe6f0d 100644 --- a/net/mwan3/files/lib/mwan3/mwan3.sh +++ b/net/mwan3/files/lib/mwan3/mwan3.sh @@ -103,16 +103,6 @@ mwan3_count_one_bits() echo $count } -mwan3_lock() { - lock /var/run/mwan3.lock - #LOG debug "$1 $2 (lock)" -} - -mwan3_unlock() { - #LOG debug "$1 $2 (unlock)" - lock -u /var/run/mwan3.lock -} - mwan3_get_iface_id() { local _tmp diff --git a/net/mwan3/files/usr/sbin/mwan3rtmon b/net/mwan3/files/usr/sbin/mwan3rtmon index 569b4d172..6ece58125 100644 --- a/net/mwan3/files/usr/sbin/mwan3rtmon +++ b/net/mwan3/files/usr/sbin/mwan3rtmon @@ -159,16 +159,13 @@ main() IP="$IP4" fi mwan3_init - mwan3_lock "mwan3rtmon" "start" sh -c "echo \$\$; exec $IP monitor route" | { read -r monitor_pid trap_with_arg func_trap "$monitor_pid" SIGINT SIGTERM SIGKILL while IFS='' read -r line; do [ -z "${line##*table*}" ] && continue LOG debug "handling route update $family '$line'" - mwan3_lock "service" "mwan3rtmon" mwan3_rtmon_route_handle "$line" "$family" - mwan3_unlock "service" "mwan3rtmon" done } & child=$! @@ -176,7 +173,6 @@ main() trap_with_arg func_trap "$child" SIGINT SIGTERM SIGKILL mwan3_set_connected_${family} mwan3_add_all_routes ${family} - mwan3_unlock "mwan3rtmon" "start" kill -SIGCONT $child wait $! } From 1f1d21ed28c7e6713fb010e380b8557a9d020b16 Mon Sep 17 00:00:00 2001 From: Florian Eckert Date: Wed, 4 Nov 2020 16:24:55 +0100 Subject: [PATCH 8/9] mwan3: make it clearer who initiated the start It was somewhat opaque how the variable a is questioned. To show this better the variable is now a string and not a boolean. So you can see directly what should happen. With a boolean you always have to think about what it means when 0 or 1 is used. Signed-off-by: Florian Eckert --- net/mwan3/files/etc/hotplug.d/iface/15-mwan3 | 4 ++-- net/mwan3/files/etc/init.d/mwan3 | 2 +- net/mwan3/files/lib/mwan3/mwan3.sh | 12 ++++++------ net/mwan3/files/usr/sbin/mwan3 | 2 +- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/net/mwan3/files/etc/hotplug.d/iface/15-mwan3 b/net/mwan3/files/etc/hotplug.d/iface/15-mwan3 index 5fe3e33e0..f1755d26f 100644 --- a/net/mwan3/files/etc/hotplug.d/iface/15-mwan3 +++ b/net/mwan3/files/etc/hotplug.d/iface/15-mwan3 @@ -23,7 +23,7 @@ fi config_load mwan3 /etc/init.d/mwan3 running || { - [ "$MWAN3_STARTUP" = 1 ] || procd_lock + [ "$MWAN3_STARTUP" = "init" ] || procd_lock LOG notice "mwan3 hotplug $ACTION on $INTERFACE not called because globally disabled" mwan3_flush_conntrack "$INTERFACE" "$ACTION" exit 0 @@ -69,7 +69,7 @@ case "$ACTION" in mwan3_create_iface_iptables $INTERFACE $DEVICE mwan3_create_iface_rules $INTERFACE $DEVICE mwan3_set_iface_hotplug_state $INTERFACE "$status" - if [ "$MWAN3_STARTUP" != 1 ]; then + if [ "$MWAN3_STARTUP" = "cmd" ]; then mwan3_create_iface_route $INTERFACE $DEVICE mwan3_set_general_rules [ "$status" = "online" ] && mwan3_set_policies_iptables diff --git a/net/mwan3/files/etc/init.d/mwan3 b/net/mwan3/files/etc/init.d/mwan3 index bd1ea7260..23c21ab5d 100644 --- a/net/mwan3/files/etc/init.d/mwan3 +++ b/net/mwan3/files/etc/init.d/mwan3 @@ -36,7 +36,7 @@ start_service() { mwan3_set_custom_ipset mwan3_set_general_rules mwan3_set_general_iptables - config_foreach mwan3_ifup interface 1 + config_foreach mwan3_ifup interface "init" wait $hotplug_pids mwan3_set_policies_iptables mwan3_set_user_rules diff --git a/net/mwan3/files/lib/mwan3/mwan3.sh b/net/mwan3/files/lib/mwan3/mwan3.sh index 8a5fe6f0d..43740e2de 100644 --- a/net/mwan3/files/lib/mwan3/mwan3.sh +++ b/net/mwan3/files/lib/mwan3/mwan3.sh @@ -955,12 +955,12 @@ mwan3_interface_shutdown() mwan3_ifup() { - local up l3_device status interface true_iface mwan3_startup + local interface=$1 + local caller=$2 - interface=$1 - mwan3_startup=$2 + local up l3_device status true_iface - if [ "${mwan3_startup}" != 1 ]; then + if [ "${caller}" = "cmd" ]; then # It is not necessary to obtain a lock here, because it is obtained in the hotplug # script, but we still want to do the check to print a useful error message /etc/init.d/mwan3 running || { @@ -979,7 +979,7 @@ mwan3_ifup() } hotplug_startup() { - env -i MWAN3_STARTUP=$mwan3_startup ACTION=ifup \ + env -i MWAN3_STARTUP=$caller ACTION=ifup \ INTERFACE=$interface DEVICE=$l3_device \ sh /etc/hotplug.d/iface/15-mwan3 } @@ -988,7 +988,7 @@ mwan3_ifup() return fi - if [ "${mwan3_startup}" = 1 ]; then + if [ "${caller}" = "init" ]; then hotplug_startup & hotplug_pids="$hotplug_pids $!" else diff --git a/net/mwan3/files/usr/sbin/mwan3 b/net/mwan3/files/usr/sbin/mwan3 index 45776bdfc..803e74b9a 100644 --- a/net/mwan3/files/usr/sbin/mwan3 +++ b/net/mwan3/files/usr/sbin/mwan3 @@ -54,7 +54,7 @@ ifup() { exit 0 fi - mwan3_ifup "$1" + mwan3_ifup "$1" "cmd" } interfaces() From a756fdcfdf512e1e59c324fe7e8b664bea46927a Mon Sep 17 00:00:00 2001 From: Florian Eckert Date: Fri, 6 Nov 2020 10:48:21 +0100 Subject: [PATCH 9/9] mwan3: update version to 2.10.2 Signed-off-by: Florian Eckert --- net/mwan3/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/net/mwan3/Makefile b/net/mwan3/Makefile index a97a0db6a..3b853e6ea 100644 --- a/net/mwan3/Makefile +++ b/net/mwan3/Makefile @@ -8,7 +8,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=mwan3 -PKG_VERSION:=2.10.1 +PKG_VERSION:=2.10.2 PKG_RELEASE:=1 PKG_MAINTAINER:=Florian Eckert PKG_LICENSE:=GPL-2.0