From 93be578a899d6883aa33d2ad83fdf7e129e09b46 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Fri, 11 Aug 2023 21:16:10 +0200 Subject: [PATCH 1/9] Update glorytun TCP --- glorytun/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/glorytun/Makefile b/glorytun/Makefile index e197e17fa..837f1903f 100644 --- a/glorytun/Makefile +++ b/glorytun/Makefile @@ -11,7 +11,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=glorytun PKG_RELEASE:=6 PKG_SOURCE_PROTO:=git -PKG_SOURCE_VERSION:=1af1e26ad7a325d891c27f5cf9832c1ce4b4d0e9 +PKG_SOURCE_VERSION:=0c3b03cf0215e0896fd8e7e91be92efa77f6a2d1 PKG_SOURCE:=glorytun-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=https://github.com/Ysurac/glorytun.git PKG_VERSION:=0.0.35-$(PKG_SOURCE_VERSION) From 430de516aac932830c82333d76966fbba46f7d66 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Fri, 11 Aug 2023 21:16:29 +0200 Subject: [PATCH 2/9] Increase Glorytun TCP buffer --- glorytun/init | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/glorytun/init b/glorytun/init index c0011edc1..a21afcd9f 100755 --- a/glorytun/init +++ b/glorytun/init @@ -82,7 +82,7 @@ start_instance() { retry count -1 const 5000000 \ timeout ${timeout} \ keepalive count 5 idle 20 interval 2 \ - buffer-size 32768 + buffer-size 327680 procd_set_param respawn 0 30 0 procd_set_param file /tmp/${PROG_NAME}-${1}.key From ce845a6cd354c89913ced3ee660e84f97736550c Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Fri, 11 Aug 2023 21:17:17 +0200 Subject: [PATCH 3/9] Set force mss back for OMRVPN --- openmptcprouter/files/etc/uci-defaults/1980-omr-firewall | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openmptcprouter/files/etc/uci-defaults/1980-omr-firewall b/openmptcprouter/files/etc/uci-defaults/1980-omr-firewall index 9a8edfc77..0dd4b0a57 100755 --- a/openmptcprouter/files/etc/uci-defaults/1980-omr-firewall +++ b/openmptcprouter/files/etc/uci-defaults/1980-omr-firewall @@ -241,7 +241,7 @@ done uci -q batch <<-EOF >/dev/null set firewall.zone_lan.mtu_fix='1' - set firewall.zone_vpn.mtu_fix='0' + set firewall.zone_vpn.mtu_fix='1' set firewall.@include[0].reload='1' commit firewall EOF From 65034c126c8f43ebefa7728013029ef3b46f3e13 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Fri, 11 Aug 2023 21:17:49 +0200 Subject: [PATCH 4/9] Add an init script for mptcpd --- mptcpd/Makefile | 1 + mptcpd/files/etc/init.d/mptcpd | 71 ++++++++++++++++++++++++++++++++++ 2 files changed, 72 insertions(+) create mode 100755 mptcpd/files/etc/init.d/mptcpd diff --git a/mptcpd/Makefile b/mptcpd/Makefile index b0a21ac54..f1cef84dd 100644 --- a/mptcpd/Makefile +++ b/mptcpd/Makefile @@ -61,6 +61,7 @@ define Package/$(PKG_NAME)/install $(CP) $(PKG_INSTALL_DIR)/usr/lib/mptcpd/* $(1)/usr/lib/mptcpd/ $(INSTALL_DIR) $(1)/etc/mptcpd $(INSTALL_DATA) $(PKG_BUILD_DIR)/etc/mptcpd.conf $(1)/etc/mptcpd/mptcpd.conf + $(CP) ./files/* $(1)/ endef $(eval $(call BuildPackage,$(PKG_NAME))) diff --git a/mptcpd/files/etc/init.d/mptcpd b/mptcpd/files/etc/init.d/mptcpd new file mode 100755 index 000000000..aa4a177f7 --- /dev/null +++ b/mptcpd/files/etc/init.d/mptcpd @@ -0,0 +1,71 @@ +#!/bin/sh /etc/rc.common +# Copyright (C) 2023 Ycarus (Yannick Chabanois) for OpenMPTCProuter project + +START=10 +STOP=10 + +USE_PROCD=1 +PROG_NAME=mptcpd +PROG=/usr/bin/${PROG_NAME} + +_log() { + logger -p daemon.info -t ${PROG_NAME} "$@" +} + +_err() { + logger -p daemon.err -t ${PROG_NAME} "$@" +} + +version_over_5_4() { + MAJOR_VERSION=$(uname -r | awk -F '.' '{print $1}') + MINOR_VERSION=$(uname -r | awk -F '.' '{print $2}') + if [ $MAJOR_VERSION -ge 5 ] && [ $MINOR_VERSION -gt 13 ] || [ $MAJOR_VERSION -gt 5 ] ; then + return 0 + else + return 1 + fi +} + +validate_section() { + uci_validate_section network globals "${1}" \ + 'mptcpd_enable:string:"disabled"' \ + 'mptcp_pm_type:bool:0' \ + 'mptcpd_path_manager:list(string)' \ + 'mptcpd_plugins:list(string)' \ + 'mptcpd_addr_flags:list(string)' \ + 'mptcpd_notify_flags:list(string)' +} + +start_service() { + local mptcpd_enable mptcp_pm_type mptcpd_path_manager mptcpd_plugins mptcpd_addr_flags mptcpd_notify_flags + validate_section "globals" || { + _err "validation failed" + return 1 + } + + [ "${mptcp_pm_type}" = "1" ] || return 1 + [ "${mptcpd_enable}" = "enable" ] || return 1 + + [ version_over_5_4 ] || return 1 + + procd_open_instance + + procd_set_param command ${PROG} + [ "${mptcpd_path_manager}" ] && procd_append_param command --path-manager=${mptcpd_path_manager// /,} + [ "${mptcpd_plugins}" ] && procd_append_param command --load-plugins=${mptcpd_plugins// /,} + [ "${mptcpd_add_flags}" ] && procd_append_param command --addr-flags=${mptcpd_addr_flags// /,} + [ "${mptcpd_notify_flags}" ] && procd_append_param command --notify-flags=${mptcpd_notify_flags// /,} + + procd_set_param respawn 0 30 5 + + procd_set_param stdout 1 + procd_set_param stderr 1 + + procd_close_instance + +} + + +service_triggers() { + procd_add_reload_trigger network +} From c8e31003855021ebe3d2e68c519c8c020833487c Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Fri, 11 Aug 2023 21:18:23 +0200 Subject: [PATCH 5/9] Fix SQM speed from auto speedcheck --- mptcp/files/usr/share/omr/post-tracking.d/post-tracking | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/mptcp/files/usr/share/omr/post-tracking.d/post-tracking b/mptcp/files/usr/share/omr/post-tracking.d/post-tracking index 29c32df20..024195ca8 100755 --- a/mptcp/files/usr/share/omr/post-tracking.d/post-tracking +++ b/mptcp/files/usr/share/omr/post-tracking.d/post-tracking @@ -1291,7 +1291,7 @@ if [ -n "$OMR_TRACKER_INTERFACE" ] && ([ "$multipath_config" = "on" ] || [ "$mul config_load openmptcprouter config_foreach glorytunudppath server fi -[ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.multipathvpn)" != "1" ] && [ "$(uci -q get openmptcprouter.settings.force_multipath)" != "0" ] && { +[ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.multipathvpn)" != "1" ] && [ "$(uci -q get network.globals.mptcp_force_multipath)" != "0" ] && { [ "$multipath_status" = "$multipath_config" ] || { if [ "$(sysctl -qen net.mptcp.mptcp_enabled | tr -d '\n')" = "1" ] || [ "$(sysctl -qen net.mptcp.enabled | tr -d '\n')" = "1" ]; then if [ "$(uci -q get network.$OMR_TRACKER_INTERFACE.force_link)" != "0" ]; then @@ -1618,7 +1618,7 @@ if [ "$(pgrep -f omr-test-speed-server)" = "" ] && [ "$(uci -q get openmptcprout download_speed3=$(/bin/omr-test-speed-server ${server} ${OMR_TRACKER_DEVICE} fasttest) [ "$download_speed2" -gt "$download_speed" ] && download_speed=${download_speed2} [ "$download_speed3" -gt "$download_speed" ] && download_speed=${download_speed3} - download_speed=$((download_speed/1000)) + download_speed=$((download_speed*8/1000)) if [ -n "$download_speed" ] && [ "$download_speed" != "0" ]; then upload_speed=$(/bin/omr-test-speed-server ${server} ${OMR_TRACKER_DEVICE} fasttest upload) upload_speed2=$(/bin/omr-test-speed-server ${server} ${OMR_TRACKER_DEVICE} fasttest upload) @@ -1638,7 +1638,7 @@ if [ "$(pgrep -f omr-test-speed-server)" = "" ] && [ "$(uci -q get openmptcprout uci -q set network.${OMR_TRACKER_INTERFACE}.downloadspeed=${download_speed} # Set Upload speed settings - upload_speed=$((upload_speed/1000)) + upload_speed=$((upload_speed*8/1000)) if [ -n "$upload_speed" ] && [ "$upload_speed" != "0" ]; then if [ "$(uci -q get sqm.${OMR_TRACKER_INTERFACE}.autorate)" = "1" ]; then uci -q set sqm.${OMR_TRACKER_INTERFACE}.upload=$((upload_speed*65/100)) From 809fcd713dfbb5e19051cbe5d9ff407e9aa8977f Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Fri, 11 Aug 2023 21:18:56 +0200 Subject: [PATCH 6/9] Disable SQM on OMRVPN --- .../luasrc/controller/openmptcprouter.lua | 27 +++++++++++-------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua index 85d04ae72..1f979d871 100644 --- a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua +++ b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua @@ -556,17 +556,22 @@ function wizard_add() vpn_intf = "bonding-omrvpn" ucic:set("network","omrvpn","proto","bonding") end - if downloadmax ~= 0 and uploadmax ~= 0 then - --ucic:set("sqm","omrvpn","enabled","1") - ucic:set("sqm","omrvpn","max_download",downloadmax) - ucic:set("sqm","omrvpn","max_upload",uploadmax) - ucic:set("sqm","omrvpn","download",math.ceil(downloadmax*50/100)) - ucic:set("sqm","omrvpn","min_download",math.ceil(downloadmax*8/100)) - ucic:set("sqm","omrvpn","upload",math.ceil(uploadmax*50/100)) - ucic:set("sqm","omrvpn","min_upload",math.ceil(uploadmax*8/100)) - else - ucic:set("sqm","omrvpn","enabled","0") - end + --if downloadmax ~= 0 and uploadmax ~= 0 then + -- ucic:set("sqm","omrvpn","enabled","1") + -- ucic:set("sqm","omrvpn","max_download",downloadmax) + -- ucic:set("sqm","omrvpn","max_upload",uploadmax) + -- ucic:set("sqm","omrvpn","download",math.ceil(downloadmax*50/100)) + -- ucic:set("sqm","omrvpn","min_download",math.ceil(downloadmax*8/100)) + -- ucic:set("sqm","omrvpn","upload",math.ceil(uploadmax*50/100)) + -- ucic:set("sqm","omrvpn","min_upload",math.ceil(uploadmax*8/100)) + --else + -- ucic:set("sqm","omrvpn","enabled","0") + --end + + ucic:set("sqm","omrvpn","enabled","1") + ucic:set("sqm","omrvpn","download","0") + ucic:set("sqm","omrvpn","upload","0") + if vpn_intf ~= "" then ucic:set("network","omrvpn","device",vpn_intf) ucic:set("sqm","omrvpn","interface",vpn_intf) From 101426c8cf30396ac1d340c8057da59f5c648bf6 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Fri, 11 Aug 2023 21:19:36 +0200 Subject: [PATCH 7/9] Add options for mptcpd in MPTCP luci interface --- luci-app-mptcp/luasrc/model/cbi/mptcp.lua | 43 +++++++++++++++++++++ mptcp/files/etc/uci-defaults/mptcp-defaults | 4 ++ 2 files changed, 47 insertions(+) diff --git a/luci-app-mptcp/luasrc/model/cbi/mptcp.lua b/luci-app-mptcp/luasrc/model/cbi/mptcp.lua index 17a2f6a69..53fba62e8 100644 --- a/luci-app-mptcp/luasrc/model/cbi/mptcp.lua +++ b/luci-app-mptcp/luasrc/model/cbi/mptcp.lua @@ -73,6 +73,49 @@ if uname.release:sub(1,4) == "5.15" or uname.release:sub(1,1) == "6" then o.default = 0 end + o = s:option(ListValue, "mptcp_disable_initial_config", translate("Initial MPTCP configuration")) + o:depends("mptcp_pm_type",1) + o:value("0", translate("enable")) + o:value("1", translate("disable")) + o.default = "0" + + o = s:option(ListValue, "mptcp_force_multipath", translate("Force Multipath configuration")) + o:depends("mptcp_pm_type",1) + o:value("1", translate("enable")) + o:value("0", translate("disable")) + o.default = "1" + + o = s:option(ListValue, "mptcpd_enable", translate("Enable MPTCPd")) + o:depends("mptcp_pm_type",1) + o:value("enable", translate("enable")) + o:value("disable", translate("disable")) + o.default = "disable" + + o = s:option(DynamicList, "mptcpd_path_manager", translate("MPTCPd path managers")) + for dir in io.popen([[cd /usr/lib/mptcpd && ls -1 *.so | sed 's/.so//g']]):lines() do + o:value(dir, dir) + end + o:depends("mptcp_pm_type",1) + + o = s:option(DynamicList, "mptcpd_plugins", translate("MPTCPd plugins")) + for dir in io.popen([[cd /usr/lib/mptcpd && ls -1 *.so | sed 's/.so//g']]):lines() do + o:value(dir, dir) + end + o:depends("mptcp_pm_type",1) + + o = s:option(DynamicList, "mptcpd_addr_flags", translate("MPTCPd Address annoucement flags")) + o:value("subflow","subflow") + o:value("signal","signal") + o:value("backup","backup") + o:value("fullmesh","fullmesh") + o:depends("mptcp_pm_type",1) + + o = s:option(DynamicList, "mptcpd_notify_flags", translate("MPTCPd Address notification flags")) + o:value("existing","existing") + o:value("skip_link_local","skip_link_local") + o:value("skip_loopback","skip_loopback") + o:depends("mptcp_pm_type",1) + o = s:option(Value, "mptcp_subflows", translate("Max subflows"),translate("specifies the maximum number of additional subflows allowed for each MPTCP connection")) o.datatype = "uinteger" o.rmempty = false diff --git a/mptcp/files/etc/uci-defaults/mptcp-defaults b/mptcp/files/etc/uci-defaults/mptcp-defaults index 21d2678a5..a67049fb2 100755 --- a/mptcp/files/etc/uci-defaults/mptcp-defaults +++ b/mptcp/files/etc/uci-defaults/mptcp-defaults @@ -11,6 +11,10 @@ if [ "$(uci -q get network.globals.mptcp_path_manager)" = "" ]; then set network.globals.mptcp_subflows=3 set network.globals.mptcp_add_addr_accepted=1 set network.globals.mptcp_add_addr_timeout=120 + set network.globals.mptcp_pm_type=0 + set network.globals.mptcp_disable_initial_config=0 + set network.globals.mptcp_force_multipath=1 + set network.globals.mptcpd_enable=0 commit network EOF fi From 2f76438cc2dd2b20bdddb672a8c4ef50d90123b8 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Fri, 11 Aug 2023 21:20:01 +0200 Subject: [PATCH 8/9] Allow to disable routes set by mptcp init script --- mptcp/files/etc/init.d/mptcp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/mptcp/files/etc/init.d/mptcp b/mptcp/files/etc/init.d/mptcp index 584594f6b..75dae8667 100755 --- a/mptcp/files/etc/init.d/mptcp +++ b/mptcp/files/etc/init.d/mptcp @@ -520,10 +520,12 @@ start_service() { ip route flush cache ip -6 route flush cache } - config_foreach interface_multipath_settings interface $intf + if [ "$(uci -q get network.globals.mptcp_disable_initial_config)" != "1" ]; then + config_foreach interface_multipath_settings interface $intf + config_foreach add_route route + config_foreach add_route6 route6 + fi set_multipath - config_foreach add_route route - config_foreach add_route6 route6 # If no master is defined, one interface is defined as master if [ "$master" = "" ] && [ "$intf" = "" ]; then intfmaster="$mptcpmintf" From 87f621b52d98d13a77df589537b51200ea6cceb3 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Fri, 11 Aug 2023 21:20:32 +0200 Subject: [PATCH 9/9] Add log for sqm autorate at good place --- luci-app-sqm-autorate/root/etc/init.d/sqm-autorate | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/luci-app-sqm-autorate/root/etc/init.d/sqm-autorate b/luci-app-sqm-autorate/root/etc/init.d/sqm-autorate index a85da1420..8cbb27c55 100755 --- a/luci-app-sqm-autorate/root/etc/init.d/sqm-autorate +++ b/luci-app-sqm-autorate/root/etc/init.d/sqm-autorate @@ -15,11 +15,11 @@ . /lib/functions/network.sh _config_autorate() { - logger -t "SQM-autorate" "Set config for $1" config_get enabled "$1" enabled [ "${enabled}" != "1" ] && return config_get autorate "$1" autorate [ "${autorate}" != "1" ] && return + logger -t "SQM-autorate" "Set config for $1" config_get min_download "$1" min_download "0" config_get download "$1" download "0"