From patchwork Fri May 1 17:24:38 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jonathan Toppins X-Patchwork-Id: 467035 X-Patchwork-Delegate: shemminger@vyatta.com Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id E6F8E1402B0 for ; Sat, 2 May 2015 03:25:19 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=fail reason="verification failed; unprotected key" header.d=cumulusnetworks.com header.i=@cumulusnetworks.com header.b=ElrpMPep; dkim-adsp=none (unprotected policy); dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751310AbbEARZH (ORCPT ); Fri, 1 May 2015 13:25:07 -0400 Received: from mail-pa0-f44.google.com ([209.85.220.44]:36345 "EHLO mail-pa0-f44.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751307AbbEARY7 (ORCPT ); Fri, 1 May 2015 13:24:59 -0400 Received: by pabsx10 with SMTP id sx10so96174563pab.3 for ; Fri, 01 May 2015 10:24:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cumulusnetworks.com; s=google; h=from:to:subject:date:message-id:in-reply-to:references; bh=2sw015fYNaDBqNRCtW+F6m4OOkCmC5lv9UTV5jjty64=; b=ElrpMPepETnZo5P48t/5O5HxEjt8sybuGUnRkiCHlKHJGStpY9qCNOu/KBJQx5nlQV ZMIOAW5agHgpq+K6OEVhBRBZoxJjbTKvs0Ke6xZPbGud8c5q6UEPX8nF5f75XTFiKh4G y/O8ciuG9IInptzZireHSaiaoW8w/mU0I78mQ= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references; bh=2sw015fYNaDBqNRCtW+F6m4OOkCmC5lv9UTV5jjty64=; b=B4rsyUoaEm0nK5Oyt2T47osC38c0V+BwHjaVquR2PhkTRIxLAUS4GAIfzo/trejjGm +NuRUziGxlja+GCcvCFCp1bCRhFTldvz8hQWw3g5e+S1+ByYyRXFWJUNA+QpII8BMOF/ jHfwisQBD8/ujiwzIHG37FXMbMRo92iDGdQShg8StSFhuJqkQMWIupxP4+cM0aEinkBS 6ErtHyc40i3Pol9+TSBQgR2gSChM1SQAcmv5Trk5Ujy9AcarQxEf04GDoy9MAmlefY0X uubd9EL3ojrRc8CAffsPetY5XIDnt125EumelH57M9Ld7kPSO/rPPjzu4Tz9kPXutS2q IkHw== X-Gm-Message-State: ALoCoQmOHKLQCNCrTdKYbgfE0JnYVz1XZShTP55axLobWez3J5tA81AZh4OKoC/LWWKoC8NNP+Lq X-Received: by 10.68.68.232 with SMTP id z8mr19774695pbt.104.1430501099148; Fri, 01 May 2015 10:24:59 -0700 (PDT) Received: from monster-01.cumulusnetworks.com ([216.129.126.126]) by mx.google.com with ESMTPSA id pf10sm5357080pbb.93.2015.05.01.10.24.58 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 01 May 2015 10:24:58 -0700 (PDT) From: Jonathan Toppins To: netdev@vger.kernel.org, Jay Vosburgh , Veaceslav Falico , Andy Gospodarek , Stephen Hemminger Subject: [PATCH iproute2 v1 net-next] iplink_bond: add support for ad_actor and port_key options Date: Fri, 1 May 2015 10:24:38 -0700 Message-Id: X-Mailer: git-send-email 1.7.10.4 In-Reply-To: References: Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org This adds support for setting and displaying the following bonding options: * ad_user_port_key * ad_actor_sys_prio * ad_actor_system Signed-off-by: Jonathan Toppins --- ip/iplink_bond.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/ip/iplink_bond.c b/ip/iplink_bond.c index a573f92..989e642 100644 --- a/ip/iplink_bond.c +++ b/ip/iplink_bond.c @@ -135,6 +135,9 @@ static void print_explain(FILE *f) " [ packets_per_slave PACKETS_PER_SLAVE ]\n" " [ lacp_rate LACP_RATE ]\n" " [ ad_select AD_SELECT ]\n" + " [ ad_user_port_key PORTKEY ]\n" + " [ ad_actor_sys_prio SYSPRIO ]\n" + " [ ad_actor_system LLADDR ]\n" "\n" "BONDMODE := balance-rr|active-backup|balance-xor|broadcast|802.3ad|balance-tlb|balance-alb\n" "ARP_VALIDATE := none|active|backup|all\n" @@ -158,6 +161,7 @@ static int bond_parse_opt(struct link_util *lu, int argc, char **argv, __u8 mode, use_carrier, primary_reselect, fail_over_mac; __u8 xmit_hash_policy, num_peer_notif, all_slaves_active; __u8 lacp_rate, ad_select; + __u16 ad_user_port_key, ad_actor_sys_prio; __u32 miimon, updelay, downdelay, arp_interval, arp_validate; __u32 arp_all_targets, resend_igmp, min_links, lp_interval; __u32 packets_per_slave; @@ -344,6 +348,31 @@ static int bond_parse_opt(struct link_util *lu, int argc, char **argv, } ad_select = get_index(ad_select_tbl, *argv); addattr8(n, 1024, IFLA_BOND_AD_SELECT, ad_select); + } else if (matches(*argv, "ad_user_port_key") == 0) { + NEXT_ARG(); + if (get_u16(&ad_user_port_key, *argv, 0)) { + invarg("invalid ad_user_port_key", *argv); + return -1; + } + addattr16(n, 1024, IFLA_BOND_AD_USER_PORT_KEY, + ad_user_port_key); + } else if (matches(*argv, "ad_actor_sys_prio") == 0) { + NEXT_ARG(); + if (get_u16(&ad_actor_sys_prio, *argv, 0)) { + invarg("invalid ad_actor_sys_prio", *argv); + return -1; + } + addattr16(n, 1024, IFLA_BOND_AD_ACTOR_SYS_PRIO, + ad_actor_sys_prio); + } else if (matches(*argv, "ad_actor_system") == 0) { + int len; + char abuf[32]; + + NEXT_ARG(); + len = ll_addr_a2n(abuf, sizeof(abuf), *argv); + if (len < 0) + return -1; + addattr_l(n, 1024, IFLA_BOND_AD_ACTOR_SYSTEM, abuf, len); } else if (matches(*argv, "help") == 0) { explain(); return -1; @@ -534,6 +563,25 @@ static void bond_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[]) ll_addr_n2a(p, ETH_ALEN, 0, b, sizeof(b))); } } + + if (tb[IFLA_BOND_AD_ACTOR_SYS_PRIO]) { + fprintf(f, "ad_actor_sys_prio %u ", + rta_getattr_u16(tb[IFLA_BOND_AD_ACTOR_SYS_PRIO])); + } + + if (tb[IFLA_BOND_AD_USER_PORT_KEY]) { + fprintf(f, "ad_user_port_key %u ", + rta_getattr_u16(tb[IFLA_BOND_AD_USER_PORT_KEY])); + } + + if (tb[IFLA_BOND_AD_ACTOR_SYSTEM]) { + /* We assume the l2 address is an Ethernet MAC address */ + SPRINT_BUF(b1); + fprintf(f, "ad_actor_system %s ", + ll_addr_n2a(RTA_DATA(tb[IFLA_BOND_AD_ACTOR_SYSTEM]), + RTA_PAYLOAD(tb[IFLA_BOND_AD_ACTOR_SYSTEM]), + 1 /*ARPHDR_ETHER*/, b1, sizeof(b1))); + } } static void bond_print_help(struct link_util *lu, int argc, char **argv,