You did hit the nail on the head, Darren, 

I have three device "classes" to deal with her:

- DOCSIS CM, which will have Option 17 with sub-option 2 equal to "ECM", 
- DOCSIS embedded router (eROUTER), which will have Option 17 with sub-option 2 
equal to "EROUTER", and 
- all devices connected to the DOCSIS CM, which will not have Option 17 
(likely) - I do not control these, and these are just a random bag of devices. 

My train of through in here is simple: classify incoming DHCP packets 
(Solicits, since I am dealing with IPv6 only for now), and (a) match on ECM and 
give them addresses from a specific target pool, (b) then match on EROUTER and 
give them addresses from a specific target pool, and (c) whatever does not 
match on either condition, get an address from the "client" pool. 

In ISC, I was able to do that with "match if" statements, which work fine for 
my purposes. In Kea, I am struggling with logic here, since the parser does not 
seem to support locally defined vendor-specific class space. 

I am not sure whether your example below would work for me, since Option 17 
(DHCPv6) will have to have Vendor 4491 (CableLabs) defined wrapper, and only 
then option 2 inside of it. That is what the " match if (option 
docsis.device-type) = > 'EROUTER'" in ISC syntax was achieving as far as I 
know. In Kea, it would be similar to 
"test": "substring(vendor-4491.option[2].hex,-1,7) == 'EROUTER'" but parser 
does not like it, obviously. It does seem like it is one of the missing Kea 
features?

Marek

-----Original Message-----
From: Darren Ankney <darren.ank...@gmail.com> 
Sent: Sunday, April 21, 2024 4:39 AM
To: mxhajducze...@gmail.com; Kea user's list <kea-users@lists.isc.org>
Subject: Re: [Kea-users] Converting an ISC IPv6 class definition to Kea syntax

Hi Marek,

I don't think you can use vendor option space like that.  This MIGHT work:

"test": "substring(option[125].option[2].hex,-1,7) == 'EROUTER'"

But would option 125 exist in the inbound packet?  I don't think class testing 
occurs on the outbound packets...  It might help to understand what you are 
trying to achieve there as there might be a better way.

Thank you,
Darren Ankney

