martians: overhaul

- Use the XML files instead of the CSV
- Separate output in inbound and outbound tables
- Add script for producing all the outputs
This commit is contained in:
Lucas 2020-10-27 02:56:28 +00:00
parent 56b12b3023
commit 5db09725a3
6 changed files with 793 additions and 79 deletions

View File

@ -0,0 +1,17 @@
#!/bin/sh
script=iana-ip-special-registry-parser.py
process_xml()
{
v=$1
dir=$2
in=iana-ip$v-special-registry.xml
out=martians-$v-${dir%bound}.txt
python3 "$script" "$dir" <"$in" >"$out"
}
process_xml v4 inbound
process_xml v4 outbound
process_xml v6 inbound
process_xml v6 outbound

View File

@ -1,38 +1,101 @@
#!/usr/bin/env python3
import csv
import re
import argparse
from enum import Enum
import sys
import xml.sax
REGEX_FOOTNOTES = re.compile(r" \[\d+\]")
REGEX_WHITESPACES = re.compile(r"\s+")
def parse_iana_csv(csvfile):
reader = csv.DictReader(csvfile)
for row in reader:
fmt = ""
reachable = row["Globally Reachable"]
if reachable == "":
continue
if "False" in reachable:
fmt = "{}"
elif "True" in reachable:
fmt = "!{}"
elif "N/A" in reachable:
fmt = "#{}"
else:
fmt = "#[" + reachable + "]: {}"
blocks = row["Address Block"]
blocks = REGEX_FOOTNOTES.sub("", blocks)
blocks = REGEX_WHITESPACES.sub("", blocks)
for block in blocks.split(","):
print(fmt.format(block))
class ParserState(Enum):
NOOP = 0
DISCARD = 1
CAPTURE = 2
class IPDisallowedHandler(xml.sax.ContentHandler):
TRANSITIONS = {
"address": ParserState.CAPTURE,
"source": ParserState.CAPTURE,
"destination": ParserState.CAPTURE,
"global": ParserState.CAPTURE,
}
def __init__(self):
self._reset()
def _reset(self):
self._state = ParserState.NOOP
self._address = None
self._source = None
self._destination = None
self._global = None
self._content = ""
def _processElement(self, name):
pass
def startElement(self, name, attrs):
if name == "record":
self._state = ParserState.DISCARD
return
if self._state == ParserState.NOOP:
return
self._state = self.TRANSITIONS.get(name, ParserState.DISCARD)
def endElement(self, name):
if name == "record":
if self._address is not None:
self._processElement()
self._reset()
if self._state == ParserState.NOOP:
return
if self._content == "":
return
self._content = self._content.strip()
if name == "address":
self._address = self._content.split(", ")
if name == "source":
self._source = self._content == "True"
if name == "destination":
self._destination = self._content == "True"
if name == "global":
self._global = self._content == "True"
self._content = ""
self._state = ParserState.DISCARD
def characters(self, content):
if self._state != ParserState.CAPTURE:
return
self._content += content
class IPDisallowedInboundHandler(IPDisallowedHandler):
def _processElement(self):
if not self._source:
for address in self._address:
print(address)
class IPDisallowedOutboundHandler(IPDisallowedHandler):
def _processElement(self):
# Document states:
# > If the value of "Destination" is FALSE, the values of
# > "Forwardable" and "Globally Reachable" must also be false.
# So, `self._destination == False` implies `self._global ==
# False.` For this reason, it's enough to test for
# `self._global == False`.
if not self._global:
for address in self._address:
print(address)
if __name__ == "__main__":
def usage():
print("Usage: {}".format(sys.argv[1]), file=sys.stderr)
sys.exit(1)
parser = argparse.ArgumentParser()
parser.add_argument("direction", choices=["inbound", "outbound"])
args = parser.parse_args()
if len(sys.argv) != 1:
usage()
parse_iana_csv(sys.stdin)
if args.direction == "inbound":
handler = IPDisallowedInboundHandler()
else:
handler = IPDisallowedOutboundHandler()
xml.sax.parse(sys.stdin, handler)

View File

