[prev in list] [next in list] [prev in thread] [next in thread] 

List:       busybox
Subject:    Re: [PATCH 2/2] iproute/iprule: restore support for kernel versions < 2.6.19
From:       walter harms <wharms () bfs ! de>
Date:       2017-10-18 7:20:12
Message-ID: 59E700AC.3070503 () bfs ! de
[Download RAW message or body]



Am 17.10.2017 23:33, schrieb Eugene Rudoy:
> broken in b42107f21538e39d9a344376372f8261aed589b2
> 
> Signed-off-by: Eugene Rudoy <gene.devel@gmail.com>
> ---
>  networking/libiproute/iproute.c |  9 +++++++++
>  networking/libiproute/iprule.c  | 12 +++++++++++-
>  2 files changed, 20 insertions(+), 1 deletion(-)
> 
> diff --git a/networking/libiproute/iproute.c b/networking/libiproute/iproute.c
> index e8b26cb2f..f52398392 100644
> --- a/networking/libiproute/iproute.c
> +++ b/networking/libiproute/iproute.c
> @@ -14,6 +14,9 @@
>  #include "rt_names.h"
>  #include "utils.h"
>  
> +#include <linux/version.h>
> +#define HAVE_RTA_TABLE (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,19))
> +
>  #ifndef RTAX_RTTVAR
>  #define RTAX_RTTVAR RTAX_HOPS
>  #endif
> @@ -81,9 +84,11 @@ static int FAST_FUNC print_route(const struct sockaddr_nl *who UNUSED_PARAM,
>  	memset(tb, 0, sizeof(tb));
>  	parse_rtattr(tb, RTA_MAX, RTM_RTA(r), len);
>  
> +#if HAVE_RTA_TABLE
>  	if (tb[RTA_TABLE])
>  		tid = *(uint32_t *)RTA_DATA(tb[RTA_TABLE]);
>  	else
> +#endif
>  		tid = r->rtm_table;
>  
>  	if (r->rtm_family == AF_INET6)
> @@ -459,12 +464,16 @@ IF_FEATURE_IP_RULE(ARG_table,)
>  			NEXT_ARG();
>  			if (rtnl_rttable_a2n(&tid, *argv))
>  				invarg_1_to_2(*argv, keyword_table);
> +#if HAVE_RTA_TABLE
>  			if (tid < 256)
> +#endif
>  				req.r.rtm_table = tid;
> +#if HAVE_RTA_TABLE
>  			else {
>  				req.r.rtm_table = RT_TABLE_UNSPEC;
>  				addattr32(&req.n, sizeof(req), RTA_TABLE, tid);
>  			}
> +#endif

in this special case i would suggest:

#if HAVE_RTA_TABLE
 			if (tid > 255) {
			req.r.rtm_table = RT_TABLE_UNSPEC;
  				addattr32(&req.n, sizeof(req), RTA_TABLE, tid);
  				req.r.rtm_table = tid;
  			} else
#endif
			     req.r.rtm_table = tid;


(reduces the #if forrest)



>  #endif
>  		} else if (arg == ARG_dev || arg == ARG_oif) {
>  			NEXT_ARG();
> diff --git a/networking/libiproute/iprule.c b/networking/libiproute/iprule.c
> index 9938b4793..dabc476c1 100644
> --- a/networking/libiproute/iprule.c
> +++ b/networking/libiproute/iprule.c
> @@ -24,6 +24,9 @@
>  #include "rt_names.h"
>  #include "utils.h"
>  
> +#include <linux/version.h>
> +#define HAVE_RTA_TABLE (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,19))
> +
>  /* If you add stuff here, update iprule_full_usage */
>  static const char keywords[] ALIGN1 =
>  	"from\0""to\0""preference\0""order\0""priority\0"
> @@ -120,9 +123,12 @@ static int FAST_FUNC print_rule(const struct sockaddr_nl *who UNUSED_PARAM,
>  		printf("iif %s ", (char*)RTA_DATA(tb[RTA_IIF]));
>  	}
>  
> +#if HAVE_RTA_TABLE
>  	if (tb[RTA_TABLE])
>  		printf("lookup %s ", rtnl_rttable_n2a(*(uint32_t*)RTA_DATA(tb[RTA_TABLE])));
> -	else if (r->rtm_table)
> +	else
> +#endif
> +	if (r->rtm_table)
>  		printf("lookup %s ", rtnl_rttable_n2a(r->rtm_table));
>  
>  	if (tb[FRA_SUPPRESS_PREFIXLEN]) {
> @@ -266,12 +272,16 @@ static int iprule_modify(int cmd, char **argv)
>  			NEXT_ARG();
>  			if (rtnl_rttable_a2n(&tid, *argv))
>  				invarg_1_to_2(*argv, "table ID");
> +#if HAVE_RTA_TABLE
>  			if (tid < 256)
> +#endif
>  				req.r.rtm_table = tid;
> +#if HAVE_RTA_TABLE
>  			else {
>  				req.r.rtm_table = RT_TABLE_UNSPEC;
>  				addattr32(&req.n, sizeof(req), RTA_TABLE, tid);
>  			}
> +#endif


see above, can this become a function ?

re,
 wh

>  			table_ok = 1;
>  		} else if (key == ARG_suppress_prefixlength) {
>  			int prefix_length;
_______________________________________________
busybox mailing list
busybox@busybox.net
http://lists.busybox.net/mailman/listinfo/busybox
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic