Added helm chart

This commit is contained in:
Jeff Mahoney 2024-08-23 15:03:44 -04:00
parent f83cd4eb6b
commit b2a0ee4963
7 changed files with 1089 additions and 0 deletions

1
.gitignore vendored
View File

@ -1 +1,2 @@
*~
.*.sw*

1
helm/.helmignore Normal file
View File

@ -0,0 +1 @@
*~

14
helm/Chart.yaml Normal file
View File

@ -0,0 +1,14 @@
---
apiVersion: v2
version: "2024.8.0"
appVersion: "2.17"
name: radvd
description: Linux IPv6 Router Advertisement Daemon
type: application
keywords:
- routing
- network
maintainers:
- name: Jeff Mahoney
email: jeffm@jeffm.io
url: https://github.com/jeff_mahoney

251
helm/templates/config.yaml Normal file
View File

@ -0,0 +1,251 @@
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ .Chart.Name }}-config-{{ .Release.Name }}
data:
config: |-
{{- $defaultInterfaceOptions := dict }}
{{- $defaultPrefixOptions := dict }}
{{- $defaultRouteOptions := dict }}
{{- $defaultRdnssOptions := dict }}
{{- $defaultDnsslOptions := dict }}
{{- $defaultAbroOptions := dict }}
{{- if $.Values.defaults }}
{{- range $name, $value := $.Values.defaults.interfaces }}
{{- $_ := set $defaultInterfaceOptions $name $value }}
{{- end }}
{{- range $name, $value := $.Values.defaults.prefixes }}
{{- $_ := set $defaultPrefixOptions $name $value }}
{{- end }}
{{- range $name, $value := $.Values.defaults.routes }}
{{- $_ := set $defaultRouteOptions $name $value }}
{{- end }}
{{- range $name, $value := $.Values.defaults.rdnss }}
{{- $_ := set $defaultRdnssOptions $name $value }}
{{- end }}
{{- range $name, $value := $.Values.defaults.dnssl }}
{{- $_ := set $defaultDnsslOptions $name $value }}
{{- end }}
{{- range $name, $value := $.Values.defaults.abro }}
{{- $_ := set $defaultAbroOptions $name $value }}
{{- end }}
{{- end }}
{{- range $interface := .Values.interfaces }}
interface {{ $interface.name }} {
{{- $interfaceOptions := dict }}
{{- range $name, $value := $interface.options }}
{{- $_ := set $interfaceOptions $name $value }}
{{- end }}
{{- $_ := merge $interfaceOptions $defaultInterfaceOptions $interfaceOptions }}
{{- if hasKey $interfaceOptions "IgnoreIfMissing" }}
IgnoreIfMissing {{get $interfaceOptions "IgnoreIfMissing" | ternary "on" "off" }};
{{- end }}
{{- if hasKey $interfaceOptions "AdvSendAdvert" }}
AdvSendAdvert {{get $interfaceOptions "AdvSendAdvert" | ternary "on" "off" }};
{{- end }}
{{- if hasKey $interfaceOptions "UnicastOnly" }}
UnicastOnly {{get $interfaceOptions "UnicastOnly" | ternary "on" "off" }};
{{- end }}
{{- if hasKey $interfaceOptions "AdvRASolicitedUnicast" }}
AdvRASolicitedUnicast {{get $interfaceOptions "AdvRASolicitedUnicast" | ternary "on" "off" }};
{{- end }}
{{- if hasKey $interfaceOptions "MaxRtrAdvInterval" }}
MaxRtrAdvInterval {{get $interfaceOptions "MaxRtrAdvInterval" | float64 }}; # seconds
{{- end }}
{{- if hasKey $interfaceOptions "MinRtrAdvInterval" }}
MinRtrAdvInterval {{get $interfaceOptions "MinRtrAdvInterval" | float64 }}; # seconds
{{- end }}
{{- if hasKey $interfaceOptions "MinDelayBetweenRAs" }}
MinDelayBetweenRAs {{get $interfaceOptions "MinDelayBetweenRAs" | float64 }}; # seconds
{{- end }}
{{- if hasKey $interfaceOptions "AdvManagedFlag" }}
AdvManagedFlag {{get $interfaceOptions "AdvManagedFlag" | ternary "on" "off" }};
{{- end }}
{{- if hasKey $interfaceOptions "AdvOtherConfigFlag" }}
AdvOtherConfigFlag {{get $interfaceOptions "AdvOtherConfigFlag" | ternary "on" "off" }};
{{- end }}
{{- if hasKey $interfaceOptions "AdvLinkMTU" }}
AdvLinkMTU {{get $interfaceOptions "AdvLinkMTU" | int}}; # integer
{{- end }}
{{- if hasKey $interfaceOptions "AdvReachableTime" }}
AdvReachableTime {{get $interfaceOptions "AdvReachableTime" | int }}; # milliseconds
{{- end }}
{{- if hasKey $interfaceOptions "AdvRetransTimer" }}
AdvRetransTimer {{get $interfaceOptions "AdvRetransTimer" | int }}; # milliseconds
{{- end }}
{{- if hasKey $interfaceOptions "AdvCurHopLimit" }}
AdvCurHopLimit {{get $interfaceOptions "AdvCurHopLimit" | int }}; # integer
{{- end }}
{{- if hasKey $interfaceOptions "AdvDefaultLifetime" }}
AdvDefaultLifetime {{get $interfaceOptions "AdvDefaultLifetime" | int }}; # seconds
{{- end }}
{{- if hasKey $interfaceOptions "AdvDefaultPreference" }}
AdvDefaultPreference {{get $interfaceOptions "AdvDefaultPreference" }}; # low|medium|high
{{- end }}
{{- if hasKey $interfaceOptions "AdvSourceLLAddress" }}
AdvSourceLLAddress {{get $interfaceOptions "AdvSourceLLAddress" | ternary "on" "off" }};
{{- end }}
{{- if hasKey $interfaceOptions "AdvHomeAgentFlag" }}
AdvHomeAgentFlag {{get $interfaceOptions "AdvHomeAgentFlag" | ternary "on" "off" }};
{{- end }}
{{- if hasKey $interfaceOptions "AdvHomeAgentInfo" }}
AdvHomeAgentInfo {{get $interfaceOptions "AdvHomeAgentInfo" | ternary "on" "off" }};
{{- end }}
{{- if hasKey $interfaceOptions "HomeAgentLifetime" }}
HomeAgentLifetime {{get $interfaceOptions "HomeAgentLifetime" | int}}; # seconds
{{- end }}
{{- if hasKey $interfaceOptions "HomeAgentPreference" }}
HomeAgentPreference {{get $interfaceOptions "HomeAgentPreference" | int}}; # integer
{{- end }}
{{- if hasKey $interfaceOptions "AdvMobRtrSupportFlag" }}
AdvMobRtrSupportFlag {{get $interfaceOptions "AdvMobRtrSupportFlag" | ternary "on" "off" }};
{{- end }}
{{- if hasKey $interfaceOptions "AdvIntervalOpt" }}
AdvIntervalOpt {{get $interfaceOptions "AdvIntervalOpt" | ternary "on" "off" }};
{{- end }}
{{- range $prefix := $interface.prefixes }}
prefix {{ $prefix.prefix }} {
{{- $prefixOptions := dict }}
{{- range $name, $value := $prefix.options }}
{{- $_ := set $prefixOptions $name $value }}
{{- end }}
{{- $_ := merge $prefixOptions $defaultPrefixOptions $prefixOptions }}
{{- if hasKey $prefixOptions "AdvOnLink" }}
AdvOnLink {{get $prefixOptions "AdvOnLink" | ternary "on" "off" }};
{{- end }}
{{- if hasKey $prefixOptions "AdvAutonomous" }}
AdvAutonomous {{get $prefixOptions "AdvAutonomous" | ternary "on" "off" }};
{{- end }}
{{- if hasKey $prefixOptions "AdvRouterAddr" }}
AdvRouterAddr {{get $prefixOptions "AdvRouterAddr" | ternary "on" "off" }};
{{- end }}
{{- if hasKey $prefixOptions "AdvValidLifetime" }}
{{- if kindIs "string" (get $prefixOptions "AdvValidLifetime") }}
AdvValidLifetime {{get $prefixOptions "AdvValidLifetime" }}; # seconds|infinity
{{- else }}
AdvValidLifetime {{get $prefixOptions "AdvValidLifetime" | int}}; # seconds|infinity
{{- end }}
{{- end }}
{{- if hasKey $prefixOptions "AdvPreferredLifetime" }}
{{- if kindIs "string" (get $prefixOptions "AdvValidLifetime") }}
AdvPreferredLifetime {{get $prefixOptions "AdvPreferredLifetime" }}; # seconds|infinity
{{- else }}
AdvPreferredLifetime {{get $prefixOptions "AdvPreferredLifetime" | int}}; # seconds|infinity
{{- end }}
{{- end }}
{{- if hasKey $prefixOptions "DeprecatePrefix" }}
DeprecatePrefix {{get $prefixOptions "DeprecatePrefix" | ternary "on" "off" }};
{{- end }}
{{- if hasKey $prefixOptions "DecrementLifetimes" }}
DecrementLifetimes {{get $prefixOptions "DecrementLifetimes" | ternary "on" "off" }};
{{- end }}
{{- if hasKey $prefixOptions "Base6Interface" }}
Base6Interface {{get $prefixOptions "Base6Interface" }}; # name
{{- end }}
{{- if hasKey $prefixOptions "Base6to4Interface" }}
Base6to4Interface {{get $prefixOptions "Base6to4Interface" }}; # name
{{- end }}
}
{{- end }}
{{- range $route := $interface.routes }}
route {{ $route.route }} {
{{- $routeOptions := dict }}
{{- range $name, $value := $route.options }}
{{- $_ := set $routeOptions $name $value }}
{{- end }}
{{- $_ := merge $routeOptions $defaultRouteOptions $routeOptions }}
{{- if hasKey $routeOptions "AdvRouteLifetime" }}
{{- if kindIs "string" (get $routeOptions "AdvRouteLifetime") }}
AdvRouteLifetime {{get $routeOptions "AdvRouteLifetime" }}; # seconds|infinity
{{- else }}
AdvRouteLifetime {{get $routeOptions "AdvRouteLifetime" | int}}; # seconds|infinity
{{- end }}
{{- end }}
{{- if hasKey $routeOptions "AdvRoutePreference" }}
AdvRoutePreference {{get $routeOptions "AdvRoutePreference" }}; # low|medium|high
{{- end }}
{{- if hasKey $routeOptions "RemoveRoute" }}
RemoveRoute {{get $routeOptions "RemoveRoute" | ternary "on" "off" }};
{{- end }}
}
{{- end }}
{{- range $rdnss := $interface.rdnss }}
RDNSS {{ join " " $rdnss.addresses }} {
{{- $rdnssOptions := dict }}
{{- range $name, $value := $rdnss.options }}
{{- $_ := set $rdnssOptions $name $value }}
{{- end }}
{{- $_ := merge $rdnssOptions $defaultRdnssOptions $rdnssOptions }}
{{- if hasKey $rdnssOptions "AdvRDNSSLifetime" }}
{{- if kindIs "string" (get $rdnssOptions "AdvRDNSSLifetime") }}
AdvRDNSSLifetime {{get $rdnssOptions "AdvRDNSSLifetime" }}; # seconds|infinity
{{- else }}
AdvRDNSSLifetime {{get $rdnssOptions "AdvRDNSSLifetime" | int }}; # seconds|infinity
{{- end }}
{{- end }}
{{- if hasKey $rdnssOptions "FlushRDNSS" }}
FlushRDNSS {{get $rdnssOptions "FlushRDNSS" | ternary "on" "off" }};
{{- end }}
}
{{- end }}
{{- range $dnssl := .dnssl }}
DNSSL {{ join " " $dnssl.suffixes }} {
{{- $dnsslOptions := dict }}
{{- range $name, $value := $dnssl.options }}
{{- $_ := set $dnsslOptions $name $value }}
{{- end }}
{{- $_ := merge $dnsslOptions $defaultDnsslOptions $dnsslOptions }}
{{- if hasKey $dnsslOptions "AdvDNSSLLifetime" }}
{{ $val := get $dnsslOptions "AdvDNSSLifetime" }}
{{- if kindIs "string" $val }}
AdvDNSSLLifetime {{ $val }}; # seconds|infinity;
{{- else }}
AdvDNSSLLifetime {{ $val | int }}; # seconds|infinity;
{{- end }}
{{- end }}
{{- if hasKey $dnsslOptions "FlushDNSSL" }}
FlushDNSSL {{get $dnsslOptions "FlushDNSSL" | ternary "on" "off" }};
{{- end }}
}
{{- end }}
{{- range $abro := .abro }}
{{- $abroOptions := dict }}
{{- range $name, $value := $abro.options }}
{{- $_ := set $abroOptions $name $value }}
{{- end }}
{{- $_ := merge $abroOptions $defaultAbroOptions $abroOptions }}
abro {{ $abro.address }} {
{{- if hasKey $abroOptions "AdvValidLifeTime" }}
AdvValidLifeTime {{get $abroOptions "AdvValidLifeTime" | int }}; # seconds
{{- end }}
{{- if hasKey $abroOptions "AdvVersionLow" }}
AdvVersionLow {{get $abroOptions "AdvVersionLow" | int }}; # unsignedinteger
{{- end }}
{{- if hasKey $abroOptions "AdvVersionHigh" }}
AdvVersionHigh {{get $abroOptions "AdvVersionHigh" | int }}; # unsignedinteger
{{- end }}
}
{{- end }}
{{- if $interface.clients }}
clients {
{{- range $client := $interface.clients }}
{{- $client }};
{{- end }}
}
{{- end }}
{{- if $interface.AdvRASrcAddresses }}
AdvRASrcAddress {
{{- range $address := $interface.AdvRASrcAddresses }}
{{- $address }};
{{- end }}
}
{{- end }}
}
{{- end }}

