kea: add fixes from kea-git
Add fixes to kea that are in the kea-git package.
This commit is contained in:
parent
8663ef2639
commit
2e4b2b24f9
11
kea/distinfo
11
kea/distinfo
|
@ -5,17 +5,22 @@ RMD160 (kea-1.6.1.tar.gz) = 261b0ea1bca0a70034532112011c64ad809c37ec
|
|||
SHA512 (kea-1.6.1.tar.gz) = 4220f46fc185f4434ad01886d2d43ba1f9dcca57f5afa33235c8593269220a79e2dcb4ad71298dec868444c29e7cb6febe66a1456fdc116a2d9fd3f019f740d8
|
||||
Size (kea-1.6.1.tar.gz) = 7155604 bytes
|
||||
SHA1 (patch-Makefile.am) = 4e4896be44290114160be878666878bb44d71a8e
|
||||
SHA1 (patch-configure.ac) = 70d7a8235ed6459a23f5404303d5babfdfec14db
|
||||
SHA1 (patch-configure.ac) = e6ef32f92a70d248749e72e627d8fde11fb50805
|
||||
SHA1 (patch-src_bin_agent_agent__lexer.ll) = de64c9ad03b1c6812f95f52c8fcd5f6c1aa1ef27
|
||||
SHA1 (patch-src_bin_d2_d2__lexer.ll) = 400b9f54b5bb9c9eb9c52c1ef23c9a377f29960e
|
||||
SHA1 (patch-src_bin_dhcp4_dhcp4__lexer.ll) = dfcca8319ca3b6b8902676bb1662ceb9abca74bc
|
||||
SHA1 (patch-src_bin_dhcp4_tests_parser__unittest.cc) = 6f213d5abd286b57c41b6fad27ada49c9301857a
|
||||
SHA1 (patch-src_bin_dhcp6_dhcp6__lexer.ll) = 6ebeb6b18dc8d86d0890ce3cfcaeea4c2658e958
|
||||
SHA1 (patch-src_bin_dhcp6_tests_parser__unittest.cc) = f671c6b5c26a6b6179971f2f10af8e2b1b8b7e6a
|
||||
SHA1 (patch-src_bin_keactrl_Makefile.am) = 5b6fd816da6011858d1167d297c83eda7947efd7
|
||||
SHA1 (patch-src_bin_netconf_netconf__lexer.ll) = ec316d436f791470df9dd5c106c76f3026a19b0e
|
||||
SHA1 (patch-src_lib_dhcp_Makefile.am) = 452036d0100a85f41c52562292931bea2501e396
|
||||
SHA1 (patch-src_lib_dhcp_iface__mgr__sun.cc) = 7bf79c4a24b3c074f8cf53b79fc83ae8255f63d7
|
||||
SHA1 (patch-src_lib_dhcp_pkt__filter__inet.cc) = 979ca0bd1d87bdaf3bf54b3e11b18fef72ecc860
|
||||
SHA1 (patch-src_lib_dhcp_iface__mgr__sun.cc) = ca4330b27adfa12b1ff6c6cc54c8c30f89f9851f
|
||||
SHA1 (patch-src_lib_dhcp_pkt__filter__inet.cc) = 32f70306483a719a8b400eff613cdbb935fe9cd0
|
||||
SHA1 (patch-src_lib_dhcp_tests_Makefile.am) = 9ee63ba82b05d02ea88e3a74183a7aa6da7b36c9
|
||||
SHA1 (patch-src_lib_dhcp_tests_iface__mgr__unittest.cc) = 8e274dbb5d9897ccd1708e4007cbe69ab2db0ef5
|
||||
SHA1 (patch-src_lib_dhcpsrv_Makefile.am) = bdd2be227d8c7f34b4329092e6de3bcaa7117284
|
||||
SHA1 (patch-src_lib_dhcpsrv_host__data__source__factory.cc) = a1bc71ec40b9eb5a6c9247360a84ce480521cad2
|
||||
SHA1 (patch-src_lib_util_encode_base__n.cc) = 61bf8402e4baf0578a7ec9444f396a9b6c69d87d
|
||||
SHA1 (patch-src_lib_util_signal__set.cc) = f060fcedecb8ccdda997fbef2040dab82c620cb0
|
||||
SHA1 (patch-src_lib_util_watch__socket.cc) = ab55b5e613bc431dcd92ef68bf3501a7e4aca7de
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
# $NetBSD$
|
||||
|
||||
PKG_OPTIONS_VAR= PKG_OPTIONS.kea
|
||||
PKG_SUPPORTED_OPTIONS= mysql pgsql
|
||||
PKG_SUPPORTED_OPTIONS= mysql pgsql tests
|
||||
PKG_SUGGESTED_OPTIONS= mysql pgsql
|
||||
PLIST_VARS+= mysql pgsql
|
||||
|
||||
|
@ -22,3 +22,8 @@ PLIST.mysql=yes
|
|||
CONFIGURE_ARGS+=--with-pgsql=${PGSQL_PREFIX}/bin/pg_config
|
||||
PLIST.pgsql=yes
|
||||
.endif
|
||||
|
||||
.if !empty(PKG_OPTIONS:Mtests)
|
||||
. include "../../devel/googletest/buildlink3.mk"
|
||||
CONFIGURE_ARGS+=--with-gtest=${BUILDLINK_PREFIX.googletest}
|
||||
.endif
|
||||
|
|
|
@ -1,9 +1,19 @@
|
|||
$NetBSD$
|
||||
|
||||
* fix typo to find googletest
|
||||
* fix compatability errors
|
||||
|
||||
--- configure.ac.orig 2019-12-30 16:00:16.704565254 +0000
|
||||
--- configure.ac.orig 2019-11-19 14:50:46.000000000 +0000
|
||||
+++ configure.ac
|
||||
@@ -1148,7 +1148,7 @@ if test "x$enable_gtest" = "xyes" ; then
|
||||
GTEST_FOUND="false"
|
||||
for dir in $GTEST_PATHS; do
|
||||
if test -f "$dir/include/gtest/gtest.h"; then
|
||||
- if ! test -f "$dir/lib/libgtests.a"; then
|
||||
+ if ! test -f "$dir/lib/libgtest.a"; then
|
||||
AC_MSG_WARN([Found Google Test include but not the library in $dir.])
|
||||
continue
|
||||
fi
|
||||
@@ -1391,7 +1391,7 @@ if test "x$enable_generate_parser" != "x
|
||||
AC_MSG_ERROR([Flex is required for enable-generate-parser, but was not found])
|
||||
fi
|
||||
|
|
|
@ -0,0 +1,18 @@
|
|||
$NetBSD$
|
||||
|
||||
* put inclusion of asiolink on top so that std::map does not conlict with
|
||||
map in net/if.h on illumos
|
||||
|
||||
--- src/bin/dhcp4/tests/parser_unittest.cc.orig 2020-01-02 23:01:48.000000000 +0000
|
||||
+++ src/bin/dhcp4/tests/parser_unittest.cc
|
||||
@@ -6,9 +6,9 @@
|
||||
|
||||
#include <config.h>
|
||||
|
||||
+#include <dhcpsrv/parsers/simple_parser4.h>
|
||||
#include <gtest/gtest.h>
|
||||
#include <dhcp4/parser_context.h>
|
||||
-#include <dhcpsrv/parsers/simple_parser4.h>
|
||||
#include <testutils/io_utils.h>
|
||||
#include <testutils/user_context_utils.h>
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
$NetBSD$
|
||||
|
||||
* put inclusion of asiolonk first so that map from net/if.h on illumos
|
||||
won't confict with std::map
|
||||
|
||||
--- src/bin/dhcp6/tests/parser_unittest.cc.orig 2020-01-02 23:01:48.000000000 +0000
|
||||
+++ src/bin/dhcp6/tests/parser_unittest.cc
|
||||
@@ -6,9 +6,9 @@
|
||||
|
||||
#include <config.h>
|
||||
|
||||
+#include <dhcpsrv/parsers/simple_parser6.h>
|
||||
#include <gtest/gtest.h>
|
||||
#include <dhcp6/parser_context.h>
|
||||
-#include <dhcpsrv/parsers/simple_parser6.h>
|
||||
#include <testutils/io_utils.h>
|
||||
#include <testutils/user_context_utils.h>
|
||||
|
|
@ -1,15 +1,115 @@
|
|||
$NetBSD$
|
||||
|
||||
* map conflicts with map from net/if.h, use std::map explicitly
|
||||
* enable bpf filter
|
||||
* get the mac adresses the right way on illumos
|
||||
based on illumos-ims.diff from
|
||||
https://gitlab.isc.org/isc-projects/kes/issues/631
|
||||
copyright ISC licensed under mpl-2.0
|
||||
https://www.mozilla.org/en-US/MPL/2.0/
|
||||
|
||||
--- src/lib/dhcp/iface_mgr_sun.cc.orig 2019-11-19 14:50:43.000000000 +0000
|
||||
--- src/lib/dhcp/iface_mgr_sun.cc.orig 2020-01-02 23:01:48.000000000 +0000
|
||||
+++ src/lib/dhcp/iface_mgr_sun.cc
|
||||
@@ -39,7 +39,7 @@ IfaceMgr::detectIfaces() {
|
||||
@@ -10,6 +10,7 @@
|
||||
|
||||
#include <dhcp/iface_mgr.h>
|
||||
#include <dhcp/iface_mgr_error_handler.h>
|
||||
+#include <dhcp/pkt_filter_bpf.h>
|
||||
#include <dhcp/pkt_filter_inet.h>
|
||||
#include <exceptions/exceptions.h>
|
||||
|
||||
@@ -39,7 +40,12 @@ IfaceMgr::detectIfaces() {
|
||||
isc_throw(Unexpected, "Network interfaces detection failed.");
|
||||
}
|
||||
|
||||
- typedef map<string, IfacePtr> IfaceLst;
|
||||
+ int sock = socket(PF_INET, SOCK_DGRAM, 0);
|
||||
+ if (sock < 0) {
|
||||
+ isc_throw(Unexpected, "Can't get a socket.");
|
||||
+ }
|
||||
+
|
||||
+ typedef std::map<string, IfacePtr> IfaceLst;
|
||||
IfaceLst::iterator iface_iter;
|
||||
IfaceLst ifaces;
|
||||
|
||||
@@ -51,6 +57,7 @@ IfaceMgr::detectIfaces() {
|
||||
if (!(ifindex = if_nametoindex(ifname))) {
|
||||
// Interface name does not have corresponding index ...
|
||||
freeifaddrs(iflist);
|
||||
+ close(sock);
|
||||
isc_throw(Unexpected, "Interface " << ifname << " has no index");
|
||||
}
|
||||
|
||||
@@ -62,9 +69,26 @@ IfaceMgr::detectIfaces() {
|
||||
IfacePtr iface(new Iface(ifname, ifindex));
|
||||
iface->setFlags(ifptr->ifa_flags);
|
||||
ifaces.insert(pair<string, IfacePtr>(ifname, iface));
|
||||
+
|
||||
+ // Get the MAC address.
|
||||
+ struct lifreq lif;
|
||||
+ memset(&lif, 0, sizeof(lif));
|
||||
+ if (strlcpy(lif.lifr_name, ifname, LIFNAMSIZ) > LIFNAMSIZ) {
|
||||
+ freeifaddrs(iflist);
|
||||
+ close(sock);
|
||||
+ isc_throw(Unexpected, "ifname to long for lifr_name in iface_mrg_sun");
|
||||
+ }
|
||||
+ if (ioctl(sock, SIOCGLIFHWADDR, &lif) < 0) {
|
||||
+ continue;
|
||||
+ }
|
||||
+ struct sockaddr_dl * ldata =
|
||||
+ reinterpret_cast<struct sockaddr_dl *>(&lif.lifr_addr);
|
||||
+ const uint8_t * ptr = reinterpret_cast<uint8_t *>(LLADDR(ldata));
|
||||
+ iface->setHWType(ldata->sdl_type);
|
||||
+ iface->setMac(ptr, ldata->sdl_alen);
|
||||
}
|
||||
|
||||
- // Second lookup to get MAC and IP addresses
|
||||
+ // Second lookup to get IP addresses
|
||||
for (ifptr = iflist; ifptr != 0; ifptr = ifptr->ifa_next) {
|
||||
iface_iter = ifaces.find(ifptr->ifa_name);
|
||||
if (iface_iter == ifaces.end()) {
|
||||
@@ -72,15 +96,7 @@ IfaceMgr::detectIfaces() {
|
||||
}
|
||||
// Common byte pointer for following data
|
||||
const uint8_t * ptr = 0;
|
||||
- if(ifptr->ifa_addr->sa_family == AF_LINK) {
|
||||
- // HWAddr
|
||||
- struct sockaddr_dl * ldata =
|
||||
- reinterpret_cast<struct sockaddr_dl *>(ifptr->ifa_addr);
|
||||
- ptr = reinterpret_cast<uint8_t *>(LLADDR(ldata));
|
||||
-
|
||||
- iface_iter->second->setHWType(ldata->sdl_type);
|
||||
- iface_iter->second->setMac(ptr, ldata->sdl_alen);
|
||||
- } else if(ifptr->ifa_addr->sa_family == AF_INET6) {
|
||||
+ if(ifptr->ifa_addr->sa_family == AF_INET6) {
|
||||
// IPv6 Addr
|
||||
struct sockaddr_in6 * adata =
|
||||
reinterpret_cast<struct sockaddr_in6 *>(ifptr->ifa_addr);
|
||||
@@ -100,6 +116,7 @@ IfaceMgr::detectIfaces() {
|
||||
}
|
||||
|
||||
freeifaddrs(iflist);
|
||||
+ close(sock);
|
||||
|
||||
// Interfaces registering
|
||||
for(IfaceLst::const_iterator iface_iter = ifaces.begin();
|
||||
@@ -124,10 +141,17 @@ void Iface::setFlags(uint64_t flags) {
|
||||
}
|
||||
|
||||
void
|
||||
-IfaceMgr::setMatchingPacketFilter(const bool /* direct_response_desired */) {
|
||||
+IfaceMgr::setMatchingPacketFilter(const bool direct_response_desired) {
|
||||
// @todo Currently we ignore the preference to use direct traffic
|
||||
// because it hasn't been implemented for Solaris.
|
||||
- setPacketFilter(PktFilterPtr(new PktFilterInet()));
|
||||
+ // Fixed: solaris/illumos now supports bpf
|
||||
+ if (direct_response_desired) {
|
||||
+ setPacketFilter(PktFilterPtr(new PktFilterBPF()));
|
||||
+
|
||||
+ } else {
|
||||
+ setPacketFilter(PktFilterPtr(new PktFilterInet()));
|
||||
+
|
||||
+ }
|
||||
}
|
||||
|
||||
bool
|
||||
|
|
|
@ -1,21 +1,35 @@
|
|||
$NetBSD$
|
||||
|
||||
* illumos uses ip_pktinfo just like linux
|
||||
--- src/lib/dhcp/pkt_filter_inet.cc.orig 2019-11-19 14:50:43.000000000 +0000
|
||||
|
||||
--- src/lib/dhcp/pkt_filter_inet.cc.orig 2020-01-02 23:01:48.000000000 +0000
|
||||
+++ src/lib/dhcp/pkt_filter_inet.cc
|
||||
@@ -86,9 +86,9 @@ PktFilterInet::openSocket(Iface& iface,
|
||||
@@ -86,8 +86,8 @@ PktFilterInet::openSocket(Iface& iface,
|
||||
<< "/port=" << port);
|
||||
}
|
||||
|
||||
- // On Linux systems IP_PKTINFO socket option is supported. This
|
||||
- // option is used to retrieve destination address of the packet.
|
||||
-#if defined (IP_PKTINFO) && defined (OS_LINUX)
|
||||
+ // On Linux and Solaris systems IP_PKTINFO socket option is supported.
|
||||
+ // This option is used to retrieve destination address of the packet.
|
||||
+#if defined (IP_PKTINFO) && (defined (OS_LINUX) || defined (OS_SOLARIS))
|
||||
#if defined (IP_PKTINFO) && defined (OS_LINUX)
|
||||
int flag = 1;
|
||||
if (setsockopt(sock, IPPROTO_IP, IP_PKTINFO, &flag, sizeof(flag)) != 0) {
|
||||
close(sock);
|
||||
@@ -167,7 +167,7 @@ PktFilterInet::receive(Iface& iface, con
|
||||
@@ -95,6 +95,13 @@ PktFilterInet::openSocket(Iface& iface,
|
||||
isc_throw(SocketConfigError, "setsockopt: IP_PKTINFO: failed.");
|
||||
}
|
||||
|
||||
+#elif defined (IP_RECVPKTINFO) && defined (OS_SOLARIS)
|
||||
+ int flag = 1;
|
||||
+ if (setsockopt(sock, IPPROTO_IP, IP_RECVPKTINFO, &flag, sizeof(flag)) != 0) {
|
||||
+ close(sock);
|
||||
+ isc_throw(SocketConfigError, "setsockopt: IP_RECVPKTINFO: failed.");
|
||||
+ }
|
||||
+
|
||||
// On BSD systems IP_RECVDSTADDR is used instead of IP_PKTINFO.
|
||||
#elif defined (IP_RECVDSTADDR) && defined (OS_BSD)
|
||||
int flag = 1;
|
||||
@@ -167,7 +174,7 @@ PktFilterInet::receive(Iface& iface, con
|
||||
// Linux systems support IP_PKTINFO option which is used to retrieve the
|
||||
// destination address of the received packet. On BSD systems IP_RECVDSTADDR
|
||||
// is used instead.
|
||||
|
@ -24,7 +38,7 @@ $NetBSD$
|
|||
struct in_pktinfo* pktinfo;
|
||||
struct cmsghdr* cmsg = CMSG_FIRSTHDR(&m);
|
||||
|
||||
@@ -243,7 +243,7 @@ PktFilterInet::send(const Iface&, uint16
|
||||
@@ -243,7 +250,7 @@ PktFilterInet::send(const Iface&, uint16
|
||||
// In the future the OS-specific code may be abstracted to a different
|
||||
// file but for now we keep it here because there is no code yet, which
|
||||
// is specific to non-Linux systems.
|
||||
|
|
|
@ -0,0 +1,17 @@
|
|||
$NetBSD$
|
||||
|
||||
* illumos uses bpf
|
||||
|
||||
--- src/lib/dhcp/tests/Makefile.am.orig 2020-01-02 23:01:48.000000000 +0000
|
||||
+++ src/lib/dhcp/tests/Makefile.am
|
||||
@@ -97,6 +97,10 @@ if OS_BSD
|
||||
libdhcp___unittests_SOURCES += pkt_filter_bpf_unittest.cc
|
||||
endif
|
||||
|
||||
+if OS_SOLARIS
|
||||
+libdhcp___unittests_SOURCES += pkt_filter_bpf_unittest.cc
|
||||
+endif
|
||||
+
|
||||
libdhcp___unittests_SOURCES += protocol_util_unittest.cc
|
||||
libdhcp___unittests_SOURCES += duid_unittest.cc
|
||||
|
|
@ -0,0 +1,34 @@
|
|||
$NetBSD$
|
||||
|
||||
* enable test on illumos
|
||||
* use ifru_addr_sa that is available both on illumos and linux
|
||||
|
||||
--- src/lib/dhcp/tests/iface_mgr_unittest.cc.orig 2020-01-02 23:01:48.000000000 +0000
|
||||
+++ src/lib/dhcp/tests/iface_mgr_unittest.cc
|
||||
@@ -1569,7 +1569,7 @@ TEST_F(IfaceMgrTest, setPacketFilter6) {
|
||||
}
|
||||
|
||||
|
||||
-#if defined OS_LINUX || OS_BSD
|
||||
+#if defined OS_LINUX || OS_BSD || OS_SOLARIS
|
||||
|
||||
// This test is only supported on Linux and BSD systems. It checks
|
||||
// if it is possible to use the IfaceMgr to select the packet filter
|
||||
@@ -2600,7 +2600,7 @@ checkIfFlags(const Iface & iface,
|
||||
bool
|
||||
checkIfAddrs(const Iface & iface, struct ifaddrs *& ifptr) {
|
||||
const unsigned char * p = 0;
|
||||
-#if defined(OS_LINUX)
|
||||
+#if defined(OS_LINUX) || defined(OS_SOLARIS)
|
||||
// Workaround for Linux ...
|
||||
if(ifptr->ifa_data != 0) {
|
||||
// We avoid localhost as it has no MAC Address
|
||||
@@ -2624,7 +2624,7 @@ checkIfAddrs(const Iface & iface, struct
|
||||
}
|
||||
|
||||
const uint8_t * p =
|
||||
- reinterpret_cast<uint8_t *>(ifr.ifr_ifru.ifru_hwaddr.sa_data);
|
||||
+ reinterpret_cast<uint8_t *>(ifr.ifr_ifru.ifru_addr.sa_data);
|
||||
|
||||
close(s);
|
||||
|
|
@ -0,0 +1,32 @@
|
|||
$NetBSD$
|
||||
|
||||
* setting SIG_IGN on SIGCHLD removes the result from the child that triggered
|
||||
the signal on solaris/illumos
|
||||
|
||||
--- src/lib/util/signal_set.cc.orig 2020-01-10 08:19:15.723309083 +0000
|
||||
+++ src/lib/util/signal_set.cc
|
||||
@@ -118,11 +118,22 @@ SignalSet::invokeOnReceiptHandler(int si
|
||||
struct sigaction sa;
|
||||
struct sigaction prev_sa;
|
||||
memset(&sa, 0, sizeof(sa));
|
||||
- sa.sa_handler = SIG_IGN;
|
||||
+
|
||||
+ if (sig == SIGCHLD) {
|
||||
+ sa.sa_handler = SIG_DFL;
|
||||
+ } else {
|
||||
+ sa.sa_handler = SIG_IGN;
|
||||
+ }
|
||||
if (sigaction(sig, &sa, &prev_sa) < 0) {
|
||||
// Highly unlikely we can get here.
|
||||
+ std::string sig_type;
|
||||
+ if (sa.sa_handler == SIG_DFL) {
|
||||
+ sig_type = "SIG_DFL";
|
||||
+ } else {
|
||||
+ sig_type = "SIG_IGN";
|
||||
+ }
|
||||
const char* errmsg = strerror(errno);
|
||||
- isc_throw(SignalSetError, "failed to set SIG_IGN for signal "
|
||||
+ isc_throw(SignalSetError, "failed to set " << sig_type << " for signal "
|
||||
<< sig << ": " << errmsg);
|
||||
}
|
||||
|
Loading…
Reference in New Issue