@ -1,25 +0,0 @@
Address Block,Name,RFC,Allocation Date,Termination Date,Source,Destination,Forwardable,Globally Reachable,Reserved-by-Protocol
0.0.0.0/8,"""This host on this network""","[RFC1122], Section 3.2.1.3",1981-09,N/A,True,False,False,False,True
10.0.0.0/8,Private-Use,[RFC1918],1996-02,N/A,True,True,True,False,False
100.64.0.0/10,Shared Address Space,[RFC6598],2012-04,N/A,True,True,True,False,False
127.0.0.0/8,Loopback,"[RFC1122], Section 3.2.1.3",1981-09,N/A,False [1],False [1],False [1],False [1],True
169.254.0.0/16,Link Local,[RFC3927],2005-05,N/A,True,True,False,False,True
172.16.0.0/12,Private-Use,[RFC1918],1996-02,N/A,True,True,True,False,False
192.0.0.0/24 [2],IETF Protocol Assignments,"[RFC6890], Section 2.1",2010-01,N/A,False,False,False,False,False
192.0.0.0/29,IPv4 Service Continuity Prefix,[RFC7335],2011-06,N/A,True,True,True,False,False
192.0.0.8/32,IPv4 dummy address,[RFC7600],2015-03,N/A,True,False,False,False,False
192.0.0.9/32,Port Control Protocol Anycast,[RFC7723],2015-10,N/A,True,True,True,True,False
192.0.0.10/32,Traversal Using Relays around NAT Anycast,[RFC8155],2017-02,N/A,True,True,True,True,False
"192.0.0.170/32, 192.0.0.171/32",NAT64/DNS64 Discovery,"[RFC-cheshire-sudn-ipv4only-dot-arpa-17][RFC7050], Section 2.2",2013-02,N/A,False,False,False,False,True
192.0.2.0/24,Documentation (TEST-NET-1),[RFC5737],2010-01,N/A,False,False,False,False,False
192.31.196.0/24,AS112-v4,[RFC7535],2014-12,N/A,True,True,True,True,False
192.52.193.0/24,AMT,[RFC7450],2014-12,N/A,True,True,True,True,False
192.88.99.0/24,Deprecated (6to4 Relay Anycast),[RFC7526],2001-06,2015-03,,,,,
192.168.0.0/16,Private-Use,[RFC1918],1996-02,N/A,True,True,True,False,False
192.175.48.0/24,Direct Delegation AS112 Service,[RFC7534],1996-01,N/A,True,True,True,True,False
198.18.0.0/15,Benchmarking,[RFC2544],1999-03,N/A,True,True,True,False,False
198.51.100.0/24,Documentation (TEST-NET-2),[RFC5737],2010-01,N/A,False,False,False,False,False
203.0.113.0/24,Documentation (TEST-NET-3),[RFC5737],2010-01,N/A,False,False,False,False,False
240.0.0.0/4,Reserved,"[RFC1112], Section 4",1989-08,N/A,False,False,False,False,True
255.255.255.255/32,Limited Broadcast,"[RFC8190]
[RFC919], Section 7",1984-10,N/A,False,True,False,False,True
1 Address Block Name RFC Allocation Date Termination Date Source Destination Forwardable Globally Reachable Reserved-by-Protocol
2 0.0.0.0/8 "This host on this network" [RFC1122], Section 3.2.1.3 1981-09 N/A True False False False True
3 10.0.0.0/8 Private-Use [RFC1918] 1996-02 N/A True True True False False
4 100.64.0.0/10 Shared Address Space [RFC6598] 2012-04 N/A True True True False False
5 127.0.0.0/8 Loopback [RFC1122], Section 3.2.1.3 1981-09 N/A False [1] False [1] False [1] False [1] True
6 169.254.0.0/16 Link Local [RFC3927] 2005-05 N/A True True False False True
7 172.16.0.0/12 Private-Use [RFC1918] 1996-02 N/A True True True False False
8 192.0.0.0/24 [2] IETF Protocol Assignments [RFC6890], Section 2.1 2010-01 N/A False False False False False
9 192.0.0.0/29 IPv4 Service Continuity Prefix [RFC7335] 2011-06 N/A True True True False False
10 192.0.0.8/32 IPv4 dummy address [RFC7600] 2015-03 N/A True False False False False
11 192.0.0.9/32 Port Control Protocol Anycast [RFC7723] 2015-10 N/A True True True True False
12 192.0.0.10/32 Traversal Using Relays around NAT Anycast [RFC8155] 2017-02 N/A True True True True False
13 192.0.0.170/32, 192.0.0.171/32 NAT64/DNS64 Discovery [RFC-cheshire-sudn-ipv4only-dot-arpa-17][RFC7050], Section 2.2 2013-02 N/A False False False False True
14 192.0.2.0/24 Documentation (TEST-NET-1) [RFC5737] 2010-01 N/A False False False False False
15 192.31.196.0/24 AS112-v4 [RFC7535] 2014-12 N/A True True True True False
16 192.52.193.0/24 AMT [RFC7450] 2014-12 N/A True True True True False
17 192.88.99.0/24 Deprecated (6to4 Relay Anycast) [RFC7526] 2001-06 2015-03
18 192.168.0.0/16 Private-Use [RFC1918] 1996-02 N/A True True True False False
19 192.175.48.0/24 Direct Delegation AS112 Service [RFC7534] 1996-01 N/A True True True True False
20 198.18.0.0/15 Benchmarking [RFC2544] 1999-03 N/A True True True False False
21 198.51.100.0/24 Documentation (TEST-NET-2) [RFC5737] 2010-01 N/A False False False False False
22 203.0.113.0/24 Documentation (TEST-NET-3) [RFC5737] 2010-01 N/A False False False False False
23 240.0.0.0/4 Reserved [RFC1112], Section 4 1989-08 N/A False False False False True
24 255.255.255.255/32 Limited Broadcast [RFC8190] [RFC919], Section 7 1984-10 N/A False True False False True

