From patchwork Fri Aug 28 07:16:01 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Geliang Tang X-Patchwork-Id: 1353032 X-Patchwork-Delegate: matthieu.baerts@tessares.net Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=lists.01.org (client-ip=2001:19d0:306:5::1; helo=ml01.01.org; envelope-from=mptcp-bounces@lists.01.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20161025 header.b=Xfkw/hD7; dkim-atps=neutral Received: from ml01.01.org (ml01.01.org [IPv6:2001:19d0:306:5::1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4Bd9x40nrrz9sPB for ; Fri, 28 Aug 2020 17:20:40 +1000 (AEST) Received: from ml01.vlan13.01.org (localhost [IPv6:::1]) by ml01.01.org (Postfix) with ESMTP id 4E9D01283DC35; Fri, 28 Aug 2020 00:20:38 -0700 (PDT) Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=2607:f8b0:4864:20::1041; helo=mail-pj1-x1041.google.com; envelope-from=geliangtang@gmail.com; receiver= Received: from mail-pj1-x1041.google.com (mail-pj1-x1041.google.com [IPv6:2607:f8b0:4864:20::1041]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 436C81283DC2F for ; Fri, 28 Aug 2020 00:20:35 -0700 (PDT) Received: by mail-pj1-x1041.google.com with SMTP id ls14so126679pjb.3 for ; Fri, 28 Aug 2020 00:20:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :in-reply-to:references; bh=bstw68qvD+pb6aGnoa4ZIEIHj27Gvx2W80V0dgULpTY=; b=Xfkw/hD7Z2dwLYDAe1+ZVpP1V6Xy5UNCPQYRYcyfFSSuCSxDQInGtDTz4/3FGI6hik nnVVypnxNWHHedAm0FemszsurWWZRU08lL2B5vNoRIsbYAhte0VDg4DPCyIpKgPoRkKj fjcELON1Tr5zp6ct4NwajL5JJnYuONYZ/XyCFc93fgh8daM8mnfNQztsAibrTSRKQUao 3ar2ko4aVQ6OGoIxiRp0pfM9oLx8JgDuQ7ugbkPjivXBICqN+3ZPrDPxDyXf6Uzv9Vos VpEH5xYr+47L9C6zUrMZVtUizz/P7+h0mJ8jWeY8EpaUY4QMGRUAwPd8Vg2i1hROEnOh DMuw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:in-reply-to:references; bh=bstw68qvD+pb6aGnoa4ZIEIHj27Gvx2W80V0dgULpTY=; b=MtmH1n3YUagVDHdhuBLJ3NnJ9QSPHw8qlttYaaQmfJaYJt5gcDCAEO9c5Dbv8aGd96 C7P7E0IonmZZqef3UI6VE+et96szYbjIL9ccUCdz0HLjU0ADhNW5m1/VeuyuabryWJGu h/Ua9exviZtBbKUVCZySdItybQeflGurNL2QcC4G+A/bkebNC3HvYXLiiQZDcRHekIv4 z2+E0trtWrqkapb2hZ5/HVhODpyBqr3RHe0Y8fHNgCZZrYpjjOhjChN2OBn7fdQeMF5Q eNMFzViJBTExt9AWSvjcOM+BqWeBKp1Unanb9yRJyGI1uPSyPbJoD8BMnm5z1p5Y3ILQ vQWw== X-Gm-Message-State: AOAM532jXkJmWYf6twmm1+wuYy4h9k6vRua1IWsXJcXBJWeZjcgMdMFl KRoxuSMRiZKZpMF+3Us8/JdG2CeNSzIu4cvq X-Google-Smtp-Source: ABdhPJwElhJ5mjsQYtfuajFEbcmzHTOFIWOaRaI86Ie3iEQMJQLeFrWgGyv7/gqQrgrzyYFRlKGFaQ== X-Received: by 2002:a17:90b:4a51:: with SMTP id lb17mr70711pjb.235.1598599234426; Fri, 28 Aug 2020 00:20:34 -0700 (PDT) Received: from localhost ([43.224.245.180]) by smtp.gmail.com with ESMTPSA id cv3sm337586pjb.45.2020.08.28.00.20.33 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 28 Aug 2020 00:20:33 -0700 (PDT) From: Geliang Tang To: mptcp@lists.01.org Date: Fri, 28 Aug 2020 15:16:01 +0800 Message-Id: <4bf1636a362ac487d5bd2abae78e78b9f91294f1.1598598749.git.geliangtang@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: References: In-Reply-To: References: Message-ID-Hash: XTZ7BEXJE62CJMSWATKL4JYXN6NYJ76A X-Message-ID-Hash: XTZ7BEXJE62CJMSWATKL4JYXN6NYJ76A X-MailFrom: geliangtang@gmail.com X-Mailman-Rule-Hits: member-moderation X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address CC: Geliang Tang X-Mailman-Version: 3.1.1 Precedence: list Subject: [MPTCP] [MPTCP][PATCH v7 mptcp-next 1/4] mptcp: send out ADD_ADDR with echo flag List-Id: Discussions regarding MPTCP upstreaming Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 When the ADD_ADDR suboption has been received, we need to send out the same ADD_ADDR suboption with echo-flag=1, and no HMAC. Suggested-by: Mat Martineau Signed-off-by: Geliang Tang --- net/mptcp/options.c | 27 ++++++++++++++++----------- net/mptcp/pm.c | 18 +++++++++--------- net/mptcp/pm_netlink.c | 4 +++- net/mptcp/protocol.h | 6 ++++-- 4 files changed, 32 insertions(+), 23 deletions(-) diff --git a/net/mptcp/options.c b/net/mptcp/options.c index a52a05effac9..a41996e6c6d7 100644 --- a/net/mptcp/options.c +++ b/net/mptcp/options.c @@ -242,7 +242,7 @@ static void mptcp_parse_option(const struct sk_buff *skb, mp_opt->add_addr = 1; mp_opt->port = 0; mp_opt->addr_id = *ptr++; - pr_debug("ADD_ADDR: id=%d", mp_opt->addr_id); + pr_debug("ADD_ADDR: id=%d, echo=%d", mp_opt->addr_id, mp_opt->echo); if (mp_opt->family == MPTCP_ADDR_IPVERSION_4) { memcpy((u8 *)&mp_opt->addr.s_addr, (u8 *)ptr, 4); ptr += 4; @@ -579,10 +579,11 @@ static bool mptcp_established_options_add_addr(struct sock *sk, struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(sk); struct mptcp_sock *msk = mptcp_sk(subflow->conn); struct mptcp_addr_info saddr; + bool echo; int len; if (!mptcp_pm_should_add_signal(msk) || - !(mptcp_pm_add_addr_signal(msk, remaining, &saddr))) + !(mptcp_pm_add_addr_signal(msk, remaining, &saddr, &echo))) return false; len = mptcp_add_addr_len(saddr.family); @@ -594,22 +595,26 @@ static bool mptcp_established_options_add_addr(struct sock *sk, if (saddr.family == AF_INET) { opts->suboptions |= OPTION_MPTCP_ADD_ADDR; opts->addr = saddr.addr; - opts->ahmac = add_addr_generate_hmac(msk->local_key, - msk->remote_key, - opts->addr_id, - &opts->addr); + if (!echo) { + opts->ahmac = add_addr_generate_hmac(msk->local_key, + msk->remote_key, + opts->addr_id, + &opts->addr); + } } #if IS_ENABLED(CONFIG_MPTCP_IPV6) else if (saddr.family == AF_INET6) { opts->suboptions |= OPTION_MPTCP_ADD_ADDR6; opts->addr6 = saddr.addr6; - opts->ahmac = add_addr6_generate_hmac(msk->local_key, - msk->remote_key, - opts->addr_id, - &opts->addr6); + if (!echo) { + opts->ahmac = add_addr6_generate_hmac(msk->local_key, + msk->remote_key, + opts->addr_id, + &opts->addr6); + } } #endif - pr_debug("addr_id=%d, ahmac=%llu", opts->addr_id, opts->ahmac); + pr_debug("addr_id=%d, ahmac=%llu, echo=%d", opts->addr_id, opts->ahmac, echo); return true; } diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c index 558462d87eb3..39a76620d0a5 100644 --- a/net/mptcp/pm.c +++ b/net/mptcp/pm.c @@ -13,11 +13,13 @@ /* path manager command handlers */ int mptcp_pm_announce_addr(struct mptcp_sock *msk, - const struct mptcp_addr_info *addr) + const struct mptcp_addr_info *addr, + bool echo) { pr_debug("msk=%p, local_id=%d", msk, addr->id); msk->pm.local = *addr; + WRITE_ONCE(msk->pm.add_addr_echo, echo); WRITE_ONCE(msk->pm.add_addr_signal, true); return 0; } @@ -135,15 +137,11 @@ void mptcp_pm_add_addr_received(struct mptcp_sock *msk, pr_debug("msk=%p remote_id=%d accept=%d", msk, addr->id, READ_ONCE(pm->accept_addr)); - /* avoid acquiring the lock if there is no room for fouther addresses */ - if (!READ_ONCE(pm->accept_addr)) - return; - spin_lock_bh(&pm->lock); - /* be sure there is something to signal re-checking under PM lock */ - if (READ_ONCE(pm->accept_addr) && - mptcp_pm_schedule_work(msk, MPTCP_PM_ADD_ADDR_RECEIVED)) + if (!READ_ONCE(pm->accept_addr)) + mptcp_pm_announce_addr(msk, addr, true); + else if (mptcp_pm_schedule_work(msk, MPTCP_PM_ADD_ADDR_RECEIVED)) pm->remote = *addr; spin_unlock_bh(&pm->lock); @@ -164,7 +162,7 @@ void mptcp_pm_rm_addr_received(struct mptcp_sock *msk, u8 rm_id) /* path manager helpers */ bool mptcp_pm_add_addr_signal(struct mptcp_sock *msk, unsigned int remaining, - struct mptcp_addr_info *saddr) + struct mptcp_addr_info *saddr, bool *echo) { int ret = false; @@ -178,6 +176,7 @@ bool mptcp_pm_add_addr_signal(struct mptcp_sock *msk, unsigned int remaining, goto out_unlock; *saddr = msk->pm.local; + *echo = READ_ONCE(msk->pm.add_addr_echo); WRITE_ONCE(msk->pm.add_addr_signal, false); ret = true; @@ -226,6 +225,7 @@ void mptcp_pm_data_init(struct mptcp_sock *msk) WRITE_ONCE(msk->pm.rm_addr_signal, false); WRITE_ONCE(msk->pm.accept_addr, false); WRITE_ONCE(msk->pm.accept_subflow, false); + WRITE_ONCE(msk->pm.add_addr_echo, false); msk->pm.status = 0; spin_lock_init(&msk->pm.lock); diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c index ad7232a1d9f1..54fd9db6fb7a 100644 --- a/net/mptcp/pm_netlink.c +++ b/net/mptcp/pm_netlink.c @@ -188,7 +188,7 @@ static void mptcp_pm_create_subflow_or_signal_addr(struct mptcp_sock *msk) if (local) { msk->pm.add_addr_signaled++; - mptcp_pm_announce_addr(msk, &local->addr); + mptcp_pm_announce_addr(msk, &local->addr, false); } else { /* pick failed, avoid fourther attempts later */ msk->pm.local_addr_used = msk->pm.add_addr_signal_max; @@ -256,6 +256,8 @@ void mptcp_pm_nl_add_addr_received(struct mptcp_sock *msk) spin_unlock_bh(&msk->pm.lock); __mptcp_subflow_connect((struct sock *)msk, &local, &remote); spin_lock_bh(&msk->pm.lock); + + mptcp_pm_announce_addr(msk, &remote, true); } void mptcp_pm_nl_rm_addr_received(struct mptcp_sock *msk) diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index 4b8a5308aeed..3718d6c287fe 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -169,6 +169,7 @@ struct mptcp_pm_data { bool work_pending; bool accept_addr; bool accept_subflow; + bool add_addr_echo; u8 add_addr_signaled; u8 add_addr_accepted; u8 local_addr_used; @@ -443,7 +444,8 @@ void mptcp_pm_add_addr_received(struct mptcp_sock *msk, void mptcp_pm_rm_addr_received(struct mptcp_sock *msk, u8 rm_id); int mptcp_pm_announce_addr(struct mptcp_sock *msk, - const struct mptcp_addr_info *addr); + const struct mptcp_addr_info *addr, + bool echo); int mptcp_pm_remove_addr(struct mptcp_sock *msk, u8 local_id); int mptcp_pm_remove_subflow(struct mptcp_sock *msk, u8 remote_id); @@ -465,7 +467,7 @@ static inline unsigned int mptcp_add_addr_len(int family) } bool mptcp_pm_add_addr_signal(struct mptcp_sock *msk, unsigned int remaining, - struct mptcp_addr_info *saddr); + struct mptcp_addr_info *saddr, bool *echo); bool mptcp_pm_rm_addr_signal(struct mptcp_sock *msk, unsigned int remaining, u8 *rm_id); int mptcp_pm_get_local_id(struct mptcp_sock *msk, struct sock_common *skc); From patchwork Fri Aug 28 07:16:02 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Geliang Tang X-Patchwork-Id: 1353033 X-Patchwork-Delegate: matthieu.baerts@tessares.net Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=lists.01.org (client-ip=2001:19d0:306:5::1; helo=ml01.01.org; envelope-from=mptcp-bounces@lists.01.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20161025 header.b=VUXwzFAX; dkim-atps=neutral Received: from ml01.01.org (ml01.01.org [IPv6:2001:19d0:306:5::1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4Bd9zd4Mmqz9sPB for ; Fri, 28 Aug 2020 17:22:53 +1000 (AEST) Received: from ml01.vlan13.01.org (localhost [IPv6:::1]) by ml01.01.org (Postfix) with ESMTP id BD2DE1283DC3D; Fri, 28 Aug 2020 00:22:51 -0700 (PDT) Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=2607:f8b0:4864:20::102a; helo=mail-pj1-x102a.google.com; envelope-from=geliangtang@gmail.com; receiver= Received: from mail-pj1-x102a.google.com (mail-pj1-x102a.google.com [IPv6:2607:f8b0:4864:20::102a]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 353021283DC3B for ; Fri, 28 Aug 2020 00:22:50 -0700 (PDT) Received: by mail-pj1-x102a.google.com with SMTP id ds1so129777pjb.1 for ; Fri, 28 Aug 2020 00:22:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :in-reply-to:references; bh=fM2UTq+5eeNazzQ29QtHZ+7bDIlOYwjHlxlhJVxqbWw=; b=VUXwzFAX3bm92s5aptvTp8+3nAYfdbsg03rmfsYgPMUx+aAverpDMGtPE6n20XwL76 6pZ8gNuJMR08Ein3PJJ2OgJWXg1sQoheAF+Jb03BebPfhWPeX7ce7zWqxZh+AhNLeREF 1tsOshXYg6zo4jRNutt7+QpfU8+0opegJeKqq/x2yrO0rIUv+3EIXmLnQej9bNo3RovD EgopX4TcTVUrItM1C2HJDcjvtry/06R2r1PG2+JedzLot4EoJSyJZaeDS3lJOcO69ljZ 5mgDsZb/4WkeoF2QuuSMmFC2Ja/wW6MK9/zSk8pL329mBag5lr7m1++FTEq2B41OhBY5 LXYw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:in-reply-to:references; bh=fM2UTq+5eeNazzQ29QtHZ+7bDIlOYwjHlxlhJVxqbWw=; b=szM8k1ThYa54WbWimVpoQkVEg2s+sMtfifov9UqrHsMp58XYrUKA7YbhsE8u0Ftqpw V+csNqE0MOCi7wnVkWsh9oqsAF2yQsZtnXKNCOyRAtzRJ0+06ChOldNC8rk8AAE6cZXu 9/LbTH8pFI2cvkbRiHZ0mwG7yKTl3U5zACa/5ypUfUuq1AiE/Q/9i4jO4NMIu5mEIhbG wUcDvfbTLdlupvhmtWPLYswhlslLOn6rQFlKq0d6iFDsMwqlrpyqIy22h6MtLHFZBMG6 pHzyp4LJDu5RQ50PnyrarMrdnaGBOOiy0wUmJGyRLyKrkBEqR1dJJlYgvbG8ONnJDx+5 /Uzw== X-Gm-Message-State: AOAM5327LT6FTd1CQxLWwyS0RPUvJ2v3JWh4PHmUqStOBFVibssh6IYC 0PRz8AVvK6wGhQJgxJsCRuJh4IWYN9BFJ5VM X-Google-Smtp-Source: ABdhPJxTPyZwd4zeM7nP+GM7kH4VCbcPNLX+d3lqjhS7EhCqEaZgd3ctkUHQeCsDfrK5SG08V1twKQ== X-Received: by 2002:a17:90a:de89:: with SMTP id n9mr118379pjv.50.1598599369495; Fri, 28 Aug 2020 00:22:49 -0700 (PDT) Received: from localhost ([43.224.245.180]) by smtp.gmail.com with ESMTPSA id a7sm500564pfa.14.2020.08.28.00.22.48 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 28 Aug 2020 00:22:48 -0700 (PDT) From: Geliang Tang To: mptcp@lists.01.org Date: Fri, 28 Aug 2020 15:16:02 +0800 Message-Id: <2e88ccea2ee01e9ad85cf7b507c1efac6c458905.1598598749.git.geliangtang@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: References: In-Reply-To: <4bf1636a362ac487d5bd2abae78e78b9f91294f1.1598598749.git.geliangtang@gmail.com> References: <4bf1636a362ac487d5bd2abae78e78b9f91294f1.1598598749.git.geliangtang@gmail.com> Message-ID-Hash: PUB7INELK7XDAKBI5XAR6GFUYNK4CZWY X-Message-ID-Hash: PUB7INELK7XDAKBI5XAR6GFUYNK4CZWY X-MailFrom: geliangtang@gmail.com X-Mailman-Rule-Hits: member-moderation X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address CC: Geliang Tang X-Mailman-Version: 3.1.1 Precedence: list Subject: [MPTCP] [MPTCP][PATCH v7 mptcp-next 2/4] mptcp: add ADD_ADDR related mibs List-Id: Discussions regarding MPTCP upstreaming Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 This patch added two mibs for ADD_ADDR, MPTCP_MIB_ADDADDR for receiving of the ADD_ADDR suboption with echo-flag=0, and MPTCP_MIB_ECHOADD for receiving the ADD_ADDR suboption with echo-flag=1. Signed-off-by: Geliang Tang --- net/mptcp/mib.c | 2 ++ net/mptcp/mib.h | 2 ++ net/mptcp/options.c | 7 ++++++- 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/net/mptcp/mib.c b/net/mptcp/mib.c index 056986c7a228..a33bf719ce6f 100644 --- a/net/mptcp/mib.c +++ b/net/mptcp/mib.c @@ -27,6 +27,8 @@ static const struct snmp_mib mptcp_snmp_list[] = { SNMP_MIB_ITEM("OFOMerge", MPTCP_MIB_OFOMERGE), SNMP_MIB_ITEM("NoDSSInWindow", MPTCP_MIB_NODSSWINDOW), SNMP_MIB_ITEM("DuplicateData", MPTCP_MIB_DUPDATA), + SNMP_MIB_ITEM("AddAddr", MPTCP_MIB_ADDADDR), + SNMP_MIB_ITEM("EchoAdd", MPTCP_MIB_ECHOADD), SNMP_MIB_SENTINEL }; diff --git a/net/mptcp/mib.h b/net/mptcp/mib.h index 937a177729f1..cdeea3732ddf 100644 --- a/net/mptcp/mib.h +++ b/net/mptcp/mib.h @@ -20,6 +20,8 @@ enum linux_mptcp_mib_field { MPTCP_MIB_OFOMERGE, /* Segments merged in OoO queue */ MPTCP_MIB_NODSSWINDOW, /* Segments not in MPTCP windows */ MPTCP_MIB_DUPDATA, /* Segments discarded due to duplicate DSS */ + MPTCP_MIB_ADDADDR, /* Received ADD_ADDR with echo-flag=0 */ + MPTCP_MIB_ECHOADD, /* Received ADD_ADDR with echo-flag=1 */ __MPTCP_MIB_MAX }; diff --git a/net/mptcp/options.c b/net/mptcp/options.c index a41996e6c6d7..0d1ff621613c 100644 --- a/net/mptcp/options.c +++ b/net/mptcp/options.c @@ -11,6 +11,7 @@ #include #include #include "protocol.h" +#include "mib.h" static bool mptcp_cap_flag_sha256(u8 flags) { @@ -888,8 +889,12 @@ void mptcp_incoming_options(struct sock *sk, struct sk_buff *skb, addr.addr6 = mp_opt.addr6; } #endif - if (!mp_opt.echo) + if (!mp_opt.echo) { mptcp_pm_add_addr_received(msk, &addr); + __MPTCP_INC_STATS(sock_net(sk), MPTCP_MIB_ADDADDR); + } else { + __MPTCP_INC_STATS(sock_net(sk), MPTCP_MIB_ECHOADD); + } mp_opt.add_addr = 0; } From patchwork Fri Aug 28 07:16:03 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Geliang Tang X-Patchwork-Id: 1353034 X-Patchwork-Delegate: matthieu.baerts@tessares.net Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=lists.01.org (client-ip=2001:19d0:306:5::1; helo=ml01.01.org; envelope-from=mptcp-bounces@lists.01.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20161025 header.b=KGoVtBga; dkim-atps=neutral Received: from ml01.01.org (ml01.01.org [IPv6:2001:19d0:306:5::1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4BdB2D5tH0z9sPB for ; Fri, 28 Aug 2020 17:25:08 +1000 (AEST) Received: from ml01.vlan13.01.org (localhost [IPv6:::1]) by ml01.01.org (Postfix) with ESMTP id 29C0F1283DC54; Fri, 28 Aug 2020 00:25:07 -0700 (PDT) Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=2607:f8b0:4864:20::542; helo=mail-pg1-x542.google.com; envelope-from=geliangtang@gmail.com; receiver= Received: from mail-pg1-x542.google.com (mail-pg1-x542.google.com [IPv6:2607:f8b0:4864:20::542]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 844CE1283DC51 for ; Fri, 28 Aug 2020 00:25:05 -0700 (PDT) Received: by mail-pg1-x542.google.com with SMTP id w186so39195pgb.8 for ; Fri, 28 Aug 2020 00:25:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :in-reply-to:references; bh=t74+aj/FhEw70D9nlgXFbnKVmb1G1zopV6GFsLGn86Y=; b=KGoVtBgaVMz1F6bmuGb8yIEBCoqsIsmeIAYwTUwCHhAadZsjr+ym/qxEjlThNZ58WA vJdy5cSSTyupClyfHs/dYDLlV4dXdeExJOL49efW1bs2xM4L+DQMr8G54IlFhHyj3x5C 1Fd9wcPzDnoZzuqXcab4MBeYqmjzOarcA36A3jgimokylYI7xR94YDwNkU/27tAnleFu qVWpeG2pEmCwyIbw9QNQ266TKJGUFw214IRQ3F3NPjI/H+YHsf6q2XKmq+SBQlq2aYHE JJnIcgDkYpOY5zxYAqmZO1hf+hVEFDmCcBAuBDTP7U4SmEoNRYJsvdOgJLv1I9B3qOWZ pp0w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:in-reply-to:references; bh=t74+aj/FhEw70D9nlgXFbnKVmb1G1zopV6GFsLGn86Y=; b=hX6//rtQh5iaGJpjYJPCmrAcs+L8gykCzMWFeF0mB177F/yenStCv2MAJLRKe5ZCrZ UvjnKuYMEIkCiefzY6tavdq2/r2eIki41sqeOEZZfhQ6nNC+8spQmkMHUzgOSdVMRBcX q02IUQzxCPwEwnjCeohfP41xsm9IohS/+5hwpMKjayYxFIlGs+GDaPdA+RetB+PrwTSq bR0Japk6j0B8e1sYIhcu3KrB5++8gjRX4x2C16jm2IYukvM4fxWf3E8ryOFL7gF+IRho mAAn7x1RPhfBpBqA+mtV6F7zBJmQ5rHh9vgfcFO7ezmowvasUz7BoYGJ9nHbtMY8Imkc vrUA== X-Gm-Message-State: AOAM5309wL15hrrHu2fvuDiKiine0Lk2b0drrODDS5/wnNztKwVMirng 0Zqb1prmQBfV5SkX2kbA4bJzsiRERsp746HM X-Google-Smtp-Source: ABdhPJxzVJuUPU8v7K14wLLeSKjJfrbyfsGcDG9T838A4BMhsWPdRbjAYDlihIcYJ5FpOhmPKcny2A== X-Received: by 2002:a65:48c3:: with SMTP id o3mr278233pgs.224.1598599504685; Fri, 28 Aug 2020 00:25:04 -0700 (PDT) Received: from localhost ([43.224.245.180]) by smtp.gmail.com with ESMTPSA id w28sm475374pfj.161.2020.08.28.00.25.03 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 28 Aug 2020 00:25:04 -0700 (PDT) From: Geliang Tang To: mptcp@lists.01.org Date: Fri, 28 Aug 2020 15:16:03 +0800 Message-Id: <952897706ef0a3b573fd346e4dea862f5406a3d2.1598598749.git.geliangtang@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: References: In-Reply-To: <2e88ccea2ee01e9ad85cf7b507c1efac6c458905.1598598749.git.geliangtang@gmail.com> References: <4bf1636a362ac487d5bd2abae78e78b9f91294f1.1598598749.git.geliangtang@gmail.com> <2e88ccea2ee01e9ad85cf7b507c1efac6c458905.1598598749.git.geliangtang@gmail.com> Message-ID-Hash: VQWIXS6U6XZ2E4P3QFE4TLJCSBC7LAAQ X-Message-ID-Hash: VQWIXS6U6XZ2E4P3QFE4TLJCSBC7LAAQ X-MailFrom: geliangtang@gmail.com X-Mailman-Rule-Hits: member-moderation X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address CC: Geliang Tang X-Mailman-Version: 3.1.1 Precedence: list Subject: [MPTCP] [MPTCP][PATCH v7 mptcp-next 3/4] selftests: mptcp: add ADD_ADDR mibs check function List-Id: Discussions regarding MPTCP upstreaming Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 This patch added the ADD_ADDR related mibs counter check function chk_add_nr(). This function check both ADD_ADDR and ADD_ADDR with echo flag. The output looks like this: 07 unused signal address syn[ ok ] - synack[ ok ] - ack[ ok ] add[ ok ] - echo [ ok ] 08 signal address syn[ ok ] - synack[ ok ] - ack[ ok ] add[ ok ] - echo [ ok ] 09 subflow and signal syn[ ok ] - synack[ ok ] - ack[ ok ] add[ ok ] - echo [ ok ] 10 multiple subflows and signal syn[ ok ] - synack[ ok ] - ack[ ok ] add[ ok ] - echo [ ok ] 11 remove subflow and signal syn[ ok ] - synack[ ok ] - ack[ ok ] add[ ok ] - echo [ ok ] Signed-off-by: Geliang Tang --- .../testing/selftests/net/mptcp/mptcp_join.sh | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/tools/testing/selftests/net/mptcp/mptcp_join.sh b/tools/testing/selftests/net/mptcp/mptcp_join.sh index f39c1129ce5f..bf6172138bed 100755 --- a/tools/testing/selftests/net/mptcp/mptcp_join.sh +++ b/tools/testing/selftests/net/mptcp/mptcp_join.sh @@ -276,6 +276,43 @@ chk_join_nr() fi } +chk_add_nr() +{ + local add_nr=$1 + local echo_nr=$2 + local count + local dump_stats + + printf "%-39s %s" " " "add" + count=`ip netns exec $ns2 nstat -as | grep MPTcpExtAddAddr | awk '{print $2}'` + [ -z "$count" ] && count=0 + if [ "$count" != "$add_nr" ]; then + echo "[fail] got $count ADD_ADDR[s] expected $add_nr" + ret=1 + dump_stats=1 + else + echo -n "[ ok ]" + fi + + echo -n " - echo " + count=`ip netns exec $ns1 nstat -as | grep MPTcpExtEchoAdd | awk '{print $2}'` + [ -z "$count" ] && count=0 + if [ "$count" != "$echo_nr" ]; then + echo "[fail] got $count ADD_ADDR echo[s] expected $echo_nr" + ret=1 + dump_stats=1 + else + echo "[ ok ]" + fi + + if [ "${dump_stats}" = 1 ]; then + echo Server ns stats + ip netns exec $ns1 nstat -as | grep MPTcp + echo Client ns stats + ip netns exec $ns2 nstat -as | grep MPTcp + fi +} + sin=$(mktemp) sout=$(mktemp) cin=$(mktemp) @@ -332,6 +369,7 @@ reset ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal run_tests $ns1 $ns2 10.0.1.1 chk_join_nr "unused signal address" 0 0 0 +chk_add_nr 1 1 # accept and use add_addr reset @@ -340,6 +378,7 @@ ip netns exec $ns2 ./pm_nl_ctl limits 1 1 ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal run_tests $ns1 $ns2 10.0.1.1 chk_join_nr "signal address" 1 1 1 +chk_add_nr 1 1 # accept and use add_addr with an additional subflow # note: signal address in server ns and local addresses in client ns must @@ -352,6 +391,7 @@ ip netns exec $ns2 ./pm_nl_ctl limits 1 2 ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow run_tests $ns1 $ns2 10.0.1.1 chk_join_nr "subflow and signal" 2 2 2 +chk_add_nr 1 1 # accept and use add_addr with additional subflows reset @@ -362,6 +402,7 @@ ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow ip netns exec $ns2 ./pm_nl_ctl add 10.0.4.2 flags subflow run_tests $ns1 $ns2 10.0.1.1 chk_join_nr "multiple subflows and signal" 3 3 3 +chk_add_nr 1 1 # single subflow, syncookies reset_with_cookies @@ -396,6 +437,7 @@ ip netns exec $ns2 ./pm_nl_ctl limits 1 1 ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal run_tests $ns1 $ns2 10.0.1.1 chk_join_nr "signal address with syn cookies" 1 1 1 +chk_add_nr 1 1 # test cookie with subflow and signal reset_with_cookies @@ -405,6 +447,7 @@ ip netns exec $ns2 ./pm_nl_ctl limits 1 2 ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow run_tests $ns1 $ns2 10.0.1.1 chk_join_nr "subflow and signal w cookies" 2 2 2 +chk_add_nr 1 1 # accept and use add_addr with additional subflows reset_with_cookies @@ -415,5 +458,6 @@ ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow ip netns exec $ns2 ./pm_nl_ctl add 10.0.4.2 flags subflow run_tests $ns1 $ns2 10.0.1.1 chk_join_nr "subflows and signal w. cookies" 3 3 3 +chk_add_nr 1 1 exit $ret From patchwork Fri Aug 28 07:16:04 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Geliang Tang X-Patchwork-Id: 1353035 X-Patchwork-Delegate: matthieu.baerts@tessares.net Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=lists.01.org (client-ip=198.145.21.10; helo=ml01.01.org; envelope-from=mptcp-bounces@lists.01.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20161025 header.b=WIgF6sSs; dkim-atps=neutral Received: from ml01.01.org (ml01.01.org [198.145.21.10]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4BdB4m5G1pz9sPB for ; Fri, 28 Aug 2020 17:27:20 +1000 (AEST) Received: from ml01.vlan13.01.org (localhost [IPv6:::1]) by ml01.01.org (Postfix) with ESMTP id 5FE3412866B06; Fri, 28 Aug 2020 00:27:18 -0700 (PDT) Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=2607:f8b0:4864:20::1044; helo=mail-pj1-x1044.google.com; envelope-from=geliangtang@gmail.com; receiver= Received: from mail-pj1-x1044.google.com (mail-pj1-x1044.google.com [IPv6:2607:f8b0:4864:20::1044]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 76A2D12866B03 for ; Fri, 28 Aug 2020 00:27:16 -0700 (PDT) Received: by mail-pj1-x1044.google.com with SMTP id q1so137508pjd.1 for ; Fri, 28 Aug 2020 00:27:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :in-reply-to:references; bh=hjBm5zo8GP1GwmfPxb/U47pgxBz+1xjRhtR56A0mYTQ=; b=WIgF6sSs4ohWpSheFLgCkUsRIHslaJe9IKaF8XAtMFla8KnPRNIGUXUdcUcE3A9H82 zZfOGBoO9IbxaEh2XCg0G3/9YXvCHmym5POdaSeBuChnezPfkTWmUi6iltZvbbKNlKq+ VogRFPM2kLJK4S3LOxaGCC5tYkhcB6tRjQ5IU2bkotdgX2NX5kQbdmUPK5sg0YL4I2XV ARqovMrKus9E1IWQyDPDuMJZysBNkDUB4O1JBYNReysmCvbZblF9a3n9ag4fLtwVcbmP RL7xV8ttTvmlJxl+EMnYpf1SXx5MpfJH7LaB7pXRb0f+6twoYXr2A5l1bl1pIzbFdJ14 bySA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:in-reply-to:references; bh=hjBm5zo8GP1GwmfPxb/U47pgxBz+1xjRhtR56A0mYTQ=; b=CtFzUArC0jruY/p5JdwrY0A4wXZGs25+j8YnH5DYKz7MXrVJHXSJtMpXdhjqMFABBs nA7ufXzH9Kzu9uq9rVYAsBA7wUomKDL/H+Q4/c2SV+t4dUEgGVJTZe4VbiN0jfQaonM9 n2nSMbYKW1SGn76jpoMmmDsG39bXlExp78JE9m7Hx1R/26JuLW/LfP/Jhj7Jjvyge18/ RUPg9Vbbkq4ag/BrSDVc+KhGMtzwNqIEaRT7hDTRMQpyzVFSq7+9Q7T3uq0wT2wqN3GI rQxcduPYEzYFHEim1iXf45lyDmDQIBMFrGdBY9uonLvQGSDYMADziGcGGzV8/RA04iHT q+IQ== X-Gm-Message-State: AOAM53264hqZMVKp1nJ6BYukFtoFv+IpU/wpKs9Ec9KEcz8dAJaA7tgB k28JuqeoqBbAbP87z2Uhm6JnIm7HpSiZpeZc X-Google-Smtp-Source: ABdhPJxI/qf48UK+pQx40RvjJI51sqCzOFAG1N2NNHQ0jOC+ZHuQDydsLd42TEZXvSFbbxJQD86W3g== X-Received: by 2002:a17:902:6bc3:: with SMTP id m3mr280054plt.137.1598599635734; Fri, 28 Aug 2020 00:27:15 -0700 (PDT) Received: from localhost ([43.224.245.180]) by smtp.gmail.com with ESMTPSA id gm3sm342353pjb.31.2020.08.28.00.27.14 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 28 Aug 2020 00:27:15 -0700 (PDT) From: Geliang Tang To: mptcp@lists.01.org Date: Fri, 28 Aug 2020 15:16:04 +0800 Message-Id: X-Mailer: git-send-email 2.17.1 In-Reply-To: References: In-Reply-To: <952897706ef0a3b573fd346e4dea862f5406a3d2.1598598749.git.geliangtang@gmail.com> References: <4bf1636a362ac487d5bd2abae78e78b9f91294f1.1598598749.git.geliangtang@gmail.com> <2e88ccea2ee01e9ad85cf7b507c1efac6c458905.1598598749.git.geliangtang@gmail.com> <952897706ef0a3b573fd346e4dea862f5406a3d2.1598598749.git.geliangtang@gmail.com> Message-ID-Hash: JSRMJD4II5I2EWACJEXPGNW6QVMXTGNN X-Message-ID-Hash: JSRMJD4II5I2EWACJEXPGNW6QVMXTGNN X-MailFrom: geliangtang@gmail.com X-Mailman-Rule-Hits: member-moderation X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address CC: Geliang Tang X-Mailman-Version: 3.1.1 Precedence: list Subject: [MPTCP] [MPTCP][PATCH v7 mptcp-next 4/4] mptcp: add accept_subflow re-check List-Id: Discussions regarding MPTCP upstreaming Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 The re-check of pm->accept_subflow with pm->lock held was missing, this patch fixed it. Suggested-by: Mat Martineau Signed-off-by: Geliang Tang --- net/mptcp/pm.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c index 39a76620d0a5..be4157279e15 100644 --- a/net/mptcp/pm.c +++ b/net/mptcp/pm.c @@ -48,7 +48,7 @@ void mptcp_pm_new_connection(struct mptcp_sock *msk, int server_side) bool mptcp_pm_allow_new_subflow(struct mptcp_sock *msk) { struct mptcp_pm_data *pm = &msk->pm; - int ret; + int ret = 0; pr_debug("msk=%p subflows=%d max=%d allow=%d", msk, pm->subflows, pm->subflows_max, READ_ONCE(pm->accept_subflow)); @@ -58,9 +58,11 @@ bool mptcp_pm_allow_new_subflow(struct mptcp_sock *msk) return false; spin_lock_bh(&pm->lock); - ret = pm->subflows < pm->subflows_max; - if (ret && ++pm->subflows == pm->subflows_max) - WRITE_ONCE(pm->accept_subflow, false); + if (READ_ONCE(pm->accept_subflow)) { + ret = pm->subflows < pm->subflows_max; + if (ret && ++pm->subflows == pm->subflows_max) + WRITE_ONCE(pm->accept_subflow, false); + } spin_unlock_bh(&pm->lock); return ret;