summaryrefslogtreecommitdiffstats
path: root/meta
diff options
context:
space:
mode:
Diffstat (limited to 'meta')
-rw-r--r--meta/recipes-core/busybox/busybox/0001-libiproute-handle-table-ids-larger-than-255.patch134
-rw-r--r--meta/recipes-core/busybox/busybox_1.24.1.bb1
2 files changed, 135 insertions, 0 deletions
diff --git a/meta/recipes-core/busybox/busybox/0001-libiproute-handle-table-ids-larger-than-255.patch b/meta/recipes-core/busybox/busybox/0001-libiproute-handle-table-ids-larger-than-255.patch
new file mode 100644
index 0000000000..aac5b4029b
--- /dev/null
+++ b/meta/recipes-core/busybox/busybox/0001-libiproute-handle-table-ids-larger-than-255.patch
@@ -0,0 +1,134 @@
1From b5a9234272e6084557224c73ab7737ed47f09848 Mon Sep 17 00:00:00 2001
2From: Lukasz Nowak <lnowak@tycoint.com>
3Date: Wed, 23 Nov 2016 12:48:21 +0000
4Subject: [PATCH v2] libiproute: handle table ids larger than 255
5
6Linux kernel, starting from 2.6.19 allows ip table ids to have 32-bit values.
7In order to preserve compatibility, the old 8-bit field: rtm_table is still
8in use when table id is lower than 256.
9
10Add support for the 32-bit table id (RTA_TABLE attribute) in:
11- ip route print
12- ip route modify
13- ip rule print
14- ip rule modify
15
16Add printing of table ids to ip route.
17
18Changes are compatible with the mainline iproute2 utilities.
19
20These changes are required for compatibility with ConnMan, which by default
21uses table ids greater than 255.
22
23Upstream-Status: Submitted [http://lists.busybox.net/pipermail/busybox/2016-December/084989.html]
24
25Signed-off-by: Lukasz Nowak <lnowak@tycoint.com>
26---
27 networking/libiproute/iproute.c | 24 ++++++++++++++++++++----
28 networking/libiproute/iprule.c | 11 +++++++++--
29 2 files changed, 29 insertions(+), 6 deletions(-)
30
31diff --git a/networking/libiproute/iproute.c b/networking/libiproute/iproute.c
32index 6ecd5f7..d5af498 100644
33--- a/networking/libiproute/iproute.c
34+++ b/networking/libiproute/iproute.c
35@@ -87,6 +87,7 @@ static int FAST_FUNC print_route(const struct sockaddr_nl *who UNUSED_PARAM,
36 inet_prefix dst;
37 inet_prefix src;
38 int host_len = -1;
39+ uint32_t tid;
40
41 if (n->nlmsg_type != RTM_NEWROUTE && n->nlmsg_type != RTM_DELROUTE) {
42 fprintf(stderr, "Not a route: %08x %08x %08x\n",
43@@ -99,6 +100,14 @@ static int FAST_FUNC print_route(const struct sockaddr_nl *who UNUSED_PARAM,
44 if (len < 0)
45 bb_error_msg_and_die("wrong nlmsg len %d", len);
46
47+ memset(tb, 0, sizeof(tb));
48+ parse_rtattr(tb, RTA_MAX, RTM_RTA(r), len);
49+
50+ if (tb[RTA_TABLE])
51+ tid = *(uint32_t *)RTA_DATA(tb[RTA_TABLE]);
52+ else
53+ tid = r->rtm_table;
54+
55 if (r->rtm_family == AF_INET6)
56 host_len = 128;
57 else if (r->rtm_family == AF_INET)
58@@ -128,7 +137,7 @@ static int FAST_FUNC print_route(const struct sockaddr_nl *who UNUSED_PARAM,
59 }
60 }
61 } else {
62- if (G_filter.tb > 0 && G_filter.tb != r->rtm_table) {
63+ if (G_filter.tb > 0 && G_filter.tb != tid) {
64 return 0;
65 }
66 }
67@@ -157,10 +166,8 @@ static int FAST_FUNC print_route(const struct sockaddr_nl *who UNUSED_PARAM,
68 return 0;
69 }
70
71- memset(tb, 0, sizeof(tb));
72 memset(&src, 0, sizeof(src));
73 memset(&dst, 0, sizeof(dst));
74- parse_rtattr(tb, RTA_MAX, RTM_RTA(r), len);
75
76 if (tb[RTA_SRC]) {
77 src.bitlen = r->rtm_src_len;
78@@ -283,6 +290,10 @@ static int FAST_FUNC print_route(const struct sockaddr_nl *who UNUSED_PARAM,
79 if (tb[RTA_OIF]) {
80 printf("dev %s ", ll_index_to_name(*(int*)RTA_DATA(tb[RTA_OIF])));
81 }
82+#if ENABLE_FEATURE_IP_RULE
83+ if (tid && tid != RT_TABLE_MAIN && !G_filter.tb)
84+ printf("table %s ", rtnl_rttable_n2a(tid));
85+#endif
86
87 /* Todo: parse & show "proto kernel", "scope link" here */
88
89@@ -434,7 +445,12 @@ IF_FEATURE_IP_RULE(ARG_table,)
90 NEXT_ARG();
91 if (rtnl_rttable_a2n(&tid, *argv))
92 invarg(*argv, "table");
93- req.r.rtm_table = tid;
94+ if (tid < 256)
95+ req.r.rtm_table = tid;
96+ else {
97+ req.r.rtm_table = RT_TABLE_UNSPEC;
98+ addattr32(&req.n, sizeof(req), RTA_TABLE, tid);
99+ }
100 #endif
101 } else if (arg == ARG_dev || arg == ARG_oif) {
102 NEXT_ARG();
103diff --git a/networking/libiproute/iprule.c b/networking/libiproute/iprule.c
104index 774a3e2..3fac7c5 100644
105--- a/networking/libiproute/iprule.c
106+++ b/networking/libiproute/iprule.c
107@@ -119,7 +119,9 @@ static int FAST_FUNC print_rule(const struct sockaddr_nl *who UNUSED_PARAM,
108 printf("iif %s ", (char*)RTA_DATA(tb[RTA_IIF]));
109 }
110
111- if (r->rtm_table)
112+ if (tb[RTA_TABLE])
113+ printf("lookup %s ", rtnl_rttable_n2a(*(uint32_t*)RTA_DATA(tb[RTA_TABLE])));
114+ else if (r->rtm_table)
115 printf("lookup %s ", rtnl_rttable_n2a(r->rtm_table));
116
117 if (tb[RTA_FLOW]) {
118@@ -259,7 +261,12 @@ static int iprule_modify(int cmd, char **argv)
119 NEXT_ARG();
120 if (rtnl_rttable_a2n(&tid, *argv))
121 invarg(*argv, "table ID");
122- req.r.rtm_table = tid;
123+ if (tid < 256)
124+ req.r.rtm_table = tid;
125+ else {
126+ req.r.rtm_table = RT_TABLE_UNSPEC;
127+ addattr32(&req.n, sizeof(req), RTA_TABLE, tid);
128+ }
129 table_ok = 1;
130 } else if (key == ARG_dev ||
131 key == ARG_iif
132--
1332.7.4
134
diff --git a/meta/recipes-core/busybox/busybox_1.24.1.bb b/meta/recipes-core/busybox/busybox_1.24.1.bb
index df0e131266..c35cba3222 100644
--- a/meta/recipes-core/busybox/busybox_1.24.1.bb
+++ b/meta/recipes-core/busybox/busybox_1.24.1.bb
@@ -53,6 +53,7 @@ SRC_URI = "http://www.busybox.net/downloads/busybox-${PV}.tar.bz2;name=tarball \
53 file://busybox-kbuild-race-fix-commit-d8e61bb.patch \ 53 file://busybox-kbuild-race-fix-commit-d8e61bb.patch \
54 file://commit-applet_tables-fix-commit-0dddbc1.patch \ 54 file://commit-applet_tables-fix-commit-0dddbc1.patch \
55 file://makefile-libbb-race.patch \ 55 file://makefile-libbb-race.patch \
56 file://0001-libiproute-handle-table-ids-larger-than-255.patch \
56" 57"
57SRC_URI_append_libc-musl = " file://musl.cfg " 58SRC_URI_append_libc-musl = " file://musl.cfg "
58 59