View File

@ -0,0 +1,359 @@
<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet type="text/xsl" href="iana-ipv4-special-registry.xsl"?>
<?oxygen RNGSchema="iana-ipv4-special-registry.rng" type="xml"?>
<registry xmlns="http://www.iana.org/assignments" id="iana-ipv4-special-registry">
<title>IANA IPv4 Special-Purpose Address Registry</title>
<category>Internet Protocol version 4 (IPv4) Address Space</category>
<created>2009-08-19</created>
<updated>2020-09-04</updated>
<registry id="iana-ipv4-special-registry-1">
<title>IANA IPv4 Special-Purpose Address Registry</title>
<xref type="rfc" data="rfc5736"/>
<xref type="rfc" data="rfc6890"/>
<xref type="rfc" data="rfc8190"/>
<registration_rule>IETF Review</registration_rule>
<note>The IETF has reserved the address block of 192.0.0.0/24 for use for
special purposes relating to protocol assignments. This registry
contains the current assignments made by the IETF from this address
block.
Address prefixes listed in the Special-Purpose Address Registry are
not guaranteed routability in any particular local or global context.
The IPv4 and IPv6 Special-Purpose Address Registries maintain the
following information regarding each entry:
o Address Block - A block of IPv4 or IPv6 addresses that has been
registered for a special purpose.
o Name - A descriptive name for the special-purpose address block.
o RFC - The RFC through which the special-purpose address block was
requested.
o Allocation Date - The date upon which the special-purpose address
block was allocated.
o Termination Date - The date upon which the allocation is to be
terminated. This field is applicable for limited-use allocations
only.
o Source - A boolean value indicating whether an address from the
allocated special-purpose address block is valid when used as the
source address of an IP datagram that transits two devices.
o Destination - A boolean value indicating whether an address from
the allocated special-purpose address block is valid when used as
the destination address of an IP datagram that transits two
devices.
o Forwardable - A boolean value indicating whether a router may
forward an IP datagram whose destination address is drawn from the
allocated special-purpose address block between external
interfaces.
o Globally Reachable - A boolean value indicating whether an IP
datagram whose destination address is drawn from the allocated
special-purpose address block is forwardable beyond a specified
administrative domain.
o Reserved-by-Protocol - A boolean value indicating whether the
special-purpose address block is reserved by IP, itself. This
value is "TRUE" if the RFC that created the special-purpose
address block requires all compliant IP implementations to behave
in a special way when processing packets either to or from
addresses contained by the address block.
If the value of "Destination" is FALSE, the values of "Forwardable"
and "Globally Reachable" must also be false.
</note>
<record>
<address>0.0.0.0/8</address>
<name>"This host on this network"</name>
<spec><xref type="rfc" data="rfc1122"/>, Section 3.2.1.3</spec>
<allocation>1981-09</allocation>
<source>True</source>
<destination>False</destination>
<forwardable>False</forwardable>
<global>False</global>
<reserved>True</reserved>
</record>
<record>
<address>10.0.0.0/8</address>
<name>Private-Use</name>
<spec><xref type="rfc" data="rfc1918"/></spec>
<allocation>1996-02</allocation>
<source>True</source>
<destination>True</destination>
<forwardable>True</forwardable>
<global>False</global>
<reserved>False</reserved>
</record>
<record>
<address>100.64.0.0/10</address>
<name>Shared Address Space</name>
<spec><xref type="rfc" data="rfc6598"/></spec>
<allocation>2012-04</allocation>
<source>True</source>
<destination>True</destination>
<forwardable>True</forwardable>
<global>False</global>
<reserved>False</reserved>
</record>
<record>
<address>127.0.0.0/8</address>
<name>Loopback</name>
<spec><xref type="rfc" data="rfc1122"/>, Section 3.2.1.3</spec>
<allocation>1981-09</allocation>
<source>False <xref type="note" data="1"/></source>
<destination>False <xref type="note" data="1"/></destination>
<forwardable>False <xref type="note" data="1"/></forwardable>
<global>False <xref type="note" data="1"/></global>
<reserved>True</reserved>
</record>
<record>
<address>169.254.0.0/16</address>
<name>Link Local</name>
<spec><xref type="rfc" data="rfc3927"/></spec>
<allocation>2005-05</allocation>
<source>True</source>
<destination>True</destination>
<forwardable>False</forwardable>
<global>False</global>
<reserved>True</reserved>
</record>
<record>
<address>172.16.0.0/12</address>
<name>Private-Use</name>
<spec><xref type="rfc" data="rfc1918"/></spec>
<allocation>1996-02</allocation>
<source>True</source>
<destination>True</destination>
<forwardable>True</forwardable>
<global>False</global>
<reserved>False</reserved>
</record>
<record>
<address>192.0.0.0/24 <xref type="note" data="2"/></address>
<name>IETF Protocol Assignments</name>
<spec><xref type="rfc" data="rfc6890"/>, Section 2.1</spec>
<allocation>2010-01</allocation>
<source>False</source>
<destination>False</destination>
<forwardable>False</forwardable>
<global>False</global>
<reserved>False</reserved>
</record>
<record>
<address>192.0.0.0/29</address>
<name>IPv4 Service Continuity Prefix</name>
<spec><xref type="rfc" data="rfc7335"/></spec>
<allocation>2011-06</allocation>
<source>True</source>
<destination>True</destination>
<forwardable>True</forwardable>
<global>False</global>
<reserved>False</reserved>
</record>
<record>
<address>192.0.0.8/32</address>
<name>IPv4 dummy address</name>
<spec><xref type="rfc" data="rfc7600"/></spec>
<allocation>2015-03</allocation>
<source>True</source>
<destination>False</destination>
<forwardable>False</forwardable>
<global>False</global>
<reserved>False</reserved>
</record>
<record date="2015-10-23">
<address>192.0.0.9/32</address>
<name>Port Control Protocol Anycast</name>
<spec><xref type="rfc" data="rfc7723"/></spec>
<allocation>2015-10</allocation>
<source>True</source>
<destination>True</destination>
<forwardable>True</forwardable>
<global>True</global>
<reserved>False</reserved>
</record>
<record date="2017-02-23">
<address>192.0.0.10/32</address>
<name>Traversal Using Relays around NAT Anycast</name>
<spec><xref type="rfc" data="rfc8155"/></spec>
<allocation>2017-02</allocation>
<source>True</source>
<destination>True</destination>
<forwardable>True</forwardable>
<global>True</global>
<reserved>False</reserved>
</record>
<record>
<address>192.0.0.170/32, 192.0.0.171/32</address>
<name>NAT64/DNS64 Discovery</name>
<spec><xref type="rfc" data="rfc8880"/><xref type="rfc" data="rfc7050"/>, Section 2.2</spec>
<allocation>2013-02</allocation>
<source>False</source>
<destination>False</destination>
<forwardable>False</forwardable>
<global>False</global>
<reserved>True</reserved>
</record>
<record>
<address>192.0.2.0/24</address>
<name>Documentation (TEST-NET-1)</name>
<spec><xref type="rfc" data="rfc5737"/></spec>
<allocation>2010-01</allocation>
<source>False</source>
<destination>False</destination>
<forwardable>False</forwardable>
<global>False</global>
<reserved>False</reserved>
</record>
<record date="2014-12-17">
<address>192.31.196.0/24</address>
<name>AS112-v4</name>
<spec><xref type="rfc" data="rfc7535"/></spec>
<allocation>2014-12</allocation>
<source>True</source>
<destination>True</destination>
<forwardable>True</forwardable>
<global>True</global>
<reserved>False</reserved>
</record>
<record date="2014-12-17">
<address>192.52.193.0/24</address>
<name>AMT</name>
<spec><xref type="rfc" data="rfc7450"/></spec>
<allocation>2014-12</allocation>
<source>True</source>
<destination>True</destination>
<forwardable>True</forwardable>
<global>True</global>
<reserved>False</reserved>
</record>
<record updated="2015-03-15">
<address>192.88.99.0/24</address>
<name>Deprecated (6to4 Relay Anycast)</name>
<spec><xref type="rfc" data="rfc7526"/></spec>
<allocation>2001-06</allocation>
<termination>2015-03</termination>
<source/>
<destination/>
<forwardable/>
<global/>
<reserved/>
</record>
<record>
<address>192.168.0.0/16</address>
<name>Private-Use</name>
<spec><xref type="rfc" data="rfc1918"/></spec>
<allocation>1996-02</allocation>
<source>True</source>
<destination>True</destination>
<forwardable>True</forwardable>
<global>False</global>
<reserved>False</reserved>
</record>
<record date="2015-03-17">
<address>192.175.48.0/24</address>
<name>Direct Delegation AS112 Service</name>
<spec><xref type="rfc" data="rfc7534"/></spec>
<allocation>1996-01</allocation>
<source>True</source>
<destination>True</destination>
<forwardable>True</forwardable>
<global>True</global>
<reserved>False</reserved>
</record>
<record>
<address>198.18.0.0/15</address>
<name>Benchmarking</name>
<spec><xref type="rfc" data="rfc2544"/></spec>
<allocation>1999-03</allocation>
<source>True</source>
<destination>True</destination>
<forwardable>True</forwardable>
<global>False</global>
<reserved>False</reserved>
</record>
<record>
<address>198.51.100.0/24</address>
<name>Documentation (TEST-NET-2)</name>
<spec><xref type="rfc" data="rfc5737"/></spec>
<allocation>2010-01</allocation>
<source>False</source>
<destination>False</destination>
<forwardable>False</forwardable>
<global>False</global>
<reserved>False</reserved>
</record>
<record>
<address>203.0.113.0/24</address>
<name>Documentation (TEST-NET-3)</name>
<spec><xref type="rfc" data="rfc5737"/></spec>
<allocation>2010-01</allocation>
<source>False</source>
<destination>False</destination>
<forwardable>False</forwardable>
<global>False</global>
<reserved>False</reserved>
</record>
<record>
<address>240.0.0.0/4</address>
<name>Reserved</name>
<spec><xref type="rfc" data="rfc1112"/>, Section 4</spec>
<allocation>1989-08</allocation>
<source>False</source>
<destination>False</destination>
<forwardable>False</forwardable>
<global>False</global>
<reserved>True</reserved>
</record>
<record>
<address>255.255.255.255/32</address>
<name>Limited Broadcast</name>
<spec><xref type="rfc" data="rfc8190"/>
<xref type="rfc" data="rfc919"/>, Section 7</spec>
<allocation>1984-10</allocation>
<source>False</source>
<destination>True</destination>
<forwardable>False</forwardable>
<global>False</global>
<reserved>True</reserved>
</record>
</registry>
<footnote anchor="1">Several protocols have been granted exceptions to this rule.
For examples, see <xref type="rfc" data="rfc8029"/> and <xref type="rfc" data="rfc5884"/>.</footnote>
<footnote anchor="2">Not useable unless by virtue of a more specific reservation.</footnote>
<people/>
</registry>

