From patchwork Sun May 27 15:10:00 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Ahern X-Patchwork-Id: 921151 X-Patchwork-Delegate: dsahern@gmail.com Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=kernel.org Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=kernel.org header.i=@kernel.org header.b="q6etlVpc"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 40v3MF0CtWz9s0q for ; Mon, 28 May 2018 01:10:16 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1032698AbeE0PKP (ORCPT ); Sun, 27 May 2018 11:10:15 -0400 Received: from mail.kernel.org ([198.145.29.99]:43284 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S968488AbeE0PKE (ORCPT ); Sun, 27 May 2018 11:10:04 -0400 Received: from kenny.it.cumulusnetworks.com. (fw.cumulusnetworks.com [216.129.126.126]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 50FF020899; Sun, 27 May 2018 15:10:03 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1527433803; bh=TMB7z4mpiU04DiPikQVNVWFI29/SofiRpsb9cOJqubg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=q6etlVpcOeXK2ALkB5dFyBAoKO6l/j2QJzIixX5BaVUhX/9o+8vvdXTMC8J95nvKG 6/S80k3NKDEuCNco8JZI/5kgRfHs+DHrQtxSr6869f8e3X4tMUO52EHRCS41yP9l24 BpUrWmsDeBOPom7nxbLccIY6HjJbfKelNAoEx3vg= From: dsahern@kernel.org To: netdev@vger.kernel.org Cc: roopa@cumulusnetworks.com, David Ahern Subject: [PATCH iproute2-next] ipaddress: Add support for address metric Date: Sun, 27 May 2018 08:10:00 -0700 Message-Id: <20180527151000.30488-9-dsahern@kernel.org> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20180527151000.30488-1-dsahern@kernel.org> References: <20180527151000.30488-1-dsahern@kernel.org> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: David Ahern Add support for IFA_RT_PRIORITY using the same keywords as iproute for RTA_PRIORITY. Signed-off-by: David Ahern --- include/uapi/linux/if_addr.h | 1 + ip/ipaddress.c | 15 ++++++++++++++- man/man8/ip-address.8.in | 6 ++++++ 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/include/uapi/linux/if_addr.h b/include/uapi/linux/if_addr.h index c4899e22cdaa..a924606f36e5 100644 --- a/include/uapi/linux/if_addr.h +++ b/include/uapi/linux/if_addr.h @@ -33,6 +33,7 @@ enum { IFA_CACHEINFO, IFA_MULTICAST, IFA_FLAGS, + IFA_RT_PRIORITY, /* u32, priority/metric for prefix route */ __IFA_MAX, }; diff --git a/ip/ipaddress.c b/ip/ipaddress.c index 75539e057f6a..6b53b753ead9 100644 --- a/ip/ipaddress.c +++ b/ip/ipaddress.c @@ -63,7 +63,7 @@ static void usage(void) fprintf(stderr, " ip address {showdump|restore}\n"); fprintf(stderr, "IFADDR := PREFIX | ADDR peer PREFIX\n"); fprintf(stderr, " [ broadcast ADDR ] [ anycast ADDR ]\n"); - fprintf(stderr, " [ label IFNAME ] [ scope SCOPE-ID ]\n"); + fprintf(stderr, " [ label IFNAME ] [ scope SCOPE-ID ] [ metric METRIC ]\n"); fprintf(stderr, "SCOPE-ID := [ host | link | global | NUMBER ]\n"); fprintf(stderr, "FLAG-LIST := [ FLAG-LIST ] FLAG\n"); fprintf(stderr, "FLAG := [ permanent | dynamic | secondary | primary |\n"); @@ -1328,6 +1328,10 @@ int print_addrinfo(const struct sockaddr_nl *who, struct nlmsghdr *n, rta_tb[IFA_ADDRESS])); } print_int(PRINT_ANY, "prefixlen", "/%d ", ifa->ifa_prefixlen); + + if (rta_tb[IFA_RT_PRIORITY]) + print_uint(PRINT_ANY, "metric", "metric %u ", + rta_getattr_u32(rta_tb[IFA_RT_PRIORITY])); } if (brief) @@ -2119,6 +2123,15 @@ static int ipaddr_modify(int cmd, int flags, int argc, char **argv) NEXT_ARG(); l = *argv; addattr_l(&req.n, sizeof(req), IFA_LABEL, l, strlen(l)+1); + } else if (matches(*argv, "metric") == 0 || + matches(*argv, "priority") == 0 || + matches(*argv, "preference") == 0) { + __u32 metric; + + NEXT_ARG(); + if (get_u32(&metric, *argv, 0)) + invarg("\"metric\" value is invalid\n", *argv); + addattr32(&req.n, sizeof(req), IFA_RT_PRIORITY, metric); } else if (matches(*argv, "valid_lft") == 0) { if (valid_lftp) duparg("valid_lft", *argv); diff --git a/man/man8/ip-address.8.in b/man/man8/ip-address.8.in index 7ebf0bc98dcd..c3861b3725cc 100644 --- a/man/man8/ip-address.8.in +++ b/man/man8/ip-address.8.in @@ -27,6 +27,8 @@ ip-address \- protocol address management .IR IFNAME " ] [ " .B scope .IR SCOPE-ID " ] [ " +.B metric +.IR METRIC " ] [ " .B to .IR PREFIX " ] [ " FLAG-LIST " ] [ " .B label @@ -215,6 +217,10 @@ valid inside this site. .in -8 .TP +.BI metric " NUMBER" +priority of prefix route associated with address. + +.TP .BI valid_lft " LFT" the valid lifetime of this address; see section 5.5.4 of RFC 4862. When it expires, the address is removed by the kernel.