On Fri, Apr 19, 2024 at 5:22 PM Marek Hajduczenia <mxhajducze...@gmail.com> 
wrote:
>
> Thank you, Darren,
>
> That does indeed at least pass the parser stage (actual device testing will 
> have to wait). It is a pity that a regex is not yet available. I saw it was 
> planned for 2.6 release?
>
> If I can build on the previous request, this part is more challenging, 
> since it relays on a custom vendor address space, specifically, 
> DOCSIS-specific sub-options in Option 17. Assume I have a 
> "device-type" sub-option defined as follows
>
> "option-def": [
>       {
>         "space": "vendor-4491",
>         "name": "device-type",
>         "code": 2,
>         "type": "string"
>       }]
>
> and then I would like to classify based on it to translate the ISC 
> compare statement of " match if (option docsis.device-type) = 
> 'EROUTER'". Following your example below
>
> "test": "substring(vendor-4491.option[2].hex,-1,7) == 'EROUTER'"
>
> Should be theoretically possible, but I do not think the parser likes 
> it much: [substring(vendor-4491.option[2].hex,-1,7) == 'EROUTER'] 
> error: <string>:1.17-21: syntax error, unexpected integer, expecting [ 
> or . at (/etc/kea/kea-dhcp6.conf:141:17)
>
> Regards
>
> Marek
>
> -----Original Message-----
> From: Kea-users <kea-users-boun...@lists.isc.org> On Behalf Of Darren 
> Ankney
> Sent: Friday, April 19, 2024 3:08 PM
> To: Kea user's list <kea-users@lists.isc.org>
> Subject: Re: [Kea-users] Converting an ISC IPv6 class definition to 
> Kea syntax
>
> Hi Marek,
>
> That is pseudo code generated by KeaMA as Kea doesn't support regex 
> statements like ISC DHCP did.  There was probably an additional line output 
> that linked to some GL issue explaining.  Something like this might work 
> (I've not tested it):
>
> "client-classes": [
>   {
>     "name": "rpd-1",
>     "test": "substring(relay6[1].option[18].hex,-1,9) == 'Md1:0/0.0'"
>   }
> ]
>
> Thank you,
> Darren Ankney
>
> On Fri, Apr 19, 2024 at 4:27 PM Marek Hajduczenia <mxhajducze...@gmail.com> 
> wrote:
> >
> > Dear colleagues,
> >
> >
> >
> > I ran into a bit of a challenge with the conversion of the config from ISC 
> > to Kea, namely this little class definition gem:
> >
> >
> >
> > class "rpd-1" { match if v6relay( 1, option dhcp6.interface-id ) ~= 
> > "Md1:0/0.0$"; }
> >
> >
> >
> > What it does, as you can tell, it matches on the inner relay interface-id 
> > field in the DHCPv6 messages. Nothing fancy, it does work as tested.
> >
> >
> >
> > I have been looking at the available options and nothing comes to 
> > mind so I used keama for automatic conversion and it generated 
> > something pretty complex, as follows. Additionally, it is commented 
> > out, so I assume this is a non-working configuration element (?)
> >
> >
> >
> >     "client-classes": [
> >
> >       {
> >
> >         "name": "rpd-1"
> >
> > //      /// match if (v6relay(1, option dhcp6.interface-id)) ~= 'Md1:0/0.0$'
> >
> > //      "match-if": {
> >
> > //        "regex-match": {
> >
> > //          "left": {
> >
> > //            "v6relay": {
> >
> > //              "relay": 1,
> >
> > //              "relay-option": {
> >
> > //                "option": {
> >
> > //                  "universe": "dhcp6",
> >
> > //                  "name": "interface-id",
> >
> > //                  "code": 18
> >
> > //                }
> >
> > //              }
> >
> > //            }
> >
> > //          },
> >
> > //          "right": "Md1:0/0.0$"
> >
> > //        }
> >
> > //      }
> >
> >       }]
> >
> >
> >
> > If I try to remove the comment markup and apply it with Kea 2.4.1, the 
> > parser does not like the “match-if” statement for some reason. I cannot 
> > locate it in the list of Kea statements, so not sure why it would be 
> > generated by keama. However, the bigger question is on how to build a 
> > Kea-compatible match on such embedded message. Any help here would be 
> > really appreciated.
> >
> >
> >
> > Apr 19 18:54:20 server-kea-node1 systemd[1]: Started Kea DHCPv6 Service.
> >
> > Apr 19 18:54:20 server-kea-node1 kea-dhcp6[2099]: 2024-04-19
> > 18:54:20.202 ERROR [kea-dhcp6.dhcp6/2099.841038976] DHCP6_INIT_FAIL 
> > failed to initialize Kea server: configuration error using file
> > '/etc/kea/kea-dhcp6.conf': /etc/kea/kea-dhcp6.conf:118.9-18: syntax 
> > error, unexpected constant string, expecting }
> >
> > Apr 19 18:54:20 server-kea-node1 systemd[1]:
> > isc-kea-dhcp6-server.service: Main process exited, code=exited, 
> > status=1/FAILURE
> >
> > Apr 19 18:54:20 server-kea-node1 systemd[1]: isc-kea-dhcp6-server.service: 
> > Failed with result 'exit-code'.
> >
> >
> >
> > Regards
> >
> >
> >
> > Marek
> >
> > --
> > ISC funds the development of this software with paid support subscriptions. 
> > Contact us at https://www.isc.org/contact/ for more information.
> >
> > To unsubscribe visit https://lists.isc.org/mailman/listinfo/kea-users.
> >
> > Kea-users mailing list
> > Kea-users@lists.isc.org
> > https://lists.isc.org/mailman/listinfo/kea-users
> --
> ISC funds the development of this software with paid support subscriptions. 
> Contact us at https://www.isc.org/contact/ for more information.
>
> To unsubscribe visit https://lists.isc.org/mailman/listinfo/kea-users.
>
> Kea-users mailing list
> Kea-users@lists.isc.org
> https://lists.isc.org/mailman/listinfo/kea-users
>
> --
> ISC funds the development of this software with paid support subscriptions. 
> Contact us at https://www.isc.org/contact/ for more information.
>
> To unsubscribe visit https://lists.isc.org/mailman/listinfo/kea-users.
>
> Kea-users mailing list
> Kea-users@lists.isc.org
> https://lists.isc.org/mailman/listinfo/kea-users

-- 
ISC funds the development of this software with paid support subscriptions. 
Contact us at https://www.isc.org/contact/ for more information.

To unsubscribe visit https://lists.isc.org/mailman/listinfo/kea-users.

Kea-users mailing list
Kea-users@lists.isc.org
https://lists.isc.org/mailman/listinfo/kea-users

Reply via email to