View File

@ -1,23 +0,0 @@
Address Block,Name,RFC,Allocation Date,Termination Date,Source,Destination,Forwardable,Globally Reachable,Reserved-by-Protocol
::1/128,Loopback Address,[RFC4291],2006-02,N/A,False,False,False,False,True
::/128,Unspecified Address,[RFC4291],2006-02,N/A,True,False,False,False,True
::ffff:0:0/96,IPv4-mapped Address,[RFC4291],2006-02,N/A,False,False,False,False,True
64:ff9b::/96,IPv4-IPv6 Translat.,[RFC6052],2010-10,N/A,True,True,True,True,False
64:ff9b:1::/48,IPv4-IPv6 Translat.,[RFC8215],2017-06,N/A,True,True,True,False,False
100::/64,Discard-Only Address Block,[RFC6666],2012-06,N/A,True,True,True,False,False
2001::/23,IETF Protocol Assignments,[RFC2928],2000-09,N/A,False [1],False [1],False [1],False [1],False
2001::/32,TEREDO,"[RFC4380]
[RFC8190]",2006-01,N/A,True,True,True,N/A [2],False
2001:1::1/128,Port Control Protocol Anycast,[RFC7723],2015-10,N/A,True,True,True,True,False
2001:1::2/128,Traversal Using Relays around NAT Anycast,[RFC8155],2017-02,N/A,True,True,True,True,False
2001:2::/48,Benchmarking,[RFC5180][RFC Errata 1752],2008-04,N/A,True,True,True,False,False
2001:3::/32,AMT,[RFC7450],2014-12,N/A,True,True,True,True,False
2001:4:112::/48,AS112-v6,[RFC7535],2014-12,N/A,True,True,True,True,False
2001:10::/28,Deprecated (previously ORCHID),[RFC4843],2007-03,2014-03,,,,,
2001:20::/28,ORCHIDv2,[RFC7343],2014-07,N/A,True,True,True,True,False
2001:db8::/32,Documentation,[RFC3849],2004-07,N/A,False,False,False,False,False
2002::/16 [3],6to4,[RFC3056],2001-02,N/A,True,True,True,N/A [3],False
2620:4f:8000::/48,Direct Delegation AS112 Service,[RFC7534],2011-05,N/A,True,True,True,True,False
fc00::/7,Unique-Local,"[RFC4193]
[RFC8190]",2005-10,N/A,True,True,True,False [4],False
fe80::/10,Link-Local Unicast,[RFC4291],2006-02,N/A,True,True,False,False,True
1 Address Block Name RFC Allocation Date Termination Date Source Destination Forwardable Globally Reachable Reserved-by-Protocol
2 ::1/128 Loopback Address [RFC4291] 2006-02 N/A False False False False True
3 ::/128 Unspecified Address [RFC4291] 2006-02 N/A True False False False True
4 ::ffff:0:0/96 IPv4-mapped Address [RFC4291] 2006-02 N/A False False False False True
5 64:ff9b::/96 IPv4-IPv6 Translat. [RFC6052] 2010-10 N/A True True True True False
6 64:ff9b:1::/48 IPv4-IPv6 Translat. [RFC8215] 2017-06 N/A True True True False False
7 100::/64 Discard-Only Address Block [RFC6666] 2012-06 N/A True True True False False
8 2001::/23 IETF Protocol Assignments [RFC2928] 2000-09 N/A False [1] False [1] False [1] False [1] False
9 2001::/32 TEREDO [RFC4380] [RFC8190] 2006-01 N/A True True True N/A [2] False
10 2001:1::1/128 Port Control Protocol Anycast [RFC7723] 2015-10 N/A True True True True False
11 2001:1::2/128 Traversal Using Relays around NAT Anycast [RFC8155] 2017-02 N/A True True True True False
12 2001:2::/48 Benchmarking [RFC5180][RFC Errata 1752] 2008-04 N/A True True True False False
13 2001:3::/32 AMT [RFC7450] 2014-12 N/A True True True True False
14 2001:4:112::/48 AS112-v6 [RFC7535] 2014-12 N/A True True True True False
15 2001:10::/28 Deprecated (previously ORCHID) [RFC4843] 2007-03 2014-03
16 2001:20::/28 ORCHIDv2 [RFC7343] 2014-07 N/A True True True True False
17 2001:db8::/32 Documentation [RFC3849] 2004-07 N/A False False False False False
18 2002::/16 [3] 6to4 [RFC3056] 2001-02 N/A True True True N/A [3] False
19 2620:4f:8000::/48 Direct Delegation AS112 Service [RFC7534] 2011-05 N/A True True True True False
20 fc00::/7 Unique-Local [RFC4193] [RFC8190] 2005-10 N/A True True True False [4] False
21 fe80::/10 Link-Local Unicast [RFC4291] 2006-02 N/A True True False False True

