isc-dhcp: dhcrelay: Add more UCI options
authorJo-Philipp Wich <jow@openwrt.org>
Fri, 18 Oct 2013 11:39:56 +0000 (11:39 +0000)
committerJo-Philipp Wich <jow@openwrt.org>
Fri, 18 Oct 2013 11:39:56 +0000 (11:39 +0000)
Add more options to dhcrelay UCI and init script:

- enabled
- interfaces: Listen interfaces
- relay_mode: What to do about packets that already have a relay option

Also mark /etc/config/dhcrelay as conffile

Signed-off-by: Bruno Randolf <br1@einfach.org>
SVN-Revision: 38446

net/isc-dhcp/Makefile
net/isc-dhcp/files/dhcrelay4.init
net/isc-dhcp/files/etc/config/dhcrelay

index aa27aca0a07b3a07ab8e5219ef22fa2257a73042..5e5471f9dfbd94d1b0ef28472514720e10591b36 100644 (file)
@@ -55,11 +55,19 @@ $(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)
index 70905cfa4a4b75fe97333fed0255fd84279a4862..e1e68711e83036a907720b320f50cd5e90da229d 100644 (file)
@@ -8,15 +8,39 @@ SERVICE_PID_FILE="/var/run/dhcrelay4.pid"
 SERVICE_USE_PID=1
 
 start() {
-    local relay_dhcpserver
+       . /lib/functions/network.sh
+       config_load dhcrelay
+       local args=""
 
-    config_load dhcrelay
-    config_get relay_dhcpserver ipv4 dhcpserver
+       local enabled
+       config_get_bool enabled ipv4 enabled 0
+       [ "$enabled" -eq 0 ] && return 0
 
-    service_start /usr/sbin/dhcrelay -4 -q \
-        -pf $SERVICE_PID_FILE $relay_dhcpserver
+       # 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
+
+       # 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
+       service_stop /usr/sbin/dhcrelay
 }
index 5fde2399e9e1251c4e0935e0a131f23c54d31b55..1b89782569358870f75415d7420dc6efc2b3e793 100644 (file)
@@ -1,10 +1,24 @@
 
 config dhcrelay ipv4
-    option dhcpserver '192.0.2.10'
+       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' ''
+
 
 config dhcrelay ipv6
-#    option dhcpserver '2001:db8:1::1'
-    option upper 'eth1'
-    list lower 'eth0.2'
-    list lower 'eth0.3'
+#      option dhcpserver '2001:db8:1::1'
+       option upper 'eth1'
+       list lower 'eth0.2'
+       list lower 'eth0.3'