Applied, thanks!
On Thu, Oct 19, 2017 at 12:05 AM, Eugene Rudoy <[email protected]> wrote: > iproute/iprule applets fail to compile when compiled using kernel versions < > 2.6.19 > > iproute.c: In function 'print_route': > iproute.c:85:9: error: 'RTA_TABLE' undeclared (first use in this function) > iproute.c:85:9: note: each undeclared identifier is reported only once for > each function it appears in > iproute.c: In function 'iproute_modify': > iproute.c:467:36: error: 'RTA_TABLE' undeclared (first use in this function) > > Fix it by partially #ifdef'ing the code added in > b42107f21538e39d9a344376372f8261aed589b2 > > Signed-off-by: Eugene Rudoy <[email protected]> > --- > > v2: change the order of if/else-branches to reduce the number of #ifdef's > as suggested by Walter Harms > --- > networking/libiproute/iproute.c | 14 ++++++++++---- > networking/libiproute/iprule.c | 19 ++++++++++++++----- > 2 files changed, 24 insertions(+), 9 deletions(-) > > diff --git a/networking/libiproute/iproute.c b/networking/libiproute/iproute.c > index e8b26cb2f..9b3d9c3b8 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,13 @@ IF_FEATURE_IP_RULE(ARG_table,) > NEXT_ARG(); > if (rtnl_rttable_a2n(&tid, *argv)) > invarg_1_to_2(*argv, keyword_table); > - if (tid < 256) > - req.r.rtm_table = tid; > - else { > +#if HAVE_RTA_TABLE > + if (tid > 255) { > req.r.rtm_table = RT_TABLE_UNSPEC; > addattr32(&req.n, sizeof(req), RTA_TABLE, > tid); > - } > + } else > +#endif > + req.r.rtm_table = tid; > #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..772890982 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,15 @@ static int iprule_modify(int cmd, char **argv) > NEXT_ARG(); > if (rtnl_rttable_a2n(&tid, *argv)) > invarg_1_to_2(*argv, "table ID"); > - if (tid < 256) > - req.r.rtm_table = tid; > - else { > + > +#if HAVE_RTA_TABLE > + if (tid > 255) { > req.r.rtm_table = RT_TABLE_UNSPEC; > addattr32(&req.n, sizeof(req), RTA_TABLE, > tid); > - } > + } else > +#endif > + req.r.rtm_table = tid; > + > table_ok = 1; > } else if (key == ARG_suppress_prefixlength) { > int prefix_length; > -- > 2.14.2 > _______________________________________________ > busybox mailing list > [email protected] > http://lists.busybox.net/mailman/listinfo/busybox _______________________________________________ busybox mailing list [email protected] http://lists.busybox.net/mailman/listinfo/busybox
