lede-packages-rs

git clone git://archive.git.mtrnord.blog/MTRNord/lede-packages-rs.git
Log | Files | Refs | README | LICENSE

odhcpd.sh (3677B)


      1 #!/bin/sh
      2 ##############################################################################
      3 #
      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.
      7 #
      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.
     12 #
     13 # Copyright (C) 2016 Eric Luehrsen
     14 #
     15 ##############################################################################
     16 #
     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.
     20 #
     21 # config odhcpd 'odhcpd'
     22 #   option leasetrigger '/usr/lib/unbound/odhcpd.sh'
     23 #
     24 ##############################################################################
     25 
     26 # Common file location definitions
     27 . /usr/lib/unbound/unbound.sh
     28 
     29 ##############################################################################
     30 
     31 odhcpd_settings() {
     32   # This trigger is out of normal init context, so we need to read some UCI.
     33   local cfg="$1"
     34   config_get UNBOUND_D_DHCP_LINK  "$cfg" dhcp_link none
     35   config_get_bool UNBOUND_B_SLAAC6_MAC "$cfg" dhcp4_slaac6 0
     36   config_get UNBOUND_TXT_DOMAIN "$cfg" domain lan
     37 }
     38 
     39 ##############################################################################
     40 
     41 odhcpd_zonedata() {
     42   local dns_ls_add=$UNBOUND_VARDIR/dhcp_dns.add
     43   local dns_ls_del=$UNBOUND_VARDIR/dhcp_dns.del
     44   local dhcp_ls_new=$UNBOUND_VARDIR/dhcp_lease.new
     45   local dhcp_ls_old=$UNBOUND_VARDIR/dhcp_lease.old
     46   local dhcp_ls_add=$UNBOUND_VARDIR/dhcp_lease.add
     47   local dhcp_ls_del=$UNBOUND_VARDIR/dhcp_lease.del
     48   local dhcp_origin=$( uci get dhcp.@odhcpd[0].leasefile )
     49 
     50   config_load unbound
     51   config_foreach odhcpd_settings unbound
     52 
     53 
     54   if [ "$UNBOUND_D_DHCP_LINK" = "odhcpd" -a -f "$dhcp_origin" ] ; then
     55     # Capture the lease file which could be changing often
     56     cat $dhcp_origin | sort > $dhcp_ls_new
     57     touch $dhcp_ls_old
     58     sort $dhcp_ls_new $dhcp_ls_old $dhcp_ls_old | uniq -u > $dhcp_ls_add
     59     sort $dhcp_ls_old $dhcp_ls_new $dhcp_ls_new | uniq -u > $dhcp_ls_del
     60 
     61     # Go through the messy business of coding up A, AAAA, and PTR records
     62     # This static conf will be available if Unbound restarts asynchronously
     63     awk -v hostfile=$UNBOUND_DHCP_CONF -v domain=$UNBOUND_TXT_DOMAIN \
     64         -v bslaac=$UNBOUND_B_SLAAC6_MAC -v bisolt=0 -v bconf=1 \
     65         -f /usr/lib/unbound/odhcpd.awk $dhcp_ls_new
     66 
     67     # Deleting and adding all records into Unbound can be a burden in a
     68     # high density environment. Use unbound-control incrementally.
     69     awk -v hostfile=$dns_ls_del -v domain=$UNBOUND_TXT_DOMAIN \
     70         -v bslaac=$UNBOUND_B_SLAAC6_MAC -v bisolt=0 -v bconf=0 \
     71         -f /usr/lib/unbound/odhcpd.awk $dhcp_ls_del
     72 
     73     awk -v hostfile=$dns_ls_add -v domain=$UNBOUND_TXT_DOMAIN \
     74         -v bslaac=$UNBOUND_B_SLAAC6_MAC -v bisolt=0 -v bconf=0 \
     75         -f /usr/lib/unbound/odhcpd.awk $dhcp_ls_add
     76 
     77 
     78     if [ -f "$dns_ls_del" ] ; then
     79       cat $dns_ls_del | $UNBOUND_CONTROL_CFG local_datas_remove
     80     fi
     81 
     82 
     83     if [ -f "$dns_ls_add" ] ; then
     84       cat $dns_ls_add | $UNBOUND_CONTROL_CFG local_datas
     85     fi
     86 
     87 
     88     # prepare next round
     89     mv $dhcp_ls_new $dhcp_ls_old
     90     rm -f $dns_ls_del $dns_ls_add $dhcp_ls_del $dhcp_ls_add
     91   fi
     92 }
     93 
     94 ##############################################################################
     95 
     96 odhcpd_zonedata
     97 
     98 ##############################################################################
     99