summaryrefslogtreecommitdiffstats
path: root/meta-initramfs/recipes-kernel/kexec/kexec-tools-klibc/0014-add-if_nameindex-from-musl.patch
diff options
context:
space:
mode:
authorAndrea Adami <andrea.adami@gmail.com>2018-05-14 00:17:30 +0200
committerArmin Kuster <akuster808@gmail.com>2018-05-17 08:32:26 -0700
commite22a87046f51e40972d732377505e62f9940d874 (patch)
treec92282737f71711b9cb65cb9f3566f4d46ff5a3a /meta-initramfs/recipes-kernel/kexec/kexec-tools-klibc/0014-add-if_nameindex-from-musl.patch
parentb4d849f5dbd7c0919e6fc64ece4394dee911e4cd (diff)
downloadmeta-openembedded-e22a87046f51e40972d732377505e62f9940d874.tar.gz
kexec-tools-klibc: upgrade from v. 2.0.2 to 2.0.17
This version does support aarch64. Ad klibc-specific patchset and track the git repository to get the (many) fixes for the warnings. Signed-off-by: Andrea Adami <andrea.adami@gmail.com> Signed-off-by: Armin Kuster <akuster808@gmail.com>
Diffstat (limited to 'meta-initramfs/recipes-kernel/kexec/kexec-tools-klibc/0014-add-if_nameindex-from-musl.patch')
-rw-r--r--meta-initramfs/recipes-kernel/kexec/kexec-tools-klibc/0014-add-if_nameindex-from-musl.patch152
1 files changed, 152 insertions, 0 deletions
diff --git a/meta-initramfs/recipes-kernel/kexec/kexec-tools-klibc/0014-add-if_nameindex-from-musl.patch b/meta-initramfs/recipes-kernel/kexec/kexec-tools-klibc/0014-add-if_nameindex-from-musl.patch
new file mode 100644
index 000000000..ad2126698
--- /dev/null
+++ b/meta-initramfs/recipes-kernel/kexec/kexec-tools-klibc/0014-add-if_nameindex-from-musl.patch
@@ -0,0 +1,152 @@
1From b15e9610b4ab52c381e712241d50dea96d50d873 Mon Sep 17 00:00:00 2001
2From: Andrea Adami <andrea.adami@gmail.com>
3Date: Wed, 2 May 2018 23:14:19 +0200
4Subject: [PATCH 14/14] add if_nameindex from musl
5
6Taken from musl, minimal changes.
7klibc lacks struct and func
8
9Fix
10
11 ifdown.o: In function `ifdown':
12 ifdown.c (.text+0x30): undefined reference to `if_nameindex'
13
14While there add klibc-specific guard and include sys/types.h
15to fix :
16
17 /kexec/if_nameindex.c:2:
18 /usr/lib/klibc/include/linux/types.h:22:0:
19 warning: "__bitwise" redefined
20 #define __bitwise __bitwise__
21
22Signed-off-by: Andrea Adami <andrea.adami@gmail.com>
23---
24 kexec/Makefile | 2 +-
25 kexec/if_nameindex.c | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++++
26 kexec/if_nameindex.h | 15 ++++++++++++
27 kexec/ifdown.c | 3 +++
28 4 files changed, 83 insertions(+), 1 deletion(-)
29 create mode 100644 kexec/if_nameindex.c
30 create mode 100644 kexec/if_nameindex.h
31
32diff --git a/kexec/Makefile b/kexec/Makefile
33index 4db84d8..fb7520b 100644
34--- a/kexec/Makefile
35+++ b/kexec/Makefile
36@@ -11,7 +11,7 @@ KEXEC_SRCS = $(KEXEC_SRCS_base)
37 KEXEC_GENERATED_SRCS =
38
39 KEXEC_SRCS_base += kexec/kexec.c
40-KEXEC_SRCS_base += kexec/ifdown.c
41+KEXEC_SRCS_base += kexec/if_nameindex kexec/ifdown.c
42 KEXEC_SRCS_base += kexec/kexec-elf.c
43 KEXEC_SRCS_base += kexec/kexec-elf-exec.c
44 KEXEC_SRCS_base += kexec/kexec-elf-core.c
45diff --git a/kexec/if_nameindex.c b/kexec/if_nameindex.c
46new file mode 100644
47index 0000000..e586e41
48--- /dev/null
49+++ b/kexec/if_nameindex.c
50@@ -0,0 +1,64 @@
51+#define _GNU_SOURCE
52+#ifdef __KLIBC__
53+#include <sys/types.h>
54+#endif
55+#include <netinet/in.h>
56+#include <net/if.h>
57+#include <stdlib.h>
58+#include <sys/socket.h>
59+#include <sys/ioctl.h>
60+#include <errno.h>
61+#include <sys/syscall.h>
62+#include <stdio.h>
63+#ifdef __KLIBC__
64+#include "if_nameindex.h"
65+#endif
66+
67+static void *do_nameindex(int s, size_t n)
68+{
69+ size_t i, len, k;
70+ struct ifconf conf;
71+ struct if_nameindex *idx;
72+
73+ idx = malloc(n * (sizeof(struct if_nameindex)+sizeof(struct ifreq)));
74+ if (!idx) return 0;
75+
76+ conf.ifc_buf = (void *)&idx[n];
77+ conf.ifc_len = len = n * sizeof(struct ifreq);
78+ if (ioctl(s, SIOCGIFCONF, &conf) < 0) {
79+ free(idx);
80+ return 0;
81+ }
82+ if (conf.ifc_len == len) {
83+ free(idx);
84+ return (void *)-1;
85+ }
86+
87+ n = conf.ifc_len / sizeof(struct ifreq);
88+ for (i=k=0; i<n; i++) {
89+ if (ioctl(s, SIOCGIFINDEX, &conf.ifc_req[i]) < 0) {
90+ k++;
91+ continue;
92+ }
93+ idx[i-k].if_index = conf.ifc_req[i].ifr_ifindex;
94+ idx[i-k].if_name = conf.ifc_req[i].ifr_name;
95+ }
96+ idx[i-k].if_name = 0;
97+ idx[i-k].if_index = 0;
98+
99+ return idx;
100+}
101+
102+struct if_nameindex *if_nameindex()
103+{
104+ size_t n;
105+ void *p = 0;
106+ int s = socket(AF_UNIX, SOCK_DGRAM, 0);
107+ if (s>=0) {
108+ for (n=0; (p=do_nameindex(s, n)) == (void *)-1; n++);
109+/* __syscall(SYS_close, s); */
110+ close(s);
111+ }
112+ errno = ENOBUFS;
113+ return p;
114+}
115diff --git a/kexec/if_nameindex.h b/kexec/if_nameindex.h
116new file mode 100644
117index 0000000..1725fbd
118--- /dev/null
119+++ b/kexec/if_nameindex.h
120@@ -0,0 +1,15 @@
121+#ifndef _NET_IF__NAMEINDEX_H
122+#define _NET_IF_NAMEINDEX_H
123+
124+struct if_nameindex
125+{
126+ unsigned int if_index;
127+ char *if_name;
128+};
129+
130+unsigned int if_nametoindex (const char *);
131+char *if_indextoname (unsigned int, char *);
132+struct if_nameindex *if_nameindex (void);
133+void if_freenameindex (struct if_nameindex *);
134+
135+#endif
136diff --git a/kexec/ifdown.c b/kexec/ifdown.c
137index 82c6141..cc3ca9f 100644
138--- a/kexec/ifdown.c
139+++ b/kexec/ifdown.c
140@@ -18,6 +18,9 @@ char *v_ifdown = "@(#)ifdown.c 1.11 02-Jun-1998 miquels@cistron.nl";
141
142 #include <netinet/in.h>
143 #include <net/if.h>
144+#ifdef __KLIBC__
145+#include "if_nameindex.h"
146+#endif
147
148 /*
149 * First, we find all shaper devices and down them. Then we
150--
1512.7.4
152