<html>
  <head>
    <meta content="text/html; charset=windows-1252"
      http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    <div class="moz-cite-prefix">On 12/2/16 10:07 AM, perl-list wrote:<br>
    </div>
    <blockquote
      cite="mid:1323179569.210468.1480691256933.JavaMail.zimbra@network1.net"
      type="cite">
      <meta http-equiv="Context-Type" content="text/html; charset=utf-8">
      <div>
        <div>Robert,</div>
        <div><br data-mce-bogus="1">
        </div>
        <div>I don't know anything about DDNS updates as I have never
          used them, but I can confirm that on release {} in DHCPv6 does
          not seem to have access to any of the option data.  I had the
          same problem and asked the list about it more than a week ago.
           I was met with silence.  If a developer could comment on this
          being a bug or simply not implemented yet, that would be
          great.  Target for inclusion of option data in on release {}
          statements?<br>
          <br>
          <hr id="zwchr" data-marker="__DIVIDER__">
          <div data-marker="__HEADERS__">
            <blockquote><b>From: </b>"Robert Senger"
              <a class="moz-txt-link-rfc2396E" href="mailto:robert.senger@lists.microscopium.de"><robert.senger@lists.microscopium.de></a><br>
              <b>To: </b>"Users of ISC DHCP"
              <a class="moz-txt-link-rfc2396E" href="mailto:dhcp-users@lists.isc.org"><dhcp-users@lists.isc.org></a><br>
              <b>Sent: </b>Friday, December 2, 2016 10:01:31 AM<br>
              <b>Subject: </b>Issues with dhcpv6 and ddns updates<br>
            </blockquote>
          </div>
          <div data-marker="__QUOTED_TEXT__">
            <blockquote>Hi there,<br>
              <br>
              I am running isc-dhcp-server in ipv6 mode, and I'd like to
              update the<br>
              local internal dns zones hosted by bind9 with dhcpv6
              client's names and<br>
              ipv6 addresses.<br>
              <br>
              The built-in ddns seems to be completely unable to remove
              entries from<br>
              the dns upon expiry or release, so I ended up doing ddns
              stuff on my<br>
              own using "on commit|expiry|release" event handlers and
              corresponding<br>
              scripts.<br>
              <br>
              But this also has issues with expiry and release events.
              While<br>
              (almost...) everything is fine with commits, I am having
              trouble<br>
              getting enough information about which hosts lease has
              expired or was<br>
              released.<br>
              <br>
              This is the code I have in the dhcpd6.conf global scope:<br>
              <br>
              on commit<br>
{                                                                      <br>
                                                              <br>
                      set ClientMac =<br>
"n/a";                                                                 <br>
                                                              <br>
                      set ClientIP =
              pick-first-value(binary-to-ascii(16, 16, ":",<br>
              substring(option dhcp6.ia-na, 16, 16)),<br>
              "n/a");                           <br>
                      set ClientID =
              pick-first-value(binary-to-ascii(16, 8, ":",<br>
              option dhcp6.client-id),<br>
              "n/a");                                           <br>
                      set ClientName = pick-first-value(ddns-hostname,
              option<br>
              fqdn.hostname, option host-name,<br>
              "n/a");                                       <br>
                      log(concat("Commit (global): Mac: ", ClientMac, ",
              IP: ",<br>
              ClientIP, ", Name: ", ClientName, ", ID: ",<br>
              ClientID));                      <br>
                      #execute("/etc/dhcp/dhcp6commit.sh", ClientMac,
              ClientIP,<br>
              ClientName,<br>
ClientID);                                                       <br>
}                                                                      <br>
                                                                       <br>
               <br>
              on expiry<br>
{                                                                      <br>
                                                              <br>
                      set ClientMac =<br>
"n/a";                                                                 <br>
                                                              <br>
                      set ClientIP =
              pick-first-value(binary-to-ascii(16, 16, ":",<br>
              substring(option dhcp6.ia-na, 16, 16)),<br>
              "n/a");                           <br>
                      set ClientID =
              pick-first-value(binary-to-ascii(16, 8, ":",<br>
              option dhcp6.client-id),<br>
              "n/a");                                           <br>
                      set ClientName = pick-first-value(ddns-hostname,
              option<br>
              fqdn.hostname, option host-name,<br>
              "n/a");                                       <br>
                      log(concat("Expiry (global): Mac: ", ClientMac, ",
              IP: ",<br>
              ClientIP, ", Name: ", ClientName, ", ID: ",<br>
              ClientID));                      <br>
                      #execute("/etc/dhcp/dhcp6expiry.sh", ClientMac,
              ClientIP,<br>
              ClientName,<br>
ClientID);                                                       <br>
}                                                                      <br>
                                                                       <br>
               <br>
              on release<br>
{                                                                      <br>
                                                             <br>
                      set ClientMac =<br>
"n/a";                                                                 <br>
                                                              <br>
                      set ClientIP =
              pick-first-value(binary-to-ascii(16, 16, ":",<br>
              substring(option dhcp6.ia-na, 16, 16)),<br>
              "n/a");                           <br>
                      set ClientID =
              pick-first-value(binary-to-ascii(16, 8, ":",<br>
              option dhcp6.client-id),<br>
              "n/a");                                           <br>
                      set ClientName = pick-first-value(ddns-hostname,
              option<br>
              fqdn.hostname, option host-name,<br>
              "n/a");                                       <br>
                      log(concat("Release (global): Mac: ", ClientMac,
              ", IP: ",<br>
              ClientIP, ", Name: ", ClientName, ", ID: ",<br>
              ClientID));                     <br>
                      #execute("/etc/dhcp/dhcp6release.sh", ClientMac,
              ClientIP,<br>
              ClientName,<br>
ClientID);                                                      <br>
              }                                                        
                           <br>
                                                                       
                           <br>
              <br>
              (I've commented the "execute" statement to not mess up
              ddns while<br>
              testing).<br>
              <br>
              And this is what I see in the dhcp log:<br>
              <br>
              Commit:<br>
              <br>
              Dec  2 15:02:02 prokyon dhcpd: Reply NA: address<br>
              fd10:2842:f0d1:414:b64e:8a55:154d:ad6 to client with duid<br>
              00:01:00:01:1e:dd:f7:4d:00:12:f0:90:5a:49 iaid = 1 valid
              for 1200<br>
              seconds<br>
              Dec  2 15:02:02 prokyon dhcpd: Commit (global): Mac: n/a,
              IP:<br>
              fd10:2842:f0d1:414:b64e:8a55:154d:ad6, Name: n/a, ID:<br>
              0:1:0:1:1e:dd:f7:4d:0:12:f0:90:5a:49<br>
              <br>
              Release:<br>
              <br>
              Dec  2 15:03:39 prokyon dhcpd: Client<br>
              00:01:00:01:1e:dd:f7:4d:00:12:f0:90:5a:49 releases address<br>
              fd10:2842:f0d1:414:b64e:8a55:154d:ad6<br>
              Dec  2 15:03:39 prokyon dhcpd: Release (global): Mac: n/a,
              IP: n/a,<br>
              Name: n/a, ID: n/a<br>
              <br>
              Expiry:<br>
              <br>
              Dec  2 15:14:04 prokyon dhcpd: Expiry (global): Mac: n/a,
              IP: n/a,<br>
              Name: n/a, ID: n/a<br>
              <br>
              So, everything is alright for commit events, except that
              there's no<br>
              hostname available. I know how to create a custom hostname
              from address<br>
              or id, so this is not really a problem.<br>
              <br>
              But for expiry and release events, there's simply nothing
              that can be<br>
              passed on to the scripts. No address, no name, no id. It's
              impossible<br>
              to remove dns entries. <br>
              <br>
              <br>
              Next, if I move the "set ClientIP = " lines from inside
              the "on<br>
              commit|expiry|release" event handlers above those into the
              global<br>
              scope, I magically get the address for expiry, but not for
              release:<br>
              <br>
              Dec  2 15:35:55 prokyon dhcpd: Expiry (global): Mac: n/a,
              IP:<br>
              fd10:2842:f0d1:414:b64e:8a55:154d:ad6, Name: n/a, ID: n/a<br>
              Dec  2 15:38:17 prokyon dhcpd: Release (global): Mac: n/a,
              IP: n/a,<br>
              Name: n/a, ID: n/a<br>
              <br>
              <br>
              Moving all this code into a host statement (works for
              known hosts only,<br>
              of course), finally makes it possible to get a hostname
              and to perform<br>
              clean ddns updates for commit and expiry, but it requires
              at least one<br>
              dns lookup in the script to get the address from the
              hostname for<br>
              release events, which is a really, really ugly hack. <br>
              <br>
              Am I doing something wrong, did I miss something, or ist
              this<br>
              intended behavior or even a bug?<br>
              <br>
              Thanks for help,<br>
              <br>
              Robert<br>
              <br>
              <br>
              -- <br>
              Robert Senger<br>
              <br>
              <br>
              -- <br>
              Robert Senger<br>
              <br>
              <br>
              <br>
              _______________________________________________<br>
              dhcp-users mailing list<br>
              <a class="moz-txt-link-abbreviated" href="mailto:dhcp-users@lists.isc.org">dhcp-users@lists.isc.org</a><br>
              <a class="moz-txt-link-freetext" href="https://lists.isc.org/mailman/listinfo/dhcp-users">https://lists.isc.org/mailman/listinfo/dhcp-users</a></blockquote>
          </div>
        </div>
        <br>
      </div>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <br>
      <pre wrap="">_______________________________________________
