While trying to configure the ISC DHCP server on Solaris 11 to serve my local VLANs, I wanted to restrict its usage to only three interfaces, I then issued the following setprop command:
# svccfg -s svc:/network/dhcp/server:ipv4 config/listen_ifnames astring: "vlan100 vlan201 vlan202" # svcadm refresh -s svc:/network/dhcp/server:ipv4 # svcadm enable svc:/network/dhcp/server:ipv4
But the service was failing to start… after adding some debug echo’s to the /lib/svc/method/isc-dhcp file, I saw that the whitespaces of this property get escaped when retrieved from the method’s script:
# tail -3 /var/svc/log/network-dhcp-server:ipv4.log [ Jul 10 13:44:02 Executing start method ("/lib/svc/method/isc-dhcp"). ] IFACES: vlan100\ vlan201\ vlan202 [ Jul 10 13:44:02 Method "start" exited with status 95. ] # ggrep -B 4 IFACES /lib/svc/method/isc-dhcp get_dhcpd_options() { # get listen_ifname property value. LISTENIFNAMES="`get_prop listen_ifnames`" echo "IFACES: ${LISTENIFNAMES}"; # /usr/lib/inet/dhcpd -f -d -4 --no-pid -cf /etc/inet/dhcpd4.conf -lf /var/db/isc-dhcp/dhcpd4.leases vlan100\ vlan201\ vlan202 vlan100 vlan201 vlan202: interface name too long (is 23) # /usr/lib/inet/dhcpd -f -d -4 --no-pid -cf /etc/inet/dhcpd4.conf -lf /var/db/isc-dhcp/dhcpd4.leases vlan100 vlan201 vlan202 Internet Systems Consortium DHCP Server 4.1-ESV-R4
So, to fix this behaviour, edit the /lib/svc/method/isc-dhcp, line 66 should be changed:
LISTENIFNAMES="`get_prop listen_ifnames`"
by
LISTENIFNAMES="`get_prop listen_ifnames|sed -e 's/,/ /g'`"
Then, you can set the listen_ifnames properties with multiple interfaces separated by commas:
# svccfg -s svc:/network/dhcp/server:ipv4 svc:/network/dhcp/server:ipv4> setprop config/listen_ifnames = astring: "vlan100,vlan201,vlan202" svc:/network/dhcp/server:ipv4> exit # svcadm refresh svc:/network/dhcp/server:ipv4 # svcadm disable svc:/network/dhcp/server:ipv4 # svcadm enable svc:/network/dhcp/server:ipv4