diff --git a/luci-app-mptcp/luasrc/model/cbi/mptcp.lua b/luci-app-mptcp/luasrc/model/cbi/mptcp.lua index 8e5c4e14b..4b3bdb2b7 100644 --- a/luci-app-mptcp/luasrc/model/cbi/mptcp.lua +++ b/luci-app-mptcp/luasrc/model/cbi/mptcp.lua @@ -9,58 +9,77 @@ m = Map("network", translate("MPTCP"), translate("Networks MPTCP settings. Visit local unameinfo = nixio.uname() or { } s = m:section(TypedSection, "globals") -local mtcpg = s:option(ListValue, "multipath", translate("Multipath TCP")) -mtcpg:value("enable", translate("enable")) -mtcpg:value("disable", translate("disable")) -local mtcpck = s:option(ListValue, "mptcp_checksum", translate("Multipath TCP checksum")) -mtcpck:value(1, translate("enable")) -mtcpck:value(0, translate("disable")) -local mtcpck = s:option(ListValue, "mptcp_debug", translate("Multipath Debug")) -mtcpck:value(1, translate("enable")) -mtcpck:value(0, translate("disable")) -local mtcppm = s:option(ListValue, "mptcp_path_manager", translate("Multipath TCP path-manager"), translate("Default is fullmesh")) -mtcppm:value("default", translate("default")) -mtcppm:value("fullmesh", translate("fullmesh")) -mtcppm:value("ndiffports", translate("ndiffports")) -mtcppm:value("binder", translate("binder")) +o = s:option(ListValue, "multipath", translate("Multipath TCP")) +o:value("enable", translate("enable")) +o:value("disable", translate("disable")) +o = s:option(ListValue, "mptcp_checksum", translate("Multipath TCP checksum")) +o:value(1, translate("enable")) +o:value(0, translate("disable")) +o = s:option(ListValue, "mptcp_debug", translate("Multipath Debug")) +o:value(1, translate("enable")) +o:value(0, translate("disable")) +o = s:option(ListValue, "mptcp_path_manager", translate("Multipath TCP path-manager"), translate("Default is fullmesh")) +o:value("default", translate("default")) +o:value("fullmesh", "fullmesh") +o:value("ndiffports", "ndiffports") +o:value("binder", "binder") if uname.release:sub(1,4) ~= "4.14" then - mtcppm:value("netlink", translate("Netlink")) + o:value("netlink", translate("Netlink")) end -local mtcpsch = s:option(ListValue, "mptcp_scheduler", translate("Multipath TCP scheduler")) -mtcpsch:value("default", translate("default")) -mtcpsch:value("roundrobin", translate("round-robin")) -mtcpsch:value("redundant", translate("redundant")) +o = s:option(ListValue, "mptcp_scheduler", translate("Multipath TCP scheduler")) +o:value("default", translate("default")) +o:value("roundrobin", "round-robin") +o:value("redundant", "redundant") if uname.release:sub(1,4) ~= "4.14" then - mtcpsch:value("blest", translate("BLEST")) - mtcpsch:value("ecf", translate("ECF")) + o:value("blest", "BLEST") + o:value("ecf", "ECF") end -local mtcpsyn = s:option(Value, "mptcp_syn_retries", translate("Multipath TCP SYN retries")) -mtcpsyn.datatype = "uinteger" -mtcpsyn.rmempty = false -local congestion = s:option(ListValue, "congestion", translate("Congestion Control"),translate("Default is cubic")) +o = s:option(Value, "mptcp_syn_retries", translate("Multipath TCP SYN retries")) +o.datatype = "uinteger" +o.rmempty = false +o = s:option(ListValue, "congestion", translate("Congestion Control"),translate("Default is cubic")) local availablecong = sys.exec("sysctl -n net.ipv4.tcp_available_congestion_control | xargs -n1 | sort | xargs") for cong in string.gmatch(availablecong, "[^%s]+") do - congestion:value(cong, translate(cong)) + o:value(cong, translate(cong)) end -local mtcpfm_subflows = s:option(Value, "mptcp_fullmesh_num_subflows", translate("Fullmesh subflows for each pair of IP addresses")) -mtcpfm_subflows.datatype = "uinteger" -mtcpfm_subflows.rmempty = false -local mtcpfm_createonerr = s:option(ListValue, "mptcp_fullmesh_create_on_err", translate("Re-create fullmesh subflows after a timeout")) -mtcpfm_createonerr:value(1, translate("enable")) -mtcpfm_createonerr:value(0, translate("disable")) -local mtcpnd_subflows = s:option(Value, "mptcp_ndiffports_num_subflows", translate("ndiffports subflows number")) -mtcpnd_subflows.datatype = "uinteger" -mtcpnd_subflows.rmempty = false +o = s:option(Value, "mptcp_fullmesh_num_subflows", translate("Fullmesh subflows for each pair of IP addresses")) +o.datatype = "uinteger" +o.rmempty = false +o.default = 1 +--o:depends("mptcp_path_manager","fullmesh") + +o = s:option(ListValue, "mptcp_fullmesh_create_on_err", translate("Re-create fullmesh subflows after a timeout")) +o:value(1, translate("enable")) +o:value(0, translate("disable")) +--o:depends("mptcp_path_manager","fullmesh") + +o = s:option(Value, "mptcp_ndiffports_num_subflows", translate("ndiffports subflows number")) +o.datatype = "uinteger" +o.rmempty = false +o.default = 1 +--o:depends("mptcp_path_manager","ndiffports") + +o = s:option(ListValue, "mptcp_rr_cwnd_limited", translate("Fill the congestion window on all subflows for round robin")) +o:value("Y", translate("enable")) +o:value("N", translate("disable")) +o.default = "Y" +--o:depends("mptcp_scheduler","roundrobin") + +o = s:option(Value, "mptcp_rr_num_segments", translate("Consecutive segments that should be sent for round robin")) +o.datatype = "uinteger" +o.rmempty = false +o.default = 1 +--o:depends("mptcp_scheduler","roundrobin") s = m:section(TypedSection, "interface", translate("Interfaces Settings")) -mptcp = s:option(ListValue, "multipath", translate("Multipath TCP"), translate("One interface must be set as master")) -mptcp:value("on", translate("enabled")) -mptcp:value("off", translate("disabled")) -mptcp:value("master", translate("master")) -mptcp:value("backup", translate("backup")) ---mptcp:value("handover", translate("handover")) -mptcp.default = "off" +o = s:option(ListValue, "multipath", translate("Multipath TCP"), translate("One interface must be set as master")) +o:value("on", translate("enabled")) +o:value("off", translate("disabled")) +o:value("master", translate("master")) +o:value("backup", translate("backup")) +--o:value("handover", translate("handover")) +o.default = "off" return m diff --git a/mptcp/files/etc/init.d/mptcp b/mptcp/files/etc/init.d/mptcp index 8350b547a..82ba8c7cc 100755 --- a/mptcp/files/etc/init.d/mptcp +++ b/mptcp/files/etc/init.d/mptcp @@ -10,7 +10,7 @@ USE_PROCD=1 . /lib/functions/network.sh global_multipath_settings() { - local multipath mptcp_path_manager mptcp_schdeduler mptcp_debug congestion mptcp_checksum mptcp_syn_retries mptcp_fullmesh_num_subflows mptcp_fullmesh_create_on_err mptcp_ndiffports_num_subflows + local multipath mptcp_path_manager mptcp_schdeduler mptcp_debug congestion mptcp_checksum mptcp_syn_retries mptcp_fullmesh_num_subflows mptcp_fullmesh_create_on_err mptcp_ndiffports_num_subflows mptcp_rr_cwnd_limited mptcp_rr_num_segments local multipath_status=0 config_load network config_get multipath globals multipath @@ -23,6 +23,8 @@ global_multipath_settings() { config_get mptcp_fullmesh_num_subflows globals mptcp_fullmesh_num_subflows config_get mptcp_fullmesh_create_on_err globals mptcp_fullmesh_create_on_err config_get mptcp_ndiffports_num_subflows globals mptcp_ndiffports_num_subflows + config_get mptcp_rr_cwnd_limited globals mptcp_rr_cwnd_limited + config_get mptcp_rr_num_segments globals mptcp_rr_num_segments [ "$multipath" = "enable" ] && multipath_status=1 @@ -37,6 +39,8 @@ global_multipath_settings() { [ -z "$mptcp_fullmesh_num_subflows" ] || sysctl -qw /sys/module/mptcp_fullmesh/parameters/num_subflows="$mptcp_fullmesh_num_subflows" [ -z "$mptcp_fullmesh_create_on_err" ] || sysctl -qw /sys/module/mptcp_fullmesh/parameters/create_on_err="$mptcp_fullmesh_create_on_err" [ -z "$mptcp_ndiffports_num_subflows" ] || sysctl -qw /sys/module/mptcp_ndiffports/parameters/num_subflows="$mptcp_ndiffports_num_subflows" + [ -z "$mptcp_rr_cwnd_limited" ] || sysctl -qw /sys/module/mptcp_rr/parameters/cwnd_limited="$mptcp_rr_cwnd_limited" + [ -z "$mptcp_rr_num_segments" ] || sysctl -qw /sys/module/mptcp_rr/parameters/num_segments="$mptcp_rr_num_segments" } interface_macaddr_count() {