From patchwork Wed May 6 20:41:48 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jonathan Toppins X-Patchwork-Id: 469140 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 407F714077F for ; Thu, 7 May 2015 06:42:19 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=cumulusnetworks.com header.i=@cumulusnetworks.com header.b=JRFxhH/c; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752018AbbEFUmO (ORCPT ); Wed, 6 May 2015 16:42:14 -0400 Received: from mail-pa0-f54.google.com ([209.85.220.54]:33467 "EHLO mail-pa0-f54.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752124AbbEFUmB (ORCPT ); Wed, 6 May 2015 16:42:01 -0400 Received: by pacwv17 with SMTP id wv17so19493898pac.0 for ; Wed, 06 May 2015 13:42:01 -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=O23S0ehBVHrXzUcONhOhD60vJRTJQ8jY6SWR+V3DvPw=; b=JRFxhH/cVGQCdPcklJ9QiZ4M/VTta4MclMBDxDoCxzhkIzCRSh7hC8gp+Al6E8Njak EsYzdRhRj84dR4cBM7DFrYfLkUJjMgK8E3xssbBWiFW9WyHv6qv1s1DznqW0xMzFG1yH QdzOQXAjOy7JU9T6g+/k3Q7qyHc5hqqWalpTc= 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=O23S0ehBVHrXzUcONhOhD60vJRTJQ8jY6SWR+V3DvPw=; b=C3TVt2umAmcQJ8mdUsm6o3BsvBdH7aBzWs2fpgCBHf70f7A5bxzdPA7AcrxSEfJXMn nKkwmXkiEqecHjIrH0uZ2omKNhlIAB0QrSyRO9KnRFQahwPaoVyeH18aiGlN308nowuh H4G43Oc2A5zoGGKEGoJiVXj/TIBNKFzWSOKGX14Y1lAYbo70odSTCk+u6bqwKWLAXZzz BfydnvgCVWrW1B9qHlDzwS6Uim/+9kw81gU5h9JBq85X6uALJ4zReLiaYQ3f3qsYmpEL 6GMzJna2m1s5ejsNiAKagCe1FQzQNXfK1164yurjH59hhZJL9CbiL3+W1LI5QFFGduFF pR8A== X-Gm-Message-State: ALoCoQlWTP1DQGKhHpATsAzQC9Zcel4O2m5XwG+vtD5WySwTGQTf6BhQE9QY1uM+nGwsH5xHc/e9 X-Received: by 10.70.0.143 with SMTP id 15mr947474pde.13.1430944921108; Wed, 06 May 2015 13:42:01 -0700 (PDT) Received: from monster-01.cumulusnetworks.com ([216.129.126.126]) by mx.google.com with ESMTPSA id xz3sm2698602pbc.13.2015.05.06.13.42.00 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 06 May 2015 13:42:00 -0700 (PDT) From: Jonathan Toppins To: netdev@vger.kernel.org, Jay Vosburgh , Veaceslav Falico , Andy Gospodarek , shm@cumulusnetworks.com, Stephen Hemminger Subject: [PATCH iproute2 v2 net-next] iplink_bond: add support for ad_actor and port_key options Date: Wed, 6 May 2015 13:41:48 -0700 Message-Id: <80ff1219ebfdde06cc807bc70461f4ccc4c8fb7f.1430892268.git.jtoppins@cumulusnetworks.com> 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 Acked-by: Mahesh Bandewar --- v2: * rebased 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,