From: Luka Perkov Date: Fri, 27 Jul 2012 20:59:55 +0000 (+0000) Subject: [packages] dhcp: rename to isc-dhcp and fix ipv6 support X-Git-Url: http://git.openwrt.org/?p=openwrt%2Fsvn-archive%2Farchive.git;a=commitdiff_plain;hb=003a9d68a15e044f25fa302a805d46c7eccff74d [packages] dhcp: rename to isc-dhcp and fix ipv6 support SVN-Revision: 32897 --- diff --git a/net/dhcp/Makefile b/net/dhcp/Makefile deleted file mode 100644 index af07a8fdb1..0000000000 --- a/net/dhcp/Makefile +++ /dev/null @@ -1,132 +0,0 @@ -# -# 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:=dhcp -PKG_VERSION:=4.2.4 -PKG_RELEASE:=1 - -PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz -PKG_SOURCE_URL:=ftp://ftp.isc.org/isc/dhcp/$(PKG_VERSION) -PKG_MD5SUM:=c244cefe663d43100af757d8ff625a1f - -PKG_FIXUP:=autoreconf -PKG_BUILD_PARALLEL:=1 - -include $(INCLUDE_DIR)/package.mk - -define Package/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/dhcp-relay - $(call Package/dhcp/Default) - TITLE+= relay -endef - -define Package/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/dhcp-client - $(call Package/dhcp/Default) - TITLE+= client -endef - -define Package/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/dhcp-server - $(call Package/dhcp/Default) - TITLE+= server -endef - -define Package/dhcp-server/description - implements the Dynamic Host Configuration Protocol (DHCP) and the Internet - Bootstrap Protocol (BOOTP). -endef - -define Package/dhcp-omshell - $(call Package/dhcp/Default) - DEPENDS:= +dhcp-server - TITLE+= omshell -endef - -define Package/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 - -CONFIGURE_ARGS += \ - --disable-tracing \ - --enable-paranoia \ - --disable-dependency-tracking \ - ac_cv_file__dev_random=yes - -ifeq ($(CONFIG_DHCP4_ENABLE_IPV6),y) - CONFIGURE_ARGS += --enable-dhcpv6 -else - CONFIGURE_ARGS += --disable-dhcpv6 -endif - -define Build/Compile - $(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)" \ - ac_cv_file__dev_random=yes \ - all install-exec -endef - -define Package/dhcp-relay/install - $(INSTALL_DIR) $(1)/usr/sbin - $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/dhcrelay $(1)/usr/sbin/ -endef - -define Package/dhcp-server/install - $(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 ($(CONFIG_DHCP4_ENABLE_IPV6),y) - $(INSTALL_BIN) ./files/dhcpd6.init $(1)/etc/init.d/dhcpd6 - $(INSTALL_BIN) ./files/dhcpd6.conf $(1)/etc -endif -endef - -define Package/dhcp-client/install - $(INSTALL_DIR) $(1)/usr/sbin $(1)/etc/init.d - $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/dhclient $(1)/usr/sbin/ - $(INSTALL_BIN) ./files/dhclient-script $(1)/usr/sbin/ - $(INSTALL_BIN) ./files/dhclient.init $(1)/etc/init.d/dhclient -ifeq ($(CONFIG_DHCP4_ENABLE_IPV6),y) - $(INSTALL_BIN) ./files/dhclient6.init $(1)/etc/init.d/dhclient6 - $(INSTALL_BIN) ./files/dhclient6.conf $(1)/etc -endif -endef - -define Package/dhcp-omshell/install - $(INSTALL_DIR) $(1)/usr/bin - $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/omshell $(1)/usr/bin/ -endef - -$(eval $(call BuildPackage,dhcp-relay)) -$(eval $(call BuildPackage,dhcp-server)) -$(eval $(call BuildPackage,dhcp-client)) -$(eval $(call BuildPackage,dhcp-omshell)) diff --git a/net/dhcp/files/dhclient-script b/net/dhcp/files/dhclient-script deleted file mode 100644 index 4afebc0ad2..0000000000 --- a/net/dhcp/files/dhclient-script +++ /dev/null @@ -1,281 +0,0 @@ -#!/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 diff --git a/net/dhcp/files/dhclient.init b/net/dhcp/files/dhclient.init deleted file mode 100644 index b5ffb411d0..0000000000 --- a/net/dhcp/files/dhclient.init +++ /dev/null @@ -1,30 +0,0 @@ -#!/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 -} diff --git a/net/dhcp/files/dhclient6.conf b/net/dhcp/files/dhclient6.conf deleted file mode 100644 index ab446990cf..0000000000 --- a/net/dhcp/files/dhclient6.conf +++ /dev/null @@ -1,2 +0,0 @@ -option dhcp6.softwire code 54 = ip6-address; -also request dhcp6.softwire; diff --git a/net/dhcp/files/dhclient6.init b/net/dhcp/files/dhclient6.init deleted file mode 100644 index 630c3f25f1..0000000000 --- a/net/dhcp/files/dhclient6.init +++ /dev/null @@ -1,30 +0,0 @@ -#!/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 -} diff --git a/net/dhcp/files/dhcpd.conf b/net/dhcp/files/dhcpd.conf deleted file mode 100644 index 11985ce9e8..0000000000 --- a/net/dhcp/files/dhcpd.conf +++ /dev/null @@ -1,13 +0,0 @@ -# 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; -} diff --git a/net/dhcp/files/dhcpd.init b/net/dhcp/files/dhcpd.init deleted file mode 100644 index b34d79848a..0000000000 --- a/net/dhcp/files/dhcpd.init +++ /dev/null @@ -1,33 +0,0 @@ -#!/bin/sh /etc/rc.common - -START=65 - -lease_file=/var/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 - - 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 -} diff --git a/net/dhcp/files/dhcpd6.conf b/net/dhcp/files/dhcpd6.conf deleted file mode 100644 index 1c0baaec9b..0000000000 --- a/net/dhcp/files/dhcpd6.conf +++ /dev/null @@ -1,30 +0,0 @@ -# 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; -} diff --git a/net/dhcp/files/dhcpd6.init b/net/dhcp/files/dhcpd6.init deleted file mode 100644 index e52f7cfdd8..0000000000 --- a/net/dhcp/files/dhcpd6.init +++ /dev/null @@ -1,33 +0,0 @@ -#!/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 - - 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 -} diff --git a/net/dhcp/patches/000-compile.patch b/net/dhcp/patches/000-compile.patch deleted file mode 100644 index 7f96ce0a79..0000000000 --- a/net/dhcp/patches/000-compile.patch +++ /dev/null @@ -1,24 +0,0 @@ ---- a/bind/Makefile -+++ b/bind/Makefile -@@ -61,9 +61,12 @@ all: - echo Bind export libraries already installed ; \ - else \ - echo Building BIND Export libraries - this takes some time. ;\ -+ (cd ${bindsrcdir}/lib/export/dns ; \ -+ echo building gen using ${BUILD_CC} in `pwd` ; \ -+ $(MAKE) CC=${BUILD_CC} CFLAGS="-O2" LIBS="" gen) ; \ - (cd ${bindsrcdir}/lib/export ; \ - echo building in `pwd` ; \ -- MAKE=${GMAKE} ${GMAKE} > ${binddir}/build.log) ; \ -+ $(MAKE) DESTDIR="" install > ${binddir}/build.log) ; \ - \ - echo Installing BIND Export libraries to ${binddir}. ; \ - (cd ${bindsrcdir}/lib/export ; \ -@@ -77,6 +80,7 @@ clean: - - # Include the following so that this Makefile is happy when the parent - # tries to use them. -+install-exec: - - distdir: - diff --git a/net/isc-dhcp/Makefile b/net/isc-dhcp/Makefile new file mode 100644 index 0000000000..68f96f2550 --- /dev/null +++ b/net/isc-dhcp/Makefile @@ -0,0 +1,212 @@ +# +# 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.2.4 +PKG_RELEASE:=1 + +PKG_SOURCE:=$(UPSTREAM_NAME)-$(PKG_VERSION).tar.gz +PKG_SOURCE_URL:=ftp://ftp.isc.org/isc/dhcp/$(PKG_VERSION) +PKG_MD5SUM:=c244cefe663d43100af757d8ff625a1f + +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) + DEPENDS:= @IPV6 + 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-ipv6/description +$(call Package/isc-dhcp-relay/description) + This package is compiled with IPv4 and IPv6 support. +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) + DEPENDS:= @IPV6 + 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) + DEPENDS:= @IPV6 + 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:= @IPV6 +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 \ + 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)" \ + host_alias="$(GNU_TARGET_NAME)" \ + target_alias="$(GNU_TARGET_NAME)" \ + build_alias="$(GNU_HOST_NAME)" \ + ac_cv_file__dev_random=yes \ + 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 +endef + +define Package/isc-dhcp-server-$(BUILD_VARIANT)/install + $(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-client-$(BUILD_VARIANT)/install + $(INSTALL_DIR) $(1)/usr/sbin $(1)/etc/init.d + $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/dhclient $(1)/usr/sbin + $(INSTALL_BIN) ./files/dhclient-script $(1)/usr/sbin/ + $(INSTALL_BIN) ./files/dhclient.init $(1)/etc/init.d/dhclient +ifeq ($(BUILD_VARIANT),ipv6) + $(INSTALL_BIN) ./files/dhclient6.init $(1)/etc/init.d/dhclient6 + $(INSTALL_BIN) ./files/dhclient6.conf $(1)/etc +endif +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)) diff --git a/net/isc-dhcp/files/dhclient-script b/net/isc-dhcp/files/dhclient-script new file mode 100644 index 0000000000..4afebc0ad2 --- /dev/null +++ b/net/isc-dhcp/files/dhclient-script @@ -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 diff --git a/net/isc-dhcp/files/dhclient.init b/net/isc-dhcp/files/dhclient.init new file mode 100644 index 0000000000..b5ffb411d0 --- /dev/null +++ b/net/isc-dhcp/files/dhclient.init @@ -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 +} diff --git a/net/isc-dhcp/files/dhclient6.conf b/net/isc-dhcp/files/dhclient6.conf new file mode 100644 index 0000000000..ab446990cf --- /dev/null +++ b/net/isc-dhcp/files/dhclient6.conf @@ -0,0 +1,2 @@ +option dhcp6.softwire code 54 = ip6-address; +also request dhcp6.softwire; diff --git a/net/isc-dhcp/files/dhclient6.init b/net/isc-dhcp/files/dhclient6.init new file mode 100644 index 0000000000..630c3f25f1 --- /dev/null +++ b/net/isc-dhcp/files/dhclient6.init @@ -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 +} diff --git a/net/isc-dhcp/files/dhcpd.conf b/net/isc-dhcp/files/dhcpd.conf new file mode 100644 index 0000000000..11985ce9e8 --- /dev/null +++ b/net/isc-dhcp/files/dhcpd.conf @@ -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; +} diff --git a/net/isc-dhcp/files/dhcpd.init b/net/isc-dhcp/files/dhcpd.init new file mode 100644 index 0000000000..b34d79848a --- /dev/null +++ b/net/isc-dhcp/files/dhcpd.init @@ -0,0 +1,33 @@ +#!/bin/sh /etc/rc.common + +START=65 + +lease_file=/var/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 + + 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 +} diff --git a/net/isc-dhcp/files/dhcpd6.conf b/net/isc-dhcp/files/dhcpd6.conf new file mode 100644 index 0000000000..1c0baaec9b --- /dev/null +++ b/net/isc-dhcp/files/dhcpd6.conf @@ -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; +} diff --git a/net/isc-dhcp/files/dhcpd6.init b/net/isc-dhcp/files/dhcpd6.init new file mode 100644 index 0000000000..e52f7cfdd8 --- /dev/null +++ b/net/isc-dhcp/files/dhcpd6.init @@ -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 + + 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 +} diff --git a/net/isc-dhcp/patches/000-compile.patch b/net/isc-dhcp/patches/000-compile.patch new file mode 100644 index 0000000000..7f96ce0a79 --- /dev/null +++ b/net/isc-dhcp/patches/000-compile.patch @@ -0,0 +1,24 @@ +--- a/bind/Makefile ++++ b/bind/Makefile +@@ -61,9 +61,12 @@ all: + echo Bind export libraries already installed ; \ + else \ + echo Building BIND Export libraries - this takes some time. ;\ ++ (cd ${bindsrcdir}/lib/export/dns ; \ ++ echo building gen using ${BUILD_CC} in `pwd` ; \ ++ $(MAKE) CC=${BUILD_CC} CFLAGS="-O2" LIBS="" gen) ; \ + (cd ${bindsrcdir}/lib/export ; \ + echo building in `pwd` ; \ +- MAKE=${GMAKE} ${GMAKE} > ${binddir}/build.log) ; \ ++ $(MAKE) DESTDIR="" install > ${binddir}/build.log) ; \ + \ + echo Installing BIND Export libraries to ${binddir}. ; \ + (cd ${bindsrcdir}/lib/export ; \ +@@ -77,6 +80,7 @@ clean: + + # Include the following so that this Makefile is happy when the parent + # tries to use them. ++install-exec: + + distdir: +