From patchwork Tue Nov 12 08:08:59 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: "Li,Rongqing via dev" X-Patchwork-Id: 1193361 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=openvswitch.org (client-ip=140.211.169.12; helo=mail.linuxfoundation.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=openvswitch.org Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=ericsson.com header.i=@ericsson.com header.b="osMsXNUT"; dkim-atps=neutral Received: from mail.linuxfoundation.org (mail.linuxfoundation.org [140.211.169.12]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 47C0wZ1kZtz9sPJ for ; Tue, 12 Nov 2019 19:17:34 +1100 (AEDT) Received: from mail.linux-foundation.org (localhost [127.0.0.1]) by mail.linuxfoundation.org (Postfix) with ESMTP id C9474BDC; Tue, 12 Nov 2019 08:17:30 +0000 (UTC) X-Original-To: ovs-dev@openvswitch.org Delivered-To: ovs-dev@mail.linuxfoundation.org Received: from smtp1.linuxfoundation.org (smtp1.linux-foundation.org [172.17.192.35]) by mail.linuxfoundation.org (Postfix) with ESMTPS id 138FCAEF for ; Tue, 12 Nov 2019 08:17:29 +0000 (UTC) X-Greylist: whitelisted by SQLgrey-1.7.6 Received: from EUR01-VE1-obe.outbound.protection.outlook.com (mail-eopbgr140048.outbound.protection.outlook.com [40.107.14.48]) by smtp1.linuxfoundation.org (Postfix) with ESMTPS id E5BD28AA for ; Tue, 12 Nov 2019 08:17:27 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=aQ3+6VqbwWSv3ZffR+nBjFDLP0kWiqOAiIc/9tclaD08gg0UVwThJhxe5GKzl2LraTGTaYuWhVKxkdycG+LMF4rtNmxQfB4cn0Hi7Nt/8I2VnClFdSnzVjgRkK5WDAGvk0NNjAUpu1mVM/GMTX9Ckfmuzi3NLJvah9w3LcnJSELQ19/Q40XcFAR6bLNe3ijItTkKLkDSZ57xyBoHf4nO7hLPAfTtJfnUP/jCgSaystbxkVIamOvVQ7bzxKM2+kyPjmsKEjoW4afTendOQBYjkQ4AlzUuD21VPqCpz8YoEeB4PxrkuVkNkrepW5e8p0w78ND7vHe1M1ucgmDFWlbC5Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=cHoD05vQq/MuHfsNrGUL0VJlQf2sDtjl+WmyUlbqmUg=; b=IsaXAMtmrVXQd17KQQWE+TA64Fr2oglWSjPiP5qpxRW7/ozqmr/8jHIozPyqqZ9E/Li12EBd1foUVZKjtYv+XxmiK5EyfcbAJfWJAJSeBqGUq2HHnGS7yR/FtOH/FizJ93aV3zig3G3aNsKDbzRNyVjG5YU+YtjUD8liRH51H35ENBbSmReQAxY2TWtkFCMCaK4hod7O5ch7xQhVKEa8d/Ah6lplcMgiuMH8fJJNys5rYtf5vjLz8KWROUsh+mcUCs7t4eVpCo3tSKxOqIV7cxtfDxgt/lO6srD8ZTxcTfk2jNMI6G9oRU9TcbaS8ylL87nfZjGbhIN36jW88chuOA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 192.176.1.74) smtp.rcpttodomain=openvswitch.org smtp.mailfrom=ericsson.com; dmarc=pass (p=reject sp=none pct=100) action=none header.from=ericsson.com; dkim=none (message not signed); arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ericsson.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=cHoD05vQq/MuHfsNrGUL0VJlQf2sDtjl+WmyUlbqmUg=; b=osMsXNUTZAhHH3f9ktxb4CdVQNwdsmQIrxFjiAQQzQAGzOPhH5hDZCqqLCeBcp4vpqjGtVyWFYyKdjkw4K+1fbUa5abhd2T03wm5Sjw8M4XO4HEQU0cOiG+noUJZo1LTkI6lgpCZMgmZvNlLBM7h+yR4iE0f5D4CNk9UyIIUUjU= Received: from HE1PR07CA0038.eurprd07.prod.outlook.com (2603:10a6:7:66::24) by DB7SPR01MB0037.eurprd07.prod.outlook.com (2603:10a6:10:34::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2451.16; Tue, 12 Nov 2019 08:17:25 +0000 Received: from HE1EUR02FT049.eop-EUR02.prod.protection.outlook.com (2a01:111:f400:7e05::201) by HE1PR07CA0038.outlook.office365.com (2603:10a6:7:66::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2451.17 via Frontend Transport; Tue, 12 Nov 2019 08:17:25 +0000 Authentication-Results: spf=pass (sender IP is 192.176.1.74) smtp.mailfrom=ericsson.com; openvswitch.org; dkim=none (message not signed) header.d=none;openvswitch.org; dmarc=pass action=none header.from=ericsson.com; Received-SPF: Pass (protection.outlook.com: domain of ericsson.com designates 192.176.1.74 as permitted sender) receiver=protection.outlook.com; client-ip=192.176.1.74; helo=oa.msg.ericsson.com; Received: from oa.msg.ericsson.com (192.176.1.74) by HE1EUR02FT049.mail.protection.outlook.com (10.152.11.8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256) id 15.20.2430.20 via Frontend Transport; Tue, 12 Nov 2019 08:17:25 +0000 Received: from ESESSMB501.ericsson.se (153.88.183.162) by ESESBMR504.ericsson.se (153.88.183.139) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1713.5; Tue, 12 Nov 2019 09:17:05 +0100 Received: from localhost.localdomain (153.88.183.153) by ESESSMB501.ericsson.se (153.88.183.162) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1713.5; Tue, 12 Nov 2019 09:17:04 +0100 To: Date: Tue, 12 Nov 2019 09:08:59 +0100 Message-ID: <1573546139-6441-1-git-send-email-nitin.katiyar@ericsson.com> X-Mailer: git-send-email 2.7.4 MIME-Version: 1.0 X-Originating-IP: [153.88.183.153] X-ClientProxiedBy: ESESSMB503.ericsson.se (153.88.183.164) To ESESSMB501.ericsson.se (153.88.183.162) X-EOPAttributedMessage: 0 X-Forefront-Antispam-Report: CIP:192.176.1.74; IPV:NLI; CTRY:SE; EFV:NLI; SFV:NSPM; SFS:(10009020)(4636009)(346002)(136003)(376002)(396003)(39860400002)(189003)(199004)(8936002)(86362001)(106002)(5024004)(14444005)(316002)(6916009)(3846002)(6116002)(26005)(356004)(486006)(4326008)(6666004)(2870700001)(107886003)(19627235002)(8676002)(2906002)(36756003)(50226002)(478600001)(7636002)(7736002)(305945005)(476003)(2616005)(126002)(956004)(5820100001)(246002)(70586007)(50466002)(5660300002)(16526019)(186003)(386003)(23676004)(47776003)(336012)(66066001)(2351001)(70206006); DIR:OUT; SFP:1101; SCL:1; SRVR:DB7SPR01MB0037; H:oa.msg.ericsson.com; FPR:; SPF:Pass; LANG:en; PTR:office365.se.ericsson.net; MX:1; A:1; X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 2f4278c2-e862-44bd-b591-08d76748bffd X-MS-TrafficTypeDiagnostic: DB7SPR01MB0037: X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:318; X-Forefront-PRVS: 021975AE46 X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: rMFg5yYGdvJX4iOAUu3MSj5bSi1bHfxe+Mt5ggL8NCWYI1ALr/JJ9rHhsIuSq25nAAkAFxKAHj7OB3sDU8CczLInUVoNOWXSuxuStpXpHkRow4bYtoxMkQlxvxrrBZQXjw/CDB8NQ6hKuBZBnTIzyoF4t0r/3KtRW5JgPjACprW/V2v97xdOKU1R3URy0/Wkb+oTn0SQVArP7VdLl8KYewW1sfD9Oa42piHPjXqpTlWklYc1hiPzXiUSBMszRWnxMiZBLe73XuTTagER0yHYpin5lk/gG3vKjey2hUKOdDpEI3UmxB56aKQcAyDduaGoxGW5ycRsz6M+ZlyCOgheqm5twndrW+qc2TnnD0yrcm9WI1GkDfn/2BmzQtAC3Sk2PlvNn58N3KEoi5PfFMWGb8pN0wD7OUJ+s/l2KB/4alJPAy5ma+5w36aqsLJYcxyT X-OriginatorOrg: ericsson.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Nov 2019 08:17:25.2215 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 2f4278c2-e862-44bd-b591-08d76748bffd X-MS-Exchange-CrossTenant-Id: 92e84ceb-fbfd-47ab-be52-080c6b87953f X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=92e84ceb-fbfd-47ab-be52-080c6b87953f; Ip=[192.176.1.74]; Helo=[oa.msg.ericsson.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB7SPR01MB0037 X-Spam-Status: No, score=-2.0 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on smtp1.linux-foundation.org Cc: Nitin katiyar Subject: [ovs-dev] [PATCH] lacp: Add support to recognize LACP Marker RX PDUs. X-BeenThere: ovs-dev@openvswitch.org X-Mailman-Version: 2.1.12 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Nitin katiyar via dev From: "Li,Rongqing via dev" Reply-To: Nitin katiyar Sender: ovs-dev-bounces@openvswitch.org Errors-To: ovs-dev-bounces@openvswitch.org OVS does not support the LACP Marker protocol. Typically, ToR switches send a LACP Marker PDU when restarting LACP negotiation following a link flap or LACP timeout. When a LACP Marker PDU is received, OVS logs the following warning and drops the packet: “lacp(pmdXXX)|WARN|bond-prv: received an unparsable LACP PDU.” As the above message is logged around the same time the link flap or LACP down events are logged, it gives a misleading impression that the reception of an unparsable LACP PDU is the reason for the LACP down event. The proposed patch does not add support for the LACP Marker protocol. It simply recognizes LACP Marker packets, drops them and logs a clear message indicating that a Marker packet was a received. A counter to track the number of such packets received is also added. Signed-off-by: Nitin katiyar --- lib/lacp.c | 49 +++++++++++++++++++++++++++++++++++++------------ 1 file changed, 37 insertions(+), 12 deletions(-) diff --git a/lib/lacp.c b/lib/lacp.c index 16c823b..705d88f 100644 --- a/lib/lacp.c +++ b/lib/lacp.c @@ -86,6 +86,12 @@ BUILD_ASSERT_DECL(LACP_PDU_LEN == sizeof(struct lacp_pdu)); /* Implementation. */ +enum pdu_subtype { + SUBTYPE_UNUSED = 0, + SUBTYPE_LACP, /* Link Aggregation Control Protocol. */ + SUBTYPE_MARKER, /* Link Aggregation Marker Protocol. */ +}; + enum slave_status { LACP_CURRENT, /* Current State. Partner up to date. */ LACP_EXPIRED, /* Expired State. Partner out of date. */ @@ -130,6 +136,7 @@ struct slave { uint32_t count_rx_pdus; /* dot3adAggPortStatsLACPDUsRx */ uint32_t count_rx_pdus_bad; /* dot3adAggPortStatsIllegalRx */ + uint32_t count_rx_pdus_marker; /* dot3adAggPortStatsMarkerPDUsRx */ uint32_t count_tx_pdus; /* dot3adAggPortStatsLACPDUsTx */ uint32_t count_link_expired; /* Num of times link expired */ uint32_t count_link_defaulted; /* Num of times link defaulted */ @@ -183,12 +190,13 @@ compose_lacp_pdu(const struct lacp_info *actor, pdu->collector_delay = htons(0); } -/* Parses 'b' which represents a packet containing a LACP PDU. This function - * returns NULL if 'b' is malformed, or does not represent a LACP PDU format +/* Parses 'p' which represents a packet containing a LACP PDU. This function + * returns NULL if 'p' is malformed, or does not represent a LACP PDU format * supported by OVS. Otherwise, it returns a pointer to the lacp_pdu contained - * within 'b'. */ + * within 'p'. It also returns the subtype of PDU.*/ + static const struct lacp_pdu * -parse_lacp_packet(const struct dp_packet *p) +parse_lacp_packet(const struct dp_packet *p, enum pdu_subtype *subtype) { const struct lacp_pdu *pdu; @@ -198,8 +206,13 @@ parse_lacp_packet(const struct dp_packet *p) if (pdu && pdu->subtype == 1 && pdu->actor_type == 1 && pdu->actor_len == 20 && pdu->partner_type == 2 && pdu->partner_len == 20) { + *subtype = SUBTYPE_LACP; return pdu; - } else { + } else if (pdu && pdu->subtype == SUBTYPE_MARKER) { + *subtype = SUBTYPE_MARKER; + return NULL; + } else{ + *subtype = SUBTYPE_UNUSED; return NULL; } } @@ -336,6 +349,7 @@ lacp_process_packet(struct lacp *lacp, const void *slave_, long long int tx_rate; struct slave *slave; bool lacp_may_enable = false; + enum pdu_subtype subtype; lacp_lock(); slave = slave_lookup(lacp, slave_); @@ -344,11 +358,20 @@ lacp_process_packet(struct lacp *lacp, const void *slave_, } slave->count_rx_pdus++; - pdu = parse_lacp_packet(packet); - if (!pdu) { - slave->count_rx_pdus_bad++; - VLOG_WARN_RL(&rl, "%s: received an unparsable LACP PDU.", lacp->name); - goto out; + pdu = parse_lacp_packet(packet, &subtype); + switch (subtype) { + case SUBTYPE_LACP: + break; + case SUBTYPE_MARKER: + slave->count_rx_pdus_marker++; + VLOG_DBG("%s: received a LACP marker PDU.", lacp->name); + goto out; + case SUBTYPE_UNUSED: + default: + slave->count_rx_pdus_bad++; + VLOG_WARN_RL(&rl, "%s: received an unparsable LACP PDU.", + lacp->name); + goto out; } /* On some NICs L1 state reporting is slow. In case LACP packets are @@ -367,7 +390,7 @@ lacp_process_packet(struct lacp *lacp, const void *slave_, slave->ntt_actor = pdu->partner; - /* Update our information about our partner if it's out of date. This may + /* Update our information about our partner if it's out of date. This may * cause priorities to change so re-calculate attached status of all * slaves. */ if (memcmp(&slave->partner, &pdu->actor, sizeof pdu->actor)) { @@ -1054,9 +1077,11 @@ lacp_print_stats(struct ds *ds, struct lacp *lacp) OVS_REQUIRES(mutex) for (i = 0; i < shash_count(&slave_shash); i++) { slave = sorted_slaves[i]->data; ds_put_format(ds, "\nslave: %s:\n", slave->name); + ds_put_format(ds, " TX PDUs: %u\n", slave->count_tx_pdus); ds_put_format(ds, " RX PDUs: %u\n", slave->count_rx_pdus); ds_put_format(ds, " RX Bad PDUs: %u\n", slave->count_rx_pdus_bad); - ds_put_format(ds, " TX PDUs: %u\n", slave->count_tx_pdus); + ds_put_format(ds, " RX Marker Request PDUs: %u\n", + slave->count_rx_pdus_marker); ds_put_format(ds, " Link Expired: %u\n", slave->count_link_expired); ds_put_format(ds, " Link Defaulted: %u\n",