PKG_NAME:=isc-dhcp
UPSTREAM_NAME:=dhcp
-PKG_VERSION:=4.3.3
+PKG_VERSION:=4.3.5
PKG_RELEASE:=1
PKG_LICENSE:=BSD-3-Clause
PKG_MAINTAINER:=Antony Antony <antony@phenome.org>
PKG_SOURCE:=$(UPSTREAM_NAME)-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=ftp://ftp.isc.org/isc/dhcp/$(PKG_VERSION)
-PKG_MD5SUM:=c5577b09c9017cdd319a11ff6364268e
+PKG_SOURCE_URL:=ftp://ftp.isc.org/isc/dhcp/$(PKG_VERSION) \
+ http://ftp.funet.fi/pub/mirrors/ftp.isc.org/isc/dhcp/$(PKG_VERSION) \
+ http://ftp.iij.ad.jp/pub/network/isc/dhcp/$(PKG_VERSION)
+PKG_MD5SUM:=2b5e5b2fa31c2e27e487039d86f83d3f
+PKG_HASH:=eb95936bf15d2393c55dd505bc527d1d4408289cec5a9fa8abb99f7577e7f954
PKG_FIXUP:=autoreconf
PKG_BUILD_PARALLEL:=1
endif
define Build/Compile
+ $(MAKE) -C $(PKG_BUILD_DIR) \
+ BUILD_CC="$(HOSTCC_NOCACHE)" \
+ CROSS_CC="$(TARGET_CC)" \
+ host_alias="$(GNU_TARGET_NAME)" \
+ target_alias="$(GNU_TARGET_NAME)" \
+ build_alias="$(GNU_HOST_NAME)" \
+ all
$(MAKE) -C $(PKG_BUILD_DIR) \
DESTDIR="$(PKG_INSTALL_DIR)" \
BUILD_CC="$(HOSTCC_NOCACHE)" \
host_alias="$(GNU_TARGET_NAME)" \
target_alias="$(GNU_TARGET_NAME)" \
build_alias="$(GNU_HOST_NAME)" \
- all install-exec
+ install-exec
endef
define Package/isc-dhcp-relay-$(BUILD_VARIANT)/install
+++ /dev/null
---- a/relay/dhcrelay.c
-+++ b/relay/dhcrelay.c
-@@ -60,6 +60,7 @@
- int client_packet_errors = 0; /* Errors sending packets to clients. */
-
- int add_agent_options = 0; /* If nonzero, add relay agent options. */
-+int add_rfc3527_suboption = 0; /* If nonzero, add RFC3527 link selection sub-option. */
-
- int agent_option_errors = 0; /* Number of packets forwarded without
- agent options because there was no room. */
-@@ -99,6 +100,8 @@
- struct sockaddr_in to;
- } *servers;
-
-+struct interface_info *uplink;
-+
- #ifdef DHCPv6
- struct stream_list {
- struct stream_list *next;
-@@ -147,6 +150,7 @@
- " [-pf <pid-file>] [--no-pid]\n"\
- " [-m append|replace|forward|discard]\n" \
- " [-i interface0 [ ... -i interfaceN]\n" \
-+" [-l interface]\n" \
- " server0 [ ... serverN]\n\n" \
- " dhcrelay -6 [-d] [-q] [-I] [-c <hops>] [-p <port>]\n" \
- " [-pf <pid-file>] [--no-pid]\n" \
-@@ -161,6 +165,7 @@
- " [-pf <pid-file>] [--no-pid]\n" \
- " [-m append|replace|forward|discard]\n" \
- " [-i interface0 [ ... -i interfaceN]\n" \
-+" [-l interface]\n" \
- " server0 [ ... serverN]\n\n"
- #endif
-
-@@ -325,6 +330,20 @@
- agent_relay_mode = discard;
- } else
- usage();
-+ } else if (!strcmp (argv [i], "-l")) {
-+ add_agent_options = 1;
-+ add_rfc3527_suboption = 1;
-+ if (++i == argc)
-+ usage();
-+
-+ status = interface_allocate(&uplink, MDL);
-+ if (status != ISC_R_SUCCESS)
-+ log_fatal("%s: interface_allocate: %s",
-+ argv[i],
-+ isc_result_totext(status));
-+ strcpy(uplink->name, argv[i]);
-+ interface_snorf(uplink, INTERFACE_REQUESTED);
-+ //interface_dereference(&uplink, MDL);
- } else if (!strcmp(argv[i], "-D")) {
- #ifdef DHCPv6
- if (local_family_set && (local_family == AF_INET6)) {
-@@ -711,12 +730,17 @@
- ip->addresses[0])))
- return;
-
-+ /* RFC3527: Replace giaddr address by uplink address. The original
-+ * giaddr will be used in the link selection sub-option */
-+ if (add_rfc3527_suboption)
-+ packet->giaddr = uplink->addresses[0];
-+
- /* If giaddr is not already set, Set it so the server can
- figure out what net it's from and so that we can later
- forward the response to the correct net. If it's already
- set, the response will be sent directly to the relay agent
- that set giaddr, so we won't see it. */
-- if (!packet->giaddr.s_addr)
-+ else if (!packet->giaddr.s_addr)
- packet->giaddr = ip->addresses[0];
- if (packet->hops < max_hop_count)
- packet->hops = packet->hops + 1;
-@@ -1090,6 +1114,9 @@
- optlen += ip->remote_id_len + 2; /* RAI_REMOTE_ID + len */
- }
-
-+ if (add_rfc3527_suboption)
-+ optlen += 6;
-+
- /* We do not support relay option fragmenting(multiple options to
- * support an option data exceeding 255 bytes).
- */
-@@ -1121,6 +1148,14 @@
- memcpy(sp, ip->remote_id, ip->remote_id_len);
- sp += ip->remote_id_len;
- }
-+
-+ if (add_rfc3527_suboption) {
-+ *sp++ = RAI_LINK_SELECT;
-+ *sp++ = 4u;
-+ memcpy(sp, &giaddr.s_addr, 4);
-+ sp += 4;
-+ log_debug ("RFC3527 link selection sub-option added: %s", inet_ntoa(giaddr));
-+ }
- } else {
- ++agent_option_errors;
- log_error("No room in packet (used %d of %d) "