From patchwork Tue Apr 21 07:53:10 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kiran KN X-Patchwork-Id: 68993 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id AA3CAA0561; Tue, 21 Apr 2020 09:53:16 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 4D63E1D8E2; Tue, 21 Apr 2020 09:53:16 +0200 (CEST) Received: from mx0b-00273201.pphosted.com (mx0b-00273201.pphosted.com [67.231.152.164]) by dpdk.org (Postfix) with ESMTP id C7ED71C220 for ; Tue, 21 Apr 2020 09:53:14 +0200 (CEST) Received: from pps.filterd (m0108161.ppops.net [127.0.0.1]) by mx0b-00273201.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id 03L7qgBo021373; Tue, 21 Apr 2020 00:53:13 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=juniper.net; h=from : to : cc : subject : date : message-id : content-type : content-id : content-transfer-encoding : mime-version; s=PPS1017; bh=sAJoVbCaidaZAOaVBGT9hWaWIM+7d9xLyhZp7cAIsbY=; b=fFJn4oI768Tu0D63Yg5Z3e8V7uo9Wwdl9WMV6SSQGJGughM95c+ESzSP+OlNeMxO0VMs ReuB3Nk17IPgAgI76QPzobwcHCqBtJhIFGdKbVE6svqwqnJNyG2MRyMBjoxJlaXp+MZY lZK3oi2x5QzQmi36EtSCqqc2bk31FcR1Jj8sc97YXcrjWGgGBt92ePzZv5VA7cWBFJYj RcmgAnnrjJul1G5sLAp64yGwS8H1zdCk3tQebalXHP0RnYe9ZZCT1Mi9NRQQozLMLnF9 2zfNfdMdwpEN+cZiVJ5yQK2naxDGJfUxthHsqn2LBD2S/45HyFZOfjdAKbScuWmrDMrl hg== Received: from nam10-bn7-obe.outbound.protection.outlook.com (mail-bn7nam10lp2109.outbound.protection.outlook.com [104.47.70.109]) by mx0b-00273201.pphosted.com with ESMTP id 30g0p0m8cw-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 21 Apr 2020 00:53:12 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=YsMOioX7Exp1qYR0JQHAQaNH95sevXtzQ1w0bBkgftSBFTb1h8SQCs+yQSTuSrPSsxqb7cH6++iIWfHSwBzT/W4Pbp+1qWcj9ZLDmlmdKIODa+GXh8pyX7zJGr/5WdXLh9ewd84kANY/pwdR8lNJJyZRh0CpMYFzb3A7iwrjFzRNbwShB+zlg+bV6yS1DU3KWgRraWw5y5AiS/2Ts/gdBPBjhATDXTml9N6cmXRmwpWYYRYquFu8ekeZ9A2bW++8KNJV5tXquWcXKlJG33kRQkBD2mlhBaW450WYLMmYf3cPtkOApOJVttipS9dxAI6YbkfU+Rl95h0g6lgZTBQ4Uw== 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=sAJoVbCaidaZAOaVBGT9hWaWIM+7d9xLyhZp7cAIsbY=; b=kt8TRY3P3H6J06mI8jeEC7zrt76BmWJPPvwM7MtbOBOq3h8k8L1xLlLmEMntKcOs0QMrYCCE6mm8TX2XA5f3OdrbPZ7SeFIxN5manv5oCx6ab1gz+jJqtJUEKskgGbTYcJ2ELKuHJ+h+2ot84aXeJa0405mQLV0Dvj+orR+I3ca2MeFEpRSHneK2h7wRDOcgJdPumPAvw4Sl4edGxic8ZiteXhWoCY4GBCJN6J/kpobWI7G43DfwqfAJwsZzNXF+YfIGrMk039iP9GeWomnk1Lw/csR3DbdyToBrHiRTYxb//tE+dGvqOam7y1x+Ji3MKjPDTLLz1RZKPTAJU15g9A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=juniper.net; dmarc=pass action=none header.from=juniper.net; dkim=pass header.d=juniper.net; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=juniper.net; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=sAJoVbCaidaZAOaVBGT9hWaWIM+7d9xLyhZp7cAIsbY=; b=aUC/Iu+TIjB7XF1tvyEoW7IeGSLwpXSJxLQwFSBuG3HzdUn2gZ78SR3sijJojMrEXfdQrzqzLbRacjeOxfv5kukms546L4+2MJzbZWnLh3ltwkHaQBVxrmdE2ndnJ7dvbA2h6RJYRVSHmEOgq8k4yBLL8tac39vJ7qgM5wpHQqQ= Received: from MWHPR0501MB3755.namprd05.prod.outlook.com (2603:10b6:301:7d::23) by MWHPR0501MB3818.namprd05.prod.outlook.com (2603:10b6:301:7f::34) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2937.11; Tue, 21 Apr 2020 07:53:10 +0000 Received: from MWHPR0501MB3755.namprd05.prod.outlook.com ([fe80::991b:9002:99f4:9675]) by MWHPR0501MB3755.namprd05.prod.outlook.com ([fe80::991b:9002:99f4:9675%6]) with mapi id 15.20.2921.027; Tue, 21 Apr 2020 07:53:10 +0000 From: Kiran KN To: "dev@dpdk.org" CC: Chas Williams , David Marchand , Thomas Monjalon Thread-Topic: [PATCH] net/bonding: Support configuration for LACP fast timers Thread-Index: AQHWF7HmGR5kfMZba0qNFTRj51QS8g== Date: Tue, 21 Apr 2020 07:53:10 +0000 Message-ID: <41992913-213C-4922-9893-35F3B516A872@juniper.net> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: msip_labels: MSIP_Label_9784d817-3396-4a4f-b60c-3ef6b345fe55_Enabled=true; MSIP_Label_9784d817-3396-4a4f-b60c-3ef6b345fe55_Name=Juniper Business Use Only; MSIP_Label_9784d817-3396-4a4f-b60c-3ef6b345fe55_Enabled=true; MSIP_Label_9784d817-3396-4a4f-b60c-3ef6b345fe55_SiteId=bea78b3c-4cdb-4130-854a-1d193232e5f4; MSIP_Label_9784d817-3396-4a4f-b60c-3ef6b345fe55_ContentBits=0; MSIP_Label_9784d817-3396-4a4f-b60c-3ef6b345fe55_Method=Standard; MSIP_Label_9784d817-3396-4a4f-b60c-3ef6b345fe55_ActionId=c7aee57d-7990-441d-8e8e-0000865f2d5e; MSIP_Label_9784d817-3396-4a4f-b60c-3ef6b345fe55_SetDate=2020-04-21T07:51:22Z; user-agent: Microsoft-MacOutlook/10.1e.0.191013 x-originating-ip: [2406:7400:73:db35:45ac:d5d3:3f82:77af] x-ms-publictraffictype: Email x-ms-office365-filtering-ht: Tenant x-ms-office365-filtering-correlation-id: b17dca68-a6ea-4c68-127f-08d7e5c9096d x-ms-traffictypediagnostic: MWHPR0501MB3818: x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:82; x-forefront-prvs: 038002787A x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:MWHPR0501MB3755.namprd05.prod.outlook.com; PTR:; CAT:NONE; SFTY:; SFS:(4636009)(396003)(136003)(376002)(346002)(39860400002)(366004)(36756003)(54906003)(64756008)(91956017)(6512007)(478600001)(86362001)(4326008)(66556008)(6486002)(76116006)(66946007)(6506007)(66476007)(66446008)(186003)(33656002)(81156014)(8676002)(6916009)(71200400001)(8936002)(5660300002)(2616005)(2906002)(316002); DIR:OUT; SFP:1102; received-spf: None (protection.outlook.com: juniper.net does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: VjROHd191zvwFHMswKr40cRIfIzJ9/5BlxoOEXpCQWgCSKD6/PD73G0dRDMPbeTQU7mHtW2wNt3fqjoGjUnjR/Wy2eIpLLSk0d6g4whuFXwxXV9Skmd8JwFeVrsKyWgeE7p9tGVm4N22i5nH9tU+B2h++YY7FOrunTJhVHmvsWvi0eILUUeFxg6DC+vxSnJZ5OEX9R0hWPIYuwZhA/IaAEoJiPomrL5Pz0IvyelrMpLtlIQKFK9kPP6SUdg/PW8MJVYntN3RbB6NwzUQljU45zKSeV1LvI3LntDW5595BxdX59m9JKdYXwhNksBUvsj/eRQsqPK6lm8JbNnvtLji6N57RA7UMU8wgwbPbEwtF+ck0cezhX+zK2taAdSiRfKolNFRTTTD8a9ie/TXFe6pvvCbKZupXJzKQ7uRH6t6xc0AaHn/Kj8TPmRzWcghYiy2 x-ms-exchange-antispam-messagedata: hkV0+e746T6AKSN0hsBbFRyphzUDnyeHUWU5xWEqY9fBM1iXbrOJ9jFpQpifhlIwopifoWSetfhjevlpKLqpKNLfhPfCE2H6jSW5iBojCg+eXM4EFwdfijSQQbrupPLXYSzCAJ2hR0SVgQk7w5rdWpuy+mbby+1BpuV3s3DB4DzV4r//fFKuRhaQosB/ra+ZRXtmM884cwWr3+z6K87F2KdIbVq79E845YIVr7dKuCDfg38dw9wJUE6CzmKfR8lECm2OYFoQGiOG68ELxXtDWWJBdRFet+qjYNVCkRmSL6/5ny2gaXPwjNkDFraKXRCcI7h+5B2I4+G0IQTBDjiTXFEQ9yKgoEkwx+NSOgsWMXn11FZaqZYA2k6qavzTTs9ocH9WuNkiQhKejbP6Rfz9QKATONlVZz/y9nLd+/53yNduMOkYeUC9Oxqr5cY51+tF5/sPUK9LHW10TNpFMydPMzIuO6DmX15J691ZCvvdpaxmEAf653f9Icbj4RoRT/vp2sLtZhit5h9j1UflnyBP/UXp2Bt50NRDvmuhEUVg8cNCOFI+PmmkX66BdYUmLtIfu+vvXiz6cXnhvnpx/uJVUYf2Z9lRCnnYYPUbf6BRxTpnAoWqbmhSJgJPPQYRmSAWM0rQ51oTf+DFO2ecrCOuM56KuEmEwX1aQc+HXIOeUtzrn1nJqb4fx901hY8ykWp9nWShvolL7H3QgGPVidNE+QeYmdynqwx8QN0+VFM4D+XXAGBM9taYnPCkBRXKxe3/myWZ+6R+ITfRZj2zZG5UW5HbuiSqYIc06SeMm/cyamN9YIuOEXCcKDWkxbews9ddJjkAgYxToSPKNl86SMb+MetrBWf9FxbvxYpqFUJXhXw= x-ms-exchange-transport-forked: True Content-ID: <777A61FF16C04A4E9453089BD293FB14@namprd05.prod.outlook.com> MIME-Version: 1.0 X-OriginatorOrg: juniper.net X-MS-Exchange-CrossTenant-Network-Message-Id: b17dca68-a6ea-4c68-127f-08d7e5c9096d X-MS-Exchange-CrossTenant-originalarrivaltime: 21 Apr 2020 07:53:10.4275 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: bea78b3c-4cdb-4130-854a-1d193232e5f4 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: 0oHv6D7sLiptCnxZCjDYcexJCu4deJVaE5sH+sZKLbZc+W8rJ+NTq1xDkaGaqxteXCHdAFsN89KIccBn13wS1g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MWHPR0501MB3818 X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.138, 18.0.676 definitions=2020-04-21_02:2020-04-20, 2020-04-21 signatures=0 X-Proofpoint-Spam-Details: rule=outbound_spam_notspam policy=outbound_spam score=0 mlxscore=0 bulkscore=0 lowpriorityscore=0 phishscore=0 mlxlogscore=999 clxscore=1015 priorityscore=1501 suspectscore=0 impostorscore=0 spamscore=0 malwarescore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2003020000 definitions=main-2004210067 Subject: [dpdk-dev] [PATCH] net/bonding: Support configuration for LACP fast timers X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Add a rte APIs to set/get the timeout for LACP signed-off-by: Kiran KN signed-off-by: Kiran KN --- drivers/net/bonding/eth_bond_private.h | 8 ++++++++ drivers/net/bonding/rte_eth_bond.h | 26 ++++++++++++++++++++++++++ drivers/net/bonding/rte_eth_bond_8023ad.c | 6 ++++++ drivers/net/bonding/rte_eth_bond_8023ad.h | 9 +++++++++ drivers/net/bonding/rte_eth_bond_api.c | 27 +++++++++++++++++++++++++++ drivers/net/bonding/rte_eth_bond_args.c | 25 +++++++++++++++++++++++++ drivers/net/bonding/rte_eth_bond_pmd.c | 30 +++++++++++++++++++++++++++++- 7 files changed, 130 insertions(+), 1 deletion(-) diff --git a/drivers/net/bonding/eth_bond_private.h b/drivers/net/bonding/eth_bond_private.h index c9b2d0fe4..8bab10ee1 100644 --- a/drivers/net/bonding/eth_bond_private.h +++ b/drivers/net/bonding/eth_bond_private.h @@ -28,11 +28,14 @@ #define PMD_BOND_LSC_POLL_PERIOD_KVARG ("lsc_poll_period_ms") #define PMD_BOND_LINK_UP_PROP_DELAY_KVARG ("up_delay") #define PMD_BOND_LINK_DOWN_PROP_DELAY_KVARG ("down_delay") +#define PMD_BOND_LACP_RATE_KVARG ("lacp_rate") #define PMD_BOND_XMIT_POLICY_LAYER2_KVARG ("l2") #define PMD_BOND_XMIT_POLICY_LAYER23_KVARG ("l23") #define PMD_BOND_XMIT_POLICY_LAYER34_KVARG ("l34") +#define PMD_BOND_LACP_RATE_FAST_KVARG ("fast") +#define PMD_BOND_LACP_RATE_SLOW_KVARG ("slow") extern int bond_logtype; #define RTE_BOND_LOG(lvl, msg, ...) \ @@ -180,6 +183,7 @@ struct bond_dev_private { void *vlan_filter_bmpmem; /* enabled vlan filter bitmap */ struct rte_bitmap *vlan_filter_bmp; + uint8_t lacp_rate; }; extern const struct eth_dev_ops default_dev_ops; @@ -306,6 +310,10 @@ int bond_ethdev_parse_time_ms_kvarg(const char *key, const char *value, void *extra_args); +int +bond_ethdev_parse_lacp_rate_kvarg(const char *key, + const char *value, void *extra_args); + void bond_tlb_disable(struct bond_dev_private *internals); diff --git a/drivers/net/bonding/rte_eth_bond.h b/drivers/net/bonding/rte_eth_bond.h index 874aa91a5..0e90ba2cf 100644 --- a/drivers/net/bonding/rte_eth_bond.h +++ b/drivers/net/bonding/rte_eth_bond.h @@ -88,6 +88,10 @@ extern "C" { #define BALANCE_XMIT_POLICY_LAYER34 (2) /**< Layer 3+4 (IP Addresses + UDP Ports) transmit load balancing */ +/* LACP Rate */ +#define LACP_RATE_SLOW (0) +#define LACP_RATE_FAST (1) + /** * Create a bonded rte_eth_dev device * @@ -343,6 +347,28 @@ rte_eth_bond_link_up_prop_delay_set(uint16_t bonded_port_id, int rte_eth_bond_link_up_prop_delay_get(uint16_t bonded_port_id); +/** + * Set the lacp rate for the slave interface + * + * @param bonded_port_id Port ID of bonded device. + * @param lacp_rate 0 - slow, 1 - fast + * + * @return + * 0 on success, negative value otherwise. + */ +int +rte_eth_bond_lacp_rate_set(uint16_t bonded_port_id, uint8_t lacp_rate); + +/** + * Get the lacp rate for the slave device + * + * @param bonded_port_id Port ID of bonded device. + * + * @return + * lacp rate on success, negative value otherwise. + */ +int +rte_eth_bond_lacp_rate_get(uint16_t bonded_port_id); #ifdef __cplusplus } diff --git a/drivers/net/bonding/rte_eth_bond_8023ad.c b/drivers/net/bonding/rte_eth_bond_8023ad.c index b77a37ddb..e3159004a 100644 --- a/drivers/net/bonding/rte_eth_bond_8023ad.c +++ b/drivers/net/bonding/rte_eth_bond_8023ad.c @@ -491,6 +491,12 @@ mux_machine(struct bond_dev_private *internals, uint16_t slave_id) MODE4_DEBUG("Out of sync -> ATTACHED\n"); } + if (internals->lacp_rate) + ACTOR_STATE_SET(port, LACP_SHORT_TIMEOUT); + else + ACTOR_STATE_CLR(port, LACP_SHORT_TIMEOUT); + + if (!ACTOR_STATE(port, SYNCHRONIZATION)) { /* attach mux to aggregator */ RTE_ASSERT((port->actor_state & (STATE_COLLECTING | diff --git a/drivers/net/bonding/rte_eth_bond_8023ad.h b/drivers/net/bonding/rte_eth_bond_8023ad.h index 62265f449..5623e1424 100644 --- a/drivers/net/bonding/rte_eth_bond_8023ad.h +++ b/drivers/net/bonding/rte_eth_bond_8023ad.h @@ -331,4 +331,13 @@ rte_eth_bond_8023ad_agg_selection_get(uint16_t port_id); int rte_eth_bond_8023ad_agg_selection_set(uint16_t port_id, enum rte_bond_8023ad_agg_selection agg_selection); + +/** + * Set slave to use fast lacp timeout + * @param port_id Bonding device id + * @return + * 0 on success, negative value otherwise + */ +int +rte_eth_bond_8023ad_ext_set_fast(uint16_t port_id, uint16_t slave_id); #endif /* RTE_ETH_BOND_8023AD_H_ */ diff --git a/drivers/net/bonding/rte_eth_bond_api.c b/drivers/net/bonding/rte_eth_bond_api.c index f38eb3b47..9157a7295 100644 --- a/drivers/net/bonding/rte_eth_bond_api.c +++ b/drivers/net/bonding/rte_eth_bond_api.c @@ -1050,3 +1050,30 @@ rte_eth_bond_link_up_prop_delay_get(uint16_t bonded_port_id) return internals->link_up_delay_ms; } + +int +rte_eth_bond_lacp_rate_set(uint16_t bonded_port_id, uint8_t lacp_rate) +{ + struct bond_dev_private *internals; + + if (valid_bonded_port_id(bonded_port_id) != 0) + return -1; + + internals = rte_eth_devices[bonded_port_id].data->dev_private; + internals->lacp_rate = lacp_rate; + + return 0; +} + +int +rte_eth_bond_lacp_rate_get(uint16_t bonded_port_id) +{ + struct bond_dev_private *internals; + + if (valid_bonded_port_id(bonded_port_id) != 0) + return -1; + + internals = rte_eth_devices[bonded_port_id].data->dev_private; + + return internals->lacp_rate; +} diff --git a/drivers/net/bonding/rte_eth_bond_args.c b/drivers/net/bonding/rte_eth_bond_args.c index abdf55261..732685198 100644 --- a/drivers/net/bonding/rte_eth_bond_args.c +++ b/drivers/net/bonding/rte_eth_bond_args.c @@ -18,6 +18,7 @@ const char *pmd_bond_init_valid_arguments[] = { PMD_BOND_SOCKET_ID_KVARG, PMD_BOND_MAC_ADDR_KVARG, PMD_BOND_AGG_MODE_KVARG, + PMD_BOND_LACP_RATE_KVARG, "driver", NULL }; @@ -299,3 +300,27 @@ bond_ethdev_parse_time_ms_kvarg(const char *key __rte_unused, return 0; } + +int +bond_ethdev_parse_lacp_rate_kvarg(const char *key __rte_unused, + const char *value, void *extra_args) +{ + uint8_t lacp_rate; + + if (value == NULL || extra_args == NULL) + return -1; + + if (strcmp(PMD_BOND_LACP_RATE_FAST_KVARG, value) == 0) + lacp_rate = LACP_RATE_FAST; + else if (strcmp("1", value) == 0) + lacp_rate = LACP_RATE_FAST; + else if (strcmp(PMD_BOND_LACP_RATE_SLOW_KVARG, value) == 0) + lacp_rate = LACP_RATE_SLOW; + else if (strcmp("0", value) == 0) + lacp_rate = LACP_RATE_SLOW; + else + return -1; + + *(uint8_t *)extra_args = lacp_rate; + return 0; +} diff --git a/drivers/net/bonding/rte_eth_bond_pmd.c b/drivers/net/bonding/rte_eth_bond_pmd.c index 707a0f3cd..e1f105233 100644 --- a/drivers/net/bonding/rte_eth_bond_pmd.c +++ b/drivers/net/bonding/rte_eth_bond_pmd.c @@ -3727,6 +3727,33 @@ bond_ethdev_configure(struct rte_eth_dev *dev) return -1; } + /* Parse/set lacp rate */ + arg_count = rte_kvargs_count(kvlist, PMD_BOND_LACP_RATE_KVARG); + if (arg_count == 1) { + uint8_t lacp_rate; + + if (rte_kvargs_process(kvlist, PMD_BOND_LACP_RATE_KVARG, + &bond_ethdev_parse_lacp_rate_kvarg, &lacp_rate) != + 0) { + RTE_LOG(INFO, EAL, + "Invalid lacp rate specified for bonded device %s\n", + name); + return -1; + } + + /* Set balance mode transmit policy*/ + if (rte_eth_bond_lacp_rate_set(port_id, lacp_rate) + != 0) { + RTE_LOG(ERR, EAL, + "Failed to set lacp rate on bonded device %s\n", name); + return -1; + } + } else if (arg_count > 1) { + RTE_LOG(INFO, EAL, + "Lacp rate can be specified only once for bonded device %s\n", name); + return -1; + } + return 0; } @@ -3748,7 +3775,8 @@ RTE_PMD_REGISTER_PARAM_STRING(net_bonding, "mac= " "lsc_poll_period_ms= " "up_delay= " - "down_delay="); + "down_delay= " + "lacp_rate=[fast | slow]"); int bond_logtype;