<div dir="ltr"><div>Hello Kea Users</div><div><br></div><div>I'm new to this list, so in introduction, I'm a longtime open-source and network engineering type with plenty of experience with other ISC software as well as occasional patch contributions to open source software that I use regularly. I'm new to Kea, but have been building internet infrastructure including DNS, DHCP and AAA for decades so I hope that I'm not about to ask a dumb question.</div><div><br></div><div>I'm attempting to do client classification (as well as forensic logging) of CableLab DOCSIS options being inserted by a DHCP6 Relay and struggling to get it to work the way that it feels that it should. In short I want to both limit the number of IP allowed per Cable Modem as well as log the Cable Modem (in addition to the CPE) MAC address into the forensic log.</div><div><br></div><div>I'm receiving SOLICIT messages similar to the following (I've snipped some hopefully unnecessary detail) from a Cisco CMTS acting as a DHCP Relay:</div><div><br></div><div><p class="MsoNormal">msg_type=SOLICIT (1), trans_id=0x341c2f,<u></u><u></u></p><p class="MsoNormal">options:<u></u><u></u></p><p class="MsoNormal">  type=00001, len=00010: 00:03:00:01:0c:02:27:c0:70:42<u></u><u></u></p><p class="MsoNormal">  type=00003(IA_NA), len=00012: iaid=666923074, t1=0, t2=0<u></u><u></u></p><p class="MsoNormal">  type=00006, len=00010: 17(uint16) 23(uint16) 24(uint16) 25(uint16) 82(uint16)<u></u><u></u></p><p class="MsoNormal">  type=00008, len=00002: 0 (uint16)<u></u><u></u></p><p class="MsoNormal">  type=00014, len=00000: ''<u></u><u></u></p><p class="MsoNormal">  type=16, len=18,  enterprise id=0xde9, data-len0=12, vendor-class-data0='<a href="http://dslforum.org/" target="_blank">dslforum.org</a>'<u></u><u></u></p><p class="MsoNormal">  type=00017, len=00159: 4491 (uint32),<u></u><u></u></p><p class="MsoNormal">options:<u></u><u></u></p><p class="MsoNormal">    type=00001, len=00002: 1027(uint16)<u></u><u></u></p><p class="MsoNormal">    type=00002, len=00007: "EROUTER" (string)</p><p class="MsoNormal">    --snip--<u></u><u></u></p><p class="MsoNormal">    type=00009, len=00008: 45:50:43:33:39:34:30:4c 'EPC3940L'<u></u><u></u></p><p class="MsoNormal">    type=00010, len=00005: "Cisco" (string)<u></u><u></u></p><p class="MsoNormal">    type=00036, len=00006: 0c:02:27:c0:70:42<u></u><u></u></p><p class="MsoNormal">  type=00020, len=00000: ''<u></u><u></u></p><p class="MsoNormal">  type=00025(IA_PD), len=00041: iaid=935358530, t1=151200, t2=302400,<u></u><u></u></p><p class="MsoNormal">options:<u></u><u></u></p><p class="MsoNormal">    type=00026(IAPREFIX), len=00025: prefix=::/56, preferred-lft=0, valid-lft=0<u></u><u></u></p><p class="MsoNormal">1 relay(s):<u></u><u></u></p><p class="MsoNormal">relay[0]: msg-type=12(RELAY_FORWARD), hop-count=0,<u></u><u></u></p><p class="MsoNormal">link-address=2--snip--00::1, peer-address=fe80::e02:27ff:fec0:7042, 3 option(s)<u></u><u></u></p><p class="MsoNormal">type=00017, len=00022: 4491 (uint32),<u></u><u></u></p><p class="MsoNormal">options:<u></u><u></u></p><p class="MsoNormal">  type=01025, len=00004: 01:02:03:01<u></u><u></u></p><p class="MsoNormal">  type=01026, len=00006: 0c:02:27:c0:70:3e<u></u><u></u></p><p class="MsoNormal">type=00018, len=00028: 42:75:--snip--<u></u><u></u></p><p class="MsoNormal">type=00079, len=00008: 00:01:0c:02:27:c0:70:42<u></u><u></u></p><p class="MsoNormal"><br></p><p class="MsoNormal"><br></p><div>Here is what I "think" that I want to do, but it throws a syntax error as vendor doesn't seem to be allowed under relay6:</div><div><br></div><div>  "template-test": "hexstring(relay6[0].vendor[4491].option[1026].hex, ':')"  </div><p class="MsoNormal"></p><div></div><p></p><div><br></div><p class="MsoNormal"><u></u>The crufy approach that I've gotten working is instead to grub around in the relayed vendor options with substring, but this would clearly break if the Relay decided to send any additional options for some reason:</p><p class="MsoNormal"><br></p><p class="MsoNormal">  "template-test": "hexstring(substring(relay6[0].option[17].hex,-6,6), ':')"<u></u></p><p class="MsoNormal"><br></p><p class="MsoNormal"><u></u>Here are the relevant bits of config that in more complete form:<u></u></p><p class="MsoNormal"><br></p><p class="MsoNormal">"option-def": [<u></u><u></u></p><p class="MsoNormal">    {<u></u><u></u></p><p class="MsoNormal">        "name": "cl-cm-mac",<u></u><u></u></p><p class="MsoNormal">        "code": 1026,<u></u><u></u></p><p class="MsoNormal">        "type": "string",<u></u><u></u></p><p class="MsoNormal">        "space": "vendor-4491"<u></u><u></u></p><p class="MsoNormal">    }<u></u><u></u></p><p class="MsoNormal">],<u></u><u></u></p><p class="MsoNormal">"client-classes": [<u></u><u></u></p><p class="MsoNormal">  {<u></u><u></u></p><p class="MsoNormal">      "name": "DOCSIS_CM",<u></u><u></u></p><p class="MsoNormal">      "test": "vendor[4491].option[1026].exists",<u></u><u></u></p><p class="MsoNormal">      "only-if-required": false<u></u><u></u></p><p class="MsoNormal">  },<u></u><u></u></p><p class="MsoNormal">  {<u></u><u></u></p><p class="MsoNormal">    "name": "individual-cpe6_VOPT36",<u></u><u></u></p><p class="MsoNormal">    "template-test": "hexstring(vendor[4491].option[36].hex, ':')",  // This detects the CPE MAC just fine from the first set of Vendor options<u></u><u></u></p><p class="MsoNormal">    "user-context": {<u></u><u></u></p><p class="MsoNormal">      "limits": {<u></u><u></u></p><p class="MsoNormal">        "address-limit": 2<u></u><u></u></p><p class="MsoNormal">      }<u></u><u></u></p><p class="MsoNormal">    }<u></u><u></u></p><p class="MsoNormal">  },<u></u><u></u></p><p class="MsoNormal">  {<u></u><u></u></p><p class="MsoNormal">    "name": "individual-cable-modem6v1",<u></u><u></u></p><p class="MsoNormal">    "template-test": "hexstring(vendor[4491].option[1026].hex, ':')",  // This doesn’t match anything as Option[1026] is in the second Vendor block under relay_forward<u></u><u></u></p><p class="MsoNormal">    "user-context": {<u></u><u></u></p><p class="MsoNormal">      "limits": {<u></u><u></u></p><p class="MsoNormal">        "address-limit": 10<u></u><u></u></p><p class="MsoNormal">      }<u></u><u></u></p><p class="MsoNormal">    }<u></u><u></u></p><p class="MsoNormal">  },<u></u><u></u></p><p class="MsoNormal">  {<u></u><u></u></p><p class="MsoNormal">    "name": "individual-cable-modem6v2",<u></u><u></u></p><p class="MsoNormal">    // "template-test": "hexstring(relay6[0].vendor[4491].option[1026].hex, ':')",  // syntax error<u></u><u></u></p><p class="MsoNormal">    "template-test": "hexstring(substring(relay6[0].option[17].hex,-6,6), ':')", // works but a bit crufty!<u></u><u></u></p><p class="MsoNormal">    "user-context": {<u></u><u></u></p><p class="MsoNormal">      "limits": {<u></u><u></u></p><p class="MsoNormal">        "address-limit": 10<u></u><u></u></p><p class="MsoNormal">      }<u></u><u></u></p><p class="MsoNormal">    }<u></u><u></u></p><p class="MsoNormal">  }<u></u><u></u></p><p class="MsoNormal">]</p></div><div><br></div><div>I would be very happy to have missed something obvious and would appreciate any help I can get :-)</div><div><br></div><div>Thanks in advance!</div><div><br></div><span class="gmail_signature_prefix">-- </span><br><div dir="ltr" class="gmail_signature" data-smartmail="gmail_signature">Peter Nixon<br><a href="http://peternixon.net/" target="_blank">http://peternixon.net/</a><br><br>Normal people believe that if it ain't broke, don't fix it. Engineers believe that if it ain't broke, it doesn't have enough features yet - Scott Adams</div></div>