35
helm/templates/pod.yaml Normal file
View File

@ -0,0 +1,35 @@
apiVersion: v1
kind: Pod
metadata:
name: radvd
spec:
hostNetwork: true
containers:
- name: radvd
image: radvd
command:
- "/usr/bin/radvd"
- "-C"
- "/etc/radvd.conf"
{{- if .Values.debugLevel }}
- "-d"
- {{- .Values.debugLevel | quote }}
{{- end }}
securityContext:
capabilities:
add:
- NET_BIND_SERVICE
- NET_RAW
volumeMounts:
- name: config-volume
mountPath: /etc/radvd.conf
volumes:
- name: config-volume
configMap:
# Provide the name of the ConfigMap containing the files you want
# to add to the container
name: {{ .Chart.Name}}-config-{{ .Release.Name }}
{{- if .Values.nodeSelector }}
nodeSelector:
{{- .Values.nodeSelector | toYaml | nindent 4 }}
{{- end }}

233
helm/values-example.yaml Normal file
View File

@ -0,0 +1,233 @@
defaults:
interfaces:
IgnoreIfMissing: true
AdvSendAdvert: false
UnicastOnly: false
AdvRASolicitedUnicast: true
MaxRtrAdvInterval: 600
MinRtrAdvInterval: 200
MinDelayBetweenRAs: 3
AdvManagedFlag: false
AdvOtherConfigFlag: false
AdvLinkMTU: 0
AdvReachableTime: 0
AdvRetransTimer: 0
AdvCurHopLimit: 64
AdvDefaultLifetime: 1800
AdvDefaultPreference: "medium"
AdvSourceLLAddress: true
AdvHomeAgentFlag: false
AdvHomeAgentInfo: false
HomeAgentLifetime: 1800
HomeAgentPreference: 0
AdvMobRtrSupportFlag: false
AdvIntervalOpt: false
prefixes:
AdvOnLink: true
AdvAutonomous: true
AdvRouterAddr: false
AdvValidLifetime: 86400
AdvPreferredLifetime: 14400
DeprecatePrefix: false
DecrementLifetimes: false
routes:
AdvRouteLifetime: 1800
AdvRoutePreference: "medium"
RemoveRoute: true
rdnss:
AdvRDNSSLifetime: 1200
FlushRDNSS: true
dnssl:
AdvDNSSLLifetime: 1200
FlushDNSSL: true
abro:
AdvValidLifeTime: 0
AdvVersionLow: 0
AdvVersionHigh: 0
interfaces:
- name: eth0
options:
IgnoreIfMissing: true
AdvSendAdvert: false
UnicastOnly: false
AdvRASolicitedUnicast: true
MaxRtrAdvInterval: 600
MinRtrAdvInterval: 200
MinDelayBetweenRAs: 3
AdvManagedFlag: false
AdvOtherConfigFlag: false
AdvLinkMTU: 0
AdvReachableTime: 0
AdvRetransTimer: 0
AdvCurHopLimit: 64
AdvDefaultLifetime: 1800
AdvDefaultPreference: "medium"
AdvSourceLLAddress: true
AdvHomeAgentFlag: false
AdvHomeAgentInfo: false
HomeAgentLifetime: 1800
HomeAgentPreference: 0
AdvMobRtrSupportFlag: false
AdvIntervalOpt: false
prefixes:
- prefix: fe80::/64
options:
AdvOnLink: true
AdvAutonomous: true
AdvRouterAddr: false
AdvValidLifetime: 86400
AdvPreferredLifetime: 14400
DeprecatePrefix: false
DecrementLifetimes: false
- prefix: fd80::/64
options:
AdvOnLink: true
AdvAutonomous: true
AdvRouterAddr: false
AdvValidLifetime: 86400
AdvPreferredLifetime: 14400
DeprecatePrefix: false
DecrementLifetimes: false
routes:
- route: fe80::/64
options:
AdvRouteLifetime: 1800
AdvRoutePreference: "medium"
RemoveRoute: true
- route: fd80::/64
options:
AdvRouteLifetime: 1800
AdvRoutePreference: "medium"
rdnss:
- addresses:
- fe80::1
- fe80::2
options:
AdvRDNSSLifetime: 1200
FlushRDNSS: true
- addresses:
- fe80::3
- fe80::4
options:
AdvRDNSSLifetime: 1200
FlushRDNSS: true
dnssl:
- suffixes:
- "home.jeffm.io"
- "work.jeffm.io"
options:
AdvDNSSLLifetime: 1200
FlushDNSSL: true
clients:
- fe80::1
- fe80::2
- fe80::3
- fe80::4
abro:
- address: fe80::1/64
options:
AdvValidLifeTime: 0
AdvVersionLow: 0
AdvVersionHigh: 0
- address: fe80::2/64
options:
AdvValidLifeTime: 0
AdvVersionLow: 0
AdvVersionHigh: 0
- name: eth1
options:
IgnoreIfMissing: true
AdvSendAdvert: false
UnicastOnly: false
AdvRASolicitedUnicast: true
MaxRtrAdvInterval: 600
MinRtrAdvInterval: 200
MinDelayBetweenRAs: 3
AdvManagedFlag: false
AdvOtherConfigFlag: false
AdvLinkMTU: 0
AdvReachableTime: 0
AdvRetransTimer: 0
AdvCurHopLimit: 64
AdvDefaultLifetime: 1800
AdvDefaultPreference: "medium"
AdvSourceLLAddress: true
AdvHomeAgentFlag: false
AdvHomeAgentInfo: false
HomeAgentLifetime: 1800
HomeAgentPreference: 0
AdvMobRtrSupportFlag: false
AdvIntervalOpt: false
prefixes:
- prefix: fe80::/64
options:
AdvOnLink: true
AdvAutonomous: true
AdvRouterAddr: false
AdvValidLifetime: 86400
AdvPreferredLifetime: 14400
DeprecatePrefix: false
DecrementLifetimes: false
- prefix: fd80::/64
options:
AdvOnLink: true
AdvAutonomous: true
AdvRouterAddr: false
AdvValidLifetime: 86400
AdvPreferredLifetime: 14400
DeprecatePrefix: false
DecrementLifetimes: false
routes:
- route: fe80::/64
options:
AdvRouteLifetime: 1800
AdvRoutePreference: "medium"
RemoveRoute: true
- route: fd80::/64
options:
AdvRouteLifetime: 1800
AdvRoutePreference: "medium"
rdnss:
- addresses:
- fe80::1
- fe80::2
options:
AdvRDNSSLifetime: 1200
FlushRDNSS: true
- addresses:
- fe80::3
- fe80::4
options:
AdvRDNSSLifetime: 1200
FlushRDNSS: true
dnssl:
- suffixes:
- "home.jeffm.io"
- "work.jeffm.io"
options:
AdvDNSSLLifetime: 1200
FlushDNSSL: true
clients:
- fe80::1
- fe80::2
- fe80::3
- fe80::4
abro:
- address: fe80::1/64
options:
AdvValidLifeTime: 0
AdvVersionLow: 0
AdvVersionHigh: 0
- address: fe80::2/64
options:
AdvValidLifeTime: 0
AdvVersionLow: 0
AdvVersionHigh: 0
AdvRASrcAddresses:
- fe80::1
- fe80::2
- fe80::3
- fe80::4

