mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-27 09:12:39 +00:00
55 lines
1.9 KiB
Diff
55 lines
1.9 KiB
Diff
|
From 98ec18f098e5ef68e3a8cc6954fcaf5a7fb8b7be Mon Sep 17 00:00:00 2001
|
||
|
From: pali <7141871+pali@users.noreply.github.com>
|
||
|
Date: Mon, 15 Feb 2021 07:54:01 +0100
|
||
|
Subject: [PATCH] pppd: Fix compilation with older glibc or kernel headers
|
||
|
(#248)
|
||
|
MIME-Version: 1.0
|
||
|
Content-Type: text/plain; charset=UTF-8
|
||
|
Content-Transfer-Encoding: 8bit
|
||
|
|
||
|
glibc versions prior to 2.24 do not define SOL_NETLINK and linux kernel
|
||
|
versions prior to 4.3 do not define NETLINK_CAP_ACK. So add fallback
|
||
|
definitions for these macros into pppd/sys-linux.c file.
|
||
|
|
||
|
Also extend description why we call SOL_NETLINK/NETLINK_CAP_ACK option.
|
||
|
|
||
|
Signed-off-by: Pali Rohár <pali@kernel.org>
|
||
|
---
|
||
|
pppd/sys-linux.c | 18 +++++++++++++++++-
|
||
|
1 file changed, 17 insertions(+), 1 deletion(-)
|
||
|
|
||
|
--- a/pppd/sys-linux.c
|
||
|
+++ b/pppd/sys-linux.c
|
||
|
@@ -125,6 +125,14 @@
|
||
|
#include <linux/netlink.h>
|
||
|
#include <linux/rtnetlink.h>
|
||
|
#include <linux/if_addr.h>
|
||
|
+/* glibc versions prior to 2.24 do not define SOL_NETLINK */
|
||
|
+#ifndef SOL_NETLINK
|
||
|
+#define SOL_NETLINK 270
|
||
|
+#endif
|
||
|
+/* linux kernel versions prior to 4.3 do not define/support NETLINK_CAP_ACK */
|
||
|
+#ifndef NETLINK_CAP_ACK
|
||
|
+#define NETLINK_CAP_ACK 10
|
||
|
+#endif
|
||
|
#endif
|
||
|
|
||
|
#include "pppd.h"
|
||
|
@@ -2843,7 +2851,15 @@ static int append_peer_ipv6_address(unsi
|
||
|
if (fd < 0)
|
||
|
return 0;
|
||
|
|
||
|
- /* do not ask for error message content */
|
||
|
+ /*
|
||
|
+ * Tell kernel to not send to us payload of acknowledgment error message.
|
||
|
+ * NETLINK_CAP_ACK option is supported since Linux kernel version 4.3 and
|
||
|
+ * older kernel versions always send full payload in acknowledgment netlink
|
||
|
+ * message. We ignore payload of this message as we need only error code,
|
||
|
+ * to check if our set remote peer address request succeeded or failed.
|
||
|
+ * So ignore return value from the following setsockopt() call as setting
|
||
|
+ * option NETLINK_CAP_ACK means for us just a kernel hint / optimization.
|
||
|
+ */
|
||
|
one = 1;
|
||
|
setsockopt(fd, SOL_NETLINK, NETLINK_CAP_ACK, &one, sizeof(one));
|
||
|
|