about summary refs log tree commit diff
path: root/REORG.TODO/scripts/gen-rrtypes.py
diff options
context:
space:
mode:
Diffstat (limited to 'REORG.TODO/scripts/gen-rrtypes.py')
-rw-r--r--REORG.TODO/scripts/gen-rrtypes.py68
1 files changed, 68 insertions, 0 deletions
diff --git a/REORG.TODO/scripts/gen-rrtypes.py b/REORG.TODO/scripts/gen-rrtypes.py
new file mode 100644
index 0000000000..ec71e9fc46
--- /dev/null
+++ b/REORG.TODO/scripts/gen-rrtypes.py
@@ -0,0 +1,68 @@
+#!/usr/bin/python3
+# Generate DNS RR type constants for resolv header files.
+# Copyright (C) 2016-2017 Free Software Foundation, Inc.
+# This file is part of the GNU C Library.
+#
+# The GNU C Library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# The GNU C Library 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
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with the GNU C Library; if not, see
+# <http://www.gnu.org/licenses/>.
+
+"""Generate DNS RR type constants for resolv header files.
+
+resolv/arpa/nameser.h and resolv/arpa/nameser_compat.h contain lists
+of RR type constants.  This script downloads the current definitions
+from the IANA DNS Parameters protocol registry and translates it into
+the two different lists.
+
+Two lists are written to standard output.  The first one contains enum
+constants for resolv/arpa/nameser.h.  The second one lists the
+preprocessor macros for resolv/arpa/nameser_compat.h.
+
+"""
+
+# URL of the IANA registry.
+source = "http://www.iana.org/assignments/dns-parameters/dns-parameters-4.csv"
+
+import collections
+import csv
+import io
+import urllib.request
+
+Type = collections.namedtuple("Type", "name number comment")
+
+def get_types(source):
+    for row in csv.reader(io.TextIOWrapper(urllib.request.urlopen(source))):
+        if row[0] in ('TYPE', 'Unassigned', 'Private use', 'Reserved'):
+            continue
+        name, number, comment = row[:3]
+        if name == '*':
+            name = 'ANY'
+            comment = 'request for all cached records'
+        number = int(number)
+        yield Type(name, number, comment)
+
+types = list(get_types(source))
+
+print("// enum constants for resolv/arpa/nameser.h")
+print()
+for typ in types:
+    name = typ.name.replace("-", "_").lower()
+    print("    ns_t_{0} = {1.number},".format(name, typ))
+print()
+
+print("// macro aliases resolv/arpa/nameser_compat.h")
+print()
+for typ in types:
+    name = typ.name.replace("-", "_")
+    print("#define T_{0} ns_t_{1}".format(name.upper(), name.lower()))
+print()