summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--interface-definitions/dhcpv6-server.xml13
-rwxr-xr-xsrc/validators/dhcpv6-client-id28
2 files changed, 40 insertions, 1 deletions
diff --git a/interface-definitions/dhcpv6-server.xml b/interface-definitions/dhcpv6-server.xml
index 67e734cc0..79b39cfa1 100644
--- a/interface-definitions/dhcpv6-server.xml
+++ b/interface-definitions/dhcpv6-server.xml
@@ -278,6 +278,10 @@
<tagNode name="static-mapping">
<properties>
<help>Name of static mapping</help>
+ <constraint>
+ <regex>^[-_a-zA-Z0-9.]+$</regex>
+ </constraint>
+ <constraintErrorMessage>Invalid static-mapping name. May only contain letters, numbers and .-_</constraintErrorMessage>
</properties>
<children>
<leafNode name="disable">
@@ -288,7 +292,14 @@
</leafNode>
<leafNode name="identifier">
<properties>
- <help>Client identifier for this static mapping</help>
+ <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)
+