diff options
-rw-r--r-- | data/templates/dhcp-client/ipv6.tmpl | 3 | ||||
-rw-r--r-- | interface-definitions/include/dhcpv6-options.xml.i | 12 | ||||
-rwxr-xr-x | src/validators/ipv6-duid | 27 | ||||
-rwxr-xr-x | src/validators/mac-address | 4 |
4 files changed, 43 insertions, 3 deletions
diff --git a/data/templates/dhcp-client/ipv6.tmpl b/data/templates/dhcp-client/ipv6.tmpl index 68f668117..49d0d8c88 100644 --- a/data/templates/dhcp-client/ipv6.tmpl +++ b/data/templates/dhcp-client/ipv6.tmpl @@ -3,6 +3,9 @@ # man https://www.unix.com/man-page/debian/5/dhcp6c.conf/ interface {{ ifname }} { {% if address is defined and 'dhcpv6' in address %} +{% if dhcpv6_options is defined and dhcpv6_options.duid is defined and dhcpv6_options.duid is not none %} + send client-id {{ dhcpv6_options.duid }}; +{% endif %} request domain-name-servers; request domain-name; {% if dhcpv6_options is defined and dhcpv6_options.parameters_only is defined %} diff --git a/interface-definitions/include/dhcpv6-options.xml.i b/interface-definitions/include/dhcpv6-options.xml.i index 9a1016956..33ba39592 100644 --- a/interface-definitions/include/dhcpv6-options.xml.i +++ b/interface-definitions/include/dhcpv6-options.xml.i @@ -4,6 +4,18 @@ <help>DHCPv6 client settings/options</help> </properties> <children> + <leafNode name="duid"> + <properties> + <help>DHCP unique identifier (DUID) to be sent by dhcpv6 client</help> + <valueHelp> + <format>duid</format> + <description>DHCP unique identifier (DUID)</description> + </valueHelp> + <constraint> + <validator name="ipv6-duid"/> + </constraint> + </properties> + </leafNode> <leafNode name="parameters-only"> <properties> <help>Acquire only config parameters, no address</help> diff --git a/src/validators/ipv6-duid b/src/validators/ipv6-duid new file mode 100755 index 000000000..fd4728e50 --- /dev/null +++ b/src/validators/ipv6-duid @@ -0,0 +1,27 @@ +#!/usr/bin/env python3 +# +# Copyright (C) 2021 VyOS maintainers and contributors +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License version 2 or later as +# published by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +import re +import sys + +pattern = "^([0-9A-Fa-f]{2}:){,127}([0-9A-Fa-f]{2})$" + +if __name__ == '__main__': + if len(sys.argv) != 2: + sys.exit(1) + if not re.match(pattern, sys.argv[1]): + sys.exit(1) + sys.exit(0) diff --git a/src/validators/mac-address b/src/validators/mac-address index b2d3496f4..7d020f387 100755 --- a/src/validators/mac-address +++ b/src/validators/mac-address @@ -17,9 +17,7 @@ import re import sys - -pattern = "^([0-9A-Fa-f]{2}[:]){5}([0-9A-Fa-f]{2})$" - +pattern = "^([0-9A-Fa-f]{2}:){5}([0-9A-Fa-f]{2})$" if __name__ == '__main__': if len(sys.argv) != 2: |