From 87df87e3983e120ad171ae9dc2966309fc14fcd8 Mon Sep 17 00:00:00 2001
From: Jernej Jakob <jernej.jakob@gmail.com>
Date: Sun, 16 Jun 2019 19:22:49 +0200
Subject: T1439: add dhcpv6-client-id validator

---
 interface-definitions/dhcpv6-server.xml |  9 ++++++++-
 src/validators/dhcpv6-client-id         | 28 ++++++++++++++++++++++++++++
 2 files changed, 36 insertions(+), 1 deletion(-)
 create mode 100755 src/validators/dhcpv6-client-id

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)
+
-- 
cgit v1.2.3