Training courses

Kernel and Embedded Linux

Bootlin training courses

Embedded Linux, kernel,
Yocto Project, Buildroot, real-time,
graphics, boot time, debugging...

Bootlin logo

Elixir Cross Referencer

{
  # suffix data expression
  # in fact ISC DHCP suffix can be reduced into Kea substring
  # empty configs are not accepted by Kea
  "Dhcp4": {
    "valid-lifetime": 1800,
    "client-classes": [
      # use suffix in a reductible match
      /// match: suffix(option dhcp.host-name, 3)
      {
        "name": "reductible"
      },
      /// subclass selector 'com'
      {
        "name": "sub#reductible#0",
        "option-data": [
          {
            "space": "dhcp4",
            "name": "domain-search",
            "code": 119,
//          "original-data": "\"example.com\"",
            "data": "example.com"
          }
        ],
        /// from: match suffix(option dhcp.host-name, 3)
        /// data: 'com'
        "test": "substring(option[12].hex,-3,all) == 'com'"
      },
      /// subclass selector 'org'
      {
        "name": "sub#reductible#1",
        "option-data": [
          {
            "space": "dhcp4",
            "name": "domain-search",
            "code": 119,
//          "original-data": "\"example.org\"",
            "data": "example.org"
          }
        ],
        /// from: match suffix(option dhcp.host-name, 3)
        /// data: 'org'
        "test": "substring(option[12].hex,-3,all) == 'org'"
      },
      # reduce literals too
      {
        "name": "literal",
        /// from: match if (option dhcp.domain-name) = (suffix('www.example.com', 3))
        "test": "option[15].hex == '.example.com'"
      }
    ],
    "option-data": [
//    # raw
//    {
//      "space": "dhcp4",
//      "name": "domain-name",
//      "code": 15,
//      "csv-format": false,
//      "expression": {
//        "suffix": {
//          "expression": {
//            "option": {
//              "universe": "dhcp",
//              "name": "domain-name",
//              "code": 15
//            }
//          },
//          "length": 3
//        }
//      }
//    }
    ]
  }
}