From mboxrd@z Thu Jan 1 00:00:00 1970 From: Stephen Hemminger Subject: Re: [PATCH iproute2-next] iproute_lwtunnel: allow specifying 'src' for 'encap ip' / 'encap ip6' Date: Fri, 17 Aug 2018 08:00:22 -0700 Message-ID: <20180817080022.18e9992d@xeon-e3> References: <20180817073134.19569-1-shmulik.ladkani@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Cc: dsahern@gmail.com, netdev@vger.kernel.org, shmulik.ladkani@metanetworks.com, Shmulik Ladkani To: Shmulik Ladkani Return-path: Received: from mail-pg1-f195.google.com ([209.85.215.195]:32789 "EHLO mail-pg1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726544AbeHQSEH (ORCPT ); Fri, 17 Aug 2018 14:04:07 -0400 Received: by mail-pg1-f195.google.com with SMTP id r64-v6so2533820pgr.0 for ; Fri, 17 Aug 2018 08:00:25 -0700 (PDT) In-Reply-To: <20180817073134.19569-1-shmulik.ladkani@gmail.com> Sender: netdev-owner@vger.kernel.org List-ID: On Fri, 17 Aug 2018 10:31:34 +0300 Shmulik Ladkani wrote: > This allows the user to specify the LWTUNNEL_IP_SRC/LWTUNNEL_IP6_SRC > when setting an lwtunnel encapsulation route. > > Signed-off-by: Shmulik Ladkani > --- > ip/iproute_lwtunnel.c | 22 ++++++++++++++++++++-- > 1 file changed, 20 insertions(+), 2 deletions(-) > > diff --git a/ip/iproute_lwtunnel.c b/ip/iproute_lwtunnel.c > index 740da7c6..20d5545c 100644 > --- a/ip/iproute_lwtunnel.c > +++ b/ip/iproute_lwtunnel.c > @@ -671,7 +671,7 @@ static int parse_encap_mpls(struct rtattr *rta, size_t len, > static int parse_encap_ip(struct rtattr *rta, size_t len, > int *argcp, char ***argvp) > { > - int id_ok = 0, dst_ok = 0, tos_ok = 0, ttl_ok = 0; > + int id_ok = 0, dst_ok = 0, src_ok = 0, tos_ok = 0, ttl_ok = 0; > char **argv = *argvp; > int argc = *argcp; > > @@ -694,6 +694,15 @@ static int parse_encap_ip(struct rtattr *rta, size_t len, > get_addr(&addr, *argv, AF_INET); > rta_addattr_l(rta, len, LWTUNNEL_IP_DST, > &addr.data, addr.bytelen); > + } else if (strcmp(*argv, "src") == 0) { > + inet_prefix addr; > + > + NEXT_ARG(); > + if (src_ok++) > + duparg2("src", *argv); > + get_addr(&addr, *argv, AF_INET); > + rta_addattr_l(rta, len, LWTUNNEL_IP_SRC, > + &addr.data, addr.bytelen); > } else if (strcmp(*argv, "tos") == 0) { > __u32 tos; > > @@ -805,7 +814,7 @@ static int parse_encap_ila(struct rtattr *rta, size_t len, > static int parse_encap_ip6(struct rtattr *rta, size_t len, > int *argcp, char ***argvp) > { > - int id_ok = 0, dst_ok = 0, tos_ok = 0, ttl_ok = 0; > + int id_ok = 0, dst_ok = 0, src_ok = 0, tos_ok = 0, ttl_ok = 0; > char **argv = *argvp; > int argc = *argcp; > > @@ -828,6 +837,15 @@ static int parse_encap_ip6(struct rtattr *rta, size_t len, > get_addr(&addr, *argv, AF_INET6); > rta_addattr_l(rta, len, LWTUNNEL_IP6_DST, > &addr.data, addr.bytelen); > + } else if (strcmp(*argv, "src") == 0) { > + inet_prefix addr; > + > + NEXT_ARG(); > + if (src_ok++) > + duparg2("src", *argv); > + get_addr(&addr, *argv, AF_INET6); > + rta_addattr_l(rta, len, LWTUNNEL_IP6_SRC, > + &addr.data, addr.bytelen); > } else if (strcmp(*argv, "tc") == 0) { > __u32 tc; > If you accept an attribute on input you need to parse it and display it the same way in the show command.