{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://catalog.lintel.tools/schemas/schemastore/ifstate-yaml/versions/2.0.json",
  "title": "ifstate.conf",
  "description": "IfState 2.0 Configuration Schema",
  "x-lintel": {
    "source": "https://ifstate.net/schema/2.0/ifstate.conf.schema.json",
    "sourceSha256": "8557f47ddb95574f6ec376698565b01a9790ee72f9cf568b4c75047a69f7e307",
    "fileMatch": [
      "ifstate.yaml",
      "**/ifstate/config.yml"
    ],
    "parsers": [
      "yaml"
    ]
  },
  "type": "object",
  "properties": {
    "parameters": {
      "description": "adjust the implicit behaviour of ifstate",
      "type": "object",
      "properties": {
        "cshaper": {
          "description": "cshaper templates",
          "type": "object",
          "required": [
            "default"
          ],
          "patternProperties": {
            "": {
              "description": "cshaper profile",
              "type": "object",
              "properties": {
                "egress_qdisc": {
                  "$ref": "#/$defs/tc-cake"
                },
                "ingress_qdisc": {
                  "$ref": "#/$defs/tc-cake"
                },
                "ingress_ifname": {
                  "description": "build a ifb ifname using a regex on the ifname",
                  "type": "object",
                  "properties": {
                    "search": {
                      "description": "pattern to search",
                      "type": "string"
                    },
                    "replace": {
                      "description": "replace pattern by string",
                      "type": "string"
                    }
                  },
                  "required": [
                    "search",
                    "replace"
                  ],
                  "additionalProperties": false
                }
              },
              "required": [
                "egress_qdisc",
                "ingress_qdisc",
                "ingress_ifname"
              ],
              "additionalProperties": false
            }
          }
        },
        "defaults": {
          "description": "default settings for configured interfaces",
          "type": "array",
          "items": {
            "description": "first matching entry will be used, settings will be overriden by explicit configured interface settings",
            "type": "object",
            "required": [
              "match"
            ],
            "properties": {
              "match": {
                "description": "apply default settings for interfaces  matching any list item (OR)",
                "type": "array",
                "items": {
                  "description": "all conditions that must match (AND)",
                  "type": "object",
                  "properties": {
                    "ifname": {
                      "description": "regex to match interface name",
                      "examples": [
                        "^eth\\d+$"
                      ],
                      "type": "string"
                    },
                    "kind": {
                      "description": "regex to match link type",
                      "examples": [
                        "^physical$",
                        "^(physical|vlan)$"
                      ],
                      "type": "string"
                    }
                  },
                  "additionalProperties": false
                }
              },
              "clear_addresses": {
                "description": "implicit remove all ip addresses",
                "type": "boolean",
                "default": false
              },
              "clear_fdb": {
                "description": "implicit remove all permanent fdb entries",
                "type": "boolean",
                "default": false
              },
              "clear_neighbours": {
                "description": "implicit remove all permanent ip neighbours",
                "type": "boolean",
                "default": false
              },
              "clear_tc": {
                "description": "implicit remove all tc qdiscs",
                "type": "boolean",
                "default": false
              },
              "ethtool": {
                "$ref": "#/$defs/iface-ethtool"
              },
              "link": {
                "description": "implicit link settings for matching interfaces",
                "type": "object",
                "properties": {
                  "group": {
                    "$ref": "#/$defs/iface-link_group"
                  },
                  "state": {
                    "$ref": "#/$defs/iface-link_state"
                  },
                  "master": {
                    "$ref": "#/$defs/iface-link_master"
                  },
                  "mtu": {
                    "$ref": "#/$defs/iface-link_mtu"
                  },
                  "txqlen": {
                    "$ref": "#/$defs/iface-link_txqlen"
                  },
                  "ifalias": {
                    "$ref": "#/$defs/iface-link_ifalias"
                  },
                  "link": {
                    "$ref": "#/$defs/iface-link_link"
                  },
                  "link_netns": {
                    "$ref": "#/$defs/iface-link_link-netns"
                  }
                },
                "additionalProperties": false
              }
            },
            "additionalProperties": false
          }
        },
        "defaults_builtin": {
          "$ref": "#/properties/parameters/properties/defaults"
        },
        "hooks": {
          "description": "hooks are executed on interface configuration and can be used to spawn commands like DHCP client, wpa_supplicant or pppd.",
          "type": "object",
          "patternProperties": {
            "": {
              "description": "hook properties",
              "type": "object",
              "properties": {
                "script": {
                  "description": "filename to be executed on interface configuration: the hook name will be used by default; relatives file are based on `/etc/needrestart/hooks`",
                  "type": "string",
                  "minLength": 1
                },
                "vrrp": {
                  "description": "specify if the activation of this hook should follow the vrrp state for interfaces with a vrrp constraint",
                  "type": "string",
                  "enum": [
                    "follow",
                    "ignore"
                  ],
                  "default": "follow"
                },
                "provides": {
                  "description": "aliases for dependency tracking",
                  "type": "array",
                  "default": []
                },
                "after": {
                  "description": "hooks which should to be run before executing this script (hook names and provides)",
                  "type": "array",
                  "default": []
                }
              },
              "additionalProperties": false
            }
          }
        },
        "ignore": {
          "description": "ignore patterns to skip interface, ip address or routing objects",
          "type": "object",
          "properties": {
            "ipaddr_builtin": {
              "$ref": "#/$defs/ignore-ipaddr"
            },
            "ipaddr": {
              "$ref": "#/$defs/ignore-ipaddr"
            },
            "ipaddr_dynamic": {
              "description": "ignore dynamic assigned ip addresses",
              "type": "boolean",
              "default": true
            },
            "ifname_builtin": {
              "$ref": "#/$defs/ignore-ifname"
            },
            "ifname": {
              "$ref": "#/$defs/ignore-ifname"
            },
            "fdb_builtin": {
              "$ref": "#/$defs/ignore-fdb"
            },
            "fdb": {
              "$ref": "#/$defs/ignore-fdb"
            },
            "routes_builtin": {
              "$ref": "#/$defs/ignore-routes"
            },
            "routes": {
              "$ref": "#/$defs/ignore-routes"
            },
            "rules_builtin": {
              "$ref": "#/$defs/ignore-rules"
            },
            "rules": {
              "$ref": "#/$defs/ignore-rules"
            },
            "netns": {
              "description": "netns namespaces matching this list of regex will be ignored",
              "type": "array",
              "items": {
                "description": "regex to match interface name",
                "examples": [
                  "^tenant-\\d+"
                ],
                "type": "string"
              }
            }
          },
          "additionalProperties": false
        }
      },
      "additionalProperties": false
    },
    "bpf": {
      "description": "load and pin eBPF programs (i.e. for XDP)",
      "type": "object",
      "patternProperties": {
        "": {
          "description": "BPF program",
          "type": "object",
          "properties": {
            "object": {
              "description": "BPF ELF file to load",
              "type": "string"
            },
            "section": {
              "description": "BPF program's section name",
              "type": "string"
            }
          },
          "required": [
            "object",
            "section"
          ],
          "additionalProperties": false
        }
      }
    },
    "interfaces": {
      "description": "dictionary of interfaces related settings, the name of the interface needs to be specified as key",
      "type": "object",
      "additionalProperties": false,
      "patternProperties": {
        "^[^/ ]{1,15}$": {
          "type": "object",
          "required": [
            "link"
          ],
          "properties": {
            "identify": {
              "description": "netlink and devicetree attributes to identify a specific physical interface; **all** given attributes must match; if more than a single interface does match, any one is taken; `ifstatecli identify` can be used to show available attributes",
              "properties": {
                "perm_address": {
                  "description": "select interface by permanent address [ethtool -P]",
                  "$ref": "#/$defs/iface-link_address"
                },
                "parent_dev_name": {
                  "description": "select interface by bus info [ethtool -i]",
                  "type": "string"
                },
                "parent_dev_bus_name": {
                  "description": "select interface by bus name",
                  "type": "string"
                },
                "phys_port_id": {
                  "description": "identifier of the physical port",
                  "type": "string"
                },
                "phys_port_name": {
                  "description": "name of the physical port",
                  "type": "string"
                },
                "phys_switch_id": {
                  "description": "identifier of the physical switch",
                  "type": "string"
                },
                "of_node": {
                  "description": "path to the device node in the open firmware devicetree; this is only available if the platform has devicetree support"
                }
              },
              "additionalProperties": false,
              "type": "object"
            },
            "addresses": {
              "description": "ip addresses of the interface",
              "type": "array",
              "items": {
                "type": "string",
                "examples": [
                  "192.0.2.1",
                  "192.168.0.1/24",
                  "2001:db8::1/64"
                ]
              }
            },
            "brport": {
              "description": "settings for bridge ports",
              "type": "object",
              "properties": {
                "priority": {
                  "description": "set port priority",
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 63
                },
                "cost": {
                  "description": "set port cost",
                  "minimum": 1,
                  "maximum": 65535
                },
                "guard": {
                  "description": "filter BPDU packets",
                  "type": "boolean"
                },
                "mode": {
                  "description": "enable hairpin mode",
                  "type": "boolean"
                },
                "fast_leave": {
                  "description": "enable multicast fast leave",
                  "type": "boolean"
                },
                "protect": {
                  "description": "prevent to become a root port",
                  "type": "boolean"
                },
                "learning": {
                  "description": "allow MAC address learning",
                  "type": "boolean"
                },
                "unicast_flood": {
                  "description": "flood unknown unicasts",
                  "type": "boolean"
                },
                "bcast_flood": {
                  "description": "flood broadcasts",
                  "type": "boolean"
                },
                "mcast_flood": {
                  "description": "flood multicasts",
                  "type": "boolean"
                },
                "mcast_to_ucast": {
                  "description": "clone multicast packets into unicasts",
                  "type": "boolean"
                },
                "proxyarp": {
                  "description": "enable proxy ARP",
                  "type": "boolean"
                },
                "proxyarp_wifi": {
                  "description": "enable proxy ARP (IEEE 802.11 and Hotspot 2.0)",
                  "type": "boolean"
                },
                "neigh_suppress": {
                  "description": "ARP and ND suppression",
                  "type": "boolean"
                },
                "vlan_tunnel": {
                  "description": "VLAN to tunnel mapping",
                  "type": "boolean"
                },
                "backup_port": {
                  "description": "backup bridge port on loss carrier",
                  "$ref": "#/$defs/iface-link_link"
                },
                "isolated": {
                  "description": "isolated port, can communicate only with non-isolated ports",
                  "type": "boolean"
                }
              },
              "additionalProperties": false
            },
            "fdb": {
              "description": "forwarding database for bridge interfaces, the entries are distinct by the `lladdr` property",
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "lladdr": {
                    "description": "destination link layer address",
                    "$ref": "#/$defs/iface-link_address",
                    "default": null
                  },
                  "dst": {
                    "description": "ip address of the destination VXLAN tunnel endpoint",
                    "type": "string",
                    "oneOf": [
                      {
                        "format": "ipv4"
                      },
                      {
                        "format": "ipv6"
                      }
                    ]
                  },
                  "nhid": {
                    "description": "ecmp nexthop group for the VXLAN device driver",
                    "type": "integer",
                    "minimum": 1
                  },
                  "port": {
                    "description": "destination port number to use to connect to the remote VXLAN tunnel endpoint",
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 65535
                  },
                  "vni": {
                    "description": "virtual network identifier this entry belongs to",
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 16777215
                  },
                  "flags": {
                    "type": "array",
                    "prefixItems": [
                      {
                        "type": "string",
                        "enum": [
                          "self",
                          "master",
                          "router",
                          "use",
                          "sticky"
                        ]
                      }
                    ]
                  },
                  "state": {
                    "type": "array",
                    "prefixItems": [
                      {
                        "type": "string",
                        "enum": [
                          "permanent",
                          "noarp"
                        ]
                      }
                    ]
                  }
                },
                "required": [
                  "lladdr"
                ],
                "additionalProperties": false
              }
            },
            "hooks": {
              "description": "list of hook names enabled for the interfaces",
              "type": "array",
              "default": [],
              "prefixItems": [
                {
                  "type": "object",
                  "properties": {
                    "name": {
                      "description": "name of the hook defined in [$.parameters.hooks](#parameters_hooks)`",
                      "type": "string",
                      "minLength": 1
                    },
                    "args": {
                      "description": "dictonary to be passed to hooks as environment variables",
                      "type": "object",
                      "default": {}
                    }
                  },
                  "required": [
                    "name"
                  ],
                  "additionalProperties": false
                }
              ]
            },
            "vrrp": {
              "$ref": "#/$defs/condition-vrrp"
            },
            "link": {
              "description": "link settings of the interface",
              "type": "object",
              "required": [
                "kind"
              ],
              "oneOf": [
                {
                  "description": "Intermediate Functional Block device",
                  "required": [
                    "kind"
                  ],
                  "properties": {
                    "kind": {
                      "const": "ifb",
                      "description": "link type"
                    },
                    "address": {
                      "$ref": "#/$defs/iface-link_address"
                    },
                    "group": {
                      "$ref": "#/$defs/iface-link_group"
                    },
                    "state": {
                      "$ref": "#/$defs/iface-link_state"
                    },
                    "master": {
                      "$ref": "#/$defs/iface-link_master"
                    },
                    "mtu": {
                      "$ref": "#/$defs/iface-link_mtu"
                    },
                    "txqlen": {
                      "$ref": "#/$defs/iface-link_txqlen"
                    },
                    "ifalias": {
                      "$ref": "#/$defs/iface-link_ifalias"
                    }
                  },
                  "additionalProperties": false,
                  "type": "object"
                },
                {
                  "description": "Virtual tunnel interface IPv4|IPv6 over IPv6",
                  "required": [
                    "kind"
                  ],
                  "properties": {
                    "kind": {
                      "const": "ip6tnl",
                      "description": "link type"
                    },
                    "address": {
                      "$ref": "#/$defs/iface-link_address"
                    },
                    "bind_netns": {
                      "$ref": "#/$defs/iface-link_bind-netns"
                    },
                    "group": {
                      "$ref": "#/$defs/iface-link_group"
                    },
                    "state": {
                      "$ref": "#/$defs/iface-link_state"
                    },
                    "master": {
                      "$ref": "#/$defs/iface-link_master"
                    },
                    "mtu": {
                      "$ref": "#/$defs/iface-link_mtu"
                    },
                    "txqlen": {
                      "$ref": "#/$defs/iface-link_txqlen"
                    },
                    "ifalias": {
                      "$ref": "#/$defs/iface-link_ifalias"
                    }
                  },
                  "type": "object"
                },
                {
                  "description": "IP over Infiniband device",
                  "required": [
                    "kind"
                  ],
                  "properties": {
                    "kind": {
                      "const": "ipoib",
                      "description": "link type"
                    },
                    "address": {
                      "$ref": "#/$defs/iface-link_address"
                    },
                    "group": {
                      "$ref": "#/$defs/iface-link_group"
                    },
                    "state": {
                      "$ref": "#/$defs/iface-link_state"
                    },
                    "master": {
                      "$ref": "#/$defs/iface-link_master"
                    },
                    "mtu": {
                      "$ref": "#/$defs/iface-link_mtu"
                    },
                    "txqlen": {
                      "$ref": "#/$defs/iface-link_txqlen"
                    },
                    "ifalias": {
                      "$ref": "#/$defs/iface-link_ifalias"
                    }
                  },
                  "type": "object"
                },
                {
                  "description": "Interface for L3 (IPv6/IPv4) based VLANs",
                  "required": [
                    "kind"
                  ],
                  "properties": {
                    "kind": {
                      "const": "ipvlan",
                      "description": "link type"
                    },
                    "address": {
                      "$ref": "#/$defs/iface-link_address"
                    },
                    "group": {
                      "$ref": "#/$defs/iface-link_group"
                    },
                    "state": {
                      "$ref": "#/$defs/iface-link_state"
                    },
                    "master": {
                      "$ref": "#/$defs/iface-link_master"
                    },
                    "mtu": {
                      "$ref": "#/$defs/iface-link_mtu"
                    },
                    "txqlen": {
                      "$ref": "#/$defs/iface-link_txqlen"
                    },
                    "ifalias": {
                      "$ref": "#/$defs/iface-link_ifalias"
                    }
                  },
                  "type": "object"
                },
                {
                  "description": "Virtual interface base on link layer address (MAC)",
                  "required": [
                    "kind"
                  ],
                  "properties": {
                    "kind": {
                      "const": "macvlan",
                      "description": "link type"
                    },
                    "address": {
                      "$ref": "#/$defs/iface-link_address"
                    },
                    "group": {
                      "$ref": "#/$defs/iface-link_group"
                    },
                    "state": {
                      "$ref": "#/$defs/iface-link_state"
                    },
                    "master": {
                      "$ref": "#/$defs/iface-link_master"
                    },
                    "mtu": {
                      "$ref": "#/$defs/iface-link_mtu"
                    },
                    "txqlen": {
                      "$ref": "#/$defs/iface-link_txqlen"
                    },
                    "ifalias": {
                      "$ref": "#/$defs/iface-link_ifalias"
                    }
                  },
                  "type": "object"
                },
                {
                  "description": "Virtual interface based on link layer address (MAC) and TAP",
                  "required": [
                    "kind"
                  ],
                  "properties": {
                    "kind": {
                      "const": "macvtap",
                      "description": "link type"
                    },
                    "address": {
                      "$ref": "#/$defs/iface-link_address"
                    },
                    "group": {
                      "$ref": "#/$defs/iface-link_group"
                    },
                    "state": {
                      "$ref": "#/$defs/iface-link_state"
                    },
                    "master": {
                      "$ref": "#/$defs/iface-link_master"
                    },
                    "mtu": {
                      "$ref": "#/$defs/iface-link_mtu"
                    },
                    "txqlen": {
                      "$ref": "#/$defs/iface-link_txqlen"
                    },
                    "ifalias": {
                      "$ref": "#/$defs/iface-link_ifalias"
                    }
                  },
                  "type": "object"
                },
                {
                  "description": "Team network device",
                  "required": [
                    "kind"
                  ],
                  "properties": {
                    "kind": {
                      "const": "team",
                      "description": "link type"
                    },
                    "address": {
                      "$ref": "#/$defs/iface-link_address"
                    },
                    "group": {
                      "$ref": "#/$defs/iface-link_group"
                    },
                    "state": {
                      "$ref": "#/$defs/iface-link_state"
                    },
                    "master": {
                      "$ref": "#/$defs/iface-link_master"
                    },
                    "mtu": {
                      "$ref": "#/$defs/iface-link_mtu"
                    },
                    "txqlen": {
                      "$ref": "#/$defs/iface-link_txqlen"
                    },
                    "ifalias": {
                      "$ref": "#/$defs/iface-link_ifalias"
                    }
                  },
                  "type": "object"
                },
                {
                  "description": "Virtual software device (TUN/TAP)",
                  "required": [
                    "kind",
                    "tun_type"
                  ],
                  "properties": {
                    "kind": {
                      "const": "tun",
                      "description": "link type"
                    },
                    "address": {
                      "$ref": "#/$defs/iface-link_address"
                    },
                    "bind_netns": {
                      "$ref": "#/$defs/iface-link_bind-netns"
                    },
                    "group": {
                      "$ref": "#/$defs/iface-link_group"
                    },
                    "state": {
                      "$ref": "#/$defs/iface-link_state"
                    },
                    "master": {
                      "$ref": "#/$defs/iface-link_master"
                    },
                    "mtu": {
                      "$ref": "#/$defs/iface-link_mtu"
                    },
                    "txqlen": {
                      "$ref": "#/$defs/iface-link_txqlen"
                    },
                    "ifalias": {
                      "$ref": "#/$defs/iface-link_ifalias"
                    },
                    "tun_type": {
                      "description": "device mode (Ethernet headers)",
                      "default": "tap",
                      "enum": [
                        1,
                        "tun",
                        2,
                        "tap"
                      ]
                    },
                    "tun_pi": {
                      "description": "provide packet information",
                      "type": [
                        "boolean",
                        "integer"
                      ],
                      "default": false,
                      "enum": [
                        0,
                        false,
                        1,
                        true
                      ]
                    },
                    "tun_persist": {
                      "description": "persistent device; non-persistent devices cannot be created",
                      "type": [
                        "boolean",
                        "integer"
                      ],
                      "default": false,
                      "enum": [
                        0,
                        false,
                        1,
                        true
                      ]
                    },
                    "tun_vnet_hdr": {
                      "description": "prepend frames with struct virtio_net_hdr",
                      "default": false,
                      "enum": [
                        0,
                        false,
                        1,
                        true
                      ]
                    },
                    "tun_multi_queue": {
                      "description": "enable multiqueue tuntap",
                      "type": [
                        "boolean",
                        "integer"
                      ],
                      "default": false,
                      "enum": [
                        0,
                        false,
                        1,
                        true
                      ]
                    },
                    "tun_owner": {
                      "description": "device owner",
                      "type": [
                        "integer",
                        "string"
                      ]
                    },
                    "tun_group": {
                      "description": "device group",
                      "type": [
                        "integer",
                        "string"
                      ]
                    }
                  },
                  "additionalProperties": false,
                  "type": "object"
                },
                {
                  "description": "Virtual Routing and Forwarding device",
                  "required": [
                    "kind",
                    "vrf_table"
                  ],
                  "properties": {
                    "kind": {
                      "const": "vrf",
                      "description": "link type"
                    },
                    "address": {
                      "$ref": "#/$defs/iface-link_address"
                    },
                    "group": {
                      "$ref": "#/$defs/iface-link_group"
                    },
                    "state": {
                      "$ref": "#/$defs/iface-link_state"
                    },
                    "master": {
                      "$ref": "#/$defs/iface-link_master"
                    },
                    "mtu": {
                      "$ref": "#/$defs/iface-link_mtu"
                    },
                    "txqlen": {
                      "$ref": "#/$defs/iface-link_txqlen"
                    },
                    "vrf_table": {
                      "description": "routing table associated with the VRF device",
                      "type": [
                        "integer",
                        "string"
                      ],
                      "minimum": 1,
                      "maximum": 4294967295
                    },
                    "ifalias": {
                      "$ref": "#/$defs/iface-link_ifalias"
                    }
                  },
                  "additionalProperties": false,
                  "type": "object"
                },
                {
                  "description": "Virtual tunnel interface over IPv4",
                  "required": [
                    "kind"
                  ],
                  "properties": {
                    "kind": {
                      "const": "vti",
                      "description": "link type"
                    },
                    "address": {
                      "$ref": "#/$defs/iface-link_address"
                    },
                    "bind_netns": {
                      "$ref": "#/$defs/iface-link_bind-netns"
                    },
                    "group": {
                      "$ref": "#/$defs/iface-link_group"
                    },
                    "state": {
                      "$ref": "#/$defs/iface-link_state"
                    },
                    "master": {
                      "$ref": "#/$defs/iface-link_master"
                    },
                    "mtu": {
                      "$ref": "#/$defs/iface-link_mtu"
                    },
                    "txqlen": {
                      "$ref": "#/$defs/iface-link_txqlen"
                    },
                    "ifalias": {
                      "$ref": "#/$defs/iface-link_ifalias"
                    }
                  },
                  "type": "object"
                },
                {
                  "description": "Virtual tunnel interface over IPv6",
                  "required": [
                    "kind"
                  ],
                  "properties": {
                    "kind": {
                      "const": "vti6",
                      "description": "link type"
                    },
                    "address": {
                      "$ref": "#/$defs/iface-link_address"
                    },
                    "bind_netns": {
                      "$ref": "#/$defs/iface-link_bind-netns"
                    },
                    "group": {
                      "$ref": "#/$defs/iface-link_group"
                    },
                    "state": {
                      "$ref": "#/$defs/iface-link_state"
                    },
                    "master": {
                      "$ref": "#/$defs/iface-link_master"
                    },
                    "mtu": {
                      "$ref": "#/$defs/iface-link_mtu"
                    },
                    "txqlen": {
                      "$ref": "#/$defs/iface-link_txqlen"
                    },
                    "ifalias": {
                      "$ref": "#/$defs/iface-link_ifalias"
                    }
                  },
                  "type": "object"
                },
                {
                  "description": "Bonding network interface",
                  "required": [
                    "kind"
                  ],
                  "properties": {
                    "kind": {
                      "const": "bond",
                      "description": "link type"
                    },
                    "address": {
                      "$ref": "#/$defs/iface-link_address"
                    },
                    "group": {
                      "$ref": "#/$defs/iface-link_group"
                    },
                    "state": {
                      "$ref": "#/$defs/iface-link_state"
                    },
                    "master": {
                      "$ref": "#/$defs/iface-link_master"
                    },
                    "mtu": {
                      "$ref": "#/$defs/iface-link_mtu"
                    },
                    "txqlen": {
                      "$ref": "#/$defs/iface-link_txqlen"
                    },
                    "ifalias": {
                      "$ref": "#/$defs/iface-link_ifalias"
                    },
                    "bond_mode": {
                      "enum": [
                        0,
                        "balance-rr",
                        1,
                        "active-backup",
                        2,
                        "balance-xor",
                        3,
                        "broadcast",
                        4,
                        "802.3ad",
                        5,
                        "balance-tlb",
                        6,
                        "balance-alb"
                      ],
                      "default": "balance-rr",
                      "description": "the bonding policy"
                    },
                    "bond_miimon": {
                      "type": "integer",
                      "minimum": 0,
                      "default": 0,
                      "description": "MII link monitoring frequency in milliseconds"
                    },
                    "bond_updelay": {
                      "type": "integer",
                      "minimum": 0,
                      "default": 0,
                      "description": "time, in milliseconds, to wait before enabling a slave after a link recovery has been detected"
                    },
                    "bond_downdelay": {
                      "type": "integer",
                      "minimum": 0,
                      "default": 0,
                      "description": "time, in milliseconds, to wait before disabling a slave after a link failure has been detected"
                    },
                    "bond_use_carrier": {
                      "enum": [
                        0,
                        1
                      ],
                      "default": 1,
                      "description": "use MII or ETHTOOL ioctls vs. netif_carrier_ok() to determine the link status"
                    },
                    "bond_arp_interval": {
                      "type": "integer",
                      "minimum": 0,
                      "default": 0,
                      "description": "ARP link monitoring frequency in milliseconds"
                    },
                    "bond_arp_validate": {
                      "enum": [
                        0,
                        "none",
                        1,
                        "active",
                        2,
                        "backup",
                        3,
                        "all",
                        4,
                        "filter",
                        5,
                        "filter_active",
                        6,
                        "filter_backup"
                      ],
                      "default": "none",
                      "description": "arp validation for arp monitoring"
                    },
                    "bond_arp_all_targets": {
                      "enum": [
                        0,
                        "any",
                        1,
                        "all"
                      ],
                      "default": "any",
                      "description": "quantity of arp_ip_targets that must be reachable"
                    },
                    "bond_primary_reselect": {
                      "enum": [
                        0,
                        "always",
                        1,
                        "better",
                        2,
                        "failure"
                      ],
                      "default": "always",
                      "description": "reselection policy for the primary slave"
                    },
                    "bond_fail_over_mac": {
                      "enum": [
                        0,
                        "none",
                        1,
                        "active",
                        2,
                        "follow"
                      ],
                      "default": "none",
                      "description": "slave mac address selection"
                    },
                    "bond_xmit_hash_policy": {
                      "enum": [
                        0,
                        "layer2",
                        1,
                        "layer3+4",
                        2,
                        "layer2+3",
                        3,
                        "encap2+3",
                        4,
                        "encap3+4",
                        5,
                        "vlan+srcmac"
                      ],
                      "default": "layer2",
                      "description": "transmit hash policy to use for slave selection"
                    },
                    "bond_resend_igmp": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 255,
                      "default": 1,
                      "description": "number of IGMP membership reports to be issued after a failover event"
                    },
                    "bond_num_peer_notif": {
                      "type": "integer",
                      "minimum": 0,
                      "default": 1
                    },
                    "bond_all_slaves_active": {
                      "enum": [
                        0,
                        1
                      ],
                      "default": 1,
                      "description": "dropped (0) or delivered (1) duplicate frames"
                    },
                    "bond_min_links": {
                      "type": "integer",
                      "minimum": 0,
                      "default": 0,
                      "description": "number of links that must be active before asserting carrier"
                    },
                    "bond_lp_interval": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 2147483647,
                      "default": 1,
                      "description": "number of seconds between instances where the bonding driver sends learning packets to each slaves peer switch"
                    },
                    "bond_packets_per_slave": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 65535,
                      "default": 1,
                      "description": "number of packets to transmit through a slave before moving to the next one"
                    },
                    "bond_ad_lacp_rate": {
                      "enum": [
                        0,
                        "slow",
                        1,
                        "fast"
                      ],
                      "default": "slow",
                      "description": "requested LACPDU packet rate in 802.3ad mode"
                    },
                    "bond_ad_select": {
                      "enum": [
                        0,
                        "stable",
                        1,
                        "bandwidth",
                        2,
                        "count"
                      ],
                      "default": "stable",
                      "description": "802.3ad aggregation selection logic to use"
                    },
                    "bond_tlb_dynamic_lb": {
                      "enum": [
                        0,
                        1
                      ],
                      "default": 1,
                      "description": "dynamic shuffling of flows in tlb mode"
                    }
                  },
                  "additionalProperties": false,
                  "type": "object"
                },
                {
                  "description": "Bridge network interface",
                  "required": [
                    "kind"
                  ],
                  "properties": {
                    "kind": {
                      "const": "bridge",
                      "description": "link type"
                    },
                    "address": {
                      "$ref": "#/$defs/iface-link_address"
                    },
                    "group": {
                      "$ref": "#/$defs/iface-link_group"
                    },
                    "state": {
                      "$ref": "#/$defs/iface-link_state"
                    },
                    "master": {
                      "$ref": "#/$defs/iface-link_master"
                    },
                    "mtu": {
                      "$ref": "#/$defs/iface-link_mtu"
                    },
                    "txqlen": {
                      "$ref": "#/$defs/iface-link_txqlen"
                    },
                    "ifalias": {
                      "$ref": "#/$defs/iface-link_ifalias"
                    },
                    "br_ageing_time": {
                      "type": "integer",
                      "minimum": 0,
                      "default": 30000,
                      "description": "FDB entry ageing time in milliseconds"
                    },
                    "br_vlan_protocol": {
                      "enum": [
                        33024,
                        "802.1q",
                        34984,
                        "802.1ad"
                      ],
                      "default": "802.1q",
                      "description": "802.1q or 802.1ad (Q-in-Q)"
                    }
                  },
                  "type": "object"
                },
                {
                  "description": "Distributed Switch Architecture (DSA) user interface",
                  "required": [
                    "kind"
                  ],
                  "properties": {
                    "kind": {
                      "type": "string",
                      "description": "link type",
                      "enum": [
                        "dsa"
                      ]
                    },
                    "address": {
                      "$ref": "#/$defs/iface-link_address"
                    },
                    "group": {
                      "$ref": "#/$defs/iface-link_group"
                    },
                    "state": {
                      "$ref": "#/$defs/iface-link_state"
                    },
                    "master": {
                      "$ref": "#/$defs/iface-link_master"
                    },
                    "mtu": {
                      "$ref": "#/$defs/iface-link_mtu"
                    },
                    "txqlen": {
                      "$ref": "#/$defs/iface-link_txqlen"
                    },
                    "ifalias": {
                      "$ref": "#/$defs/iface-link_ifalias"
                    },
                    "link": {
                      "$ref": "#/$defs/iface-link_link"
                    },
                    "link_netns": {
                      "$ref": "#/$defs/iface-link_link-netns"
                    }
                  },
                  "additionalProperties": false,
                  "type": "object"
                },
                {
                  "description": "Physical network interface",
                  "required": [
                    "kind"
                  ],
                  "properties": {
                    "kind": {
                      "type": "string",
                      "description": "link type",
                      "enum": [
                        "physical"
                      ]
                    },
                    "address": {
                      "$ref": "#/$defs/iface-link_address"
                    },
                    "group": {
                      "$ref": "#/$defs/iface-link_group"
                    },
                    "state": {
                      "$ref": "#/$defs/iface-link_state"
                    },
                    "master": {
                      "$ref": "#/$defs/iface-link_master"
                    },
                    "mtu": {
                      "$ref": "#/$defs/iface-link_mtu"
                    },
                    "txqlen": {
                      "$ref": "#/$defs/iface-link_txqlen"
                    },
                    "ifalias": {
                      "$ref": "#/$defs/iface-link_ifalias"
                    }
                  },
                  "additionalProperties": false,
                  "type": "object"
                },
                {
                  "description": "Dummy network interface",
                  "required": [
                    "kind"
                  ],
                  "properties": {
                    "kind": {
                      "type": "string",
                      "description": "link type",
                      "enum": [
                        "dummy"
                      ]
                    },
                    "address": {
                      "$ref": "#/$defs/iface-link_address"
                    },
                    "group": {
                      "$ref": "#/$defs/iface-link_group"
                    },
                    "state": {
                      "$ref": "#/$defs/iface-link_state"
                    },
                    "master": {
                      "$ref": "#/$defs/iface-link_master"
                    },
                    "mtu": {
                      "$ref": "#/$defs/iface-link_mtu"
                    },
                    "txqlen": {
                      "$ref": "#/$defs/iface-link_txqlen"
                    },
                    "ifalias": {
                      "$ref": "#/$defs/iface-link_ifalias"
                    }
                  },
                  "additionalProperties": false,
                  "type": "object"
                },
                {
                  "description": "VETH/VXCAN interface",
                  "required": [
                    "kind",
                    "peer"
                  ],
                  "properties": {
                    "kind": {
                      "type": "string",
                      "description": "link type",
                      "enum": [
                        "veth",
                        "vxcan"
                      ]
                    },
                    "address": {
                      "$ref": "#/$defs/iface-link_address"
                    },
                    "group": {
                      "$ref": "#/$defs/iface-link_group"
                    },
                    "peer": {
                      "$ref": "#/$defs/iface-link_link"
                    },
                    "peer_netns": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "specifies the peer's netns name or null if the peer isn't in a netns namespace"
                    },
                    "state": {
                      "$ref": "#/$defs/iface-link_state"
                    },
                    "master": {
                      "$ref": "#/$defs/iface-link_master"
                    },
                    "mtu": {
                      "$ref": "#/$defs/iface-link_mtu"
                    },
                    "txqlen": {
                      "$ref": "#/$defs/iface-link_txqlen"
                    },
                    "ifalias": {
                      "$ref": "#/$defs/iface-link_ifalias"
                    }
                  },
                  "additionalProperties": false,
                  "type": "object"
                },
                {
                  "description": "VLAN interface",
                  "required": [
                    "kind",
                    "link",
                    "vlan_id"
                  ],
                  "properties": {
                    "kind": {
                      "const": "vlan",
                      "description": "link type"
                    },
                    "address": {
                      "$ref": "#/$defs/iface-link_address"
                    },
                    "group": {
                      "$ref": "#/$defs/iface-link_group"
                    },
                    "state": {
                      "$ref": "#/$defs/iface-link_state"
                    },
                    "master": {
                      "$ref": "#/$defs/iface-link_master"
                    },
                    "mtu": {
                      "$ref": "#/$defs/iface-link_mtu"
                    },
                    "txqlen": {
                      "$ref": "#/$defs/iface-link_txqlen"
                    },
                    "ifalias": {
                      "$ref": "#/$defs/iface-link_ifalias"
                    },
                    "link": {
                      "$ref": "#/$defs/iface-link_link"
                    },
                    "link_netns": {
                      "$ref": "#/$defs/iface-link_link-netns"
                    },
                    "vlan_id": {
                      "type": [
                        "integer"
                      ],
                      "minimum": 0,
                      "maximum": 4094,
                      "description": "specifies the VLAN identifier to use"
                    },
                    "vlan_protocol": {
                      "enum": [
                        33024,
                        "802.1q",
                        34984,
                        "802.1ad"
                      ],
                      "default": "802.1q",
                      "description": "802.1q or 802.1ad (Q-in-Q)"
                    }
                  },
                  "additionalProperties": false,
                  "type": "object"
                },
                {
                  "description": "VXLAN interface",
                  "required": [
                    "kind",
                    "vxlan_id"
                  ],
                  "anyOf": [
                    {
                      "oneOf": [
                        {
                          "required": [
                            "vxlan_group"
                          ]
                        },
                        {
                          "required": [
                            "vxlan_local"
                          ]
                        },
                        {
                          "required": [
                            "vxlan_local",
                            "vxlan_group"
                          ]
                        },
                        {
                          "required": [
                            "vxlan_group6"
                          ]
                        },
                        {
                          "required": [
                            "vxlan_local6"
                          ]
                        },
                        {
                          "required": [
                            "vxlan_group6",
                            "vxlan_local6"
                          ]
                        }
                      ]
                    },
                    {
                      "not": {
                        "required": [
                          "vxlan_group",
                          "vxlan_group6",
                          "vxlan_local",
                          "vxlan_local6"
                        ]
                      }
                    }
                  ],
                  "properties": {
                    "kind": {
                      "const": "vxlan",
                      "description": "link type"
                    },
                    "address": {
                      "$ref": "#/$defs/iface-link_address"
                    },
                    "bind_netns": {
                      "$ref": "#/$defs/iface-link_bind-netns"
                    },
                    "group": {
                      "$ref": "#/$defs/iface-link_group"
                    },
                    "state": {
                      "$ref": "#/$defs/iface-link_state"
                    },
                    "master": {
                      "$ref": "#/$defs/iface-link_master"
                    },
                    "mtu": {
                      "$ref": "#/$defs/iface-link_mtu"
                    },
                    "txqlen": {
                      "$ref": "#/$defs/iface-link_txqlen"
                    },
                    "ifalias": {
                      "$ref": "#/$defs/iface-link_ifalias"
                    },
                    "vxlan_id": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 16777215,
                      "description": "specifies the VNI"
                    },
                    "vxlan_ageing": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 4294967296,
                      "description": "specifies the lifetime in seconds of FDB entries learnt by the kernel (0: none)",
                      "default": 300
                    },
                    "vxlan_df": {
                      "enum": [
                        0,
                        "unset",
                        1,
                        "set",
                        2,
                        "inherit"
                      ],
                      "default": "unset",
                      "description": "specifies the usage of the DF bit in outgoing packets with IPv4 headers"
                    },
                    "vxlan_label": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 1048575,
                      "description": "specifies a fixed flowlabel"
                    },
                    "vxlan_learning": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 1,
                      "description": "specifies if unknown source link layer addresses and IP addresses are entered into the VXLAN device fdb",
                      "default": 1
                    },
                    "vxlan_limit": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 4294967296,
                      "description": "specifies the maximum number of FDB entries (0: none)",
                      "default": 0
                    },
                    "vxlan_port": {
                      "description": "specifies the UDP destination port to communicate to the remote VXLAN tunnel endpoint",
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 65535
                    },
                    "vxlan_port_range": {
                      "description": "specifies the range of port numbers to use as UDP source ports to communicate to the remote VXLAN tunnel endpoint",
                      "required": [
                        "low",
                        "high"
                      ],
                      "properties": {
                        "low": {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 65535
                        },
                        "high": {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 65535
                        }
                      },
                      "additionalProperties": false,
                      "type": "object"
                    },
                    "vxlan_proxy": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 1,
                      "description": "specifies if ARP proxy is turned on",
                      "default": 0
                    },
                    "vxlan_rsc": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 1,
                      "description": "specifies if route short circuit is turned on",
                      "default": 0
                    },
                    "vxlan_l2miss": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 1,
                      "description": "specifies if netlink LLADDR miss notifications are generated",
                      "default": 0
                    },
                    "vxlan_l3miss": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 1,
                      "description": "specifies if netlink IP ADDR miss notifications are generated",
                      "default": 0
                    },
                    "vxlan_udp_csum": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 1,
                      "description": "specifies if UDP checksum is calculated for tx packets over IPv4",
                      "default": 1
                    },
                    "vxlan_link": {
                      "$ref": "#/$defs/iface-link_tun-dev"
                    },
                    "vxlan_local": {
                      "type": "string",
                      "description": "tunnel source IPv4 address",
                      "format": "ipv4"
                    },
                    "vxlan_local6": {
                      "type": "string",
                      "description": "tunnel source IPv6 address",
                      "format": "ipv6"
                    },
                    "vxlan_group": {
                      "type": "string",
                      "description": "remote unicast destination or multicast group IPv4 address",
                      "format": "ipv4"
                    },
                    "vxlan_group6": {
                      "type": "string",
                      "description": "remote unicast destination or multicast group IPv6 address",
                      "format": "ipv6"
                    },
                    "vxlan_tos": {
                      "type": "integer",
                      "description": "specifies the TOS value to use in outgoing packets (0: inherit)",
                      "minimum": 0,
                      "maximum": 255,
                      "default": 0
                    },
                    "vxlan_ttl": {
                      "type": "integer",
                      "description": "specifies the TTL value to use in outgoing packets (0: auto)",
                      "minimum": 0,
                      "maximum": 255,
                      "default": 0
                    },
                    "vxlan_ttl_inherit": {
                      "type": "boolean",
                      "description": "control whether TTL is propagated",
                      "default": false
                    }
                  },
                  "additionalProperties": false,
                  "type": "object"
                },
                {
                  "description": "IPIP interface",
                  "required": [
                    "kind",
                    "ipip_remote",
                    "ipip_local"
                  ],
                  "properties": {
                    "kind": {
                      "const": "ipip",
                      "description": "link type"
                    },
                    "address": {
                      "$ref": "#/$defs/iface-link_address"
                    },
                    "bind_netns": {
                      "$ref": "#/$defs/iface-link_bind-netns"
                    },
                    "group": {
                      "$ref": "#/$defs/iface-link_group"
                    },
                    "state": {
                      "$ref": "#/$defs/iface-link_state"
                    },
                    "master": {
                      "$ref": "#/$defs/iface-link_master"
                    },
                    "mtu": {
                      "$ref": "#/$defs/iface-link_mtu"
                    },
                    "txqlen": {
                      "$ref": "#/$defs/iface-link_txqlen"
                    },
                    "ifalias": {
                      "$ref": "#/$defs/iface-link_ifalias"
                    },
                    "ipip_remote": {
                      "$ref": "#/$defs/iface-link_tun-remote4"
                    },
                    "ipip_local": {
                      "$ref": "#/$defs/iface-link_tun-local4"
                    }
                  },
                  "additionalProperties": false,
                  "type": "object"
                },
                {
                  "description": "SIT interface",
                  "required": [
                    "kind",
                    "sit_remote",
                    "sit_local"
                  ],
                  "properties": {
                    "kind": {
                      "const": "sit",
                      "description": "link type"
                    },
                    "address": {
                      "$ref": "#/$defs/iface-link_address"
                    },
                    "bind_netns": {
                      "$ref": "#/$defs/iface-link_bind-netns"
                    },
                    "group": {
                      "$ref": "#/$defs/iface-link_group"
                    },
                    "state": {
                      "$ref": "#/$defs/iface-link_state"
                    },
                    "master": {
                      "$ref": "#/$defs/iface-link_master"
                    },
                    "mtu": {
                      "$ref": "#/$defs/iface-link_mtu"
                    },
                    "txqlen": {
                      "$ref": "#/$defs/iface-link_txqlen"
                    },
                    "ifalias": {
                      "$ref": "#/$defs/iface-link_ifalias"
                    },
                    "sit_remote": {
                      "$ref": "#/$defs/iface-link_tun-remote4"
                    },
                    "sit_local": {
                      "$ref": "#/$defs/iface-link_tun-local4"
                    }
                  },
                  "additionalProperties": false,
                  "type": "object"
                },
                {
                  "description": "GRE, GRETAP interface",
                  "required": [
                    "kind",
                    "gre_remote",
                    "gre_local"
                  ],
                  "properties": {
                    "kind": {
                      "type": "string",
                      "description": "link type",
                      "enum": [
                        "gre",
                        "gretap"
                      ]
                    },
                    "address": {
                      "$ref": "#/$defs/iface-link_address"
                    },
                    "bind_netns": {
                      "$ref": "#/$defs/iface-link_bind-netns"
                    },
                    "group": {
                      "$ref": "#/$defs/iface-link_group"
                    },
                    "state": {
                      "$ref": "#/$defs/iface-link_state"
                    },
                    "master": {
                      "$ref": "#/$defs/iface-link_master"
                    },
                    "mtu": {
                      "$ref": "#/$defs/iface-link_mtu"
                    },
                    "txqlen": {
                      "$ref": "#/$defs/iface-link_txqlen"
                    },
                    "ifalias": {
                      "$ref": "#/$defs/iface-link_ifalias"
                    },
                    "gre_remote": {
                      "$ref": "#/$defs/iface-link_tun-remote4"
                    },
                    "gre_local": {
                      "$ref": "#/$defs/iface-link_tun-local4"
                    },
                    "gre_link": {
                      "$ref": "#/$defs/iface-link_tun-dev"
                    }
                  },
                  "additionalProperties": false,
                  "type": "object"
                },
                {
                  "description": "IP6GRE, IP6GRETAP interface",
                  "required": [
                    "kind",
                    "ip6gre_remote",
                    "ip6gre_local"
                  ],
                  "properties": {
                    "kind": {
                      "type": "string",
                      "description": "link type",
                      "enum": [
                        "ip6gre",
                        "ip6gretap"
                      ]
                    },
                    "address": {
                      "$ref": "#/$defs/iface-link_address"
                    },
                    "bind_netns": {
                      "$ref": "#/$defs/iface-link_bind-netns"
                    },
                    "group": {
                      "$ref": "#/$defs/iface-link_group"
                    },
                    "state": {
                      "$ref": "#/$defs/iface-link_state"
                    },
                    "master": {
                      "$ref": "#/$defs/iface-link_master"
                    },
                    "mtu": {
                      "$ref": "#/$defs/iface-link_mtu"
                    },
                    "txqlen": {
                      "$ref": "#/$defs/iface-link_txqlen"
                    },
                    "ifalias": {
                      "$ref": "#/$defs/iface-link_ifalias"
                    },
                    "ip6gre_remote": {
                      "$ref": "#/$defs/iface-link_tun-remote6"
                    },
                    "ip6gre_local": {
                      "$ref": "#/$defs/iface-link_tun-local6"
                    },
                    "ip6gre_link": {
                      "$ref": "#/$defs/iface-link_tun-dev"
                    }
                  },
                  "additionalProperties": false,
                  "type": "object"
                },
                {
                  "description": "GENEVE interface over IPv4",
                  "properties": {
                    "kind": {
                      "const": "geneve",
                      "description": "link type"
                    },
                    "address": {
                      "$ref": "#/$defs/iface-link_address"
                    },
                    "bind_netns": {
                      "$ref": "#/$defs/iface-link_bind-netns"
                    },
                    "group": {
                      "$ref": "#/$defs/iface-link_group"
                    },
                    "state": {
                      "$ref": "#/$defs/iface-link_state"
                    },
                    "master": {
                      "$ref": "#/$defs/iface-link_master"
                    },
                    "mtu": {
                      "$ref": "#/$defs/iface-link_mtu"
                    },
                    "txqlen": {
                      "$ref": "#/$defs/iface-link_txqlen"
                    },
                    "ifalias": {
                      "$ref": "#/$defs/iface-link_ifalias"
                    },
                    "geneve_id": {
                      "type": [
                        "integer"
                      ],
                      "minimum": 0,
                      "maximum": 16777215,
                      "description": "specifies the VNI to use"
                    },
                    "geneve_remote": {
                      "$ref": "#/$defs/iface-link_tun-remote4"
                    }
                  },
                  "required": [
                    "kind",
                    "geneve_id",
                    "geneve_remote"
                  ],
                  "additionalProperties": false,
                  "type": "object"
                },
                {
                  "description": "GENEVE interface over IPv6",
                  "properties": {
                    "kind": {
                      "const": "geneve",
                      "description": "link type"
                    },
                    "address": {
                      "$ref": "#/$defs/iface-link_address"
                    },
                    "bind_netns": {
                      "$ref": "#/$defs/iface-link_bind-netns"
                    },
                    "group": {
                      "$ref": "#/$defs/iface-link_group"
                    },
                    "state": {
                      "$ref": "#/$defs/iface-link_state"
                    },
                    "master": {
                      "$ref": "#/$defs/iface-link_master"
                    },
                    "mtu": {
                      "$ref": "#/$defs/iface-link_mtu"
                    },
                    "txqlen": {
                      "$ref": "#/$defs/iface-link_txqlen"
                    },
                    "ifalias": {
                      "$ref": "#/$defs/iface-link_ifalias"
                    },
                    "geneve_id": {
                      "type": [
                        "integer"
                      ],
                      "minimum": 0,
                      "maximum": 16777215,
                      "description": "specifies the VNI to use"
                    },
                    "geneve_remote6": {
                      "$ref": "#/$defs/iface-link_tun-remote6"
                    }
                  },
                  "required": [
                    "kind",
                    "geneve_id",
                    "geneve_remote6"
                  ],
                  "additionalProperties": false,
                  "type": "object"
                },
                {
                  "description": "WireGuard interface; WireGuard settings can be configured using a `wireguard` block",
                  "required": [
                    "kind"
                  ],
                  "properties": {
                    "kind": {
                      "const": "wireguard",
                      "description": "link type"
                    },
                    "address": {
                      "$ref": "#/$defs/iface-link_address"
                    },
                    "bind_netns": {
                      "$ref": "#/$defs/iface-link_bind-netns"
                    },
                    "group": {
                      "$ref": "#/$defs/iface-link_group"
                    },
                    "state": {
                      "$ref": "#/$defs/iface-link_state"
                    },
                    "master": {
                      "$ref": "#/$defs/iface-link_master"
                    },
                    "mtu": {
                      "$ref": "#/$defs/iface-link_mtu"
                    },
                    "txqlen": {
                      "$ref": "#/$defs/iface-link_txqlen"
                    },
                    "ifalias": {
                      "$ref": "#/$defs/iface-link_ifalias"
                    }
                  },
                  "additionalProperties": false,
                  "type": "object"
                },
                {
                  "description": "XFRM interface",
                  "required": [
                    "kind",
                    "xfrm_if_id"
                  ],
                  "properties": {
                    "kind": {
                      "const": "xfrm",
                      "description": "link type"
                    },
                    "address": {
                      "$ref": "#/$defs/iface-link_address"
                    },
                    "bind_netns": {
                      "$ref": "#/$defs/iface-link_bind-netns"
                    },
                    "group": {
                      "$ref": "#/$defs/iface-link_group"
                    },
                    "state": {
                      "$ref": "#/$defs/iface-link_state"
                    },
                    "master": {
                      "$ref": "#/$defs/iface-link_master"
                    },
                    "mtu": {
                      "$ref": "#/$defs/iface-link_mtu"
                    },
                    "txqlen": {
                      "$ref": "#/$defs/iface-link_txqlen"
                    },
                    "ifalias": {
                      "$ref": "#/$defs/iface-link_ifalias"
                    },
                    "xfrm_link": {
                      "$ref": "#/$defs/iface-link_tun-dev",
                      "description": "underlying interface used to send and receive the transformed traffic"
                    },
                    "xfrm_if_id": {
                      "type": [
                        "integer"
                      ],
                      "minimum": 0,
                      "maximum": 4294967295,
                      "default": 0,
                      "description": "lookup key to match xfrm policies"
                    }
                  },
                  "additionalProperties": false,
                  "type": "object"
                }
              ]
            },
            "neighbours": {
              "description": "static ARP or NDISC cache entries",
              "type": "array",
              "items": {
                "type": "object",
                "required": [
                  "dst"
                ],
                "properties": {
                  "dst": {
                    "description": "protocol address of the neighbour",
                    "type": "string",
                    "format": "ipv4"
                  },
                  "lladdr": {
                    "description": "link layer address of the neighbour",
                    "$ref": "#/$defs/iface-link_address",
                    "default": null
                  }
                },
                "additionalProperties": false
              }
            },
            "sysctl": {
              "description": "interface sysctl settings",
              "type": "object",
              "properties": {
                "ipv4": {
                  "$ref": "#/$defs/iface-sysctl-ipv4"
                },
                "ipv6": {
                  "$ref": "#/$defs/iface-sysctl-ipv6"
                },
                "mpls": {
                  "$ref": "#/$defs/iface-sysctl-mpls-link"
                }
              },
              "additionalProperties": false
            },
            "ethtool": {
              "$ref": "#/$defs/iface-ethtool"
            },
            "cshaper": {
              "description": "simple shaper setup based on the [cake](https://man7.org/linux/man-pages/man8/tc-cake.8.html) queue discipline; replaces any tc settings",
              "type": "object",
              "properties": {
                "ingress": {
                  "description": "target ingress bandwidth",
                  "type": "string",
                  "default": "unlimited"
                },
                "egress": {
                  "description": "target egress bandwidth",
                  "type": "string",
                  "default": "unlimited"
                },
                "profile": {
                  "description": "cshaper profile",
                  "type": "string",
                  "default": "default"
                }
              },
              "additionalProperties": false
            },
            "tc": {
              "description": "settings for traffic control",
              "type": "object",
              "properties": {
                "ingress": {
                  "description": "enable the ingress qdisc for policing and shaping in ingress",
                  "type": "boolean"
                },
                "qdisc": {
                  "description": "root queueing disciplines",
                  "$ref": "#/$defs/iface-tc_qdisc"
                },
                "filter": {
                  "description": "filter used by qdiscs",
                  "type": "array",
                  "items": {
                    "type": "object",
                    "required": [
                      "kind"
                    ],
                    "properties": {
                      "kind": {
                        "type": "string",
                        "description": "filter type",
                        "enum": [
                          "basic",
                          "flow",
                          "fw",
                          "matchall"
                        ]
                      }
                    },
                    "oneOf": [
                      {
                        "description": "[basic](https://man7.org/linux/man-pages/man8/tc-basic.8.html) - basic traffic control filter",
                        "properties": {
                          "kind": {
                            "type": "string",
                            "enum": [
                              "basic"
                            ]
                          },
                          "protocol": {
                            "$ref": "#/$defs/iface-tc_protocol"
                          },
                          "prio": {
                            "$ref": "#/$defs/iface-tc_prio"
                          },
                          "action": {
                            "$ref": "#/$defs/iface-tc_action"
                          },
                          "match": {
                            "description": "match packets using the [extended match infrastructure](https://man7.org/linux/man-pages/man8/tc-ematch.8.html)",
                            "type": "object"
                          }
                        },
                        "additionalProperties": false,
                        "type": "object"
                      },
                      {
                        "description": "[flow](https://man7.org/linux/man-pages/man8/tc-flow.8.html) - flow based traffic control filter",
                        "properties": {
                          "kind": {
                            "type": "string",
                            "enum": [
                              "flow"
                            ]
                          },
                          "protocol": {
                            "$ref": "#/$defs/iface-tc_protocol"
                          },
                          "prio": {
                            "$ref": "#/$defs/iface-tc_prio"
                          },
                          "action": {
                            "$ref": "#/$defs/iface-tc_action"
                          },
                          "baseclass": {
                            "description": "offset for the class ID calculation",
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 65535,
                            "default": 1
                          },
                          "divisor": {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 4294967295
                          },
                          "or": {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 4294967295
                          },
                          "and": {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 4294967295
                          },
                          "xor": {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 4294967295
                          },
                          "rshift": {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 4294967295
                          },
                          "addend": {
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 4294967295
                          }
                        },
                        "oneOf": [
                          {
                            "required": [
                              "kind",
                              "mode",
                              "key"
                            ],
                            "properties": {
                              "mode": {
                                "description": "filter mode",
                                "type": "string",
                                "enum": [
                                  "map"
                                ]
                              },
                              "key": {
                                "description": "map to class ID by key",
                                "type": "string",
                                "enum": [
                                  "src",
                                  "dst",
                                  "proto",
                                  "proto-src",
                                  "proto-dst",
                                  "iif",
                                  "priority",
                                  "mark",
                                  "nfct",
                                  "nfct-src",
                                  "nfct-dst",
                                  "nfct-proto-src",
                                  "nfct-proto-dst",
                                  "rt-classid",
                                  "sk-uid",
                                  "sk-gid",
                                  "vlan-tag",
                                  "rxhash"
                                ]
                              }
                            },
                            "type": "object"
                          },
                          {
                            "required": [
                              "kind",
                              "mode",
                              "keys"
                            ],
                            "properties": {
                              "mode": {
                                "description": "filter mode",
                                "type": "string",
                                "enum": [
                                  "hash"
                                ]
                              },
                              "keys": {
                                "description": "hash over keys for class ID calculation",
                                "type": "array",
                                "items": {
                                  "type": "string",
                                  "enum": [
                                    "src",
                                    "dst",
                                    "proto",
                                    "proto-src",
                                    "proto-dst",
                                    "iif",
                                    "priority",
                                    "mark",
                                    "nfct",
                                    "nfct-src",
                                    "nfct-dst",
                                    "nfct-proto-src",
                                    "nfct-proto-dst",
                                    "rt-classid",
                                    "sk-uid",
                                    "sk-gid",
                                    "vlan-tag",
                                    "rxhash"
                                  ]
                                }
                              },
                              "perturb": {
                                "description": "rehashing interval (in seconds)",
                                "type": "integer",
                                "minimum": 0,
                                "maximum": 294967295
                              }
                            },
                            "type": "object"
                          }
                        ],
                        "type": "object"
                      },
                      {
                        "description": "[fw](https://man7.org/linux/man-pages/man8/tc-fw.8.html) - fwmark traffic control filter",
                        "properties": {
                          "kind": {
                            "type": "string",
                            "enum": [
                              "fw"
                            ]
                          },
                          "protocol": {
                            "$ref": "#/$defs/iface-tc_protocol"
                          },
                          "prio": {
                            "$ref": "#/$defs/iface-tc_prio"
                          },
                          "action": {
                            "$ref": "#/$defs/iface-tc_action"
                          },
                          "handle": {
                            "description": "fwmark (iptables) to match",
                            "type": "integer",
                            "minimum": 0
                          }
                        },
                        "required": [
                          "kind",
                          "handle"
                        ],
                        "additionalProperties": false,
                        "type": "object"
                      },
                      {
                        "description": "[matchall](https://man7.org/linux/man-pages/man8/tc-matchall.8.html) - traffic control filter that matches every packet",
                        "properties": {
                          "kind": {
                            "type": "string",
                            "enum": [
                              "matchall"
                            ]
                          },
                          "parent": {
                            "$ref": "#/$defs/iface-tc_qid"
                          },
                          "protocol": {
                            "$ref": "#/$defs/iface-tc_protocol"
                          },
                          "prio": {
                            "$ref": "#/$defs/iface-tc_prio"
                          },
                          "action": {
                            "$ref": "#/$defs/iface-tc_action"
                          },
                          "classid": {
                            "description": "push matching packets into class",
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 4294967295
                          },
                          "flags": {
                            "description": "process flags (1: SKIP_HW, 2: SKIP_SW)",
                            "type": "integer",
                            "minimum": 0,
                            "maximum": 4294967295
                          }
                        },
                        "additionalProperties": false,
                        "type": "object"
                      }
                    ]
                  }
                }
              },
              "additionalProperties": false
            },
            "wireguard": {
              "description": "settings for WireGuard interfaces",
              "type": "object",
              "properties": {
                "private_key": {
                  "description": "local private key (consider to use the `!include` tag to read the key from file)",
                  "type": "string"
                },
                "listen_port": {
                  "description": "port for listening",
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 65535
                },
                "fwmark": {
                  "description": "fwmark for outgoing packets",
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 4294967295
                },
                "peers": {
                  "description": "dictonary with peers: the keys of the dictionary are the public keys of the peers (base64 encoded)",
                  "type": "object",
                  "additionalProperties": false,
                  "patternProperties": {
                    "^[-A-Za-z0-9+/]{43}=$": {
                      "type": "object",
                      "properties": {
                        "preshared_key": {
                          "description": "preshared key for post-quantum resistance (consider to use the `!include` tag to read the key from file)",
                          "type": "string"
                        },
                        "endpoint": {
                          "description": "initial endpoint IP or hostname",
                          "type": "string"
                        },
                        "persistent_keepalive_interval": {
                          "description": "keepalive interval seconds",
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 65535
                        },
                        "allowedips": {
                          "description": "list of prefixes in CIDR notation",
                          "type": "array",
                          "items": {
                            "type": "string"
                          }
                        }
                      },
                      "additionalProperties": false
                    }
                  }
                }
              },
              "required": [
                "private_key"
              ],
              "additionalProperties": false
            },
            "xdp": {
              "description": "settings for XDP (\"eXpress Data Path\") BPF program",
              "oneOf": [
                {
                  "description": "remove attached XDP program",
                  "type": "boolean",
                  "enum": [
                    false
                  ]
                },
                {
                  "description": "attach already pinned XDP program",
                  "type": "object",
                  "properties": {
                    "mode": {
                      "$ref": "#/$defs/xdp_mode"
                    },
                    "pinned": {
                      "description": "path to already pinned XDP program",
                      "type": "string",
                      "format": "^/sys/fs/bfd/."
                    }
                  },
                  "required": [
                    "pinned"
                  ],
                  "additionalProperties": false
                },
                {
                  "description": "BPF program from ifstate's bpf config section",
                  "type": "object",
                  "properties": {
                    "mode": {
                      "$ref": "#/$defs/xdp_mode"
                    },
                    "bpf": {
                      "description": "BPF program (key in bpf config section)",
                      "type": "string"
                    }
                  },
                  "required": [
                    "bpf"
                  ],
                  "additionalProperties": false
                }
              ]
            }
          },
          "additionalProperties": false
        }
      }
    },
    "routing": {
      "type": "object",
      "properties": {
        "routes": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "to"
            ],
            "properties": {
              "type": {
                "description": "the type of this route",
                "type": [
                  "integer",
                  "string"
                ],
                "enum": [
                  "unicast",
                  "local",
                  "broadcast",
                  "anycast",
                  "multicast",
                  "blackhole",
                  "unreachable",
                  "prohibit",
                  "throw",
                  "nat",
                  "xresolve"
                ],
                "minimum": 1,
                "maximum": 11,
                "default": "unicast"
              },
              "dev": {
                "description": "the output device name",
                "type": [
                  "integer",
                  "string"
                ]
              },
              "proto": {
                "description": "the routing protool identifier of this route",
                "type": [
                  "integer",
                  "string"
                ],
                "default": "boot"
              },
              "realm": {
                "description": "the realm to which this route is assigned",
                "type": [
                  "integer",
                  "string"
                ]
              },
              "scope": {
                "description": "the scope of the destinations covered by the route prefix",
                "type": [
                  "integer",
                  "string"
                ]
              },
              "table": {
                "description": "the table to add this route to",
                "type": [
                  "integer",
                  "string"
                ],
                "default": "main"
              },
              "to": {
                "description": "the destination prefix of the route",
                "type": "string"
              },
              "via": {
                "description": "address of the nexthop router",
                "type": "string",
                "oneOf": [
                  {
                    "format": "ipv4"
                  },
                  {
                    "format": "ipv6"
                  }
                ]
              },
              "vrrp": {
                "$ref": "#/$defs/condition-vrrp"
              },
              "src": {
                "description": "the source address to prefer",
                "type": "string",
                "oneOf": [
                  {
                    "format": "ipv4"
                  },
                  {
                    "format": "ipv6"
                  }
                ]
              },
              "preference": {
                "description": "preference of the route",
                "type": "integer",
                "minimum": 0,
                "maximum": 4294967295,
                "default": 0
              }
            },
            "additionalProperties": false
          }
        },
        "rules": {
          "type": "array",
          "items": {
            "type": "object",
            "if": {
              "properties": {
                "action": {
                  "const": "to_tbl"
                }
              }
            },
            "then": {
              "required": [
                "table",
                "priority"
              ]
            },
            "else": {
              "required": [
                "priority"
              ]
            },
            "properties": {
              "action": {
                "type": [
                  "integer",
                  "string"
                ],
                "description": "the type of this rule",
                "enum": [
                  "to_tbl",
                  "blackhole",
                  "unreachable",
                  "prohibit"
                ],
                "default": "to_tbl"
              },
              "table": {
                "type": [
                  "integer",
                  "string"
                ],
                "minimum": 0,
                "maximum": 255
              },
              "priority": {
                "type": "integer",
                "description": "the priority of this rule",
                "minimum": 0,
                "maximum": 4294967295
              },
              "from": {
                "type": "string",
                "description": "select the source prefix to match"
              },
              "to": {
                "type": "string",
                "description": "select the destination prefix to match"
              },
              "iif": {
                "type": "string",
                "description": "select the incoming device to match"
              },
              "oif": {
                "type": "string",
                "description": "select the outgoing device to match"
              },
              "proto": {
                "type": [
                  "integer",
                  "string"
                ],
                "default": "unspec",
                "description": "routing protocol number (`/etc/iproute2/rt_protos`)"
              },
              "fwmark": {
                "type": "integer",
                "description": "select the *fwmark* value to match"
              },
              "ipproto": {
                "type": [
                  "integer",
                  "string"
                ],
                "description": "select the ip protocol to match"
              },
              "vrrp": {
                "$ref": "#/$defs/condition-vrrp"
              },
              "family": {
                "type": [
                  "integer",
                  "string"
                ],
                "enum": [
                  "AF_INET",
                  "AF_INET6",
                  "inet",
                  "inet6",
                  2,
                  10
                ],
                "description": "IP family (IPv4 or IPv6) to add the rule to. One of `AF_INET`, `inet`, `2` for IPv4 or `AF_INET6`, `inet6`, `10` for IPv6. Leave undefined to let ifstate and pyroute2 automatically detect it from the 'to' and 'from' addresses, defaulting to IPv4."
              }
            },
            "additionalProperties": false
          }
        }
      },
      "additionalProperties": false
    },
    "sysctl": {
      "description": "network sysctl settings",
      "type": "object",
      "properties": {
        "all": {
          "description": "overrides [per interface sysctl settings](https://www.kernel.org/doc/Documentation/networking/ip-sysctl.txt) in `/proc/sys/net/ipv*/conf/all/`",
          "type": "object",
          "properties": {
            "ipv4": {
              "$ref": "#/$defs/iface-sysctl-ipv4"
            },
            "ipv6": {
              "$ref": "#/$defs/iface-sysctl-ipv6"
            }
          },
          "additionalProperties": false
        },
        "default": {
          "description": "default [per interface sysctl settings](https://www.kernel.org/doc/Documentation/networking/ip-sysctl.txt) in `/proc/sys/net/ipv*/conf/default/`",
          "type": "object",
          "properties": {
            "ipv4": {
              "$ref": "#/$defs/iface-sysctl-ipv4"
            },
            "ipv6": {
              "$ref": "#/$defs/iface-sysctl-ipv6"
            }
          },
          "additionalProperties": false
        },
        "mpls": {
          "$ref": "#/$defs/iface-sysctl-mpls"
        },
        "mptcp": {
          "$ref": "#/$defs/iface-sysctl-mptcp"
        }
      },
      "additionalProperties": false
    },
    "namespaces": {
      "type": "object",
      "additionalProperties": false,
      "patternProperties": {
        ".+": {
          "type": "object",
          "properties": {
            "bpf": {
              "$ref": "#/properties/bpf"
            },
            "interfaces": {
              "$ref": "#/properties/interfaces"
            },
            "routing": {
              "$ref": "#/properties/routing"
            },
            "sysctl": {
              "$ref": "#/properties/sysctl"
            }
          },
          "required": [
            "interfaces"
          ],
          "additionalProperties": false
        }
      }
    }
  },
  "additionalProperties": false,
  "required": [
    "interfaces"
  ],
  "$defs": {
    "condition-vrrp": {
      "description": "configure depending on vrrp status",
      "type": "object",
      "required": [
        "name",
        "type",
        "states"
      ],
      "properties": {
        "name": {
          "description": "related vrrp INSTANCE or GROUP name",
          "type": "string"
        },
        "type": {
          "description": "failover type",
          "type": "string",
          "enum": [
            "instance",
            "group"
          ]
        },
        "states": {
          "description": "states at which the interface should be configured",
          "type": "array",
          "prefixItems": [
            {
              "type": "string",
              "enum": [
                "unknown",
                "fault",
                "backup",
                "master"
              ]
            }
          ]
        }
      },
      "additionalProperties": false
    },
    "ignore-fdb": {
      "description": "fdb entries matching this list of regex will be ignored",
      "type": "array",
      "items": {
        "description": "regex to match link-local addresses",
        "examples": [
          "^33:33:",
          "^01:00:5e:"
        ],
        "type": "string"
      }
    },
    "ignore-ipaddr": {
      "description": "list of ip address prefixes to be ignored",
      "type": "array",
      "items": {
        "description": "ip address with prefix length",
        "type": "string",
        "examples": [
          "fe80::/10"
        ]
      }
    },
    "ignore-ifname": {
      "description": "interface names matching this list of regex will be ignored",
      "type": "array",
      "items": {
        "description": "regex to match interface name",
        "examples": [
          "^br-[\\da-f]{12}",
          "^docker\\d+",
          "^lo$",
          "^ppp\\d+$",
          "^veth",
          "^virbr\\d+",
          "^vrrp\\d*\\.\\d+$"
        ],
        "type": "string"
      }
    },
    "ignore-routes": {
      "description": "filter routes by options",
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "dev": {
            "type": [
              "integer",
              "string"
            ]
          },
          "proto": {
            "type": [
              "integer",
              "string"
            ],
            "default": "boot"
          },
          "realm": {
            "type": [
              "integer",
              "string"
            ]
          },
          "scope": {
            "type": [
              "integer",
              "string"
            ]
          },
          "table": {
            "type": [
              "integer",
              "string"
            ],
            "default": "main"
          },
          "to": {
            "type": "string"
          },
          "via": {
            "type": "string"
          }
        },
        "additionalProperties": false
      }
    },
    "ignore-rules": {
      "description": "filter rules by options",
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "action": {
            "type": [
              "integer",
              "string"
            ],
            "description": "the type of this rule",
            "enum": [
              "to_tbl",
              "blackhole",
              "unreachable",
              "prohibit"
            ],
            "default": "to_tbl"
          },
          "table": {
            "type": [
              "integer",
              "string"
            ],
            "minimum": 0,
            "maximum": 255
          },
          "priority": {
            "type": "integer",
            "description": "the priority of this rule",
            "minimum": 0,
            "maximum": 4294967295
          },
          "from": {
            "type": "string",
            "description": "select the source prefix to match"
          },
          "to": {
            "type": "string",
            "description": "select the destination prefix to match"
          },
          "iif": {
            "type": "string",
            "description": "select the incoming device to match"
          },
          "oif": {
            "type": "string",
            "description": "select the outgoing device to match"
          },
          "proto": {
            "type": [
              "integer",
              "string"
            ],
            "default": "unspec",
            "description": "routing protocol number (`/etc/iproute2/rt_protos`)"
          },
          "fwmark": {
            "type": "integer",
            "description": "select the *fwmark* value to match"
          },
          "ipproto": {
            "type": [
              "integer",
              "string"
            ],
            "description": "select the ip protocol to match"
          }
        },
        "additionalProperties": false
      }
    },
    "iface-name": {
      "type": "string",
      "pattern": "^[^/ ]{1,15}$"
    },
    "iface-ethtool": {
      "description": "network driver and hardware settings via [ethtool(8)](https://man7.org/linux/man-pages/man8/ethtool.8.html)",
      "type": "object",
      "properties": {
        "pause": {
          "type": "object",
          "properties": {
            "autoneg": {
              "description": "enable pause autonegotiation",
              "$ref": "#/$defs/iface-ethtool_onoff"
            },
            "rx": {
              "description": "enable Rx pause",
              "$ref": "#/$defs/iface-ethtool_onoff"
            },
            "tx": {
              "description": "enable Tx pause",
              "$ref": "#/$defs/iface-ethtool_onoff"
            }
          },
          "description": "pause parameters",
          "additionalProperties": false
        },
        "coalesce": {
          "type": "object",
          "properties": {
            "adaptive-rx": {
              "$ref": "#/$defs/iface-ethtool_onoff"
            },
            "adaptive-tx": {
              "$ref": "#/$defs/iface-ethtool_onoff"
            },
            "rx-usecs": {
              "type": "integer"
            },
            "rx-frames": {
              "type": "integer"
            },
            "rx-usecs-irq": {
              "type": "integer"
            },
            "rx-frames-irq": {
              "type": "integer"
            },
            "tx-usecs": {
              "type": "integer"
            },
            "tx-frames": {
              "type": "integer"
            },
            "tx-usecs-irq": {
              "type": "integer"
            },
            "tx-frames-irq": {
              "type": "integer"
            },
            "stats-block-usecs": {
              "type": "integer"
            },
            "pkt-rate-low": {
              "type": "integer"
            },
            "rx-usecs-low": {
              "type": "integer"
            },
            "rx-frames-low": {
              "type": "integer"
            },
            "tx-usecs-low": {
              "type": "integer"
            },
            "tx-frames-low": {
              "type": "integer"
            },
            "pkt-rate-high": {
              "type": "integer"
            },
            "rx-usecs-high": {
              "type": "integer"
            },
            "rx-frames-high": {
              "type": "integer"
            },
            "tx-usecs-high": {
              "type": "integer"
            },
            "tx-frames-high": {
              "type": "integer"
            },
            "sample-interval": {
              "type": "integer"
            }
          },
          "description": "interrupt coalescing",
          "additionalProperties": false
        },
        "ring": {
          "type": "object",
          "properties": {
            "rx": {
              "description": "number of ring entries for the Rx ring",
              "type": "integer"
            },
            "rx-mmini": {
              "description": "number of ring entries for the Rx Mini ring",
              "type": "integer"
            },
            "rx-jumbo": {
              "description": "number of ring entries for the Rx Jumbo ring",
              "type": "integer"
            },
            "tx": {
              "description": "number of ring entries for the Tx ring",
              "type": "integer"
            }
          },
          "description": "rx/tx ring parameters",
          "additionalProperties": false
        },
        "features": {
          "type": "object",
          "properties": {
            "rx": {
              "description": "enable RX checksumming",
              "$ref": "#/$defs/iface-ethtool_onoff"
            },
            "tx": {
              "description": "enable TX checksumming",
              "$ref": "#/$defs/iface-ethtool_onoff"
            },
            "sg": {
              "description": "enable scatter-gather",
              "$ref": "#/$defs/iface-ethtool_onoff"
            },
            "tso": {
              "description": "enable TCP segmentation offload",
              "$ref": "#/$defs/iface-ethtool_onoff"
            },
            "ufo": {
              "description": "enable UDP fragmentation offload",
              "$ref": "#/$defs/iface-ethtool_onoff"
            },
            "gso": {
              "description": "enable generic segmentation offload",
              "$ref": "#/$defs/iface-ethtool_onoff"
            },
            "gro": {
              "description": "enable generic receive offload",
              "$ref": "#/$defs/iface-ethtool_onoff"
            },
            "lro": {
              "description": "enable large receive offload",
              "$ref": "#/$defs/iface-ethtool_onoff"
            },
            "rxvlan": {
              "description": "enable RX VLAN acceleration",
              "$ref": "#/$defs/iface-ethtool_onoff"
            },
            "txvlan": {
              "description": "enable TX VLAN acceleration",
              "$ref": "#/$defs/iface-ethtool_onoff"
            },
            "ntuple": {
              "description": "enable Rx ntuple filters and actions",
              "$ref": "#/$defs/iface-ethtool_onoff"
            },
            "rxhash": {
              "description": "enable receive hashing offload",
              "$ref": "#/$defs/iface-ethtool_onoff"
            }
          },
          "description": "offload parameters and other features",
          "additionalProperties": false
        },
        "change": {
          "type": "object",
          "properties": {
            "speed": {
              "description": "speed in Mbps",
              "type": "integer"
            },
            "duplex": {
              "description": "full or half duplex mode",
              "type": "string",
              "enum": [
                "half",
                "full"
              ]
            },
            "port": {
              "description": "device port selection",
              "type": "string",
              "enum": [
                "tp",
                "aui",
                "bnc",
                "mii"
              ]
            },
            "mdix": {
              "description": "MDI-X mode for port",
              "type": [
                "boolean",
                "string"
              ],
              "enum": [
                "auto",
                "on",
                "off",
                true,
                false
              ]
            },
            "autoneg": {
              "description": "enable autonegotation",
              "$ref": "#/$defs/iface-ethtool_onoff"
            },
            "advertise": {
              "description": "speed and duplex advertised by autonegotation",
              "type": "integer"
            },
            "phyad": {
              "description": "PHY address",
              "type": "integer"
            },
            "xcvr": {
              "description": "transceiver type",
              "type": "string",
              "enum": [
                "internal",
                "external"
              ]
            },
            "wol": {
              "description": "Wake-on-LAN options",
              "type": "string",
              "pattern": "^[pumbagsfd]+$"
            },
            "sopass": {
              "description": "SecureOn™ password",
              "type": "string",
              "pattern": "^[0-9a-f]{2}:[0-9a-f]{2}:[0-9a-f]{2}:[0-9a-f]{2}:[0-9a-f]{2}:[0-9a-f]{2}$"
            },
            "msglvl": {
              "description": "driver message flags",
              "oneOf": [
                {
                  "description": "driver message flags by number",
                  "type": "integer"
                },
                {
                  "description": "driver message flags by name",
                  "type": "array",
                  "prefixItems": [
                    {
                      "description": "flag name",
                      "type": "string",
                      "enum": [
                        "drv",
                        "probe",
                        "link",
                        "timer",
                        "ifdown",
                        "ifup",
                        "rx_err",
                        "tx_err",
                        "tx_queued",
                        "intr",
                        "tx_done",
                        "rx_status",
                        "pktdata",
                        "hw",
                        "wol"
                      ]
                    },
                    {
                      "description": "enable flag",
                      "$ref": "#/$defs/iface-ethtool_onoff"
                    }
                  ]
                }
              ]
            }
          },
          "description": "device settings",
          "additionalProperties": false
        },
        "channels": {
          "type": "object",
          "properties": {
            "rx": {
              "description": "number of channels with only receive queues",
              "type": "integer"
            },
            "tx": {
              "description": "number of channels with only transmit queues",
              "type": "integer"
            },
            "other": {
              "description": "number of channels used only for other purposes",
              "type": "integer"
            },
            "combined": {
              "description": "number of multi-purpose channels",
              "type": "integer"
            }
          },
          "description": "number of channels",
          "additionalProperties": false
        },
        "eee": {
          "type": "object",
          "properties": {
            "eee": {
              "description": "enable EEE support",
              "$ref": "#/$defs/iface-ethtool_onoff"
            },
            "tx-lpi": {
              "description": "assert Tx LPI",
              "$ref": "#/$defs/iface-ethtool_onoff"
            },
            "advertise": {
              "description": "sets the speed for which EEE should be enabled (see also `change.advertise`)",
              "type": "integer"
            },
            "tx-timer": {
              "description": "amount of idle time prior asserting Tx LPI (in microseconds)",
              "type": "integer"
            }
          },
          "description": "Energy-Efficient Ethernet (according to the IEEE 802.3az specifications)",
          "additionalProperties": false
        },
        "phy-tunable": {
          "type": "object",
          "properties": {
            "downshift": {
              "description": "enable downshift",
              "oneOf": [
                {
                  "description": "enable downshift",
                  "$ref": "#/$defs/iface-ethtool_onoff"
                },
                {
                  "type": "array",
                  "minItems": 3,
                  "maxItems": 3,
                  "prefixItems": [
                    {
                      "description": "enable downshift",
                      "$ref": "#/$defs/iface-ethtool_onoff"
                    },
                    {
                      "description": "*REQUIRED*",
                      "type": "string",
                      "enum": [
                        "count"
                      ]
                    },
                    {
                      "description": "PHY downshift re-tries count",
                      "type": "integer"
                    }
                  ]
                }
              ]
            },
            "fast-link-down": {
              "description": "enable Fast Link Down",
              "oneOf": [
                {
                  "description": "enable Fast Link Down",
                  "$ref": "#/$defs/iface-ethtool_onoff"
                },
                {
                  "type": "array",
                  "minItems": 3,
                  "maxItems": 3,
                  "prefixItems": [
                    {
                      "description": "enable Fast Link Down",
                      "$ref": "#/$defs/iface-ethtool_onoff"
                    },
                    {
                      "description": "*REQUIRED*",
                      "type": "string",
                      "enum": [
                        "msec"
                      ]
                    },
                    {
                      "description": "period after which the link is reported as down",
                      "type": "integer"
                    }
                  ]
                }
              ]
            },
            "energy-detect-power-down": {
              "description": "enable Energy Detect Power Down (EDPD)",
              "oneOf": [
                {
                  "description": "enable EDPD",
                  "$ref": "#/$defs/iface-ethtool_onoff"
                },
                {
                  "type": "array",
                  "minItems": 3,
                  "maxItems": 3,
                  "prefixItems": [
                    {
                      "description": "enable EDPD",
                      "$ref": "#/$defs/iface-ethtool_onoff"
                    },
                    {
                      "description": "*REQUIRED*",
                      "type": "string",
                      "enum": [
                        "msec"
                      ]
                    },
                    {
                      "description": "wake-up interval for Tx pulses",
                      "type": "integer"
                    }
                  ]
                }
              ]
            }
          },
          "description": "PHY tunable parameters",
          "additionalProperties": false
        },
        "priv-flags": {
          "type": "object",
          "description": "private flags"
        },
        "fec": {
          "type": "object",
          "properties": {
            "encoding": {
              "description": "FEC encoding",
              "type": [
                "string",
                "array"
              ],
              "enum": [
                "auto",
                "off",
                "RS",
                "BaseR",
                "LLRS"
              ],
              "items": {
                "type": "string",
                "enum": [
                  "auto",
                  "RS",
                  "BaseR",
                  "LLRS"
                ]
              }
            }
          },
          "description": "Forward Error Correction",
          "additionalProperties": false
        }
      },
      "additionalProperties": false
    },
    "iface-link_address": {
      "type": "string",
      "description": "link mac address (xx:xx:xx:xx:xx:xx)",
      "pattern": "^([a-fA-F0-9]{2}([:-]?)([a-fA-F0-9]{2}\\2){4}[a-fA-F0-9]{2}|[a-fA-F0-9]{4}\\.[a-fA-F0-9]{4}\\.[a-fA-F0-9]{4})$"
    },
    "iface-link_bind-netns": {
      "type": [
        "string",
        "null"
      ],
      "description": "specifies the netns name or null where the tunnel or underlay should be bind, if not set the binding will happen in the netns namespace of the link"
    },
    "iface-link_group": {
      "type": [
        "integer",
        "string"
      ],
      "description": "specifies a device group name or index"
    },
    "iface-link_link": {
      "type": [
        "integer",
        "string"
      ],
      "description": "specifies the base link name or index"
    },
    "iface-link_link-netns": {
      "type": [
        "string",
        "null"
      ],
      "description": "specifies the base link's netns name or null if the link isn't in a netns namespace"
    },
    "iface-link_master": {
      "type": [
        "integer",
        "string",
        "null"
      ],
      "description": "specifies a master device name or index, use *null* to remove the master"
    },
    "iface-link_master-netns": {
      "type": [
        "string",
        "null"
      ],
      "description": "specifies the master's netns name or null if the master isn't in a netns namespace"
    },
    "iface-link_mtu": {
      "type": "integer",
      "description": "change the mtu of the device",
      "minimum": 68,
      "maximum": 65536
    },
    "iface-link_state": {
      "type": "string",
      "description": "set device state",
      "enum": [
        "up",
        "down"
      ]
    },
    "iface-link_txqlen": {
      "type": "integer",
      "description": "the transmit queue length of the device"
    },
    "iface-link_ifalias": {
      "type": [
        "null",
        "string"
      ],
      "description": "symbolic name for easy reference"
    },
    "iface-link_tun-remote4": {
      "type": "string",
      "description": "remote IPv4 address of the tunnel",
      "format": "ipv4"
    },
    "iface-link_tun-local4": {
      "type": "string",
      "description": "local IPv4 address of the tunnel",
      "format": "ipv4"
    },
    "iface-link_tun-remote6": {
      "type": "string",
      "description": "remote IPv4 address of the tunnel",
      "format": "ipv6"
    },
    "iface-link_tun-local6": {
      "type": "string",
      "description": "local IPv4 address of the tunnel",
      "format": "ipv6"
    },
    "iface-link_tun-dev": {
      "$ref": "#/$defs/iface-link_link",
      "description": "interface to use for tunnel endpoint communication"
    },
    "iface-sysctl-ipv4": {
      "type": "object",
      "description": "settings in `/proc/sys/net/ipv4/<interface>/conf/`",
      "properties": {
        "accept_local": {
          "type": "integer"
        },
        "accept_redirects": {
          "type": "integer"
        },
        "accept_source_route": {
          "type": "integer"
        },
        "arp_accept": {
          "type": "integer"
        },
        "arp_announce": {
          "type": "integer"
        },
        "arp_filter": {
          "type": "integer"
        },
        "arp_ignore": {
          "type": "integer"
        },
        "arp_notify": {
          "type": "integer"
        },
        "bc_forwarding": {
          "type": "integer"
        },
        "bootp_relay": {
          "type": "integer"
        },
        "disable_policy": {
          "type": "integer"
        },
        "disable_xfrm": {
          "type": "integer"
        },
        "drop_gratuitous_arp": {
          "type": "integer"
        },
        "drop_unicast_in_l2_multicast": {
          "type": "integer"
        },
        "force_igmp_version": {
          "type": "integer"
        },
        "forwarding": {
          "type": "integer"
        },
        "igmpv2_unsolicited_report_interval": {
          "type": "integer"
        },
        "igmpv3_unsolicited_report_interval": {
          "type": "integer"
        },
        "ignore_routes_with_linkdown": {
          "type": "integer"
        },
        "log_martians": {
          "type": "integer"
        },
        "mc_forwarding": {
          "type": "integer"
        },
        "medium_id": {
          "type": "integer"
        },
        "promote_secondaries": {
          "type": "integer"
        },
        "proxy_arp": {
          "type": "integer"
        },
        "proxy_arp_pvlan": {
          "type": "integer"
        },
        "route_localnet": {
          "type": "integer"
        },
        "rp_filter": {
          "type": "integer"
        },
        "secure_redirects": {
          "type": "integer"
        },
        "send_redirects": {
          "type": "integer"
        },
        "shared_media": {
          "type": "integer"
        },
        "src_valid_mark": {
          "type": "integer"
        },
        "tag": {
          "type": "integer"
        }
      }
    },
    "iface-sysctl-ipv6": {
      "type": "object",
      "description": "settings in `/proc/sys/net/ipv6/<interface>/conf/`",
      "properties": {
        "accept_dad": {
          "type": "integer"
        },
        "accept_ra": {
          "type": "integer"
        },
        "accept_ra_defrtr": {
          "type": "integer"
        },
        "accept_ra_from_local": {
          "type": "integer"
        },
        "accept_ra_min_hop_limit": {
          "type": "integer"
        },
        "accept_ra_mtu": {
          "type": "integer"
        },
        "accept_ra_pinfo": {
          "type": "integer"
        },
        "accept_ra_rt_info_max_plen": {
          "type": "integer"
        },
        "accept_ra_rt_info_min_plen": {
          "type": "integer"
        },
        "accept_ra_rtr_pref": {
          "type": "integer"
        },
        "accept_redirects": {
          "type": "integer"
        },
        "accept_source_route": {
          "type": "integer"
        },
        "addr_gen_mode": {
          "type": "integer"
        },
        "autoconf": {
          "type": "integer"
        },
        "dad_transmits": {
          "type": "integer"
        },
        "disable_ipv6": {
          "type": "integer"
        },
        "disable_policy": {
          "type": "integer"
        },
        "drop_unicast_in_l2_multicast": {
          "type": "integer"
        },
        "drop_unsolicited_na": {
          "type": "integer"
        },
        "enhanced_dad": {
          "type": "integer"
        },
        "force_mld_version": {
          "type": "integer"
        },
        "force_tllao": {
          "type": "integer"
        },
        "forwarding": {
          "type": "integer"
        },
        "hop_limit": {
          "type": "integer"
        },
        "ignore_routes_with_linkdown": {
          "type": "integer"
        },
        "keep_addr_on_down": {
          "type": "integer"
        },
        "max_addresses": {
          "type": "integer"
        },
        "max_desync_factor": {
          "type": "integer"
        },
        "mc_forwarding": {
          "type": "integer"
        },
        "mldv1_unsolicited_report_interval": {
          "type": "integer"
        },
        "mldv2_unsolicited_report_interval": {
          "type": "integer"
        },
        "mtu": {
          "type": "integer"
        },
        "ndisc_notify": {
          "type": "integer"
        },
        "ndisc_tclass": {
          "type": "integer"
        },
        "optimistic_dad": {
          "description": "perform Optimistic Duplicate Address Detection (RFC 4429); *This option is enabled by default in ifstate!*",
          "type": "integer"
        },
        "proxy_ndp": {
          "type": "integer"
        },
        "regen_max_retry": {
          "type": "integer"
        },
        "router_probe_interval": {
          "type": "integer"
        },
        "router_solicitation_delay": {
          "type": "integer"
        },
        "router_solicitation_interval": {
          "type": "integer"
        },
        "router_solicitation_max_interval": {
          "type": "integer"
        },
        "router_solicitations": {
          "type": "integer"
        },
        "seg6_enabled": {
          "type": "integer"
        },
        "seg6_require_hmac": {
          "type": "integer"
        },
        "stable_secret": {
          "type": "string",
          "format": "ipv6"
        },
        "suppress_frag_ndisc": {
          "type": "integer"
        },
        "temp_prefered_lft": {
          "type": "integer"
        },
        "temp_valid_lft": {
          "type": "integer"
        },
        "use_oif_addrs_only": {
          "type": "integer"
        },
        "use_optimistic": {
          "type": "integer"
        },
        "use_tempaddr": {
          "type": "integer"
        }
      },
      "additionalProperties": false
    },
    "iface-sysctl-mpls": {
      "description": "MPLS [sysctl settings](https://www.kernel.org/doc/Documentation/networking/mpls-sysctl.txt) in `/proc/sys/net/mpls/`",
      "type": "object",
      "properties": {
        "platform_labels": {
          "type": "integer",
          "description": "number of entries in the platform label table",
          "minimum": 0,
          "maximum": 1048575
        },
        "ip_ttl_propagate": {
          "type": "integer",
          "description": "control whether TTL is propagated",
          "minimum": 0,
          "maximum": 1
        },
        "default_ttl": {
          "type": "integer",
          "description": "default TTL value to use for MPLS packets",
          "minimum": 1,
          "maximum": 255
        }
      },
      "additionalProperties": false
    },
    "iface-sysctl-mpls-link": {
      "description": "MPLS [interface sysctl settings](https://www.kernel.org/doc/Documentation/networking/mpls-sysctl.txt) in `/proc/sys/net/mpls/<interface>/`",
      "type": "object",
      "properties": {
        "input": {
          "type": "integer",
          "description": "control whether packets can be input on this interface",
          "minimum": 0,
          "maximum": 1
        }
      },
      "additionalProperties": false
    },
    "iface-sysctl-mptcp": {
      "description": "Multipath TCP [sysctl settings](https://www.kernel.org/doc/Documentation/networking/mptcp-sysctl.rst) in `/proc/sys/net/mptcp/`",
      "type": "object",
      "properties": {
        "add_addr_timeout": {
          "type": "integer",
          "default": 120,
          "description": "timeout in seconds after which an ADD_ADDR control message will be resent",
          "minimum": -8589934,
          "maximum": 8589934
        },
        "allow_join_initial_addr_port": {
          "type": "boolean",
          "default": true,
          "description": "allow peers to send join requests to the IP address and port number used by the initial subflow"
        },
        "blackhole_timeout": {
          "type": "integer",
          "default": 3600,
          "description": "initial time period in second to disable MPTCP on active MPTCP sockets when a MPTCP firewall blackhole issue happens",
          "minimum": 0,
          "maximum": 2147483647
        },
        "checksum_enabled": {
          "type": "boolean",
          "default": false,
          "description": "control whether DSS checksum can be enabled"
        },
        "close_timeout": {
          "type": "integer",
          "default": 60,
          "description": "set the make-after-break timeout",
          "minimum": -8589934,
          "maximum": 8589934
        },
        "enabled": {
          "type": "boolean",
          "default": true,
          "description": "control whether MPTCP sockets can be created"
        },
        "path_manager": {
          "type": "string",
          "default": "kernel",
          "description": "control whether MPTCP sockets can be created",
          "enum": [
            "kernel",
            "userspace"
          ]
        },
        "pm_type": {
          "type": "integer",
          "description": "set the default path manager type to use for each new MPTCP socket",
          "enum": [
            0,
            1
          ],
          "deprecated": true
        },
        "scheduler": {
          "type": "string",
          "default": "default",
          "description": "select the scheduler of your choice"
        },
        "stale_loss_cnt": {
          "type": "integer",
          "default": 4,
          "description": "number of MPTCP-level retransmission intervals with no traffic and pending outstanding data on a given subflow required to declare it stale",
          "minimum": 0,
          "maximum": 4294967295
        },
        "syn_retrans_before_tcp_fallback": {
          "type": "integer",
          "default": 2,
          "description": "number of SYN + MP_CAPABLE retransmissions before falling back to TCP",
          "minimum": 0
        }
      },
      "additionalProperties": false
    },
    "iface-ethtool_onoff": {
      "type": [
        "boolean",
        "string"
      ],
      "enum": [
        "on",
        "off",
        true,
        false
      ]
    },
    "iface-tc_qid": {
      "type": "string",
      "description": "qdisc id",
      "format": "^(root|[0-9a-f]+:[0-9a-f]*)$"
    },
    "iface-tc_protocol": {
      "type": [
        "string",
        "integer"
      ],
      "description": "protocol selector",
      "minLength": 2,
      "minimum": 0,
      "maximum": 255,
      "default": 3
    },
    "iface-tc_prio": {
      "type": "integer",
      "description": "priority",
      "minimum": 0,
      "maximum": 65535
    },
    "iface-tc_qdisc": {
      "description": "traffic control queueing discipline",
      "type": "object",
      "required": [
        "handle"
      ],
      "properties": {
        "handle": {
          "description": "unique id",
          "$ref": "#/$defs/iface-tc_qid"
        }
      },
      "oneOf": [
        {
          "description": "generic classless qdisc",
          "required": [
            "kind"
          ],
          "properties": {
            "kind": {
              "type": "string",
              "description": "qdisk type",
              "enum": [
                "gred",
                "hhf",
                "mqprio",
                "multiq",
                "netem",
                "pfifo_fast",
                "pie",
                "red",
                "sfb",
                "sfq",
                "tbf"
              ]
            }
          },
          "type": "object"
        },
        {
          "$ref": "#/$defs/tc-cake"
        },
        {
          "description": "[choke](https://man7.org/linux/man-pages/man8/tc-choke.8.html) - choose and keep scheduler",
          "required": [
            "kind",
            "limit",
            "min",
            "max",
            "avpkt",
            "burst",
            "probability"
          ],
          "properties": {
            "kind": {
              "const": "choke",
              "description": "qdisk type"
            }
          },
          "type": "object"
        },
        {
          "description": "[CoDel](https://man7.org/linux/man-pages/man8/tc-codel.8.html) - Controlled-Delay Active Queue Management algorithm",
          "required": [
            "kind"
          ],
          "properties": {
            "kind": {
              "const": "codel",
              "description": "qdisk type"
            }
          },
          "type": "object"
        },
        {
          "description": "[bfifo](https://man7.org/linux/man-pages/man8/tc-bfifo.8.html) - Byte limited First In, First Out queue; [pfifo](https://man7.org/linux/man-pages/man8/tc-pfifo.8.html) - Packet limited First In, First Out queue",
          "required": [
            "kind"
          ],
          "properties": {
            "kind": {
              "type": "string",
              "description": "qdisk type",
              "enum": [
                "bfifo",
                "pfifo"
              ]
            },
            "limit": {
              "type": "number",
              "description": "queue size in bytes or packets"
            }
          },
          "additionalProperties": false,
          "type": "object"
        },
        {
          "description": "[fq](https://man7.org/linux/man-pages/man8/tc-fq.8.html) - Fair Queue traffic policing",
          "required": [
            "kind"
          ],
          "properties": {
            "kind": {
              "const": "fq",
              "description": "qdisk type"
            },
            "limit": {
              "type": "number",
              "description": "hard limit on the real queue size (number of packets)"
            },
            "flow_limit": {
              "type": "number",
              "description": "hard limit on the max number of packets per flow"
            }
          },
          "type": "object"
        },
        {
          "description": "[fq_codel](https://man7.org/linux/man-pages/man8/tc-fq_codel.8.html) - Fair Queuing (FQ) with Controlled Delay (CoDel)",
          "required": [
            "kind"
          ],
          "properties": {
            "kind": {
              "const": "fq_codel",
              "description": "qdisk type"
            },
            "limit": {
              "type": "number",
              "description": "hard limit on the real queue size (number of packets)"
            },
            "flows": {
              "type": "number",
              "description": "number of flows"
            }
          },
          "type": "object"
        },
        {
          "description": "generic classful qdisc",
          "required": [
            "kind"
          ],
          "properties": {
            "kind": {
              "type": "string",
              "description": "qdisk type",
              "enum": [
                "atm",
                "cbq",
                "drr",
                "dsmark",
                "hfsc",
                "htb",
                "prio",
                "qfq"
              ]
            }
          },
          "type": "object"
        },
        {
          "description": "classful multiqueue dummy scheduler",
          "required": [
            "kind",
            "children"
          ],
          "properties": {
            "kind": {
              "const": "mq",
              "description": "qdisk type"
            },
            "children": {
              "description": "list child qdiscs for each device TX queue",
              "type": "array",
              "items": {
                "description": "child qdiscs for the nth device TX queue",
                "$ref": "#/$defs/iface-tc_qdisc"
              }
            }
          },
          "type": "object"
        }
      ]
    },
    "tc-cake": {
      "description": "[cake](https://man7.org/linux/man-pages/man8/tc-cake.8.html) - common applications kept enhanced (CAKE)",
      "required": [
        "kind"
      ],
      "properties": {
        "kind": {
          "const": "cake",
          "description": "qdisk type"
        },
        "handle": {
          "description": "unique id",
          "$ref": "#/$defs/iface-tc_qid"
        },
        "ack_filter": {
          "description": "ACKnowledge filter",
          "type": [
            "boolean",
            "string"
          ],
          "enum": [
            "aggressive",
            true,
            false
          ]
        },
        "atm_mode": {
          "description": "ATM mode",
          "type": [
            "boolean",
            "string"
          ],
          "enum": [
            "ptm",
            true,
            false
          ]
        },
        "autorate": {
          "type": "boolean",
          "description": "autorate-ingress"
        },
        "diffserv_mode": {
          "type": "string",
          "description": "diffserv mode",
          "enum": [
            "diffserv3",
            "diffserv4",
            "diffserv8",
            "besteffort",
            "precedence"
          ]
        },
        "ingress": {
          "description": "ingress",
          "type": "boolean"
        },
        "overhead": {
          "description": "overhead",
          "type": "integer",
          "minimum": -64,
          "maximum": 256
        },
        "flow_mode": {
          "description": "flow mode",
          "type": "string",
          "enum": [
            "flowblind",
            "srchost",
            "dsthost",
            "hosts",
            "flows",
            "dual-srchost",
            "dual-dsthost",
            "triple-isolated"
          ]
        },
        "fwmark": {
          "description": "fwmark",
          "type": "integer",
          "minimum": 0
        },
        "memlimit": {
          "description": "memlimit",
          "type": "integer",
          "minimum": 0
        },
        "mpu": {
          "description": "MPU",
          "type": "integer",
          "minimum": 0,
          "maximum": 256
        },
        "nat": {
          "description": "NAT",
          "type": "boolean"
        },
        "raw": {
          "description": "RAW",
          "type": "boolean"
        },
        "rtt": {
          "oneOf": [
            {
              "type": "string",
              "description": "well-known RTT",
              "enum": [
                "datacentre",
                "lan",
                "metro",
                "regional",
                "internet",
                "oceanic",
                "satellite",
                "interplanetary"
              ]
            },
            {
              "type": "integer",
              "description": "manually specify an RTT (us)",
              "minimum": 1
            }
          ]
        },
        "split_gso": {
          "description": "split GSO",
          "type": "boolean"
        },
        "target": {
          "type": "integer",
          "description": "target",
          "minimum": 1
        },
        "wash": {
          "description": "wash",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "iface-tc_action": {
      "description": "traffic control filter action",
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "kind"
        ],
        "properties": {
          "kind": {
            "const": "mirred"
          }
        },
        "oneOf": [
          {
            "description": "[mirred](https://man7.org/linux/man-pages/man8/tc-mirred.8.html) - mirror/redirect action",
            "properties": {
              "kind": {
                "const": "mirred"
              },
              "direction": {
                "description": "packet direction",
                "type": "string",
                "enum": [
                  "ingress",
                  "egress"
                ]
              },
              "action": {
                "description": "copy (`mirror`) or move (`redirect`) packets to the destination interface",
                "type": "string",
                "enum": [
                  "mirror",
                  "redirect"
                ]
              },
              "dev": {
                "description": "destination interface where packets are redirected or mirrored to",
                "$ref": "#/$defs/iface-link_link"
              },
              "index": {
                "description": "unique action ID",
                "type": "integer",
                "minimum": 0,
                "maximum": 4294967295
              }
            },
            "required": [
              "direction",
              "action",
              "dev"
            ],
            "additionalProperties": false,
            "type": "object"
          }
        ]
      }
    },
    "xdp_mode": {
      "mode": {
        "oneOf": [
          {
            "description": "force attach mode of the XDP program (`auto`: let the kernel choose, `xdp`: run inside driver, `xdpgeneric`: driver-independent before SKB allocation, `xdpoffload`: offload to SmartNIC co-processor)",
            "type": "string",
            "enum": [
              "auto",
              "xdp",
              "xdpgeneric",
              "xdpoffload"
            ],
            "default": "auto"
          },
          {
            "description": "allowed attach modes of the XDP program (`xdp`: run inside driver, `xdpgeneric`: driver-independent before SKB allocation, `xdpoffload`: offload to SmartNIC co-processor)",
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "xdp",
                "xdpgeneric",
                "xdpoffload"
              ]
            }
          }
        ]
      }
    }
  }
}