dhcp-users mailing list
<a class="moz-txt-link-abbreviated" href="mailto:dhcp-users@lists.isc.org">dhcp-users@lists.isc.org</a>
<a class="moz-txt-link-freetext" href="https://lists.isc.org/mailman/listinfo/dhcp-users">https://lists.isc.org/mailman/listinfo/dhcp-users</a></pre>
    </blockquote>
    <p>Hello Robert:</p>
    <p>Sorry for the belated reply, ISC is a small non-profit with
      limited resources and we do what we can.  Contributions are always
      welcome.   In order to make options available during releases,
      regardless of whether we're discussing v4 of v6, the server would
      have to execute all of the configuration statements down to
      appropriate scope as is done when granting or renewing leases.  
      The same applies to lease expiration processing.<br>
    </p>
    <p>As to why this has never been added I cannot say, however adding
      it might have unintended consequences.  It is something we we
      would have to examine closely and if we were to add, it would be
      disabled by default, enabled with a run time option.  If you
      submit a feature request by emailing  <a class="moz-txt-link-abbreviated" href="mailto:dhcp-suggest@isc.org">dhcp-suggest@isc.org</a>, I will
      add it to the list of items under consideration for inclusion in
      4.4.0 release, due sometime in 2017 (date is TBD).<br>
    </p>
    <p><br>
    </p>
    <p>Sincerely,</p>
    <p>Thomas Markwalder</p>
    <p>ISC Software Engineering<br>
    </p>
    <p><br>
    </p>
    <p><br>
    </p>
  </body>
</html>