<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=us-ascii"><meta name=Generator content="Microsoft Word 15 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Aptos;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        font-size:11.0pt;
        font-family:"Aptos",sans-serif;
        mso-ligatures:standardcontextual;}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Aptos",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:11.0pt;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=EN-US link="#467886" vlink="#96607D" style='word-wrap:break-word'><div class=WordSection1><p class=MsoNormal>Just a foreword, I am experimenting with the class definitions and different test structures, since the examples provided in the official documentation are very limited. Specifically, I created these match conditions, and they seem to work just fine<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><span style='font-family:"Courier New"'>    "client-classes": [<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'>      {<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'>        "name": "CTS19-RPDs",<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'>           "test": "pkt4.mac == 0x0020a361415b or pkt4.mac == 0x001848fe8f35"<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'>      },<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'>      {<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'>        "name": "CTS17-RPDs",<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'>           "test": "(pkt4.mac == 0x0020a3283bfb) or (pkt4.mac == 0x0020a3263a4b) or (pkt4.mac == 0x0020a3263a6b) or (pkt4.mac == 0x0020a35a1b0b)"<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'>      },<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'>      {<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'>        "name": "CTS18-RPDs",<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'>           "test": "(pkt4.mac == 0x0020a325c53b) or (pkt4.mac == 0x0018480ae57d) or (pkt4.mac == 0x0020a32b08bb) or (pkt4.mac == 0x0020a328e02b) or (pkt4.mac == 0x0020a357fc6b) or (pkt4.mac == 0x0020a358a5bb) or (pkt4.mac == 0x0020a35eb56b) or (pkt4.mac == 0x0020a35ecadb) or (pkt4.mac == 0x0018480ae35f) or (pkt4.mac == 0x0018480ae903) or (pkt4.mac == 0x0020a35dfb3b) or (pkt4.mac == 0x0020a380378b) or (pkt4.mac == 0x0020a34f93cb)"<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'>      }<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'>    ],<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'><o:p> </o:p></span></p><p class=MsoNormal>As you can see, the test structure seems to not care for brackets () or not, and does the matching well even with very long conditions. <o:p></o:p></p><p class=MsoNormal> <o:p></o:p></p><p class=MsoNormal>Where the question comes is with the “client-class” statement in individual pool / subnet definitions. In the following example, the client class statement contains an ‘or’ combination for three different classes defined before. It parses fine, but … it does not seem to work. All examples I can find show a single entry in the client-class, but I am wondering whether the example below is a mistake and the parser should throw an error or not. I do know I can create another class that combines three previous classes into one, but I find this cleaner to read, where the match in client-class is performed on and/or combined structure of different atomic classes. <o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><span style='font-family:"Courier New"'>           {<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'>                "id": 1,<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'>                "subnet": "172.27.60.16/28",<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'>                "relay": {<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'>                      "ip-addresses": [ "172.27.60.17" ]<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'>                },<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'>                "pools": [<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'>                      {<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'>                           "pool": "172.27.60.18 - 172.27.60.30",<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'>                           "client-class": "<span style='background:yellow;mso-highlight:yellow'>CTS19-RPDs or CTS18-RPDs or CTS17-RPDs</span>"<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'>                      }<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'>                ],<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'>                "option-data": [<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'>                      {<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'>                           "space": "dhcp4",<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'>                           "name": "subnet-mask",<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'>                           "code": 1,<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'>                           "data": "255.255.255.240"<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'>                      },<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'>                      {<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'>                           "space": "dhcp4",<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'>                           "name": "routers",<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'>                           "code": 3,<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'>                           "data": "172.27.60.17"<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'>                      },<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'>                      {<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'>                           "space": "dhcp4",<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'>                           "name": "vendor-encapsulated-options",<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'>                           "code": 43,<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'>                           "csv-format": false,<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'>                           "data": "3d04ac1b3d04"<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'>                      }<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'>                ]<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'>           },<o:p></o:p></span></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Is the above shown “client-class” match condition a valid example and should it work? <o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Regards<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Marek<o:p></o:p></p></div></body></html>