DNS
Warning
Work in progress.
There are four levels.
Connectivity:
Level Name Peer Parent 1 Client None dns_l2_cluster 2 Caching Server ? asn 3 AS Server ? root 4 Root None None Records:
Level Responsibility o 1 None 2 Caching for clients 3 Authoritative for dns_l2_cluster 4 Root - announces relevant l3 dns_l2_cluster is PoP if set, if not is asn
#TODO: allow levels to be selected:
Levels Meaning 1 NA 2 clients (1) connect to root (2) 3 clients (1) connect to as (3), as to root (4) 4 full, as above
Allocates DNS according to rules defined above
TODO: allow 3 level (ie no pop caching, clients connect to AS server) TODO: make DNS servers standalone rather that co-hosted with router
TODO: note set dns level on dns graph, but ibgp level on physical graph - inconsistent!
Returns reverse address for given IP Address
>>> reverse_subnet(IPAddress("10.0.0.22"), 16)
'22.0'
>>> reverse_subnet(IPAddress("10.0.0.21"), 16)
'21.0'
>>> reverse_subnet(IPAddress("10.0.0.129"), 16)
'129.0'
>>> reverse_subnet(IPAddress("1.2.3.4"), 5)
'4.3.2.1'
>>> reverse_subnet(IPAddress("1.2.3.4"), 15)
'4.3.2'
>>> reverse_subnet(IPAddress("1.2.3.4"), 20)
'4.3'
>>> reverse_subnet(IPAddress("1.2.3.4"), 26)
'4'
Returns Identifier part of subnet for use in reverse dns identification.
>>> rev_dns_identifier(IPNetwork("10.1.2.3/8"))
'0.0.10.in-addr.arpa.'
>>> rev_dns_identifier(IPNetwork("172.16.1.2/16"))
'16.172.in-addr.arpa.'
>>> rev_dns_identifier(IPNetwork("192.168.0.1/24"))
'0.0.168.192.in-addr.arpa.'
Can only handle classful addreses, expect nothing if prefixlen is not divisible by 8 >>> rev_dns_identifier(IPNetwork(“192.168.0.1/22”))