12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182(* (c) 2018 Hannes Mehnert, all rights reserved *)openDnsletroot_servers=List.map(fun(n,ip4,ip6)->Domain_name.(host_exn(of_string_exnn)),Ipaddr.V4.of_string_exnip4,Ipaddr.V6.of_string_exnip6)["a.root-servers.net","198.41.0.4","2001:503:ba3e::2:30";(* VeriSign, Inc. *)"b.root-servers.net","170.247.170.2","2801:1b8:10::b";(* University of Southern California (ISI) *)"c.root-servers.net","192.33.4.12","2001:500:2::c";(* Cogent Communications *)"d.root-servers.net","199.7.91.13","2001:500:2d::d";(* University of Maryland *)"e.root-servers.net","192.203.230.10","2001:500:a8::e";(* NASA (Ames Research Center) *)"f.root-servers.net","192.5.5.241","2001:500:2f::f";(* Internet Systems Consortium, Inc. *)"g.root-servers.net","192.112.36.4","2001:500:12::d0d";(* US Department of Defense (NIC) *)"h.root-servers.net","198.97.190.53","2001:500:1::53";(* US Army (Research Lab) *)"i.root-servers.net","192.36.148.17","2001:7fe::53";(* Netnod *)"j.root-servers.net","192.58.128.30","2001:503:c27::2:30";(* VeriSign, Inc. *)"k.root-servers.net","193.0.14.129","2001:7fd::1";(* RIPE NCC *)"l.root-servers.net","199.7.83.42","2001:500:9f::42";(* ICANN *)"m.root-servers.net","202.12.27.33","2001:dc3::35";(* WIDE Project *)]leta_ttl=3600000lletns_ttl=518400lletns_records=letns=letadd_to_setset(name,_,_)=Domain_name.Host_set.addnamesetinList.fold_leftadd_to_setDomain_name.Host_set.emptyroot_serversin(ns_ttl,ns)leta_records=List.map(fun(name,ip,_)->Domain_name.rawname,(a_ttl,Ipaddr.V4.Set.singletonip))root_serversletaaaa_records=List.map(fun(name,_,ip)->Domain_name.rawname,(a_ttl,Ipaddr.V6.Set.singletonip))root_serversletipsprotocol=List.fold_left(funacc(_,ip4,ip6)->matchprotocolwith|`Both->Ipaddr.V4ip4::Ipaddr.V6ip6::acc|`Ipv4_only->Ipaddr.V4ip4::acc|`Ipv6_only->Ipaddr.V6ip6::acc)[]root_serversletreserved_zone_records=letn=Domain_name.of_string_exnin(* RFC 6761, avoid them to get out of here + multicast DNS 6762 *)letzones=Domain_name.Set.(add(n"local")(* multicast dns, RFC 6762 *)(add(n"test")(add(n"invalid")(* RFC 6761 *)(add(n"localhost")(* RFC 6761, draft let-localhost-be-localhost *)empty))))inletlocal_net_name="127.in-addr.arpa"inDomain_name.Set.add(nlocal_net_name)zonesletstub_soas=letnameserver=Domain_name.prepend_label_exns"ns"andhostmaster=Domain_name.prepend_label_exns"hostmaster"in{Soa.nameserver;hostmaster;serial=0l;refresh=300l;retry=300l;expiry=300l;minimum=300l}letreserved_zones=letinvs=Rr_map.(B(Soa,stub_soas))inDomain_name.Set.fold(funnacc->(n,invn)::acc)reserved_zone_records[]letreserved=Domain_name.Set.fold(funnametrie->Dns_trie.insertnameRr_map.Soa(stub_soaname)trie)reserved_zone_recordsDns_trie.emptyletroot_servers=List.map(fun(n,ip4,ip6)->Domain_name.rawn,ip4,ip6)root_servers