summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--interface-definitions/dhcpv6-server.xml9
-rwxr-xr-xsrc/validators/dhcpv6-client-id28
2 files changed, 36 insertions, 1 deletions
diff --git a/interface-definitions/dhcpv6-server.xml b/interface-definitions/dhcpv6-server.xml
index bf049cf7a..b1e5c8d6c 100644
--- a/interface-definitions/dhcpv6-server.xml
+++ b/interface-definitions/dhcpv6-server.xml
@@ -281,7 +281,7 @@
<constraint>
<regex>^[-_a-zA-Z0-9.]+$</regex>
</constraint>
- <constraintErrorMessage>Invalid static-mapping name</constraintErrorMessage>
+ <constraintErrorMessage>Invalid static-mapping name. May only contain letters, numbers and .-_</constraintErrorMessage>
</properties>
<children>
<leafNode name="disable">
@@ -293,6 +293,13 @@
<leafNode name="identifier">
<properties>
<help>Client identifier (DUID) for this static mapping [REQUIRED]</help>
+ <valueHelp>
+ <format>h[[:h]...]</format>
+ <description>DUID: colon-separated hex list (as used by isc-dhcp option dhcpv6.client-id)</description>
+ </valueHelp>
+ <constraint>
+ <validator name="dhcpv6-client-id"/>
+ </constraint>
</properties>
</leafNode>
<leafNode name="ipv6-address">
diff --git a/src/validators/dhcpv6-client-id b/src/validators/dhcpv6-client-id
new file mode 100755
index 000000000..a8c3e60b6
--- /dev/null
+++ b/src/validators/dhcpv6-client-id
@@ -0,0 +1,28 @@
+#!/usr/bin/env python3
+#
+# Copyright (C) 2019 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 sys
+import re
+
+if len(sys.argv) == 2:
+ pattern = "^([0-9A-Fa-f]{1,2}[:])*([0-9A-Fa-f]{1,2})$"
+ if re.match(pattern, sys.argv[1]):
+ sys.exit(0)
+ else:
+ sys.exit(1)
+