isc-dhcp: update to 4.3.3 and migrate from oldplackageslilik-openwrt-22.03
@ -0,0 +1,241 @@ | |||||
# | |||||
# Copyright (C) 2006-2012 OpenWrt.org | |||||
# | |||||
# This is free software, licensed under the GNU General Public License v2. | |||||
# See /LICENSE for more information. | |||||
# | |||||
include $(TOPDIR)/rules.mk | |||||
PKG_NAME:=isc-dhcp | |||||
UPSTREAM_NAME:=dhcp | |||||
PKG_VERSION:=4.3.3 | |||||
PKG_RELEASE:=1 | |||||
PKG_LICENSE:=BSD-3-Clause | |||||
PKG_LICENSE_FILES:=LICENSE | |||||
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_FIXUP:=autoreconf | |||||
PKG_BUILD_PARALLEL:=1 | |||||
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(BUILD_VARIANT)/$(UPSTREAM_NAME)-$(PKG_VERSION) | |||||
include $(INCLUDE_DIR)/package.mk | |||||
define Package/isc-dhcp/Default | |||||
SECTION:=net | |||||
CATEGORY:=Network | |||||
SUBMENU:=IP Addresses and Names | |||||
TITLE:=ISC's DHCP | |||||
URL:=https://www.isc.org/software/dhcp | |||||
endef | |||||
define Package/isc-dhcp-relay-ipv4 | |||||
$(call Package/isc-dhcp/Default) | |||||
TITLE+= relay (without IPv6) | |||||
VARIANT:=ipv4 | |||||
endef | |||||
define Package/isc-dhcp-relay-ipv6 | |||||
$(call Package/isc-dhcp/Default) | |||||
TITLE+= relay (with IPv6) | |||||
VARIANT:=ipv6 | |||||
endef | |||||
define Package/isc-dhcp-relay/description | |||||
provides a means for relaying DHCP and BOOTP requests from a subnet to which | |||||
no DHCP server is directly connected to one or more DHCP servers on other | |||||
subnets. | |||||
endef | |||||
define Package/isc-dhcp-relay-ipv4/description | |||||
$(call Package/isc-dhcp-relay-ipv6/description) | |||||
This package is compiled with IPv4 support only. | |||||
endef | |||||
define Package/isc-dhcp-relay-ipv4/conffiles | |||||
/etc/config/dhcrelay | |||||
endef | |||||
define Package/isc-dhcp-relay-ipv6/description | |||||
$(call Package/isc-dhcp-relay/description) | |||||
This package is compiled with IPv4 and IPv6 support. | |||||
endef | |||||
define Package/isc-dhcp-relay-ipv6/conffiles | |||||
/etc/config/dhcrelay | |||||
endef | |||||
define Package/isc-dhcp-client-ipv4 | |||||
$(call Package/isc-dhcp/Default) | |||||
TITLE+= client (without IPv6) | |||||
VARIANT:=ipv4 | |||||
endef | |||||
define Package/isc-dhcp-client-ipv6 | |||||
$(call Package/isc-dhcp/Default) | |||||
TITLE+= client (with IPv6) | |||||
VARIANT:=ipv6 | |||||
endef | |||||
define Package/isc-dhcp-client/description | |||||
provides a means for configuring one or more network interfaces using the | |||||
Dynamic Host Configuration Protocol, BOOTP protocol, or if these protocols | |||||
fail, by statically assigning an address. | |||||
endef | |||||
define Package/isc-dhcp-client-ipv4/description | |||||
$(call Package/isc-dhcp-client/description) | |||||
This package is compiled with IPv4 support only. | |||||
endef | |||||
define Package/isc-dhcp-client-ipv6/description | |||||
$(call Package/isc-dhcp-client/description) | |||||
This package is compiled with IPv4 and IPv6 support. | |||||
endef | |||||
define Package/isc-dhcp-server-ipv4 | |||||
$(call Package/isc-dhcp/Default) | |||||
TITLE+= server (without IPv6) | |||||
VARIANT:=ipv4 | |||||
endef | |||||
define Package/isc-dhcp-server-ipv6 | |||||
$(call Package/isc-dhcp/Default) | |||||
TITLE+= server (with IPv6) | |||||
VARIANT:=ipv6 | |||||
endef | |||||
define Package/isc-dhcp-server/description | |||||
implements the Dynamic Host Configuration Protocol (DHCP) and the Internet | |||||
Bootstrap Protocol (BOOTP). | |||||
endef | |||||
define Package/isc-dhcp-server-ipv4/description | |||||
$(call Package/isc-dhcp-server/description) | |||||
This package is compiled with IPv4 support only. | |||||
endef | |||||
define Package/isc-dhcp-server-ipv6/description | |||||
$(call Package/isc-dhcp-server/description) | |||||
This package is compiled with IPv4 and IPv6 support. | |||||
endef | |||||
define Package/isc-dhcp-omshell-ipv4 | |||||
$(call Package/isc-dhcp/Default) | |||||
DEPENDS:= +isc-dhcp-server-ipv4 | |||||
TITLE+= omshell (without IPv6) | |||||
VARIANT:=ipv4 | |||||
endef | |||||
define Package/isc-dhcp-omshell-ipv6 | |||||
$(call Package/isc-dhcp/Default) | |||||
DEPENDS:= +isc-dhcp-server-ipv6 | |||||
TITLE+= omshell (with IPv6) | |||||
VARIANT:=ipv6 | |||||
endef | |||||
define Package/isc-dhcp-omshell/description | |||||
provides an interactive way to connect to, query, and possibly change, the ISC | |||||
DHCP Server's state via OMAPI, the Object Management API. | |||||
endef | |||||
define Package/isc-dhcp-omshell-ipv4/description | |||||
$(call Package/isc-dhcp-omshell/description) | |||||
This package is compiled with IPv4 support only. | |||||
endef | |||||
define Package/isc-dhcp-omshell-ipv6/description | |||||
$(call Package/isc-dhcp-omshell/description) | |||||
This package is compiled with IPv4 and IPv6 support. | |||||
endef | |||||
CONFIGURE_ARGS += \ | |||||
--disable-tracing \ | |||||
--enable-paranoia \ | |||||
--disable-dependency-tracking \ | |||||
--with-randomdev=/dev/urandom \ | |||||
ac_cv_file__dev_random=yes | |||||
ifeq ($(BUILD_VARIANT),ipv4) | |||||
CONFIGURE_ARGS += --disable-dhcpv6 | |||||
endif | |||||
ifeq ($(BUILD_VARIANT),ipv6) | |||||
CONFIGURE_ARGS += --enable-dhcpv6 | |||||
endif | |||||
define Build/Compile | |||||
$(MAKE) -C $(PKG_BUILD_DIR) \ | |||||
DESTDIR="$(PKG_INSTALL_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 install-exec | |||||
endef | |||||
define Package/isc-dhcp-relay-$(BUILD_VARIANT)/install | |||||
$(INSTALL_DIR) $(1)/usr/sbin | |||||
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/dhcrelay $(1)/usr/sbin | |||||
$(INSTALL_DIR) $(1)/etc/config | |||||
$(INSTALL_DATA) ./files/etc/config/dhcrelay $(1)/etc/config | |||||
$(INSTALL_DIR) $(1)/etc/init.d | |||||
$(INSTALL_BIN) ./files/dhcrelay4.init $(1)/etc/init.d/dhcrelay4 | |||||
endef | |||||
define Package/isc-dhcp-server-$(BUILD_VARIANT)/install | |||||
$(INSTALL_DIR) $(1)/usr/sbin $(1)/etc | |||||
$(INSTALL_DIR) $(1)/usr/sbin $(1)/etc/init.d | |||||
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/dhcpd $(1)/usr/sbin | |||||
$(INSTALL_BIN) ./files/dhcpd.init $(1)/etc/init.d/dhcpd | |||||
$(INSTALL_BIN) ./files/dhcpd.conf $(1)/etc | |||||
ifeq ($(BUILD_VARIANT),ipv6) | |||||
$(INSTALL_BIN) ./files/dhcpd6.init $(1)/etc/init.d/dhcpd6 | |||||
$(INSTALL_BIN) ./files/dhcpd6.conf $(1)/etc | |||||
endif | |||||
endef | |||||
define Package/isc-dhcp-server-ipv4/conffiles | |||||
/etc/dhcpd.conf | |||||
endef | |||||
define Package/isc-dhcp-server-ipv6/conffiles | |||||
/etc/dhcpd6.conf | |||||
endef | |||||
define Package/isc-dhcp-client-$(BUILD_VARIANT)/install | |||||
$(INSTALL_DIR) $(1)/usr/sbin $(1)/etc | |||||
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/dhclient $(1)/usr/sbin | |||||
$(INSTALL_BIN) ./files/dhclient-script $(1)/usr/sbin/ | |||||
ifeq ($(BUILD_VARIANT),ipv6) | |||||
$(INSTALL_BIN) ./files/dhclient6.conf $(1)/etc | |||||
endif | |||||
endef | |||||
define Package/isc-dhcp-client-ipv4/conffiles | |||||
/etc/dhclient.conf | |||||
endef | |||||
define Package/isc-dhcp-client-ipv6/conffiles | |||||
/etc/dhclient6.conf | |||||
endef | |||||
define Package/isc-dhcp-omshell-$(BUILD_VARIANT)/install | |||||
$(INSTALL_DIR) $(1)/usr/bin | |||||
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/omshell $(1)/usr/bin | |||||
endef | |||||
$(eval $(call BuildPackage,isc-dhcp-relay-ipv4)) | |||||
$(eval $(call BuildPackage,isc-dhcp-server-ipv4)) | |||||
$(eval $(call BuildPackage,isc-dhcp-client-ipv4)) | |||||
$(eval $(call BuildPackage,isc-dhcp-omshell-ipv4)) | |||||
$(eval $(call BuildPackage,isc-dhcp-relay-ipv6)) | |||||
$(eval $(call BuildPackage,isc-dhcp-server-ipv6)) | |||||
$(eval $(call BuildPackage,isc-dhcp-client-ipv6)) | |||||
$(eval $(call BuildPackage,isc-dhcp-omshell-ipv6)) |
@ -0,0 +1,281 @@ | |||||
#!/bin/sh | |||||
make_resolv_conf() { | |||||
if [ x"$new_domain_name_servers" != x ]; then | |||||
cat /dev/null > /etc/resolv.conf.dhclient | |||||
chmod 644 /etc/resolv.conf.dhclient | |||||
if [ x"$new_domain_search" != x ]; then | |||||
echo search $new_domain_search >> /etc/resolv.conf.dhclient | |||||
elif [ x"$new_domain_name" != x ]; then | |||||
# Note that the DHCP 'Domain Name Option' is really just a domain | |||||
# name, and that this practice of using the domain name option as | |||||
# a search path is both nonstandard and deprecated. | |||||
echo search $new_domain_name >> /etc/resolv.conf.dhclient | |||||
fi | |||||
for nameserver in $new_domain_name_servers; do | |||||
echo nameserver $nameserver >>/etc/resolv.conf.dhclient | |||||
done | |||||
elif [ "x${new_dhcp6_name_servers}" != x ] ; then | |||||
cat /dev/null > /etc/resolv.conf.dhclient6 | |||||
chmod 644 /etc/resolv.conf.dhclient6 | |||||
if [ "x${new_dhcp6_domain_search}" != x ] ; then | |||||
echo search ${new_dhcp6_domain_search} >> /etc/resolv.conf.dhclient6 | |||||
fi | |||||
for nameserver in ${new_dhcp6_name_servers} ; do | |||||
echo nameserver ${nameserver} >> /etc/resolv.conf.dhclient6 | |||||
done | |||||
fi | |||||
# if both v4 and v6 clients are running, concatenate results | |||||
cat /etc/resolv.conf.* > /etc/resolv.conf | |||||
} | |||||
# Must be used on exit. Invokes the local dhcp client exit hooks, if any. | |||||
exit_with_hooks() { | |||||
exit_status=$1 | |||||
if [ -f /etc/dhclient-exit-hooks ]; then | |||||
. /etc/dhclient-exit-hooks | |||||
fi | |||||
# probably should do something with exit status of the local script | |||||
exit $exit_status | |||||
} | |||||
# Invoke the local dhcp client enter hooks, if they exist. | |||||
if [ -f /etc/dhclient-enter-hooks ]; then | |||||
exit_status=0 | |||||
. /etc/dhclient-enter-hooks | |||||
# allow the local script to abort processing of this state | |||||
# local script must set exit_status variable to nonzero. | |||||
if [ $exit_status -ne 0 ]; then | |||||
exit $exit_status | |||||
fi | |||||
fi | |||||
### | |||||
### DHCPv4 Handlers | |||||
### | |||||
if [ x$new_broadcast_address != x ]; then | |||||
new_broadcast_arg="broadcast $new_broadcast_address" | |||||
fi | |||||
if [ x$new_subnet_mask != x ]; then | |||||
new_subnet_arg="netmask $new_subnet_mask" | |||||
fi | |||||
if [ x$alias_subnet_mask != x ]; then | |||||
alias_subnet_arg="netmask $alias_subnet_mask" | |||||
fi | |||||
if [ x$reason = xMEDIUM ]; then | |||||
# Linux doesn't do mediums (ok, ok, media). | |||||
exit_with_hooks 0 | |||||
fi | |||||
if [ x$reason = xPREINIT ]; then | |||||
if [ x$alias_ip_address != x ]; then | |||||
# Bring down alias interface. Its routes will disappear too. | |||||
ifconfig $interface:0- 0.0.0.0 | |||||
fi | |||||
ifconfig $interface 0.0.0.0 up | |||||
# We need to give the kernel some time to get the interface up. | |||||
sleep 1 | |||||
exit_with_hooks 0 | |||||
fi | |||||
if [ x$reason = xARPCHECK ] || [ x$reason = xARPSEND ]; then | |||||
exit_with_hooks 0 | |||||
fi | |||||
if [ x$reason = xBOUND ] || [ x$reason = xRENEW ] || \ | |||||
[ x$reason = xREBIND ] || [ x$reason = xREBOOT ]; then | |||||
current_hostname=`hostname` | |||||
if [ x$current_hostname = x ] || \ | |||||
[ x$current_hostname = x$old_host_name ]; then | |||||
if [ x$current_hostname = x ] || \ | |||||
[ x$new_host_name != x$old_host_name ]; then | |||||
hostname $new_host_name | |||||
fi | |||||
fi | |||||
if [ x$old_ip_address != x ] && [ x$alias_ip_address != x ] && \ | |||||
[ x$alias_ip_address != x$old_ip_address ]; then | |||||
# Possible new alias. Remove old alias. | |||||
ifconfig $interface:0- 0.0.0.0 | |||||
fi | |||||
if [ x$old_ip_address != x ] && [ x$old_ip_address != x$new_ip_address ]; then | |||||
# IP address changed. Bringing down the interface will delete all routes, | |||||
# and clear the ARP cache. | |||||
ifconfig $interface 0.0.0.0 down | |||||
fi | |||||
if [ x$old_ip_address = x ] || [ x$old_ip_address != x$new_ip_address ] || \ | |||||
[ x$reason = xBOUND ] || [ x$reason = xREBOOT ]; then | |||||
ifconfig $interface $new_ip_address $new_subnet_arg \ | |||||
$new_broadcast_arg | |||||
for router in $new_routers; do | |||||
if [ "x$new_subnet_mask" = "x255.255.255.255" ] ; then | |||||
route add -host $router dev $interface | |||||
fi | |||||
route add default gw $router | |||||
done | |||||
fi | |||||
if [ x$new_ip_address != x$alias_ip_address ] && [ x$alias_ip_address != x ]; | |||||
then | |||||
ifconfig $interface:0- 0.0.0.0 | |||||
ifconfig $interface:0 $alias_ip_address $alias_subnet_arg | |||||
route add -host $alias_ip_address $interface:0 | |||||
fi | |||||
make_resolv_conf | |||||
exit_with_hooks 0 | |||||
fi | |||||
if [ x$reason = xEXPIRE ] || [ x$reason = xFAIL ] || [ x$reason = xRELEASE ] \ | |||||
|| [ x$reason = xSTOP ]; then | |||||
if [ x$alias_ip_address != x ]; then | |||||
# Turn off alias interface. | |||||
ifconfig $interface:0- 0.0.0.0 | |||||
fi | |||||
if [ x$old_ip_address != x ]; then | |||||
# Shut down interface, which will delete routes and clear arp cache. | |||||
ifconfig $interface 0.0.0.0 down | |||||
fi | |||||
if [ x$alias_ip_address != x ]; then | |||||
ifconfig $interface:0 $alias_ip_address $alias_subnet_arg | |||||
route add -host $alias_ip_address $interface:0 | |||||
fi | |||||
# remove v4 dns configuration for this interface | |||||
rm /etc/resolv.conf.dhclient | |||||
cat /etc/resolv.conf.* > /etc/resolv.conf | |||||
exit_with_hooks 0 | |||||
fi | |||||
if [ x$reason = xTIMEOUT ]; then | |||||
if [ x$alias_ip_address != x ]; then | |||||
ifconfig $interface:0- 0.0.0.0 | |||||
fi | |||||
ifconfig $interface $new_ip_address $new_subnet_arg \ | |||||
$new_broadcast_arg | |||||
set $new_routers | |||||
if ping -q -c 1 $1; then | |||||
if [ x$new_ip_address != x$alias_ip_address ] && \ | |||||
[ x$alias_ip_address != x ]; then | |||||
ifconfig $interface:0 $alias_ip_address $alias_subnet_arg | |||||
route add -host $alias_ip_address dev $interface:0 | |||||
fi | |||||
for router in $new_routers; do | |||||
if [ "x$new_subnet_mask" = "x255.255.255.255" ] ; then | |||||
route add -host $router dev $interface | |||||
fi | |||||
route add default gw $router | |||||
done | |||||
make_resolv_conf | |||||
exit_with_hooks 0 | |||||
fi | |||||
ifconfig $interface 0.0.0.0 down | |||||
exit_with_hooks 1 | |||||
fi | |||||
### | |||||
### DHCPv6 Handlers | |||||
### | |||||
if [ x$reason = xPREINIT6 ]; then | |||||
# Ensure interface is up. | |||||
ifconfig ${interface} up | |||||
# Remove any stale addresses from aborted clients. | |||||
ip -f inet6 addr flush dev ${interface} scope global | |||||
exit_with_hooks 0 | |||||
fi | |||||
if [ x${old_ip6_prefix} != x ] || [ x${new_ip6_prefix} != x ] ; then | |||||
echo Prefix ${reason} old=${old_ip6_prefix} new=${new_ip6_prefix} | |||||
exit_with_hooks 0 | |||||
fi | |||||
if [ x$reason = xBOUND6 ]; then | |||||
if [ x${new_ip6_address} = x ] || [ x${new_ip6_prefixlen} = x ] ; then | |||||
exit_with_hooks 2; | |||||
fi | |||||
ifconfig ${interface} add ${new_ip6_address}/${new_ip6_prefixlen} | |||||
# Check for nameserver options. | |||||
make_resolv_conf | |||||
### << | |||||
# Set up softwire tunnel | |||||
if [ x${new_dhcp6_softwire} != x ] ; then | |||||
/etc/init.d/dhclient stop | |||||
ifconfig ${interface} 0.0.0.0 | |||||
ip -6 tunnel add tun0 mode ipip6 \ | |||||
remote ${new_dhcp6_softwire} \ | |||||
local ${new_ip6_address} \ | |||||
dev ${interface} encaplimit none | |||||
ip link set tun0 up | |||||
ip route add default dev tun0 | |||||
fi | |||||
### >> | |||||
exit_with_hooks 0 | |||||
fi | |||||
if [ x$reason = xRENEW6 ] || [ x$reason = xREBIND6 ]; then | |||||
if [ x${new_ip6_address} = x ] || [ x${new_ip6_prefixlen} = x ] ; then | |||||
exit_with_hooks 2; | |||||
fi | |||||
ifconfig ${interface} add ${new_ip6_address}/${new_ip6_prefixlen} | |||||
# Make sure nothing has moved around on us. | |||||
# Nameservers/domains/etc. | |||||
if [ "x${new_dhcp6_name_servers}" != "x${old_dhcp6_name_servers}" ] || | |||||
[ "x${new_dhcp6_domain_search}" != "x${old_dhcp6_domain_search}" ] ; then | |||||
make_resolv_conf | |||||
fi | |||||
exit_with_hooks 0 | |||||
fi | |||||
if [ x$reason = xDEPREF6 ]; then | |||||
if [ x${new_ip6_address} = x ] ; then | |||||
exit_with_hooks 2; | |||||
fi | |||||
# Busybox ifconfig has no way to communicate this to the kernel, so ignore it | |||||
exit_with_hooks 0 | |||||
fi | |||||
if [ x$reason = xEXPIRE6 -o x$reason = xRELEASE6 -o x$reason = xSTOP6 ]; then | |||||
if [ x${old_ip6_address} = x ] || [ x${old_ip6_prefixlen} = x ] ; then | |||||
exit_with_hooks 2; | |||||
fi | |||||
ifconfig ${interface} del ${old_ip6_address}/${old_ip6_prefixlen} | |||||
# remove v6 dns configuration for this interface | |||||
rm /etc/resolv.conf.dhclient6 | |||||
cat /etc/resolv.conf.* > /etc/resolv.conf | |||||
### << | |||||
# Tear down softwire tunnel | |||||
if [ x${old_dhcp6_softwire} != x ] ; then | |||||
ip link set tun0 down | |||||
ip tunnel del tun0 | |||||
fi | |||||
### >> | |||||
exit_with_hooks 0 | |||||
fi | |||||
exit_with_hooks 0 |
@ -0,0 +1,30 @@ | |||||
#!/bin/sh /etc/rc.common | |||||
START=60 | |||||
lease_file=/var/dhclient.leases | |||||
config_file=/etc/dhclient.conf | |||||
pid_file=/var/run/dhclient.pid | |||||
script_file=/usr/sbin/dhclient-script | |||||
start() { | |||||
/usr/sbin/dhclient -q -nw -cf $config_file -lf $lease_file -pf $pid_file -sf $script_file `/sbin/uci get network.wan.ifname` | |||||
if [ $? -ne 0 ]; then | |||||
return 1 | |||||
fi | |||||
} | |||||
stop() { | |||||
if [ ! -e $pid_file ]; then | |||||
return 1 | |||||
fi | |||||
kill -9 `cat $pid_file` | |||||
if [ $? -ne 0 ]; then | |||||
return 1 | |||||
fi | |||||
rm $pid_file | |||||
} |
@ -0,0 +1,2 @@ | |||||
option dhcp6.softwire code 54 = ip6-address; | |||||
also request dhcp6.softwire; |
@ -0,0 +1,30 @@ | |||||
#!/bin/sh /etc/rc.common | |||||
START=60 | |||||
lease_file=/var/dhclient6.leases | |||||
config_file=/etc/dhclient6.conf | |||||
pid_file=/var/run/dhclient6.pid | |||||
script_file=/usr/sbin/dhclient-script | |||||
start() { | |||||
/usr/sbin/dhclient -q -nw -6 -cf $config_file -lf $lease_file -pf $pid_file -sf $script_file `/sbin/uci get network.wan.ifname` | |||||
if [ $? -ne 0 ]; then | |||||
return 1 | |||||
fi | |||||
} | |||||
stop() { | |||||
if [ ! -e $pid_file ]; then | |||||
return 1 | |||||
fi | |||||
kill -9 `cat $pid_file` | |||||
if [ $? -ne 0 ]; then | |||||
return 1 | |||||
fi | |||||
rm $pid_file | |||||
} |
@ -0,0 +1,13 @@ | |||||
# dhcpd.conf | |||||
authoritative; | |||||
default-lease-time 3600; | |||||
max-lease-time 86400; | |||||
option domain-name-servers 192.168.1.1; | |||||
subnet 192.168.1.0 netmask 255.255.255.0 { | |||||
range 192.168.1.10 192.168.1.50; | |||||
option routers 192.168.1.1; | |||||
} |
@ -0,0 +1,33 @@ | |||||
#!/bin/sh /etc/rc.common | |||||
START=65 | |||||
lease_file=/tmp/dhcpd.leases | |||||
config_file=/etc/dhcpd.conf | |||||
pid_file=/var/run/dhcpd.pid | |||||
start() { | |||||
if [ ! -e $lease_file ]; then | |||||
touch $lease_file | |||||
fi | |||||
/usr/sbin/dhcpd -q -cf $config_file -lf $lease_file -pf $pid_file $dhcp_ifs | |||||
if [ $? -ne 0 ]; then | |||||
return 1 | |||||
fi | |||||
} | |||||
stop() { | |||||
if [ ! -e $pid_file ]; then | |||||
return 1 | |||||
fi | |||||
kill -9 `cat $pid_file` | |||||
if [ $? -ne 0 ]; then | |||||
return 1 | |||||
fi | |||||
rm $pid_file | |||||
} |
@ -0,0 +1,30 @@ | |||||
# dhcpd6.conf | |||||
authoritative; | |||||
default-lease-time 3600; | |||||
max-lease-time 86400; | |||||
# Enable RFC 5007 support | |||||
#allow leasequery; | |||||
# Global definitions for name server address(es) and domain search list | |||||
#option dhcp6.name-servers 3ffe:501:ffff:100:200:ff:fe00:3f3e; | |||||
#option dhcp6.domain-search "test.example.com","example.com"; | |||||
# Set preference to 255 (maximum) in order to avoid waiting for | |||||
# additional servers when there is only one | |||||
#option dhcp6.preference 255; | |||||
# Server side command to enable rapid-commit (2 packet exchange) | |||||
#option dhcp6.rapid-commit; | |||||
# The delay before information-request refresh | |||||
# (minimum is 10 minutes, maximum one day, default is to not refresh) | |||||
# (set to 6 hours) | |||||
#option dhcp6.info-refresh-time 3600; | |||||
subnet6 3ffe:501:ffff:101::/64 { | |||||
# Use the whole /64 prefix for clients | |||||
range6 3ffe:501:ffff:101:: /64; | |||||
} |
@ -0,0 +1,33 @@ | |||||
#!/bin/sh /etc/rc.common | |||||
START=65 | |||||
lease_file=/var/dhcpd6.leases | |||||
config_file=/etc/dhcpd6.conf | |||||
pid_file=/var/run/dhcpd6.pid | |||||
start() { | |||||
if [ ! -e $lease_file ]; then | |||||
touch $lease_file | |||||
fi | |||||
/usr/sbin/dhcpd -q -6 -cf $config_file -lf $lease_file -pf $pid_file $dhcp_ifs | |||||
if [ $? -ne 0 ]; then | |||||
return 1 | |||||
fi | |||||
} | |||||
stop() { | |||||
if [ ! -e $pid_file ]; then | |||||
return 1 | |||||
fi | |||||
kill -9 `cat $pid_file` | |||||
if [ $? -ne 0 ]; then | |||||
return 1 | |||||
fi | |||||
rm $pid_file | |||||
} |
@ -0,0 +1,53 @@ | |||||
#!/bin/sh /etc/rc.common | |||||
# Copyright (C) 2012 OpenWrt.org | |||||
START=91 | |||||
SERVICE_SIG="KILL" | |||||
SERVICE_PID_FILE="/var/run/dhcrelay4.pid" | |||||
SERVICE_USE_PID=1 | |||||
start() { | |||||
. /lib/functions/network.sh | |||||
config_load dhcrelay | |||||
local args="" | |||||
local enabled | |||||
config_get_bool enabled ipv4 enabled 0 | |||||
[ "$enabled" -eq 0 ] && return 0 | |||||
# listen interfaces | |||||
local interfaces | |||||
local ifname | |||||
config_get interfaces ipv4 interfaces | |||||
for net in $interfaces; do | |||||
if network_get_device ifname "$net"; then | |||||
append args "-i $ifname" | |||||
fi | |||||
done | |||||
# link selection sub-option (RFC3527) | |||||
local link_selection | |||||
config_get link_selection ipv4 link_selection | |||||
if network_get_device ifname "$link_selection"; then | |||||
append args "-l $ifname" | |||||
fi | |||||
# relay mode | |||||
local relay_mode | |||||
config_get relay_mode ipv4 relay_mode | |||||
[ -n "$relay_mode" ] && append args "-m $relay_mode" | |||||
# dhcp server address | |||||
local server | |||||
config_get server ipv4 dhcpserver | |||||
[ -n "$server" ] || return 0 | |||||
append args "$server" | |||||
service_start /usr/sbin/dhcrelay -4 -q \ | |||||
-pf $SERVICE_PID_FILE $args | |||||
} | |||||
stop() { | |||||
service_stop /usr/sbin/dhcrelay | |||||
} |
@ -0,0 +1,42 @@ | |||||
#!/bin/sh /etc/rc.common | |||||
# Copyright (C) 2012 OpenWrt.org | |||||
START=91 | |||||
SERVICE_SIG="KILL" | |||||
SERVICE_PID_FILE="/var/run/dhcrelay6.pid" | |||||
SERVICE_USE_PID=1 | |||||
start() { | |||||
local relay_dhcpserver | |||||
local relay_upper | |||||
local relay_lowers | |||||
local relay_lower_args | |||||
config_load dhcrelay | |||||
config_get relay_dhcpserver ipv6 dhcpserver | |||||
config_get relay_upper ipv6 upper | |||||
config_get relay_lowers ipv6 lower | |||||
# If a specific DHCP server is specified, | |||||
# add it to the upper interface. | |||||
if [ -n "$relay_dhcpserver" ]; then | |||||
relay_upper="${relay_dhcpserver}%$relay_upper" | |||||
fi | |||||
# Add all lower interfaces at the end. | |||||
if [ -n "$relay_lowers" ]; then | |||||
local relay_lower | |||||
for relay_lower in $relay_lowers; do | |||||
append relay_lower_args "-l $relay_lower" | |||||
done | |||||
fi | |||||
service_start /usr/sbin/dhcrelay -6 -q \ | |||||
-pf $SERVICE_PID_FILE \ | |||||
-u $relay_upper $relay_lower_args | |||||
} | |||||
stop() { | |||||
service_stop /usr/sbin/dhcrelay | |||||
} |
@ -0,0 +1,27 @@ | |||||
config dhcrelay ipv4 | |||||
option 'enabled' '0' | |||||
# IP address of the server | |||||
option 'dhcpserver' '192.0.2.10' | |||||
# network interfaces to listen on (e.g. lan or wan) | |||||
option 'interfaces' '' | |||||
# What to do about packets that already have a relay option: | |||||
# 'append': Forward and append our own relay option | |||||
# 'replace': Forward, but replace theirs with ours (default) | |||||
# 'forward': Forward without changes | |||||
# 'discard': Don't forward | |||||
option 'relay_mode' '' | |||||
# enable RFC3527 link selection sub-option and use the IP address of | |||||
# the specified network interface as "uplink" IP address (e.g. wan) | |||||
option 'link_selection' '' | |||||
config dhcrelay ipv6 | |||||
# option dhcpserver '2001:db8:1::1' | |||||
option upper 'eth1' | |||||
list lower 'eth0.2' | |||||
list lower 'eth0.3' | |||||
@ -0,0 +1,30 @@ | |||||
diff --git a/bind/Makefile.in b/bind/Makefile.in | |||||
index bd784c6..5950d19 100644 | |||||
--- a/bind/Makefile.in | |||||
+++ b/bind/Makefile.in | |||||
@@ -85,13 +85,13 @@ bind2: | |||||
echo Bind export libraries already installed ; \ | |||||
else \ | |||||
echo Building BIND Export libraries - this takes some time. ;\ | |||||
- (cd ${bindsrcdir}/lib/export ; \ | |||||
- echo building in `pwd` ; \ | |||||
- MAKE=${GMAKE} ${GMAKE} >> ${binddir}/build.log) ; \ | |||||
+ (cd ${bindsrcdir}/lib/export/dns ; \ | |||||
+ echo building gen using ${BUILD_CC} in `pwd` ; \ | |||||
+ $(MAKE) CC=${BUILD_CC} CFLAGS="-O2" LIBS="" gen) ; \ | |||||
\ | |||||
echo Installing BIND Export libraries to ${binddir}. ; \ | |||||
(cd ${bindsrcdir}/lib/export ; \ | |||||
- MAKE=${GMAKE} ${GMAKE} install > ${binddir}/install.log) ; \ | |||||
+ $(MAKE) DESTDIR="" install > ${binddir}/build.log) ; \ | |||||
fi | |||||
clean: | |||||
@@ -100,6 +100,7 @@ clean: | |||||
# Include the following so that this Makefile is happy when the parent | |||||
# tries to use them. | |||||
+install-exec: | |||||
distdir: | |||||
@ -0,0 +1,100 @@ | |||||
--- 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) " |
@ -0,0 +1,19 @@ | |||||
--- a/bind/Makefile.in | |||||
+++ b/bind/Makefile.in | |||||
@@ -63,8 +63,14 @@ | |||||
else \ | |||||
echo Configuring BIND Export libraries for DHCP. ; \ | |||||
rm -rf ${cleandirs} ${cleanfiles} ; \ | |||||
- (cd ${bindsrcdir} && \ | |||||
- ./configure ${bindconfig} > ${binddir}/configure.log); \ | |||||
+ (cd ${bindsrcdir} && export CC=${CROSS_CC} && \ | |||||
+ ./configure --disable-atomic --disable-kqueue \ | |||||
+ --disable-epoll --disable-devpoll --without-openssl \ | |||||
+ --without-libxml2 --enable-exportlib \ | |||||
+ --enable-threads=no \ | |||||
+ --with-export-includedir=${binddir}/include \ | |||||
+ --with-export-libdir=${binddir}/lib --with-gssapi=no \ | |||||
+ --without-randomdev > ${binddir}/configure.log); \ | |||||
fi | |||||
atf: |