2 ##############################################################################
4 # This program is free software; you can redistribute it and/or modify
5 # it under the terms of the GNU General Public License version 2 as
6 # published by the Free Software Foundation.
8 # This program is distributed in the hope that it will be useful,
9 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 # GNU General Public License for more details.
13 # Copyright (C) 2016 Eric Luehrsen
15 ##############################################################################
17 # This script facilitates alternate installation of Unbound+odhcpd and no
18 # need for dnsmasq. There are some limitations, but it works and is small.
19 # The lease file is parsed to make "zone-data:" and "local-data:" entries.
21 # config odhcpd 'odhcpd'
22 # option leasetrigger '/usr/lib/unbound/odhcpd.sh'
24 ##############################################################################
27 .
/usr
/lib
/unbound
/defaults.sh
29 ##############################################################################
32 local dhcp_link
=$
( uci_get unbound.@unbound
[0].dhcp_link
)
33 local dhcp4_slaac6
=$
( uci_get unbound.@unbound
[0].dhcp4_slaac6
)
34 local dhcp_domain
=$
( uci_get unbound.@unbound
[0].domain
)
35 local dhcp_origin
=$
( uci_get dhcp.@odhcpd
[0].leasefile
)
38 if [ -f "$UB_TOTAL_CONF" -a -f "$dhcp_origin" \
39 -a "$dhcp_link" = "odhcpd" -a -n "$dhcp_domain" ] ; then
40 local longconf dateconf
41 local dns_ls_add
=$UB_VARDIR/dhcp_dns.add
42 local dns_ls_del
=$UB_VARDIR/dhcp_dns.del
43 local dns_ls_new
=$UB_VARDIR/dhcp_dns.new
44 local dns_ls_old
=$UB_VARDIR/dhcp_dns.old
45 local dhcp_ls_new
=$UB_VARDIR/dhcp_lease.new
47 # Capture the lease file which could be changing often
48 sort $dhcp_origin > $dhcp_ls_new
51 if [ ! -f $UB_DHCP_CONF -o ! -f $dns_ls_old ] ; then
52 # no old files laying around
56 # incremental at high load or full refresh about each 5 minutes
57 dateconf
=$
(( $
( date +%s
) - $
( date -r $UB_DHCP_CONF +%s
) ))
60 if [ $dateconf -gt 300 ] ; then
70 awk -v conffile
=$UB_DHCP_CONF -v pipefile
=$dns_ls_new \
71 -v domain
=$dhcp_domain -v bslaac
=$dhcp4_slaac6 \
72 -v bisolt
=0 -v bconf
=1 \
73 -f /usr
/lib
/unbound
/odhcpd.
awk $dhcp_ls_new
75 cp $dns_ls_new $dns_ls_add
76 cp $dns_ls_new $dns_ls_old
80 awk -v conffile
=$UB_DHCP_CONF -v pipefile
=$dns_ls_new \
81 -v domain
=$dhcp_domain -v bslaac
=$dhcp4_slaac6 \
82 -v bisolt
=0 -v bconf
=1 \
83 -f /usr
/lib
/unbound
/odhcpd.
awk $dhcp_ls_new
85 awk '{ print $1 }' $dns_ls_old |
sort |
uniq > $dns_ls_del
86 cp $dns_ls_new $dns_ls_add
87 cp $dns_ls_new $dns_ls_old
91 # incremental add and prepare the old list for delete later
92 # unbound-control can be slow so high DHCP rates cannot run a full list
93 awk -v conffile
=$UB_DHCP_CONF -v pipefile
=$dns_ls_new \
94 -v domain
=$dhcp_domain -v bslaac
=$dhcp4_slaac6 \
95 -v bisolt
=0 -v bconf
=0 \
96 -f /usr
/lib
/unbound
/odhcpd.
awk $dhcp_ls_new
98 sort $dns_ls_new $dns_ls_old $dns_ls_old |
uniq -u > $dns_ls_add
99 sort $dns_ls_new $dns_ls_old |
uniq > $dns_ls_old
104 if [ -f "$dns_ls_del" ] ; then
105 cat $dns_ls_del |
$UB_CONTROL_CFG local_datas_remove
109 if [ -f "$dns_ls_add" ] ; then
110 cat $dns_ls_add |
$UB_CONTROL_CFG local_datas
115 rm -f $dns_ls_new $dns_ls_del $dns_ls_add $dhcp_ls_new
119 ##############################################################################
123 ##############################################################################