Message ID | 025c3e92286c1c425b6ce65b4feac7e416947e54.1620275759.git.geliangtang@gmail.com |
---|---|
State | Superseded, archived |
Delegated to: | Mat Martineau |
Headers | show |
Series | add MP_CAPABLE 'C' flag | expand |
On Thu, 6 May 2021, Geliang Tang wrote: > This patch added a new sysctl, named allow_join_initial_addr_port, to > control whether allow peers to send join requests to the IP address and > port number used by the initial subflow. > > Suggested-by: Florian Westphal <fw@strlen.de> > Signed-off-by: Geliang Tang <geliangtang@gmail.com> > --- > Documentation/networking/mptcp-sysctl.rst | 13 +++++++++++++ > net/mptcp/ctrl.c | 16 ++++++++++++++++ > net/mptcp/protocol.h | 1 + > 3 files changed, 30 insertions(+) > > diff --git a/Documentation/networking/mptcp-sysctl.rst b/Documentation/networking/mptcp-sysctl.rst > index ee06fd782465..76d939e688b8 100644 > --- a/Documentation/networking/mptcp-sysctl.rst > +++ b/Documentation/networking/mptcp-sysctl.rst > @@ -32,3 +32,16 @@ checksum_enabled - BOOLEAN > per-namespace sysctl. > > Default: 0 > + > +allow_join_initial_addr_port - BOOLEAN > + Allow peers to send join requests to the IP address and port number used > + by the initial subflow if the value is 1. This controls a flag that is > + sent to the peer at connection time, and whether such join requests are > + accepted or denied. > + > + Joins to addresses advertised with ADD_ADDR are not affected by this > + value. > + > + This is a per-namespace sysctl. > + > + Default: 1 > diff --git a/net/mptcp/ctrl.c b/net/mptcp/ctrl.c > index b5ff77dae503..786055b0c6eb 100644 > --- a/net/mptcp/ctrl.c > +++ b/net/mptcp/ctrl.c > @@ -24,6 +24,7 @@ struct mptcp_pernet { > u8 mptcp_enabled; > unsigned int add_addr_timeout; > u8 checksum_enabled; > + u8 allow_join_initial_addr_port; > }; > > static struct mptcp_pernet *mptcp_get_pernet(struct net *net) > @@ -46,6 +47,7 @@ static void mptcp_pernet_set_defaults(struct mptcp_pernet *pernet) > pernet->mptcp_enabled = 1; > pernet->add_addr_timeout = TCP_RTO_MAX; > pernet->checksum_enabled = 0; > + pernet->allow_join_initial_addr_port = 1; > } > > #ifdef CONFIG_SYSCTL > @@ -54,6 +56,11 @@ int mptcp_is_checksum_enabled(struct net *net) > return mptcp_get_pernet(net)->checksum_enabled; > } > > +int mptcp_allow_join_id0(struct net *net) > +{ > + return mptcp_get_pernet(net)->allow_join_initial_addr_port; > +} > + This function needs an alternate version after the #else (suggest that it always returns 1), so the build doesn't break in the !CONFIG_SYSCTL case. -Mat > static struct ctl_table mptcp_sysctl_table[] = { > { > .procname = "enabled", > @@ -80,6 +87,14 @@ static struct ctl_table mptcp_sysctl_table[] = { > .extra1 = SYSCTL_ZERO, > .extra2 = SYSCTL_ONE > }, > + { > + .procname = "allow_join_initial_addr_port", > + .maxlen = sizeof(u8), > + .mode = 0644, > + .proc_handler = proc_dou8vec_minmax, > + .extra1 = SYSCTL_ZERO, > + .extra2 = SYSCTL_ONE > + }, > {} > }; > > @@ -98,6 +113,7 @@ static int mptcp_pernet_new_table(struct net *net, struct mptcp_pernet *pernet) > table[0].data = &pernet->mptcp_enabled; > table[1].data = &pernet->add_addr_timeout; > table[2].data = &pernet->checksum_enabled; > + table[3].data = &pernet->allow_join_initial_addr_port; > > hdr = register_net_sysctl(net, MPTCP_SYSCTL_PATH, table); > if (!hdr) > diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h > index 98c735f237b4..17ce5639665a 100644 > --- a/net/mptcp/protocol.h > +++ b/net/mptcp/protocol.h > @@ -542,6 +542,7 @@ static inline void mptcp_subflow_delegated_done(struct mptcp_subflow_context *su > int mptcp_is_enabled(struct net *net); > unsigned int mptcp_get_add_addr_timeout(struct net *net); > int mptcp_is_checksum_enabled(struct net *net); > +int mptcp_allow_join_id0(struct net *net); > void mptcp_subflow_fully_established(struct mptcp_subflow_context *subflow, > struct mptcp_options_received *mp_opt); > bool mptcp_subflow_data_available(struct sock *sk); > -- > 2.31.1 -- Mat Martineau Intel
diff --git a/Documentation/networking/mptcp-sysctl.rst b/Documentation/networking/mptcp-sysctl.rst index ee06fd782465..76d939e688b8 100644 --- a/Documentation/networking/mptcp-sysctl.rst +++ b/Documentation/networking/mptcp-sysctl.rst @@ -32,3 +32,16 @@ checksum_enabled - BOOLEAN per-namespace sysctl. Default: 0 + +allow_join_initial_addr_port - BOOLEAN + Allow peers to send join requests to the IP address and port number used + by the initial subflow if the value is 1. This controls a flag that is + sent to the peer at connection time, and whether such join requests are + accepted or denied. + + Joins to addresses advertised with ADD_ADDR are not affected by this + value. + + This is a per-namespace sysctl. + + Default: 1 diff --git a/net/mptcp/ctrl.c b/net/mptcp/ctrl.c index b5ff77dae503..786055b0c6eb 100644 --- a/net/mptcp/ctrl.c +++ b/net/mptcp/ctrl.c @@ -24,6 +24,7 @@ struct mptcp_pernet { u8 mptcp_enabled; unsigned int add_addr_timeout; u8 checksum_enabled; + u8 allow_join_initial_addr_port; }; static struct mptcp_pernet *mptcp_get_pernet(struct net *net) @@ -46,6 +47,7 @@ static void mptcp_pernet_set_defaults(struct mptcp_pernet *pernet) pernet->mptcp_enabled = 1; pernet->add_addr_timeout = TCP_RTO_MAX; pernet->checksum_enabled = 0; + pernet->allow_join_initial_addr_port = 1; } #ifdef CONFIG_SYSCTL @@ -54,6 +56,11 @@ int mptcp_is_checksum_enabled(struct net *net) return mptcp_get_pernet(net)->checksum_enabled; } +int mptcp_allow_join_id0(struct net *net) +{ + return mptcp_get_pernet(net)->allow_join_initial_addr_port; +} + static struct ctl_table mptcp_sysctl_table[] = { { .procname = "enabled", @@ -80,6 +87,14 @@ static struct ctl_table mptcp_sysctl_table[] = { .extra1 = SYSCTL_ZERO, .extra2 = SYSCTL_ONE }, + { + .procname = "allow_join_initial_addr_port", + .maxlen = sizeof(u8), + .mode = 0644, + .proc_handler = proc_dou8vec_minmax, + .extra1 = SYSCTL_ZERO, + .extra2 = SYSCTL_ONE + }, {} }; @@ -98,6 +113,7 @@ static int mptcp_pernet_new_table(struct net *net, struct mptcp_pernet *pernet) table[0].data = &pernet->mptcp_enabled; table[1].data = &pernet->add_addr_timeout; table[2].data = &pernet->checksum_enabled; + table[3].data = &pernet->allow_join_initial_addr_port; hdr = register_net_sysctl(net, MPTCP_SYSCTL_PATH, table); if (!hdr) diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index 98c735f237b4..17ce5639665a 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -542,6 +542,7 @@ static inline void mptcp_subflow_delegated_done(struct mptcp_subflow_context *su int mptcp_is_enabled(struct net *net); unsigned int mptcp_get_add_addr_timeout(struct net *net); int mptcp_is_checksum_enabled(struct net *net); +int mptcp_allow_join_id0(struct net *net); void mptcp_subflow_fully_established(struct mptcp_subflow_context *subflow, struct mptcp_options_received *mp_opt); bool mptcp_subflow_data_available(struct sock *sk);
This patch added a new sysctl, named allow_join_initial_addr_port, to control whether allow peers to send join requests to the IP address and port number used by the initial subflow. Suggested-by: Florian Westphal <fw@strlen.de> Signed-off-by: Geliang Tang <geliangtang@gmail.com> --- Documentation/networking/mptcp-sysctl.rst | 13 +++++++++++++ net/mptcp/ctrl.c | 16 ++++++++++++++++ net/mptcp/protocol.h | 1 + 3 files changed, 30 insertions(+)