1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
|
From 1d8973e13d89802eee0b648451e2b97ac65cf9e0 Mon Sep 17 00:00:00 2001
From: Reuben Hawkins <reubenhwk@gmail.com>
Date: Sat, 16 May 2015 09:27:38 -0700
Subject: [PATCH] device-linux.c: IEEE 802.15.4 musl libc fix
The ARPHRD_IEEE802154 macro's definition and name have been recently
moved around from kernel header to glibc headers. Include linux/if_arp.h
if available and then use either ARPHRD_IEEE802154_MONITOR or ARPHRD_IEEE802154_PHY,
whichever comes first.
---
configure.ac | 1 +
device-linux.c | 8 ++++++++
includes.h | 6 ++++++
3 files changed, 15 insertions(+)
diff --git a/configure.ac b/configure.ac
index 0c1efd6..4bd4c9d 100644
--- a/configure.ac
+++ b/configure.ac
@@ -156,6 +156,7 @@ AC_HEADER_STDC
AC_CHECK_HEADERS( \
getopt.h \
ifaddrs.h \
+ linux/if_arp.h \
machine/limits.h \
machine/param.h \
net/if_arp.h \
diff --git a/device-linux.c b/device-linux.c
index fa7d978..de83f2e 100644
--- a/device-linux.c
+++ b/device-linux.c
@@ -79,10 +79,12 @@ int update_device_info(int sock, struct Interface *iface)
iface->sllao.if_maxmtu = -1;
break;
#endif /* ARPHDR_ARCNET */
+#ifdef ARPHRD_IEEE802154
case ARPHRD_IEEE802154:
iface->sllao.if_hwaddr_len = 64;
iface->sllao.if_prefix_len = 64;
break;
+#endif
default:
iface->sllao.if_hwaddr_len = -1;
iface->sllao.if_prefix_len = -1;
@@ -371,9 +373,15 @@ static char const *hwstr(unsigned short sa_family)
case ARPHRD_IEEE802154:
rc = "ARPHRD_IEEE802154";
break;
+#if ARPHRD_IEEE802154_MONITOR
+ case ARPHRD_IEEE802154_MONITOR:
+ rc = "ARPHRD_IEEE802154_MONITOR";
+ break;
+#elif ARPHRD_IEEE802154_PHY
case ARPHRD_IEEE802154_PHY:
rc = "ARPHRD_IEEE802154_PHY";
break;
+#endif
case ARPHRD_VOID:
rc = "ARPHRD_VOID";
break;
diff --git a/includes.h b/includes.h
index 39a36d2..d2449c4 100644
--- a/includes.h
+++ b/includes.h
@@ -81,9 +81,11 @@
#ifdef HAVE_NET_IF_DL_H
#include <net/if_dl.h>
#endif
+
#ifdef HAVE_NET_IF_TYPES_H
#include <net/if_types.h>
#endif
+
#if defined(HAVE_NET_IF_ARP_H) && !defined(ARPHRD_ETHER)
#include <net/if_arp.h>
#endif /* defined(HAVE_NET_IF_ARP_H) && !defined(ARPHRD_ETHER) */
@@ -100,3 +102,7 @@
#include <ifaddrs.h>
#endif
+#ifdef HAVE_LINUX_IF_ARP_H
+#include <linux/if_arp.h>
+#endif
+
--
2.3.6
|