View File

@ -0,0 +1,323 @@
<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet type="text/xsl" href="iana-ipv6-special-registry.xsl"?>
<?oxygen RNGSchema="iana-ipv6-special-registry.rng" type="xml"?>
<registry xmlns="http://www.iana.org/assignments" id="iana-ipv6-special-registry">
<title>IANA IPv6 Special-Purpose Address Registry</title>
<category>Internet Protocol version 6 (IPv6) Global Unicast Allocations</category>
<created>2006-01-10</created>
<updated>2019-09-13</updated>
<registry id="iana-ipv6-special-registry-1">
<title>IANA IPv6 Special-Purpose Address Registry</title>
<xref type="rfc" data="rfc4773"/>
<xref type="rfc" data="rfc6890"/>
<xref type="rfc" data="rfc8190"/>
<registration_rule>IETF Review</registration_rule>
<note>Address prefixes listed in the Special-Purpose Address Registry are
not guaranteed routability in any particular local or global context.
The IPv4 and IPv6 Special-Purpose Address Registries maintain the following
information regarding each entry:
o Address Block - A block of IPv4 or IPv6 addresses that has been
registered for a special purpose.
o Name - A descriptive name for the special-purpose address block.
o RFC - The RFC through which the special-purpose address block was
requested.
o Allocation Date - The date upon which the special-purpose address
block was allocated.
o Termination Date - The date upon which the allocation is to be
terminated. This field is applicable for limited-use allocations
only.
o Source - A boolean value indicating whether an address from the
allocated special-purpose address block is valid when used as the
source address of an IP datagram that transits two devices.
o Destination - A boolean value indicating whether an address from
the allocated special-purpose address block is valid when used as
the destination address of an IP datagram that transits two
devices.
o Forwardable - A boolean value indicating whether a router may
forward an IP datagram whose destination address is drawn from the
allocated special-purpose address block between external
interfaces.
o Globally Reachable - A boolean value indicating whether an IP
datagram whose destination address is drawn from the allocated
special-purpose address block is forwardable beyond a specified
administrative domain.
o Reserved-by-Protocol - A boolean value indicating whether the
special-purpose address block is reserved by IP, itself. This
value is "TRUE" if the RFC that created the special-purpose
address block requires all compliant IP implementations to behave
in a special way when processing packets either to or from
addresses contained by the address block.
If the value of "Destination" is FALSE, the values of "Forwardable" and
"Globally Reachable" must also be false.
</note>
<record>
<address>::1/128</address>
<name>Loopback Address</name>
<spec><xref type="rfc" data="rfc4291"/></spec>
<allocation>2006-02</allocation>
<source>False</source>
<destination>False</destination>
<forwardable>False</forwardable>
<global>False</global>
<reserved>True</reserved>
</record>
<record>
<address>::/128</address>
<name>Unspecified Address</name>
<spec><xref type="rfc" data="rfc4291"/></spec>
<allocation>2006-02</allocation>
<source>True</source>
<destination>False</destination>
<forwardable>False</forwardable>
<global>False</global>
<reserved>True</reserved>
</record>
<record>
<address>::ffff:0:0/96</address>
<name>IPv4-mapped Address</name>
<spec><xref type="rfc" data="rfc4291"/></spec>
<allocation>2006-02</allocation>
<source>False</source>
<destination>False</destination>
<forwardable>False</forwardable>
<global>False</global>
<reserved>True</reserved>
</record>
<record>
<address>64:ff9b::/96</address>
<name>IPv4-IPv6 Translat.</name>
<spec><xref type="rfc" data="rfc6052"/></spec>
<allocation>2010-10</allocation>
<source>True</source>
<destination>True</destination>
<forwardable>True</forwardable>
<global>True</global>
<reserved>False</reserved>
</record>
<record>
<address>64:ff9b:1::/48</address>
<name>IPv4-IPv6 Translat.</name>
<spec><xref type="rfc" data="rfc8215"/></spec>
<allocation>2017-06</allocation>
<source>True</source>
<destination>True</destination>
<forwardable>True</forwardable>
<global>False</global>
<reserved>False</reserved>
</record>
<record>
<address>100::/64</address>
<name>Discard-Only Address Block</name>
<spec><xref type="rfc" data="rfc6666"/></spec>
<allocation>2012-06</allocation>
<source>True</source>
<destination>True</destination>
<forwardable>True</forwardable>
<global>False</global>
<reserved>False</reserved>
</record>
<record>
<address>2001::/23</address>
<name>IETF Protocol Assignments</name>
<spec><xref type="rfc" data="rfc2928"/></spec>
<allocation>2000-09</allocation>
<source>False <xref type="note" data="1"/></source>
<destination>False <xref type="note" data="1"/></destination>
<forwardable>False <xref type="note" data="1"/></forwardable>
<global>False <xref type="note" data="1"/></global>
<reserved>False</reserved>
</record>
<record>
<address>2001::/32</address>
<name>TEREDO</name>
<spec><xref type="rfc" data="rfc4380"/>
<xref type="rfc" data="rfc8190"/></spec>
<allocation>2006-01</allocation>
<source>True</source>
<destination>True</destination>
<forwardable>True</forwardable>
<global>N/A <xref type="note" data="2"/></global>
<reserved>False</reserved>
</record>
<record date="2015-10-29">
<address>2001:1::1/128</address>
<name>Port Control Protocol Anycast</name>
<spec><xref type="rfc" data="rfc7723"/></spec>
<allocation>2015-10</allocation>
<source>True</source>
<destination>True</destination>
<forwardable>True</forwardable>
<global>True</global>
<reserved>False</reserved>
</record>
<record date="2017-02-23">
<address>2001:1::2/128</address>
<name>Traversal Using Relays around NAT Anycast</name>
<spec><xref type="rfc" data="rfc8155"/></spec>
<allocation>2017-02</allocation>
<source>True</source>
<destination>True</destination>
<forwardable>True</forwardable>
<global>True</global>
<reserved>False</reserved>
</record>
<record>
<address>2001:2::/48</address>
<name>Benchmarking</name>
<spec><xref type="rfc" data="rfc5180"/><xref type="rfc-errata" data="1752"/></spec>
<allocation>2008-04</allocation>
<source>True</source>
<destination>True</destination>
<forwardable>True</forwardable>
<global>False</global>
<reserved>False</reserved>
</record>
<record date="2014-12-17">
<address>2001:3::/32</address>
<name>AMT</name>
<spec><xref type="rfc" data="rfc7450"/></spec>
<allocation>2014-12</allocation>
<source>True</source>
<destination>True</destination>
<forwardable>True</forwardable>
<global>True</global>
<reserved>False</reserved>
</record>
<record date="2014-12-17">
<address>2001:4:112::/48</address>
<name>AS112-v6</name>
<spec><xref type="rfc" data="rfc7535"/></spec>
<allocation>2014-12</allocation>
<source>True</source>
<destination>True</destination>
<forwardable>True</forwardable>
<global>True</global>
<reserved>False</reserved>
</record>
<record>
<address>2001:10::/28</address>
<name>Deprecated (previously ORCHID)</name>
<spec><xref type="rfc" data="rfc4843"/></spec>
<allocation>2007-03</allocation>
<termination>2014-03</termination>
<source/>
<destination/>
<forwardable/>
<global/>
<reserved/>
</record>
<record date="2014-07-22">
<address>2001:20::/28</address>
<name>ORCHIDv2</name>
<spec><xref type="rfc" data="rfc7343"/></spec>
<allocation>2014-07</allocation>
<source>True</source>
<destination>True</destination>
<forwardable>True</forwardable>
<global>True</global>
<reserved>False</reserved>
</record>
<record>
<address>2001:db8::/32</address>
<name>Documentation</name>
<spec><xref type="rfc" data="rfc3849"/></spec>
<allocation>2004-07</allocation>
<source>False</source>
<destination>False</destination>
<forwardable>False</forwardable>
<global>False</global>
<reserved>False</reserved>
</record>
<record>
<address>2002::/16 <xref type="note" data="3"/></address>
<name>6to4</name>
<spec><xref type="rfc" data="rfc3056"/></spec>
<allocation>2001-02</allocation>
<source>True</source>
<destination>True</destination>
<forwardable>True</forwardable>
<global>N/A <xref type="note" data="3"/></global>
<reserved>False</reserved>
</record>
<record>
<address>2620:4f:8000::/48</address>
<name>Direct Delegation AS112 Service</name>
<spec><xref type="rfc" data="rfc7534"/></spec>
<allocation>2011-05</allocation>
<source>True</source>
<destination>True</destination>
<forwardable>True</forwardable>
<global>True</global>
<reserved>False</reserved>
</record>
<record>
<address>fc00::/7</address>
<name>Unique-Local</name>
<spec><xref type="rfc" data="rfc4193"/>
<xref type="rfc" data="rfc8190"/></spec>
<allocation>2005-10</allocation>
<source>True</source>
<destination>True</destination>
<forwardable>True</forwardable>
<global>False <xref type="note" data="4"/></global>
<reserved>False</reserved>
</record>
<record>
<address>fe80::/10</address>
<name>Link-Local Unicast</name>
<spec><xref type="rfc" data="rfc4291"/></spec>
<allocation>2006-02</allocation>
<source>True</source>
<destination>True</destination>
<forwardable>False</forwardable>
<global>False</global>
<reserved>True</reserved>
</record>
</registry>
<footnote anchor="1">Unless allowed by a more specific allocation.</footnote>
<footnote anchor="2">See Section 5 of <xref type="rfc" data="rfc4380"/> for details.</footnote>
<footnote anchor="3">See <xref type="rfc" data="rfc3056"/> for details.</footnote>
<footnote anchor="4">See <xref type="rfc" data="rfc4193"/> for more details on the routability of Unique-Local addresses. The Unique-Local prefix is
drawn from the IPv6 Global Unicast Address range, but is specified as not globally routed.</footnote>
<people/>
</registry>