554
helm/values.schema.json Normal file
View File

@ -0,0 +1,554 @@
{
"$schema": "https://json-schema.org/draft/2019-09/schema",
"type": "object",
"title": "Root Schema",
"required": [
"interfaces"
],
"properties": {
"nodeSelector": {
"additionalProperties": false,
"title": "Label to use to select node",
"type": "object",
"additionalProperties": { "type": "string" }
},
"debugLevel": {
"title": "Debug level",
"type": "integer",
"default": 0,
"minimum": 0,
"maximum": 5
},
"defaults": {
"properties": {
"interfaces": { "$ref": "#/$defs/interface_options" },
"prefixes": { "$ref": "#/$defs/prefix_options" },
"routes": { "$ref": "#/$defs/route_options" },
"rdnss": { "$ref": "#/$defs/rdnss_options" },
"dnssl": { "$ref": "#/$defs/dnssl_options" },
"abro": { "$ref": "#/$defs/abro_options" }
},
"additionalProperties": false,
"title": "Default options for each definition",
"type": "object"
},
"interfaces": {
"type": "array",
"default": [],
"title": "The RADVD configuration schema",
"items": {
"type": "object",
"title": "RADVD per-interface definition",
"required": [
"name",
"prefixes"
],
"properties": {
"name": {
"type": "string",
"title": "The interface name",
"examples": [
"eth0",
"eth1"
]
},
"options": { "$ref": "#/$defs/interface_options" },
"prefixes": {
"type": "array",
"title": "Prefix(es) definition for the interface",
"items": {
"type": "object",
"title": "Configuration for a single prefix",
"required": [
"prefix"
],
"properties": {
"prefix": {
"type": "string",
"title": "The IPv6 prefix to be configured",
"examples": [
"fe80::/64",
"fd80::/64"
]
},
"options": { "$ref": "#/$defs/prefix_options" }
},
"additionalProperties": false
}
},
"routes": {
"type": "array",
"title": "Route(s) definition for the interface",
"items": {
"type": "object",
"title": "Configuration for a single route",
"required": [
"route"
],
"properties": {
"route": {
"type": "string",
"title": "The route to be configured",
"examples": [
"fe80::/64",
"fd80::/64"
]
},
"options": { "$ref": "#/$defs/route_options" }
},
"additionalProperties": false
}
},
"rdnss": {
"type": "array",
"title": "Recursive DNS server definitions for this interface",
"items": {
"type": "object",
"title": "Configuration for one set of DNS servers",
"required": [
"addresses"
],
"properties": {
"addresses": {
"type": "array",
"title": "Addresses used by this set of DNS servers",
"items": {
"type": "string",
"title": "Address used by a single DNS server",
"format": "ipv6",
"examples": [
"fe80::1/64",
"fe80::2/64",
"fe80::3/64",
"fe80::4/64"
]
}
},
"options": { "$ref": "#/$defs/rdnss_options" }
},
"additionalProperties": false
}
},
"dnssl": {
"type": "array",
"title": "DNS Search List definitions for this interface",
"items": {
"type": "object",
"title": "Definition for one set of suffixes",
"required": [
"suffixes"
],
"properties": {
"suffixes": {
"type": "array",
"title": "List of DNS suffixes",
"items": {
"type": "string",
"title": "One DNS suffix",
"examples": [
"example.com",
"subdomain.example.com"
]
}
},
"options": { "$ref": "#/$defs/dnssl_options" }
},
"additionalProperties": false
}
},
"clients": {
"type": "array",
"title": "Exclusive unicast client Configuration (disables multicast)",
"items": {
"type": "string",
"format": "ipv6",
"title": "One client to add to the unicast list",
"examples": [
"fe80::1",
"fe80::2",
"fe80::3",
"fe80::4"
]
}
},
"abro": {
"type": "array",
"title": "List of Authoritative Border Router Option definitions",
"items": {
"type": "object",
"title": "A single Authoritative Border Router Option definition",
"required": [
"address"
],
"properties": {
"address": {
"type": "string",
"title": "Address of border router",
"examples": [
"fe80::1/64",
"fe80::2/64"
]
},
"options": { "$ref": "#/$defs/abro_options" }
},
"additionalProperties": false
}
},
"AdvRASrcAddresses": {
"type": "array",
"title": "List of acceptable source addresses",
"items": {
"type": "string",
"format": "ipv6",
"title": "One source address",
"examples": [
"fe80::1",
"fe80::2",
"fe80::3",
"fe80::4"
]
}
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false,
"$defs": {
"interface_options": {
"type": "object",
"title": "The options for an interface",
"properties": {
"IgnoreIfMissing": {
"type": "boolean",
"title": "The IgnoreIfMissing Schema",
"default": true
},
"AdvSendAdvert": {
"type": "boolean",
"title": "Whether or not the router sends periodic router advertisements and responds to router solicitations",
"default": false
},
"UnicastOnly": {
"type": "boolean",
"title": "Indicates that the interface link type only supports unicast",
"default": false
},
"AdvRASolicitedUnicast": {
"type": "boolean",
"title": "Indicates that router solicitations will be responded to with unicast router advertisements, as recommended by RFC7772",
"default" : true
},
"MaxRtrAdvInterval": {
"type": "number",
"title": "Maximum time allowed between sending unsolicited multicast router advertisements from the interface, in seconds",
"default" : 600,
"exclusiveMinimum" : 0
},
"MinRtrAdvInterval": {
"type": "number",
"default" : "0.33 * MaxRtrAdvInterval",
"title": "Minimum time allowed between sending unsolicited multicast router advertisements from the interface, in seconds",
"minimum" : 3
},
"MinDelayBetweenRAs": {
"type": "integer",
"title": "Minimum time allowed between sending multicast router advertisements, in seconds",
"type" : "number",
"default" : 3,
"exclusiveMinimum" : 0
},
"AdvManagedFlag": {
"type": "boolean",
"default" : false,
"title": "When set, hosts use the administered (stateful) protocol for address autoconfiguration in addition to any addresses autoconfigured using stateless address autoconfiguration"
},
"AdvOtherConfigFlag": {
"type": "boolean",
"default" : false,
"title": "When set, hosts use the administered (stateful) protocol for autoconfiguration of other (non-address) information"
},
"AdvLinkMTU": {
"type": "integer",
"title": "The MTU option is used in router advertisement messages to insure that all nodes on a link use the same MTU value in those cases where the link MTU is not well known",
"type" : "integer",
"default" : 0,
"minimum" : 0
},
"AdvReachableTime": {
"type": "integer",
"title": "The time, in milliseconds, that a node assumes a neighbor is reachable after having received a reachability confirmation",
"type" : "integer",
"default" : 0,
"minimum" : 0,
"maximum" : 3600000
},
"AdvRetransTimer": {
"type": "integer",
"default" : 0,
"minimum" : 0,
"title": "The time, in milliseconds, between retransmitted Neighbor Solicitation messages"
},
"AdvCurHopLimit": {
"type": "integer",
"default" : 64,
"minimum" : 0,
"title": "The default value that should be placed in the Hop Count field of the IP header for outgoing (unicast) IP packets."
},
"AdvDefaultLifetime": {
"type": "integer",
"title": "The lifetime associated with the default router in units of seconds",
"minimum" : 0,
"maximum": 65520,
"default" : "3 * MaxRtrAdvInterval (Minimum 1 second)"
},
"AdvDefaultPreference": {
"type": "string",
"title": "The preference associated with the default router",
"enum" : [ "low", "medium", "high" ]
},
"AdvSourceLLAddress": {
"type": "boolean",
"title": "When set, the link-layer address of the outgoing interface is included in the RA.",
"default" : true
},
"AdvHomeAgentFlag": {
"type": "boolean",
"title": "When set, indicates that sending router is able to serve as Mobile IPv6 Home Agent",
"default" : false
},
"AdvHomeAgentInfo": {
"type": "boolean",
"title": "When set, Home Agent Information Option (specified by Mobile IPv6) is included in Router Advertisements. (Requires AdvHomeAgentFlag=true)",
"default": false
},
"HomeAgentLifetime": {
"type": "integer",
"title": "The length of time in seconds (relative to the time the packet is sent) that the router is offering Mobile IPv6 Home Agent services. (Requires AdvHomeAgentFlag=true)",
"default" : 0
},
"HomeAgentPreference": {
"type": "integer",
"title": "The preference for the Home Agent sending this Router Advertisement (Requires AdvHomeAgentFlag=true)",
"default" : 0
},
"AdvMobRtrSupportFlag": {
"type": "boolean",
"title": "When set, the Home Agent signals it supports Mobile Router registrations (specified by NEMO Basic). (Requires AdvHomeAgentFlag=true)",
"default": false
},
"AdvIntervalOpt": {
"type": "boolean",
"title": "When set, Advertisement Interval Option (specified by Mobile IPv6) is included in Router Advertisements",
"default" : false
}
},
"additionalProperties": false
},
"prefix_options": {
"type": "object",
"title": "Options for a prefix",
"properties": {
"AdvOnLink": {
"type": "boolean",
"default": true,
"title": "Indicates that this prefix can be used for on-link determination."
},
"AdvAutonomous": {
"type": "boolean",
"title": "indicates that this prefix can be used for autonomous address configuration as specified in RFC 4862"
},
"AdvRouterAddr": {
"type": "boolean",
"default": false,
"title": "When set, indicates that the address of interface is sent instead of network prefix, as is required by Mobile IPv6"
},
"AdvValidLifetime": {
"anyOf" : [
{
"type": "integer",
"mininum": 0,
"maximum": 4294967295
},
{
"type": "string",
"enum" : [ "infinity" ]
}
],
"default": 86400,
"title": "The length of time in seconds (relative to the time the packet is sent) that the prefix is valid for the purpose of on-link determination",
"examples": [
86400,
"infinity"
]
},
"AdvPreferredLifetime": {
"anyOf" : [
{
"type": "integer",
"mininum": 0,
"maximum": 4294967295
},
{
"type": "string",
"enum" : [ "infinity" ]
}
],
"default": 14400,
"title": "The length of time in seconds (relative to the time the packet is sent) that addresses generated from the prefix via stateless address autoconfiguration remain preferred",
"examples": [
14400,
"infinity"
]
},
"DeprecatePrefix": {
"type": "boolean",
"title": "Upon shutdown, this option will cause radvd to deprecate the prefix by announcing it in the radvd shutdown RA with a zero preferred lifetime and a valid lifetime slightly greater than 2 hours",
"default": false
},
"DecrementLifetimes": {
"type": "boolean",
"title": "This option causes radvd to decrement the values of the preferred and valid lifetimes for the prefix over time",
"default": false
},
"Base6Interface": {
"type": "string",
"title": "This prefix will be combined with the IPv6 address of the interface specified",
"default": null
},
"Base6to4Interface": {
"type": "string",
"title": "This prefix will be combined with the IPv4 address of interface name to produce a valid 6to4 prefix",
"default": null
}
},
"additionalProperties": false
},
"route_options": {
"type": "object",
"title": "Options for a route",
"properties": {
"AdvRouteLifetime": {
"anyOf" : [
{
"type": "integer",
"mininum": 0,
"maximum": 4294967295
},
{
"type": "string",
"enum" : [ "infinity" ]
}
],
"default": "3 * MaxRtrAdvInterval",
"title": "The AdvRouteLifetime Schema",
"examples": [
1800,
"infinity"
]
},
"AdvRoutePreference": {
"type": "string",
"title": "The preference associated with the default router",
"enum" : [ "low", "medium", "high" ],
"default": "medium"
},
"RemoveRoute": {
"type": "boolean",
"title": "Upon shutdown, announce this route with a zero second lifetime",
"default": true
}
},
"additionalProperties": false
},
"rdnss_options": {
"type": "object",
"title": "Options for this set of DNS servers",
"properties": {
"AdvRDNSSLifetime": {
"anyOf" : [
{
"type": "integer",
"mininum": 0,
"maximum": 4294967295
},
{
"type": "string",
"enum" : [ "infinity" ]
}
],
"default": "2 * MaxRtrAdvInterval",
"title": "The maximum duration how long the RDNSS entries are used for name resolution.",
"examples": [
1200,
"infinity"
]
},
"FlushRDNSS": {
"type": "boolean",
"title": "Upon shutdown, announce the RDNSS entries with a zero second lifetime",
"default": true
}
},
"additionalProperties": false
},
"dnssl_options": {
"type": "object",
"title": "Options for this set of suffixes",
"properties": {
"AdvDNSSLLifetime": {
"anyOf" : [
{
"type": "integer",
"mininum": 0,
"maximum": 4294967295
},
{
"type": "string",
"enum" : [ "infinity" ]
}
],
"default": "2 * MaxRtrAdvInterval",
"title": "The maximum duration how long the DNSSL entries are used for name resolution",
"examples": [
1200,
"infinity"
]
},
"FlushDNSSL": {
"type": "boolean",
"title": "Upon shutdown, announce the DNSSL entries with a zero second lifetime",
"default": true
}
},
"additionalProperties": false
},
"abro_options": {
"type": "object",
"title": "Options for this Authoritative Border Router Option definition",
"properties": {
"AdvValidLifeTime": {
"type": "integer",
"title": "The time in units of that the set of border router information is valid",
"default": 10000
},
"AdvVersionLow": {
"type": "integer",
"title": "The lower 32 bits of a 48-bit version number corresponding to the set of information contained in RA message",
"minimum": 0,
"maximum": 4294967295,
"default": 0
},
"AdvVersionHigh": {
"type": "integer",
"title": "The upper 16 bits of a 48-bit version number corresponding to the set of information contained in RA message",
"default": 0,
"minimum": 0,
"maximumExclusive": 65536
}
},
"additionalProperties": false
}
}
}