[PATCH 2/2] iproute/iprule: restore support for kernel versions < 2.6.19
Eugene Rudoy
gene.devel at gmail.com
Tue Oct 17 21:33:48 UTC 2017
broken in b42107f21538e39d9a344376372f8261aed589b2
Signed-off-by: Eugene Rudoy <gene.devel at 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
#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
table_ok = 1;
} else if (key == ARG_suppress_prefixlength) {
int prefix_length;
--
2.14.2
More information about the busybox
mailing list