diff options
708 files changed, 24001 insertions, 1 deletions
@@ -1,2 +1,29 @@ -tgmanage +tgmanage -- tools and hacks by Tech:Server  ======== + +## planning.txt? patchlist.txt? netlist.txt? bootstrap? SETUP?! + +See tools/README… + +## dlink-ng usage + +> Update A/AAAA/PTR for dlink switches  +dlink-ng/make-dlink-config.pl switches.txt patchlist.txt | tools/dlink-ng2dns.pl | head -n 30 + +> Delete records for creative1 in DNS +dlink-ng/make-dlink-config.pl switches.txt patchlist.txt | grep '^creative1 ' | tools/dlink-ng2dns.pl -d + +> Configure both dlink and cisco side +dlink-ng/make-dlink-config.pl switches.txt patchlist.txt | grep 'creative[12]' | perl dlink-ng/dlink-ng.pl + +> Configuring dlink switches for a single dlink switch +dlink-ng/make-dlink-config.pl switches.txt patchlist.txt | grep 'creative[1-8+] ' | dlink-ng/dlink-ng.pl -s creative3 + +> Configuring dlink switches from cisco side only +dlink-ng/make-dlink-config.pl switches.txt patchlist.txt | grep creative | perl dlink-ng/dlink-ng.pl -c + +> Configures all switches with lots of threads love <3 +dlink-ng/dlink-ng.pl switches.txt patchlist.txt  + +> DNS for all switches pewpew +dlink-ng/dlink-ng.pl switches.txt patchlist.txt | tools/dlink-ng2dns.pl
\ No newline at end of file diff --git a/bind/README b/bind/README new file mode 100644 index 0000000..53299b8 --- /dev/null +++ b/bind/README @@ -0,0 +1,5 @@ +== BIND + +This directory is a copy of our install, please do not use these directly! +It is provided to show you what the scripts are generating for you… + diff --git a/bind/master/2.0.d.e.2.0.a.2.ip6.arpa.zone b/bind/master/2.0.d.e.2.0.a.2.ip6.arpa.zone new file mode 100644 index 0000000..9560c4b --- /dev/null +++ b/bind/master/2.0.d.e.2.0.a.2.ip6.arpa.zone @@ -0,0 +1,36 @@ +$ORIGIN . +$TTL 3600	; 1 hour +2.0.d.e.2.0.a.2.ip6.arpa IN SOA	ns1.tg13.gathering.org. abuse.gathering.org. ( +				2013736881 ; serial +				3600       ; refresh (1 hour) +				1800       ; retry (30 minutes) +				608400     ; expire (1 week 1 hour) +				3600       ; minimum (1 hour) +				) +			NS	ns1.tg13.gathering.org. +			NS	ns2.tg13.gathering.org. +$ORIGIN 0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.f.f.f.f.2.0.d.e.2.0.a.2.ip6.arpa. +$TTL 3600	; 1 hour +1			PTR	telegw.infra.tg13.gathering.org. +2			PTR	nocgw.infra.tg13.gathering.org. +3			PTR	camgw.infra.tg13.gathering.org. +4			PTR	stageboh.infra.tg13.gathering.org. +5			PTR	wtfgw.infra.tg13.gathering.org. +6			PTR	logistikkgw.infra.tg13.gathering.org. +7			PTR	corengw.infra.tg13.gathering.org. +8			PTR	coresgw.infra.tg13.gathering.org. +9			PTR	crewgw.infra.tg13.gathering.org. +$ORIGIN 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.f.f.f.f.2.0.d.e.2.0.a.2.ip6.arpa. +0			PTR	tvgw.infra.tg13.gathering.org. +1			PTR	gamegw.infra.tg13.gathering.org. +2			PTR	resepsjongw.infra.tg13.gathering.org. +3			PTR	pressegw.infra.tg13.gathering.org. +4			PTR	sponsorgw.infra.tg13.gathering.org. +5			PTR	komplettgw.infra.tg13.gathering.org. +6			PTR	eldregw.infra.tg13.gathering.org. +7			PTR	distro0.infra.tg13.gathering.org. +8			PTR	distro1.infra.tg13.gathering.org. +9			PTR	distro2.infra.tg13.gathering.org. +$ORIGIN 2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.f.f.f.f.2.0.d.e.2.0.a.2.ip6.arpa. +0			PTR	distro3.infra.tg13.gathering.org. +1			PTR	distro4.infra.tg13.gathering.org. diff --git a/bind/master/55.169.31.in-addr.arpa.zone b/bind/master/55.169.31.in-addr.arpa.zone new file mode 100644 index 0000000..29dfe30 --- /dev/null +++ b/bind/master/55.169.31.in-addr.arpa.zone @@ -0,0 +1,267 @@ +$TTL 3600 +@       IN      SOA     ns1.tg13.gathering.org. abuse.gathering.org. ( +                        2013032802   ; serial +                        3600 ; refresh +                        1800 ; retry +                        608400 ; expire +                        3600 ) ; minimum and default TTL + +                IN      NS      ns1.tg13.gathering.org. +                IN      NS      ns2.tg13.gathering.org. + +$ORIGIN 55.169.31.in-addr.arpa. + +1	IN	PTR	31-169-55-1.tg13.kandu.no. +2	IN	PTR	31-169-55-2.tg13.kandu.no. +3	IN	PTR	31-169-55-3.tg13.kandu.no. +4	IN	PTR	31-169-55-4.tg13.kandu.no. +5	IN	PTR	31-169-55-5.tg13.kandu.no. +6	IN	PTR	31-169-55-6.tg13.kandu.no. +7	IN	PTR	31-169-55-7.tg13.kandu.no. +8	IN	PTR	31-169-55-8.tg13.kandu.no. +9	IN	PTR	31-169-55-9.tg13.kandu.no. +10	IN	PTR	31-169-55-10.tg13.kandu.no. +11	IN	PTR	31-169-55-11.tg13.kandu.no. +12	IN	PTR	31-169-55-12.tg13.kandu.no. +13	IN	PTR	31-169-55-13.tg13.kandu.no. +14	IN	PTR	31-169-55-14.tg13.kandu.no. +15	IN	PTR	31-169-55-15.tg13.kandu.no. +16	IN	PTR	31-169-55-16.tg13.kandu.no. +17	IN	PTR	31-169-55-17.tg13.kandu.no. +18	IN	PTR	31-169-55-18.tg13.kandu.no. +19	IN	PTR	31-169-55-19.tg13.kandu.no. +20	IN	PTR	31-169-55-20.tg13.kandu.no. +21	IN	PTR	31-169-55-21.tg13.kandu.no. +22	IN	PTR	31-169-55-22.tg13.kandu.no. +23	IN	PTR	31-169-55-23.tg13.kandu.no. +24	IN	PTR	31-169-55-24.tg13.kandu.no. +25	IN	PTR	31-169-55-25.tg13.kandu.no. +26	IN	PTR	31-169-55-26.tg13.kandu.no. +27	IN	PTR	31-169-55-27.tg13.kandu.no. +28	IN	PTR	31-169-55-28.tg13.kandu.no. +29	IN	PTR	31-169-55-29.tg13.kandu.no. +30	IN	PTR	31-169-55-30.tg13.kandu.no. +31	IN	PTR	31-169-55-31.tg13.kandu.no. +32	IN	PTR	31-169-55-32.tg13.kandu.no. +33	IN	PTR	31-169-55-33.tg13.kandu.no. +34	IN	PTR	31-169-55-34.tg13.kandu.no. +35	IN	PTR	31-169-55-35.tg13.kandu.no. +36	IN	PTR	31-169-55-36.tg13.kandu.no. +37	IN	PTR	31-169-55-37.tg13.kandu.no. +38	IN	PTR	31-169-55-38.tg13.kandu.no. +39	IN	PTR	31-169-55-39.tg13.kandu.no. +40	IN	PTR	31-169-55-40.tg13.kandu.no. +41	IN	PTR	31-169-55-41.tg13.kandu.no. +42	IN	PTR	31-169-55-42.tg13.kandu.no. +43	IN	PTR	31-169-55-43.tg13.kandu.no. +44	IN	PTR	31-169-55-44.tg13.kandu.no. +45	IN	PTR	31-169-55-45.tg13.kandu.no. +46	IN	PTR	31-169-55-46.tg13.kandu.no. +47	IN	PTR	31-169-55-47.tg13.kandu.no. +48	IN	PTR	31-169-55-48.tg13.kandu.no. +49	IN	PTR	31-169-55-49.tg13.kandu.no. +50	IN	PTR	31-169-55-50.tg13.kandu.no. +51	IN	PTR	31-169-55-51.tg13.kandu.no. +52	IN	PTR	31-169-55-52.tg13.kandu.no. +53	IN	PTR	31-169-55-53.tg13.kandu.no. +54	IN	PTR	31-169-55-54.tg13.kandu.no. +55	IN	PTR	31-169-55-55.tg13.kandu.no. +56	IN	PTR	31-169-55-56.tg13.kandu.no. +57	IN	PTR	31-169-55-57.tg13.kandu.no. +58	IN	PTR	31-169-55-58.tg13.kandu.no. +59	IN	PTR	31-169-55-59.tg13.kandu.no. +60	IN	PTR	31-169-55-60.tg13.kandu.no. +61	IN	PTR	31-169-55-61.tg13.kandu.no. +62	IN	PTR	31-169-55-62.tg13.kandu.no. +63	IN	PTR	31-169-55-63.tg13.kandu.no. +64	IN	PTR	31-169-55-64.tg13.kandu.no. +65	IN	PTR	31-169-55-65.tg13.kandu.no. +66	IN	PTR	31-169-55-66.tg13.kandu.no. +67	IN	PTR	31-169-55-67.tg13.kandu.no. +68	IN	PTR	31-169-55-68.tg13.kandu.no. +69	IN	PTR	31-169-55-69.tg13.kandu.no. +70	IN	PTR	31-169-55-70.tg13.kandu.no. +71	IN	PTR	31-169-55-71.tg13.kandu.no. +72	IN	PTR	31-169-55-72.tg13.kandu.no. +73	IN	PTR	31-169-55-73.tg13.kandu.no. +74	IN	PTR	31-169-55-74.tg13.kandu.no. +75	IN	PTR	31-169-55-75.tg13.kandu.no. +76	IN	PTR	31-169-55-76.tg13.kandu.no. +77	IN	PTR	31-169-55-77.tg13.kandu.no. +78	IN	PTR	31-169-55-78.tg13.kandu.no. +79	IN	PTR	31-169-55-79.tg13.kandu.no. +80	IN	PTR	31-169-55-80.tg13.kandu.no. +81	IN	PTR	31-169-55-81.tg13.kandu.no. +82	IN	PTR	31-169-55-82.tg13.kandu.no. +83	IN	PTR	31-169-55-83.tg13.kandu.no. +84	IN	PTR	31-169-55-84.tg13.kandu.no. +85	IN	PTR	31-169-55-85.tg13.kandu.no. +86	IN	PTR	31-169-55-86.tg13.kandu.no. +87	IN	PTR	31-169-55-87.tg13.kandu.no. +88	IN	PTR	31-169-55-88.tg13.kandu.no. +89	IN	PTR	31-169-55-89.tg13.kandu.no. +90	IN	PTR	31-169-55-90.tg13.kandu.no. +91	IN	PTR	31-169-55-91.tg13.kandu.no. +92	IN	PTR	31-169-55-92.tg13.kandu.no. +93	IN	PTR	31-169-55-93.tg13.kandu.no. +94	IN	PTR	31-169-55-94.tg13.kandu.no. +95	IN	PTR	31-169-55-95.tg13.kandu.no. +96	IN	PTR	31-169-55-96.tg13.kandu.no. +97	IN	PTR	31-169-55-97.tg13.kandu.no. +98	IN	PTR	31-169-55-98.tg13.kandu.no. +99	IN	PTR	31-169-55-99.tg13.kandu.no. +100	IN	PTR	31-169-55-100.tg13.kandu.no. +101	IN	PTR	31-169-55-101.tg13.kandu.no. +102	IN	PTR	31-169-55-102.tg13.kandu.no. +103	IN	PTR	31-169-55-103.tg13.kandu.no. +104	IN	PTR	31-169-55-104.tg13.kandu.no. +105	IN	PTR	31-169-55-105.tg13.kandu.no. +106	IN	PTR	31-169-55-106.tg13.kandu.no. +107	IN	PTR	31-169-55-107.tg13.kandu.no. +108	IN	PTR	31-169-55-108.tg13.kandu.no. +109	IN	PTR	31-169-55-109.tg13.kandu.no. +110	IN	PTR	31-169-55-110.tg13.kandu.no. +111	IN	PTR	31-169-55-111.tg13.kandu.no. +112	IN	PTR	31-169-55-112.tg13.kandu.no. +113	IN	PTR	31-169-55-113.tg13.kandu.no. +114	IN	PTR	31-169-55-114.tg13.kandu.no. +115	IN	PTR	31-169-55-115.tg13.kandu.no. +116	IN	PTR	31-169-55-116.tg13.kandu.no. +117	IN	PTR	31-169-55-117.tg13.kandu.no. +118	IN	PTR	31-169-55-118.tg13.kandu.no. +119	IN	PTR	31-169-55-119.tg13.kandu.no. +120	IN	PTR	31-169-55-120.tg13.kandu.no. +121	IN	PTR	31-169-55-121.tg13.kandu.no. +122	IN	PTR	31-169-55-122.tg13.kandu.no. +123	IN	PTR	31-169-55-123.tg13.kandu.no. +124	IN	PTR	31-169-55-124.tg13.kandu.no. +125	IN	PTR	31-169-55-125.tg13.kandu.no. +126	IN	PTR	31-169-55-126.tg13.kandu.no. +127	IN	PTR	31-169-55-127.tg13.kandu.no. +128	IN	PTR	31-169-55-128.tg13.kandu.no. +129	IN	PTR	31-169-55-129.tg13.kandu.no. +130	IN	PTR	31-169-55-130.tg13.kandu.no. +131	IN	PTR	31-169-55-131.tg13.kandu.no. +132	IN	PTR	31-169-55-132.tg13.kandu.no. +133	IN	PTR	31-169-55-133.tg13.kandu.no. +134	IN	PTR	31-169-55-134.tg13.kandu.no. +135	IN	PTR	31-169-55-135.tg13.kandu.no. +136	IN	PTR	31-169-55-136.tg13.kandu.no. +137	IN	PTR	31-169-55-137.tg13.kandu.no. +138	IN	PTR	31-169-55-138.tg13.kandu.no. +139	IN	PTR	31-169-55-139.tg13.kandu.no. +140	IN	PTR	31-169-55-140.tg13.kandu.no. +141	IN	PTR	31-169-55-141.tg13.kandu.no. +142	IN	PTR	31-169-55-142.tg13.kandu.no. +143	IN	PTR	31-169-55-143.tg13.kandu.no. +144	IN	PTR	31-169-55-144.tg13.kandu.no. +145	IN	PTR	31-169-55-145.tg13.kandu.no. +146	IN	PTR	31-169-55-146.tg13.kandu.no. +147	IN	PTR	31-169-55-147.tg13.kandu.no. +148	IN	PTR	31-169-55-148.tg13.kandu.no. +149	IN	PTR	31-169-55-149.tg13.kandu.no. +150	IN	PTR	31-169-55-150.tg13.kandu.no. +151	IN	PTR	31-169-55-151.tg13.kandu.no. +152	IN	PTR	31-169-55-152.tg13.kandu.no. +153	IN	PTR	31-169-55-153.tg13.kandu.no. +154	IN	PTR	31-169-55-154.tg13.kandu.no. +155	IN	PTR	31-169-55-155.tg13.kandu.no. +156	IN	PTR	31-169-55-156.tg13.kandu.no. +157	IN	PTR	31-169-55-157.tg13.kandu.no. +158	IN	PTR	31-169-55-158.tg13.kandu.no. +159	IN	PTR	31-169-55-159.tg13.kandu.no. +160	IN	PTR	31-169-55-160.tg13.kandu.no. +161	IN	PTR	31-169-55-161.tg13.kandu.no. +162	IN	PTR	31-169-55-162.tg13.kandu.no. +163	IN	PTR	31-169-55-163.tg13.kandu.no. +164	IN	PTR	31-169-55-164.tg13.kandu.no. +165	IN	PTR	31-169-55-165.tg13.kandu.no. +166	IN	PTR	31-169-55-166.tg13.kandu.no. +167	IN	PTR	31-169-55-167.tg13.kandu.no. +168	IN	PTR	31-169-55-168.tg13.kandu.no. +169	IN	PTR	31-169-55-169.tg13.kandu.no. +170	IN	PTR	31-169-55-170.tg13.kandu.no. +171	IN	PTR	31-169-55-171.tg13.kandu.no. +172	IN	PTR	31-169-55-172.tg13.kandu.no. +173	IN	PTR	31-169-55-173.tg13.kandu.no. +174	IN	PTR	31-169-55-174.tg13.kandu.no. +175	IN	PTR	31-169-55-175.tg13.kandu.no. +176	IN	PTR	31-169-55-176.tg13.kandu.no. +177	IN	PTR	31-169-55-177.tg13.kandu.no. +178	IN	PTR	31-169-55-178.tg13.kandu.no. +179	IN	PTR	31-169-55-179.tg13.kandu.no. +180	IN	PTR	31-169-55-180.tg13.kandu.no. +181	IN	PTR	31-169-55-181.tg13.kandu.no. +182	IN	PTR	31-169-55-182.tg13.kandu.no. +183	IN	PTR	31-169-55-183.tg13.kandu.no. +184	IN	PTR	31-169-55-184.tg13.kandu.no. +185	IN	PTR	31-169-55-185.tg13.kandu.no. +186	IN	PTR	31-169-55-186.tg13.kandu.no. +187	IN	PTR	31-169-55-187.tg13.kandu.no. +188	IN	PTR	31-169-55-188.tg13.kandu.no. +189	IN	PTR	31-169-55-189.tg13.kandu.no. +190	IN	PTR	31-169-55-190.tg13.kandu.no. +191	IN	PTR	31-169-55-191.tg13.kandu.no. +192	IN	PTR	31-169-55-192.tg13.kandu.no. +193	IN	PTR	31-169-55-193.tg13.kandu.no. +194	IN	PTR	31-169-55-194.tg13.kandu.no. +195	IN	PTR	31-169-55-195.tg13.kandu.no. +196	IN	PTR	31-169-55-196.tg13.kandu.no. +197	IN	PTR	31-169-55-197.tg13.kandu.no. +198	IN	PTR	31-169-55-198.tg13.kandu.no. +199	IN	PTR	31-169-55-199.tg13.kandu.no. +200	IN	PTR	31-169-55-200.tg13.kandu.no. +201	IN	PTR	31-169-55-201.tg13.kandu.no. +202	IN	PTR	31-169-55-202.tg13.kandu.no. +203	IN	PTR	31-169-55-203.tg13.kandu.no. +204	IN	PTR	31-169-55-204.tg13.kandu.no. +205	IN	PTR	31-169-55-205.tg13.kandu.no. +206	IN	PTR	31-169-55-206.tg13.kandu.no. +207	IN	PTR	31-169-55-207.tg13.kandu.no. +208	IN	PTR	31-169-55-208.tg13.kandu.no. +209	IN	PTR	31-169-55-209.tg13.kandu.no. +210	IN	PTR	31-169-55-210.tg13.kandu.no. +211	IN	PTR	31-169-55-211.tg13.kandu.no. +212	IN	PTR	31-169-55-212.tg13.kandu.no. +213	IN	PTR	31-169-55-213.tg13.kandu.no. +214	IN	PTR	31-169-55-214.tg13.kandu.no. +215	IN	PTR	31-169-55-215.tg13.kandu.no. +216	IN	PTR	31-169-55-216.tg13.kandu.no. +217	IN	PTR	31-169-55-217.tg13.kandu.no. +218	IN	PTR	31-169-55-218.tg13.kandu.no. +219	IN	PTR	31-169-55-219.tg13.kandu.no. +220	IN	PTR	31-169-55-220.tg13.kandu.no. +221	IN	PTR	31-169-55-221.tg13.kandu.no. +222	IN	PTR	31-169-55-222.tg13.kandu.no. +223	IN	PTR	31-169-55-223.tg13.kandu.no. +224	IN	PTR	31-169-55-224.tg13.kandu.no. +225	IN	PTR	31-169-55-225.tg13.kandu.no. +226	IN	PTR	31-169-55-226.tg13.kandu.no. +227	IN	PTR	31-169-55-227.tg13.kandu.no. +228	IN	PTR	31-169-55-228.tg13.kandu.no. +229	IN	PTR	31-169-55-229.tg13.kandu.no. +230	IN	PTR	31-169-55-230.tg13.kandu.no. +231	IN	PTR	31-169-55-231.tg13.kandu.no. +232	IN	PTR	31-169-55-232.tg13.kandu.no. +233	IN	PTR	31-169-55-233.tg13.kandu.no. +234	IN	PTR	31-169-55-234.tg13.kandu.no. +235	IN	PTR	31-169-55-235.tg13.kandu.no. +236	IN	PTR	31-169-55-236.tg13.kandu.no. +237	IN	PTR	31-169-55-237.tg13.kandu.no. +238	IN	PTR	31-169-55-238.tg13.kandu.no. +239	IN	PTR	31-169-55-239.tg13.kandu.no. +240	IN	PTR	31-169-55-240.tg13.kandu.no. +241	IN	PTR	31-169-55-241.tg13.kandu.no. +242	IN	PTR	31-169-55-242.tg13.kandu.no. +243	IN	PTR	31-169-55-243.tg13.kandu.no. +244	IN	PTR	31-169-55-244.tg13.kandu.no. +245	IN	PTR	31-169-55-245.tg13.kandu.no. +246	IN	PTR	31-169-55-246.tg13.kandu.no. +247	IN	PTR	31-169-55-247.tg13.kandu.no. +248	IN	PTR	31-169-55-248.tg13.kandu.no. +249	IN	PTR	31-169-55-249.tg13.kandu.no. +250	IN	PTR	31-169-55-250.tg13.kandu.no. +251	IN	PTR	31-169-55-251.tg13.kandu.no. +252	IN	PTR	31-169-55-252.tg13.kandu.no. +253	IN	PTR	31-169-55-253.tg13.kandu.no. +254	IN	PTR	31-169-55-254.tg13.kandu.no. diff --git a/bind/master/bind.keys b/bind/master/bind.keys new file mode 100644 index 0000000..b003c53 --- /dev/null +++ b/bind/master/bind.keys @@ -0,0 +1,49 @@ +/* $Id: bind.keys,v 1.5.42.2 2011-01-04 19:14:48 each Exp $ */ +# The bind.keys file is used to override built-in DNSSEC trust anchors +# which are included as part of BIND 9.  As of the current release (BIND +# 9.7), the only trust anchor it sets is the one for the ISC DNSSEC +# Lookaside Validation zone ("dlv.isc.org").  Trust anchors for any other +# zones MUST be configured elsewhere; if they are configured here, they +# will not be recognized or used by named. +# +# This file also contains a copy of the trust anchor for the DNS root zone +# (".").  However, named does not use it; it is provided here for +# informational purposes only.  To switch on DNSSEC validation at the +# root, the root key below can be copied into named.conf. +# +# The built-in DLV trust anchor in this file is used directly by named. +# However, it is not activated unless specifically switched on.  To use +# the DLV key, set "dnssec-lookaside auto;" in the named.conf options. +# Without this option being set, the key in this file is ignored. +# +# This file is NOT expected to be user-configured. +# +# These keys are current as of January 2011.  If any key fails to +# initialize correctly, it may have expired.  In that event you should +# replace this file with a current version.  The latest version of +# bind.keys can always be obtained from ISC at https://www.isc.org/bind-keys. + +managed-keys { +	# ISC DLV: See https://www.isc.org/solutions/dlv for details. +        # NOTE: This key is activated by setting "dnssec-lookaside auto;" +        # in named.conf. +	dlv.isc.org. initial-key 257 3 5 "BEAAAAPHMu/5onzrEE7z1egmhg/WPO0+juoZrW3euWEn4MxDCE1+lLy2 +		brhQv5rN32RKtMzX6Mj70jdzeND4XknW58dnJNPCxn8+jAGl2FZLK8t+ +		1uq4W+nnA3qO2+DL+k6BD4mewMLbIYFwe0PG73Te9fZ2kJb56dhgMde5 +		ymX4BI/oQ+cAK50/xvJv00Frf8kw6ucMTwFlgPe+jnGxPPEmHAte/URk +		Y62ZfkLoBAADLHQ9IrS2tryAe7mbBZVcOwIeU/Rw/mRx/vwwMCTgNboM +		QKtUdvNXDrYJDSHZws3xiRXF1Rf+al9UmZfSav/4NWLKjHzpT59k/VSt +		TDN0YUuWrBNh"; + +	# ROOT KEY: See https://data.iana.org/root-anchors/root-anchors.xml +	# for current trust anchor information. +        # NOTE: This key is activated by setting "dnssec-validation auto;" +        # in named.conf. +	. initial-key 257 3 8 "AwEAAagAIKlVZrpC6Ia7gEzahOR+9W29euxhJhVVLOyQbSEW0O8gcCjF +		FVQUTf6v58fLjwBd0YI0EzrAcQqBGCzh/RStIoO8g0NfnfL2MTJRkxoX +		bfDaUeVPQuYEhg37NZWAJQ9VnMVDxP/VHL496M/QZxkjf5/Efucp2gaD +		X6RS6CXpoY68LsvPVjR0ZSwzz1apAzvN9dlzEheX7ICJBBtuA6G3LQpz +		W5hOA2hzCTMjJPJ8LbqF6dsV6DoBQzgul0sGIcGOYl7OyQdXfZ57relS +		Qageu+ipAdTTJ25AsRTAoub8ONGcLmqrAmRLKBP1dfwhYB4N7knNnulq +		QxA+Uk1ihz0="; +}; diff --git a/bind/master/conf-master/ap-dist0.conf b/bind/master/conf-master/ap-dist0.conf new file mode 100644 index 0000000..128e996 --- /dev/null +++ b/bind/master/conf-master/ap-dist0.conf @@ -0,0 +1,7 @@ +zone "ap-dist0.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/ap-dist0.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/ap-dist1.conf b/bind/master/conf-master/ap-dist1.conf new file mode 100644 index 0000000..a1720ec --- /dev/null +++ b/bind/master/conf-master/ap-dist1.conf @@ -0,0 +1,7 @@ +zone "ap-dist1.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/ap-dist1.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/ap-dist2.conf b/bind/master/conf-master/ap-dist2.conf new file mode 100644 index 0000000..1e5a8b7 --- /dev/null +++ b/bind/master/conf-master/ap-dist2.conf @@ -0,0 +1,7 @@ +zone "ap-dist2.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/ap-dist2.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/ap-dist3.conf b/bind/master/conf-master/ap-dist3.conf new file mode 100644 index 0000000..9aeb118 --- /dev/null +++ b/bind/master/conf-master/ap-dist3.conf @@ -0,0 +1,7 @@ +zone "ap-dist3.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/ap-dist3.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/ap-dist4.conf b/bind/master/conf-master/ap-dist4.conf new file mode 100644 index 0000000..d9d1dd1 --- /dev/null +++ b/bind/master/conf-master/ap-dist4.conf @@ -0,0 +1,7 @@ +zone "ap-dist4.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/ap-dist4.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/care.conf b/bind/master/conf-master/care.conf new file mode 100644 index 0000000..0bad1bd --- /dev/null +++ b/bind/master/conf-master/care.conf @@ -0,0 +1,7 @@ +zone "care.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/care.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/chillout.conf b/bind/master/conf-master/chillout.conf new file mode 100644 index 0000000..0de90ca --- /dev/null +++ b/bind/master/conf-master/chillout.conf @@ -0,0 +1,7 @@ +zone "chillout.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/chillout.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/creativia.conf b/bind/master/conf-master/creativia.conf new file mode 100644 index 0000000..5237a84 --- /dev/null +++ b/bind/master/conf-master/creativia.conf @@ -0,0 +1,7 @@ +zone "creativia.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/creativia.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/crew1.conf b/bind/master/conf-master/crew1.conf new file mode 100644 index 0000000..e257add --- /dev/null +++ b/bind/master/conf-master/crew1.conf @@ -0,0 +1,7 @@ +zone "crew1.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/crew1.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/crew2.conf b/bind/master/conf-master/crew2.conf new file mode 100644 index 0000000..e4cb846 --- /dev/null +++ b/bind/master/conf-master/crew2.conf @@ -0,0 +1,7 @@ +zone "crew2.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/crew2.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/crew3.conf b/bind/master/conf-master/crew3.conf new file mode 100644 index 0000000..69df488 --- /dev/null +++ b/bind/master/conf-master/crew3.conf @@ -0,0 +1,7 @@ +zone "crew3.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/crew3.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/crew4.conf b/bind/master/conf-master/crew4.conf new file mode 100644 index 0000000..bc139e0 --- /dev/null +++ b/bind/master/conf-master/crew4.conf @@ -0,0 +1,7 @@ +zone "crew4.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/crew4.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/crew5.conf b/bind/master/conf-master/crew5.conf new file mode 100644 index 0000000..7a40125 --- /dev/null +++ b/bind/master/conf-master/crew5.conf @@ -0,0 +1,7 @@ +zone "crew5.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/crew5.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/crew6.conf b/bind/master/conf-master/crew6.conf new file mode 100644 index 0000000..dfb9ae1 --- /dev/null +++ b/bind/master/conf-master/crew6.conf @@ -0,0 +1,7 @@ +zone "crew6.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/crew6.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/defektraid.conf b/bind/master/conf-master/defektraid.conf new file mode 100644 index 0000000..df0c6f4 --- /dev/null +++ b/bind/master/conf-master/defektraid.conf @@ -0,0 +1,7 @@ +zone "defektraid.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/defektraid.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e1-3.conf b/bind/master/conf-master/e1-3.conf new file mode 100644 index 0000000..1ea1345 --- /dev/null +++ b/bind/master/conf-master/e1-3.conf @@ -0,0 +1,7 @@ +zone "e1-3.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e1-3.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e1-4.conf b/bind/master/conf-master/e1-4.conf new file mode 100644 index 0000000..3610d07 --- /dev/null +++ b/bind/master/conf-master/e1-4.conf @@ -0,0 +1,7 @@ +zone "e1-4.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e1-4.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e11-1.conf b/bind/master/conf-master/e11-1.conf new file mode 100644 index 0000000..6e0db55 --- /dev/null +++ b/bind/master/conf-master/e11-1.conf @@ -0,0 +1,7 @@ +zone "e11-1.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e11-1.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e11-2.conf b/bind/master/conf-master/e11-2.conf new file mode 100644 index 0000000..5e2f700 --- /dev/null +++ b/bind/master/conf-master/e11-2.conf @@ -0,0 +1,7 @@ +zone "e11-2.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e11-2.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e11-3.conf b/bind/master/conf-master/e11-3.conf new file mode 100644 index 0000000..944cc0f --- /dev/null +++ b/bind/master/conf-master/e11-3.conf @@ -0,0 +1,7 @@ +zone "e11-3.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e11-3.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e11-4.conf b/bind/master/conf-master/e11-4.conf new file mode 100644 index 0000000..957ace1 --- /dev/null +++ b/bind/master/conf-master/e11-4.conf @@ -0,0 +1,7 @@ +zone "e11-4.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e11-4.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e13-1.conf b/bind/master/conf-master/e13-1.conf new file mode 100644 index 0000000..e4058a3 --- /dev/null +++ b/bind/master/conf-master/e13-1.conf @@ -0,0 +1,7 @@ +zone "e13-1.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e13-1.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e13-2.conf b/bind/master/conf-master/e13-2.conf new file mode 100644 index 0000000..5f0fb11 --- /dev/null +++ b/bind/master/conf-master/e13-2.conf @@ -0,0 +1,7 @@ +zone "e13-2.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e13-2.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e13-3.conf b/bind/master/conf-master/e13-3.conf new file mode 100644 index 0000000..ead4ebb --- /dev/null +++ b/bind/master/conf-master/e13-3.conf @@ -0,0 +1,7 @@ +zone "e13-3.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e13-3.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e13-4.conf b/bind/master/conf-master/e13-4.conf new file mode 100644 index 0000000..3e11ce3 --- /dev/null +++ b/bind/master/conf-master/e13-4.conf @@ -0,0 +1,7 @@ +zone "e13-4.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e13-4.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e15-1.conf b/bind/master/conf-master/e15-1.conf new file mode 100644 index 0000000..a1b2682 --- /dev/null +++ b/bind/master/conf-master/e15-1.conf @@ -0,0 +1,7 @@ +zone "e15-1.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e15-1.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e15-2.conf b/bind/master/conf-master/e15-2.conf new file mode 100644 index 0000000..6bdfe02 --- /dev/null +++ b/bind/master/conf-master/e15-2.conf @@ -0,0 +1,7 @@ +zone "e15-2.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e15-2.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e15-3.conf b/bind/master/conf-master/e15-3.conf new file mode 100644 index 0000000..7cbd21b --- /dev/null +++ b/bind/master/conf-master/e15-3.conf @@ -0,0 +1,7 @@ +zone "e15-3.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e15-3.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e15-4.conf b/bind/master/conf-master/e15-4.conf new file mode 100644 index 0000000..2db4e99 --- /dev/null +++ b/bind/master/conf-master/e15-4.conf @@ -0,0 +1,7 @@ +zone "e15-4.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e15-4.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e17-1.conf b/bind/master/conf-master/e17-1.conf new file mode 100644 index 0000000..61a976d --- /dev/null +++ b/bind/master/conf-master/e17-1.conf @@ -0,0 +1,7 @@ +zone "e17-1.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e17-1.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e17-2.conf b/bind/master/conf-master/e17-2.conf new file mode 100644 index 0000000..68650e1 --- /dev/null +++ b/bind/master/conf-master/e17-2.conf @@ -0,0 +1,7 @@ +zone "e17-2.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e17-2.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e17-3.conf b/bind/master/conf-master/e17-3.conf new file mode 100644 index 0000000..bf8f7f8 --- /dev/null +++ b/bind/master/conf-master/e17-3.conf @@ -0,0 +1,7 @@ +zone "e17-3.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e17-3.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e17-4.conf b/bind/master/conf-master/e17-4.conf new file mode 100644 index 0000000..bfa94df --- /dev/null +++ b/bind/master/conf-master/e17-4.conf @@ -0,0 +1,7 @@ +zone "e17-4.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e17-4.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e19-1.conf b/bind/master/conf-master/e19-1.conf new file mode 100644 index 0000000..c0894c1 --- /dev/null +++ b/bind/master/conf-master/e19-1.conf @@ -0,0 +1,7 @@ +zone "e19-1.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e19-1.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e19-2.conf b/bind/master/conf-master/e19-2.conf new file mode 100644 index 0000000..f46509b --- /dev/null +++ b/bind/master/conf-master/e19-2.conf @@ -0,0 +1,7 @@ +zone "e19-2.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e19-2.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e19-3.conf b/bind/master/conf-master/e19-3.conf new file mode 100644 index 0000000..6232f26 --- /dev/null +++ b/bind/master/conf-master/e19-3.conf @@ -0,0 +1,7 @@ +zone "e19-3.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e19-3.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e19-4.conf b/bind/master/conf-master/e19-4.conf new file mode 100644 index 0000000..c8359ca --- /dev/null +++ b/bind/master/conf-master/e19-4.conf @@ -0,0 +1,7 @@ +zone "e19-4.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e19-4.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e21-1.conf b/bind/master/conf-master/e21-1.conf new file mode 100644 index 0000000..51a1162 --- /dev/null +++ b/bind/master/conf-master/e21-1.conf @@ -0,0 +1,7 @@ +zone "e21-1.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e21-1.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e21-2.conf b/bind/master/conf-master/e21-2.conf new file mode 100644 index 0000000..b5003be --- /dev/null +++ b/bind/master/conf-master/e21-2.conf @@ -0,0 +1,7 @@ +zone "e21-2.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e21-2.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e21-3.conf b/bind/master/conf-master/e21-3.conf new file mode 100644 index 0000000..4b31944 --- /dev/null +++ b/bind/master/conf-master/e21-3.conf @@ -0,0 +1,7 @@ +zone "e21-3.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e21-3.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e21-4.conf b/bind/master/conf-master/e21-4.conf new file mode 100644 index 0000000..e294e06 --- /dev/null +++ b/bind/master/conf-master/e21-4.conf @@ -0,0 +1,7 @@ +zone "e21-4.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e21-4.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e23-1.conf b/bind/master/conf-master/e23-1.conf new file mode 100644 index 0000000..f094709 --- /dev/null +++ b/bind/master/conf-master/e23-1.conf @@ -0,0 +1,7 @@ +zone "e23-1.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e23-1.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e23-2.conf b/bind/master/conf-master/e23-2.conf new file mode 100644 index 0000000..c19004f --- /dev/null +++ b/bind/master/conf-master/e23-2.conf @@ -0,0 +1,7 @@ +zone "e23-2.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e23-2.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e23-3.conf b/bind/master/conf-master/e23-3.conf new file mode 100644 index 0000000..7e8cc6f --- /dev/null +++ b/bind/master/conf-master/e23-3.conf @@ -0,0 +1,7 @@ +zone "e23-3.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e23-3.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e23-4.conf b/bind/master/conf-master/e23-4.conf new file mode 100644 index 0000000..17bc2fa --- /dev/null +++ b/bind/master/conf-master/e23-4.conf @@ -0,0 +1,7 @@ +zone "e23-4.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e23-4.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e25-1.conf b/bind/master/conf-master/e25-1.conf new file mode 100644 index 0000000..353a0bf --- /dev/null +++ b/bind/master/conf-master/e25-1.conf @@ -0,0 +1,7 @@ +zone "e25-1.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e25-1.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e25-2.conf b/bind/master/conf-master/e25-2.conf new file mode 100644 index 0000000..fe58cc1 --- /dev/null +++ b/bind/master/conf-master/e25-2.conf @@ -0,0 +1,7 @@ +zone "e25-2.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e25-2.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e25-3.conf b/bind/master/conf-master/e25-3.conf new file mode 100644 index 0000000..2e641ae --- /dev/null +++ b/bind/master/conf-master/e25-3.conf @@ -0,0 +1,7 @@ +zone "e25-3.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e25-3.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e25-4.conf b/bind/master/conf-master/e25-4.conf new file mode 100644 index 0000000..72343f2 --- /dev/null +++ b/bind/master/conf-master/e25-4.conf @@ -0,0 +1,7 @@ +zone "e25-4.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e25-4.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e27-1.conf b/bind/master/conf-master/e27-1.conf new file mode 100644 index 0000000..4bdae3c --- /dev/null +++ b/bind/master/conf-master/e27-1.conf @@ -0,0 +1,7 @@ +zone "e27-1.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e27-1.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e27-2.conf b/bind/master/conf-master/e27-2.conf new file mode 100644 index 0000000..b3cf265 --- /dev/null +++ b/bind/master/conf-master/e27-2.conf @@ -0,0 +1,7 @@ +zone "e27-2.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e27-2.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e29-1.conf b/bind/master/conf-master/e29-1.conf new file mode 100644 index 0000000..ff50105 --- /dev/null +++ b/bind/master/conf-master/e29-1.conf @@ -0,0 +1,7 @@ +zone "e29-1.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e29-1.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e29-2.conf b/bind/master/conf-master/e29-2.conf new file mode 100644 index 0000000..a0292bf --- /dev/null +++ b/bind/master/conf-master/e29-2.conf @@ -0,0 +1,7 @@ +zone "e29-2.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e29-2.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e3-3.conf b/bind/master/conf-master/e3-3.conf new file mode 100644 index 0000000..e03510a --- /dev/null +++ b/bind/master/conf-master/e3-3.conf @@ -0,0 +1,7 @@ +zone "e3-3.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e3-3.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e3-4.conf b/bind/master/conf-master/e3-4.conf new file mode 100644 index 0000000..b5d4104 --- /dev/null +++ b/bind/master/conf-master/e3-4.conf @@ -0,0 +1,7 @@ +zone "e3-4.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e3-4.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e31-1.conf b/bind/master/conf-master/e31-1.conf new file mode 100644 index 0000000..9c0e873 --- /dev/null +++ b/bind/master/conf-master/e31-1.conf @@ -0,0 +1,7 @@ +zone "e31-1.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e31-1.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e31-2.conf b/bind/master/conf-master/e31-2.conf new file mode 100644 index 0000000..8c32533 --- /dev/null +++ b/bind/master/conf-master/e31-2.conf @@ -0,0 +1,7 @@ +zone "e31-2.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e31-2.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e33-1.conf b/bind/master/conf-master/e33-1.conf new file mode 100644 index 0000000..29e56cf --- /dev/null +++ b/bind/master/conf-master/e33-1.conf @@ -0,0 +1,7 @@ +zone "e33-1.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e33-1.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e33-2.conf b/bind/master/conf-master/e33-2.conf new file mode 100644 index 0000000..55d1c18 --- /dev/null +++ b/bind/master/conf-master/e33-2.conf @@ -0,0 +1,7 @@ +zone "e33-2.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e33-2.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e35-1.conf b/bind/master/conf-master/e35-1.conf new file mode 100644 index 0000000..936f0a3 --- /dev/null +++ b/bind/master/conf-master/e35-1.conf @@ -0,0 +1,7 @@ +zone "e35-1.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e35-1.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e35-2.conf b/bind/master/conf-master/e35-2.conf new file mode 100644 index 0000000..779fae5 --- /dev/null +++ b/bind/master/conf-master/e35-2.conf @@ -0,0 +1,7 @@ +zone "e35-2.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e35-2.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e37-1.conf b/bind/master/conf-master/e37-1.conf new file mode 100644 index 0000000..5e1cd6f --- /dev/null +++ b/bind/master/conf-master/e37-1.conf @@ -0,0 +1,7 @@ +zone "e37-1.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e37-1.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e37-2.conf b/bind/master/conf-master/e37-2.conf new file mode 100644 index 0000000..264ee23 --- /dev/null +++ b/bind/master/conf-master/e37-2.conf @@ -0,0 +1,7 @@ +zone "e37-2.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e37-2.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e39-1.conf b/bind/master/conf-master/e39-1.conf new file mode 100644 index 0000000..dbcfe63 --- /dev/null +++ b/bind/master/conf-master/e39-1.conf @@ -0,0 +1,7 @@ +zone "e39-1.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e39-1.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e39-2.conf b/bind/master/conf-master/e39-2.conf new file mode 100644 index 0000000..fdb5813 --- /dev/null +++ b/bind/master/conf-master/e39-2.conf @@ -0,0 +1,7 @@ +zone "e39-2.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e39-2.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e41-1.conf b/bind/master/conf-master/e41-1.conf new file mode 100644 index 0000000..1b3ce67 --- /dev/null +++ b/bind/master/conf-master/e41-1.conf @@ -0,0 +1,7 @@ +zone "e41-1.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e41-1.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e41-2.conf b/bind/master/conf-master/e41-2.conf new file mode 100644 index 0000000..c93b026 --- /dev/null +++ b/bind/master/conf-master/e41-2.conf @@ -0,0 +1,7 @@ +zone "e41-2.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e41-2.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e43-1.conf b/bind/master/conf-master/e43-1.conf new file mode 100644 index 0000000..141eb36 --- /dev/null +++ b/bind/master/conf-master/e43-1.conf @@ -0,0 +1,7 @@ +zone "e43-1.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e43-1.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e43-2.conf b/bind/master/conf-master/e43-2.conf new file mode 100644 index 0000000..2183773 --- /dev/null +++ b/bind/master/conf-master/e43-2.conf @@ -0,0 +1,7 @@ +zone "e43-2.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e43-2.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e43-3.conf b/bind/master/conf-master/e43-3.conf new file mode 100644 index 0000000..cd2e58a --- /dev/null +++ b/bind/master/conf-master/e43-3.conf @@ -0,0 +1,7 @@ +zone "e43-3.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e43-3.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e43-4.conf b/bind/master/conf-master/e43-4.conf new file mode 100644 index 0000000..3fe8285 --- /dev/null +++ b/bind/master/conf-master/e43-4.conf @@ -0,0 +1,7 @@ +zone "e43-4.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e43-4.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e45-1.conf b/bind/master/conf-master/e45-1.conf new file mode 100644 index 0000000..4dfb780 --- /dev/null +++ b/bind/master/conf-master/e45-1.conf @@ -0,0 +1,7 @@ +zone "e45-1.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e45-1.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e45-2.conf b/bind/master/conf-master/e45-2.conf new file mode 100644 index 0000000..ef12a1d --- /dev/null +++ b/bind/master/conf-master/e45-2.conf @@ -0,0 +1,7 @@ +zone "e45-2.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e45-2.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e45-3.conf b/bind/master/conf-master/e45-3.conf new file mode 100644 index 0000000..6816564 --- /dev/null +++ b/bind/master/conf-master/e45-3.conf @@ -0,0 +1,7 @@ +zone "e45-3.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e45-3.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e45-4.conf b/bind/master/conf-master/e45-4.conf new file mode 100644 index 0000000..1c18dec --- /dev/null +++ b/bind/master/conf-master/e45-4.conf @@ -0,0 +1,7 @@ +zone "e45-4.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e45-4.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e47-1.conf b/bind/master/conf-master/e47-1.conf new file mode 100644 index 0000000..c78e9d2 --- /dev/null +++ b/bind/master/conf-master/e47-1.conf @@ -0,0 +1,7 @@ +zone "e47-1.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e47-1.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e47-2.conf b/bind/master/conf-master/e47-2.conf new file mode 100644 index 0000000..bedb28b --- /dev/null +++ b/bind/master/conf-master/e47-2.conf @@ -0,0 +1,7 @@ +zone "e47-2.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e47-2.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e47-3.conf b/bind/master/conf-master/e47-3.conf new file mode 100644 index 0000000..21058f9 --- /dev/null +++ b/bind/master/conf-master/e47-3.conf @@ -0,0 +1,7 @@ +zone "e47-3.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e47-3.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e47-4.conf b/bind/master/conf-master/e47-4.conf new file mode 100644 index 0000000..3ca2d0f --- /dev/null +++ b/bind/master/conf-master/e47-4.conf @@ -0,0 +1,7 @@ +zone "e47-4.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e47-4.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e49-1.conf b/bind/master/conf-master/e49-1.conf new file mode 100644 index 0000000..3ca0d10 --- /dev/null +++ b/bind/master/conf-master/e49-1.conf @@ -0,0 +1,7 @@ +zone "e49-1.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e49-1.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e49-2.conf b/bind/master/conf-master/e49-2.conf new file mode 100644 index 0000000..336be6a --- /dev/null +++ b/bind/master/conf-master/e49-2.conf @@ -0,0 +1,7 @@ +zone "e49-2.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e49-2.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e49-3.conf b/bind/master/conf-master/e49-3.conf new file mode 100644 index 0000000..cb6ef54 --- /dev/null +++ b/bind/master/conf-master/e49-3.conf @@ -0,0 +1,7 @@ +zone "e49-3.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e49-3.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e49-4.conf b/bind/master/conf-master/e49-4.conf new file mode 100644 index 0000000..b5383a3 --- /dev/null +++ b/bind/master/conf-master/e49-4.conf @@ -0,0 +1,7 @@ +zone "e49-4.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e49-4.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e5-3.conf b/bind/master/conf-master/e5-3.conf new file mode 100644 index 0000000..5874214 --- /dev/null +++ b/bind/master/conf-master/e5-3.conf @@ -0,0 +1,7 @@ +zone "e5-3.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e5-3.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e5-4.conf b/bind/master/conf-master/e5-4.conf new file mode 100644 index 0000000..98f7408 --- /dev/null +++ b/bind/master/conf-master/e5-4.conf @@ -0,0 +1,7 @@ +zone "e5-4.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e5-4.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e51-1.conf b/bind/master/conf-master/e51-1.conf new file mode 100644 index 0000000..9e9a961 --- /dev/null +++ b/bind/master/conf-master/e51-1.conf @@ -0,0 +1,7 @@ +zone "e51-1.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e51-1.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e51-2.conf b/bind/master/conf-master/e51-2.conf new file mode 100644 index 0000000..b0be1c1 --- /dev/null +++ b/bind/master/conf-master/e51-2.conf @@ -0,0 +1,7 @@ +zone "e51-2.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e51-2.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e51-3.conf b/bind/master/conf-master/e51-3.conf new file mode 100644 index 0000000..d657bf2 --- /dev/null +++ b/bind/master/conf-master/e51-3.conf @@ -0,0 +1,7 @@ +zone "e51-3.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e51-3.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e51-4.conf b/bind/master/conf-master/e51-4.conf new file mode 100644 index 0000000..40a4767 --- /dev/null +++ b/bind/master/conf-master/e51-4.conf @@ -0,0 +1,7 @@ +zone "e51-4.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e51-4.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e53-1.conf b/bind/master/conf-master/e53-1.conf new file mode 100644 index 0000000..ddcd705 --- /dev/null +++ b/bind/master/conf-master/e53-1.conf @@ -0,0 +1,7 @@ +zone "e53-1.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e53-1.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e53-2.conf b/bind/master/conf-master/e53-2.conf new file mode 100644 index 0000000..2144a5c --- /dev/null +++ b/bind/master/conf-master/e53-2.conf @@ -0,0 +1,7 @@ +zone "e53-2.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e53-2.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e53-3.conf b/bind/master/conf-master/e53-3.conf new file mode 100644 index 0000000..6f744f7 --- /dev/null +++ b/bind/master/conf-master/e53-3.conf @@ -0,0 +1,7 @@ +zone "e53-3.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e53-3.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e53-4.conf b/bind/master/conf-master/e53-4.conf new file mode 100644 index 0000000..a61c1b6 --- /dev/null +++ b/bind/master/conf-master/e53-4.conf @@ -0,0 +1,7 @@ +zone "e53-4.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e53-4.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e55-1.conf b/bind/master/conf-master/e55-1.conf new file mode 100644 index 0000000..82e2a30 --- /dev/null +++ b/bind/master/conf-master/e55-1.conf @@ -0,0 +1,7 @@ +zone "e55-1.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e55-1.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e55-2.conf b/bind/master/conf-master/e55-2.conf new file mode 100644 index 0000000..d204695 --- /dev/null +++ b/bind/master/conf-master/e55-2.conf @@ -0,0 +1,7 @@ +zone "e55-2.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e55-2.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e55-3.conf b/bind/master/conf-master/e55-3.conf new file mode 100644 index 0000000..fe2af74 --- /dev/null +++ b/bind/master/conf-master/e55-3.conf @@ -0,0 +1,7 @@ +zone "e55-3.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e55-3.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e55-4.conf b/bind/master/conf-master/e55-4.conf new file mode 100644 index 0000000..a539533 --- /dev/null +++ b/bind/master/conf-master/e55-4.conf @@ -0,0 +1,7 @@ +zone "e55-4.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e55-4.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e57-1.conf b/bind/master/conf-master/e57-1.conf new file mode 100644 index 0000000..5956229 --- /dev/null +++ b/bind/master/conf-master/e57-1.conf @@ -0,0 +1,7 @@ +zone "e57-1.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e57-1.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e57-2.conf b/bind/master/conf-master/e57-2.conf new file mode 100644 index 0000000..1df48ea --- /dev/null +++ b/bind/master/conf-master/e57-2.conf @@ -0,0 +1,7 @@ +zone "e57-2.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e57-2.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e57-3.conf b/bind/master/conf-master/e57-3.conf new file mode 100644 index 0000000..2ed2c9a --- /dev/null +++ b/bind/master/conf-master/e57-3.conf @@ -0,0 +1,7 @@ +zone "e57-3.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e57-3.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e57-4.conf b/bind/master/conf-master/e57-4.conf new file mode 100644 index 0000000..906441f --- /dev/null +++ b/bind/master/conf-master/e57-4.conf @@ -0,0 +1,7 @@ +zone "e57-4.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e57-4.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e59-1.conf b/bind/master/conf-master/e59-1.conf new file mode 100644 index 0000000..16bf93a --- /dev/null +++ b/bind/master/conf-master/e59-1.conf @@ -0,0 +1,7 @@ +zone "e59-1.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e59-1.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e59-2.conf b/bind/master/conf-master/e59-2.conf new file mode 100644 index 0000000..f9930b3 --- /dev/null +++ b/bind/master/conf-master/e59-2.conf @@ -0,0 +1,7 @@ +zone "e59-2.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e59-2.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e59-3.conf b/bind/master/conf-master/e59-3.conf new file mode 100644 index 0000000..ce3ac8f --- /dev/null +++ b/bind/master/conf-master/e59-3.conf @@ -0,0 +1,7 @@ +zone "e59-3.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e59-3.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e59-4.conf b/bind/master/conf-master/e59-4.conf new file mode 100644 index 0000000..0d69eea --- /dev/null +++ b/bind/master/conf-master/e59-4.conf @@ -0,0 +1,7 @@ +zone "e59-4.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e59-4.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e61-1.conf b/bind/master/conf-master/e61-1.conf new file mode 100644 index 0000000..26ff5fd --- /dev/null +++ b/bind/master/conf-master/e61-1.conf @@ -0,0 +1,7 @@ +zone "e61-1.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e61-1.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e61-2.conf b/bind/master/conf-master/e61-2.conf new file mode 100644 index 0000000..b08ebd3 --- /dev/null +++ b/bind/master/conf-master/e61-2.conf @@ -0,0 +1,7 @@ +zone "e61-2.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e61-2.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e61-3.conf b/bind/master/conf-master/e61-3.conf new file mode 100644 index 0000000..02ce5d4 --- /dev/null +++ b/bind/master/conf-master/e61-3.conf @@ -0,0 +1,7 @@ +zone "e61-3.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e61-3.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e61-4.conf b/bind/master/conf-master/e61-4.conf new file mode 100644 index 0000000..ed43653 --- /dev/null +++ b/bind/master/conf-master/e61-4.conf @@ -0,0 +1,7 @@ +zone "e61-4.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e61-4.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e63-1.conf b/bind/master/conf-master/e63-1.conf new file mode 100644 index 0000000..ae9e505 --- /dev/null +++ b/bind/master/conf-master/e63-1.conf @@ -0,0 +1,7 @@ +zone "e63-1.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e63-1.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e63-2.conf b/bind/master/conf-master/e63-2.conf new file mode 100644 index 0000000..10af791 --- /dev/null +++ b/bind/master/conf-master/e63-2.conf @@ -0,0 +1,7 @@ +zone "e63-2.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e63-2.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e63-3.conf b/bind/master/conf-master/e63-3.conf new file mode 100644 index 0000000..8b16f42 --- /dev/null +++ b/bind/master/conf-master/e63-3.conf @@ -0,0 +1,7 @@ +zone "e63-3.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e63-3.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e63-4.conf b/bind/master/conf-master/e63-4.conf new file mode 100644 index 0000000..108f15d --- /dev/null +++ b/bind/master/conf-master/e63-4.conf @@ -0,0 +1,7 @@ +zone "e63-4.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e63-4.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e65-1.conf b/bind/master/conf-master/e65-1.conf new file mode 100644 index 0000000..92a1a9a --- /dev/null +++ b/bind/master/conf-master/e65-1.conf @@ -0,0 +1,7 @@ +zone "e65-1.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e65-1.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e65-2.conf b/bind/master/conf-master/e65-2.conf new file mode 100644 index 0000000..80d6e43 --- /dev/null +++ b/bind/master/conf-master/e65-2.conf @@ -0,0 +1,7 @@ +zone "e65-2.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e65-2.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e65-3.conf b/bind/master/conf-master/e65-3.conf new file mode 100644 index 0000000..a74b2bb --- /dev/null +++ b/bind/master/conf-master/e65-3.conf @@ -0,0 +1,7 @@ +zone "e65-3.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e65-3.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e65-4.conf b/bind/master/conf-master/e65-4.conf new file mode 100644 index 0000000..bc161d5 --- /dev/null +++ b/bind/master/conf-master/e65-4.conf @@ -0,0 +1,7 @@ +zone "e65-4.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e65-4.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e67-1.conf b/bind/master/conf-master/e67-1.conf new file mode 100644 index 0000000..6aeac2d --- /dev/null +++ b/bind/master/conf-master/e67-1.conf @@ -0,0 +1,7 @@ +zone "e67-1.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e67-1.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e67-2.conf b/bind/master/conf-master/e67-2.conf new file mode 100644 index 0000000..083bf2e --- /dev/null +++ b/bind/master/conf-master/e67-2.conf @@ -0,0 +1,7 @@ +zone "e67-2.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e67-2.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e67-3.conf b/bind/master/conf-master/e67-3.conf new file mode 100644 index 0000000..47bb2b0 --- /dev/null +++ b/bind/master/conf-master/e67-3.conf @@ -0,0 +1,7 @@ +zone "e67-3.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e67-3.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e67-4.conf b/bind/master/conf-master/e67-4.conf new file mode 100644 index 0000000..60f71f9 --- /dev/null +++ b/bind/master/conf-master/e67-4.conf @@ -0,0 +1,7 @@ +zone "e67-4.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e67-4.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e69-1.conf b/bind/master/conf-master/e69-1.conf new file mode 100644 index 0000000..28bc567 --- /dev/null +++ b/bind/master/conf-master/e69-1.conf @@ -0,0 +1,7 @@ +zone "e69-1.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e69-1.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e69-2.conf b/bind/master/conf-master/e69-2.conf new file mode 100644 index 0000000..3ab4477 --- /dev/null +++ b/bind/master/conf-master/e69-2.conf @@ -0,0 +1,7 @@ +zone "e69-2.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e69-2.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e69-3.conf b/bind/master/conf-master/e69-3.conf new file mode 100644 index 0000000..c0c89c9 --- /dev/null +++ b/bind/master/conf-master/e69-3.conf @@ -0,0 +1,7 @@ +zone "e69-3.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e69-3.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e69-4.conf b/bind/master/conf-master/e69-4.conf new file mode 100644 index 0000000..c93777b --- /dev/null +++ b/bind/master/conf-master/e69-4.conf @@ -0,0 +1,7 @@ +zone "e69-4.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e69-4.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e7-3.conf b/bind/master/conf-master/e7-3.conf new file mode 100644 index 0000000..fe9d33b --- /dev/null +++ b/bind/master/conf-master/e7-3.conf @@ -0,0 +1,7 @@ +zone "e7-3.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e7-3.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e7-4.conf b/bind/master/conf-master/e7-4.conf new file mode 100644 index 0000000..a203c0a --- /dev/null +++ b/bind/master/conf-master/e7-4.conf @@ -0,0 +1,7 @@ +zone "e7-4.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e7-4.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e71-1.conf b/bind/master/conf-master/e71-1.conf new file mode 100644 index 0000000..4ac985a --- /dev/null +++ b/bind/master/conf-master/e71-1.conf @@ -0,0 +1,7 @@ +zone "e71-1.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e71-1.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e71-2.conf b/bind/master/conf-master/e71-2.conf new file mode 100644 index 0000000..2ecb0c4 --- /dev/null +++ b/bind/master/conf-master/e71-2.conf @@ -0,0 +1,7 @@ +zone "e71-2.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e71-2.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e71-3.conf b/bind/master/conf-master/e71-3.conf new file mode 100644 index 0000000..3dcebfb --- /dev/null +++ b/bind/master/conf-master/e71-3.conf @@ -0,0 +1,7 @@ +zone "e71-3.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e71-3.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e71-4.conf b/bind/master/conf-master/e71-4.conf new file mode 100644 index 0000000..4219538 --- /dev/null +++ b/bind/master/conf-master/e71-4.conf @@ -0,0 +1,7 @@ +zone "e71-4.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e71-4.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e73-1.conf b/bind/master/conf-master/e73-1.conf new file mode 100644 index 0000000..676106a --- /dev/null +++ b/bind/master/conf-master/e73-1.conf @@ -0,0 +1,7 @@ +zone "e73-1.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e73-1.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e73-2.conf b/bind/master/conf-master/e73-2.conf new file mode 100644 index 0000000..d86e6e9 --- /dev/null +++ b/bind/master/conf-master/e73-2.conf @@ -0,0 +1,7 @@ +zone "e73-2.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e73-2.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e73-3.conf b/bind/master/conf-master/e73-3.conf new file mode 100644 index 0000000..d99ff3b --- /dev/null +++ b/bind/master/conf-master/e73-3.conf @@ -0,0 +1,7 @@ +zone "e73-3.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e73-3.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e73-4.conf b/bind/master/conf-master/e73-4.conf new file mode 100644 index 0000000..ea9c11e --- /dev/null +++ b/bind/master/conf-master/e73-4.conf @@ -0,0 +1,7 @@ +zone "e73-4.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e73-4.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e75-1.conf b/bind/master/conf-master/e75-1.conf new file mode 100644 index 0000000..472d744 --- /dev/null +++ b/bind/master/conf-master/e75-1.conf @@ -0,0 +1,7 @@ +zone "e75-1.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e75-1.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e75-2.conf b/bind/master/conf-master/e75-2.conf new file mode 100644 index 0000000..a672748 --- /dev/null +++ b/bind/master/conf-master/e75-2.conf @@ -0,0 +1,7 @@ +zone "e75-2.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e75-2.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e75-3.conf b/bind/master/conf-master/e75-3.conf new file mode 100644 index 0000000..0d062f3 --- /dev/null +++ b/bind/master/conf-master/e75-3.conf @@ -0,0 +1,7 @@ +zone "e75-3.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e75-3.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e75-4.conf b/bind/master/conf-master/e75-4.conf new file mode 100644 index 0000000..62dfdfc --- /dev/null +++ b/bind/master/conf-master/e75-4.conf @@ -0,0 +1,7 @@ +zone "e75-4.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e75-4.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e77-1.conf b/bind/master/conf-master/e77-1.conf new file mode 100644 index 0000000..5e972e9 --- /dev/null +++ b/bind/master/conf-master/e77-1.conf @@ -0,0 +1,7 @@ +zone "e77-1.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e77-1.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e77-2.conf b/bind/master/conf-master/e77-2.conf new file mode 100644 index 0000000..ffc03b2 --- /dev/null +++ b/bind/master/conf-master/e77-2.conf @@ -0,0 +1,7 @@ +zone "e77-2.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e77-2.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e9-3.conf b/bind/master/conf-master/e9-3.conf new file mode 100644 index 0000000..6b871df --- /dev/null +++ b/bind/master/conf-master/e9-3.conf @@ -0,0 +1,7 @@ +zone "e9-3.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e9-3.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/e9-4.conf b/bind/master/conf-master/e9-4.conf new file mode 100644 index 0000000..b220f5f --- /dev/null +++ b/bind/master/conf-master/e9-4.conf @@ -0,0 +1,7 @@ +zone "e9-4.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/e9-4.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/fugleberg1.conf b/bind/master/conf-master/fugleberg1.conf new file mode 100644 index 0000000..d75c4e4 --- /dev/null +++ b/bind/master/conf-master/fugleberg1.conf @@ -0,0 +1,7 @@ +zone "fugleberg1.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/fugleberg1.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/fugleberg2.conf b/bind/master/conf-master/fugleberg2.conf new file mode 100644 index 0000000..6b78cb8 --- /dev/null +++ b/bind/master/conf-master/fugleberg2.conf @@ -0,0 +1,7 @@ +zone "fugleberg2.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/fugleberg2.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/game.conf b/bind/master/conf-master/game.conf new file mode 100644 index 0000000..7a90aad --- /dev/null +++ b/bind/master/conf-master/game.conf @@ -0,0 +1,7 @@ +zone "game.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/game.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/gamehq.conf b/bind/master/conf-master/gamehq.conf new file mode 100644 index 0000000..8072e98 --- /dev/null +++ b/bind/master/conf-master/gamehq.conf @@ -0,0 +1,7 @@ +zone "gamehq.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/gamehq.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/lager.conf b/bind/master/conf-master/lager.conf new file mode 100644 index 0000000..474f7e5 --- /dev/null +++ b/bind/master/conf-master/lager.conf @@ -0,0 +1,7 @@ +zone "lager.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/lager.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/logistikk.conf b/bind/master/conf-master/logistikk.conf new file mode 100644 index 0000000..7211a84 --- /dev/null +++ b/bind/master/conf-master/logistikk.conf @@ -0,0 +1,7 @@ +zone "logistikk.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/logistikk.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/marsrele.conf b/bind/master/conf-master/marsrele.conf new file mode 100644 index 0000000..aac0a42 --- /dev/null +++ b/bind/master/conf-master/marsrele.conf @@ -0,0 +1,7 @@ +zone "marsrele.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/marsrele.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/noc.conf b/bind/master/conf-master/noc.conf new file mode 100644 index 0000000..6d49ca3 --- /dev/null +++ b/bind/master/conf-master/noc.conf @@ -0,0 +1,7 @@ +zone "noc.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/noc.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/presse.conf b/bind/master/conf-master/presse.conf new file mode 100644 index 0000000..410d075 --- /dev/null +++ b/bind/master/conf-master/presse.conf @@ -0,0 +1,7 @@ +zone "presse.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/presse.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/secmedic.conf b/bind/master/conf-master/secmedic.conf new file mode 100644 index 0000000..11a1d56 --- /dev/null +++ b/bind/master/conf-master/secmedic.conf @@ -0,0 +1,7 @@ +zone "secmedic.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/secmedic.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/sponsorvest.conf b/bind/master/conf-master/sponsorvest.conf new file mode 100644 index 0000000..7b2262d --- /dev/null +++ b/bind/master/conf-master/sponsorvest.conf @@ -0,0 +1,7 @@ +zone "sponsorvest.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/sponsorvest.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/stage.conf b/bind/master/conf-master/stage.conf new file mode 100644 index 0000000..3bd5f84 --- /dev/null +++ b/bind/master/conf-master/stage.conf @@ -0,0 +1,7 @@ +zone "stage.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/stage.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/stageboh.conf b/bind/master/conf-master/stageboh.conf new file mode 100644 index 0000000..9f871a6 --- /dev/null +++ b/bind/master/conf-master/stageboh.conf @@ -0,0 +1,7 @@ +zone "stageboh.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/stageboh.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/tele.conf b/bind/master/conf-master/tele.conf new file mode 100644 index 0000000..479381e --- /dev/null +++ b/bind/master/conf-master/tele.conf @@ -0,0 +1,7 @@ +zone "tele.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/tele.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/wlan.conf b/bind/master/conf-master/wlan.conf new file mode 100644 index 0000000..4e138f8 --- /dev/null +++ b/bind/master/conf-master/wlan.conf @@ -0,0 +1,7 @@ +zone "wlan.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/wlan.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/conf-master/ymse.conf b/bind/master/conf-master/ymse.conf new file mode 100644 index 0000000..3ebb5e5 --- /dev/null +++ b/bind/master/conf-master/ymse.conf @@ -0,0 +1,7 @@ +zone "ymse.tg13.gathering.org" { +        type master; +        notify yes; +        allow-update { key DHCP_UPDATER; }; +        file "dynamic/ymse.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/master/db.0 b/bind/master/db.0 new file mode 100644 index 0000000..e3aabdb --- /dev/null +++ b/bind/master/db.0 @@ -0,0 +1,12 @@ +; +; BIND reverse data file for broadcast zone +; +$TTL	604800 +@	IN	SOA	localhost. root.localhost. ( +			      1		; Serial +			 604800		; Refresh +			  86400		; Retry +			2419200		; Expire +			 604800 )	; Negative Cache TTL +; +@	IN	NS	localhost. diff --git a/bind/master/db.127 b/bind/master/db.127 new file mode 100644 index 0000000..cd05bef --- /dev/null +++ b/bind/master/db.127 @@ -0,0 +1,13 @@ +; +; BIND reverse data file for local loopback interface +; +$TTL	604800 +@	IN	SOA	localhost. root.localhost. ( +			      1		; Serial +			 604800		; Refresh +			  86400		; Retry +			2419200		; Expire +			 604800 )	; Negative Cache TTL +; +@	IN	NS	localhost. +1.0.0	IN	PTR	localhost. diff --git a/bind/master/db.255 b/bind/master/db.255 new file mode 100644 index 0000000..e3aabdb --- /dev/null +++ b/bind/master/db.255 @@ -0,0 +1,12 @@ +; +; BIND reverse data file for broadcast zone +; +$TTL	604800 +@	IN	SOA	localhost. root.localhost. ( +			      1		; Serial +			 604800		; Refresh +			  86400		; Retry +			2419200		; Expire +			 604800 )	; Negative Cache TTL +; +@	IN	NS	localhost. diff --git a/bind/master/db.empty b/bind/master/db.empty new file mode 100644 index 0000000..8a12858 --- /dev/null +++ b/bind/master/db.empty @@ -0,0 +1,14 @@ +; BIND reverse data file for empty rfc1918 zone +; +; DO NOT EDIT THIS FILE - it is used for multiple zones. +; Instead, copy it, edit named.conf, and use that copy. +; +$TTL	86400 +@	IN	SOA	localhost. root.localhost. ( +			      1		; Serial +			 604800		; Refresh +			  86400		; Retry +			2419200		; Expire +			  86400 )	; Negative Cache TTL +; +@	IN	NS	localhost. diff --git a/bind/master/db.local b/bind/master/db.local new file mode 100644 index 0000000..2f272d4 --- /dev/null +++ b/bind/master/db.local @@ -0,0 +1,14 @@ +; +; BIND data file for local loopback interface +; +$TTL	604800 +@	IN	SOA	localhost. root.localhost. ( +			      2		; Serial +			 604800		; Refresh +			  86400		; Retry +			2419200		; Expire +			 604800 )	; Negative Cache TTL +; +@	IN	NS	localhost. +@	IN	A	127.0.0.1 +@	IN	AAAA	::1 diff --git a/bind/master/db.root b/bind/master/db.root new file mode 100644 index 0000000..6c19741 --- /dev/null +++ b/bind/master/db.root @@ -0,0 +1,88 @@ +;       This file holds the information on root name servers needed to +;       initialize cache of Internet domain name servers +;       (e.g. reference this file in the "cache  .  <file>" +;       configuration file of BIND domain name servers). +; +;       This file is made available by InterNIC  +;       under anonymous FTP as +;           file                /domain/named.cache +;           on server           FTP.INTERNIC.NET +;       -OR-                    RS.INTERNIC.NET +; +;       last update:    Jan 3, 2013 +;       related version of root zone:   2013010300 +; +; formerly NS.INTERNIC.NET +; +.                        3600000  IN  NS    A.ROOT-SERVERS.NET. +A.ROOT-SERVERS.NET.      3600000      A     198.41.0.4 +A.ROOT-SERVERS.NET.      3600000      AAAA  2001:503:BA3E::2:30 +; +; FORMERLY NS1.ISI.EDU +; +.                        3600000      NS    B.ROOT-SERVERS.NET. +B.ROOT-SERVERS.NET.      3600000      A     192.228.79.201 +; +; FORMERLY C.PSI.NET +; +.                        3600000      NS    C.ROOT-SERVERS.NET. +C.ROOT-SERVERS.NET.      3600000      A     192.33.4.12 +; +; FORMERLY TERP.UMD.EDU +; +.                        3600000      NS    D.ROOT-SERVERS.NET. +D.ROOT-SERVERS.NET.      3600000      A     199.7.91.13 +D.ROOT-SERVERS.NET.	 3600000      AAAA  2001:500:2D::D +; +; FORMERLY NS.NASA.GOV +; +.                        3600000      NS    E.ROOT-SERVERS.NET. +E.ROOT-SERVERS.NET.      3600000      A     192.203.230.10 +; +; FORMERLY NS.ISC.ORG +; +.                        3600000      NS    F.ROOT-SERVERS.NET. +F.ROOT-SERVERS.NET.      3600000      A     192.5.5.241 +F.ROOT-SERVERS.NET.      3600000      AAAA  2001:500:2F::F +; +; FORMERLY NS.NIC.DDN.MIL +; +.                        3600000      NS    G.ROOT-SERVERS.NET. +G.ROOT-SERVERS.NET.      3600000      A     192.112.36.4 +; +; FORMERLY AOS.ARL.ARMY.MIL +; +.                        3600000      NS    H.ROOT-SERVERS.NET. +H.ROOT-SERVERS.NET.      3600000      A     128.63.2.53 +H.ROOT-SERVERS.NET.      3600000      AAAA  2001:500:1::803F:235 +; +; FORMERLY NIC.NORDU.NET +; +.                        3600000      NS    I.ROOT-SERVERS.NET. +I.ROOT-SERVERS.NET.      3600000      A     192.36.148.17 +I.ROOT-SERVERS.NET.      3600000      AAAA  2001:7FE::53 +; +; OPERATED BY VERISIGN, INC. +; +.                        3600000      NS    J.ROOT-SERVERS.NET. +J.ROOT-SERVERS.NET.      3600000      A     192.58.128.30 +J.ROOT-SERVERS.NET.      3600000      AAAA  2001:503:C27::2:30 +; +; OPERATED BY RIPE NCC +; +.                        3600000      NS    K.ROOT-SERVERS.NET. +K.ROOT-SERVERS.NET.      3600000      A     193.0.14.129 +K.ROOT-SERVERS.NET.      3600000      AAAA  2001:7FD::1 +; +; OPERATED BY ICANN +; +.                        3600000      NS    L.ROOT-SERVERS.NET. +L.ROOT-SERVERS.NET.      3600000      A     199.7.83.42 +L.ROOT-SERVERS.NET.      3600000      AAAA  2001:500:3::42 +; +; OPERATED BY WIDE +; +.                        3600000      NS    M.ROOT-SERVERS.NET. +M.ROOT-SERVERS.NET.      3600000      A     202.12.27.33 +M.ROOT-SERVERS.NET.      3600000      AAAA  2001:DC3::35 +; End of File diff --git a/bind/master/infra.tg13.gathering.org.zone b/bind/master/infra.tg13.gathering.org.zone new file mode 100644 index 0000000..5aa1a88 --- /dev/null +++ b/bind/master/infra.tg13.gathering.org.zone @@ -0,0 +1,110 @@ +$TTL 3600 +@	IN	SOA	winix.tg13.gathering.org.	abuse.gathering.org. ( +			2013033101; serial +			3600 ; refresh  +			1800 ; retry +			608400 ; expire +			3600 ) ; minimum and default TTL + +		IN	NS	winix.tg13.gathering.org. +		IN	NS	tress90.tg13.gathering.org. + +; Generated by make-all-config.sh on the bootstrapping/nms server. +; Will not be overwritten unless it is missing ;) + + +; infra-bokser +telegw                  IN	A	151.216.127.1 +telegw                  IN	AAAA	2a02:ed02:FFFF::1 +nocgw                   IN	A	151.216.127.2 +nocgw                   IN	AAAA	2a02:ed02:FFFF::2 +camgw                   IN	A	151.216.127.3 +camgw                   IN	AAAA	2a02:ed02:FFFF::3 +stageboh                IN	A	151.216.127.4 +stageboh                IN	AAAA	2a02:ed02:FFFF::4 +wtfgw                   IN	A	151.216.127.5 +wtfgw                   IN	AAAA	2a02:ed02:FFFF::5 +logistikkgw             IN	A	151.216.127.6 +logistikkgw             IN	AAAA	2a02:ed02:FFFF::6 +corengw                 IN	A	151.216.127.7 +corengw                 IN	AAAA	2a02:ed02:FFFF::7 +coresgw                 IN	A	151.216.127.8 +coresgw                 IN	AAAA	2a02:ed02:FFFF::8 +crewgw                  IN	A	151.216.127.9 +crewgw                  IN	AAAA	2a02:ed02:FFFF::9 +tvgw                    IN	A	151.216.127.10 +tvgw                    IN	AAAA	2a02:ed02:FFFF::10 +gamegw                  IN	A	151.216.127.11 +gamegw                  IN	AAAA	2a02:ed02:FFFF::11 +resepsjongw             IN	A	151.216.127.12 +resepsjongw             IN	AAAA	2a02:ed02:FFFF::12 +pressegw                IN	A	151.216.127.13 +pressegw                IN	AAAA	2a02:ed02:FFFF::13 +sponsorgw               IN	A	151.216.127.14 +sponsorgw               IN	AAAA	2a02:ed02:FFFF::14 +komplettgw              IN	A	151.216.127.15 +komplettgw              IN	AAAA	2a02:ed02:FFFF::15 +eldregw                 IN	A	151.216.127.16 +eldregw                 IN	AAAA	2a02:ed02:FFFF::16 +distro0                 IN	A	151.216.127.17 +distro0                 IN	AAAA	2a02:ed02:FFFF::17 +distro1                 IN	A	151.216.127.18 +distro1                 IN	AAAA	2a02:ed02:FFFF::18 +distro2                 IN	A	151.216.127.19 +distro2                 IN	AAAA	2a02:ed02:FFFF::19 +distro3                 IN	A	151.216.127.20 +distro3                 IN	AAAA	2a02:ed02:FFFF::20 +distro4                 IN	A	151.216.127.21 +distro4                 IN	AAAA	2a02:ed02:FFFF::21 +vss-core                IN	A	151.216.123.254 +vss-core                IN	AAAA	2A02:ED02:123::254 + +; linknett +telegw-po1              IN	A	185.12.59.2 +telegw-po1              IN	AAAA	2a02:ed01::2 +nocgw-po1               IN	A	151.216.0.3 + +telegw-nocgw            IN	A	151.216.0.2 +nocgw-telegw            IN	A	151.216.0.3 +telegw-cam              IN	A	151.216.0.4 +cam-telegw              IN	A	151.216.0.5 +nocgw-coren             IN	A	151.216.0.6 +coren-nocgw             IN	A	151.216.0.7 +telegw-pressegw         IN	A	151.216.0.8 +pressegw-telegw         IN	A	151.216.0.9 +coren-gamegw            IN	A	151.216.0.10 +gamegw-coren            IN	A	151.216.0.11 +cores-crewgw            IN	A	151.216.0.12 +crewgw-cores            IN	A	151.216.0.13 +camgw-crewgw            IN	A	151.216.0.14 +crewgw-camgw            IN	A	151.216.0.15 +logistikkgw-wtfgw       IN	A	151.216.0.18 +wtfgw-logistikkgw       IN	A	151.216.0.19 +wtfgw-stagebohgw        IN	A	151.216.0.20 +stagebohgw-wtfgw        IN	A	151.216.0.21 +camgw-creachillgw       IN	A	151.216.0.22 +creachillgw-camgw       IN	A	151.216.0.23 +nocgw-coresgw           IN	A	151.216.0.24 +coresgw-nocgw           IN	A	151.216.0.25 +telegw-resepsjongw      IN	A	151.216.0.26 +resepsjongw-telegw      IN	A	151.216.0.27 +telegw-gamegw           IN	A	151.216.0.28 +gamegw-telegw           IN	A	151.216.0.29 +telegw-asr1k            IN	A	151.216.0.30 +asr1k-telegw            IN	A	151.216.0.31 +nocgw-sponsorgw         IN	A	151.216.0.32 +sponsorgw-nocgw         IN	A	151.216.0.33 +wtfgw-gamegw            IN	A	151.216.0.34 +gamegw-wtfgw            IN	A	151.216.0.35 +corengw-komplettgw      IN	A	151.216.0.36 +komplettgw-corengw      IN	A	151.216.0.37 +nocgw-itvmrr            IN	A	151.216.0.38 +itvmrr-nocgw            IN	A	151.216.0.39 +camgw-logistikkgw       IN	A	151.216.0.46 +logistikkgw-camgw       IN	A	151.216.0.47 +camgw-crewgw            IN	A	151.216.0.48 +crewgw-camgw            IN	A	151.216.0.49 +telegw-partygw          IN	A	151.216.0.54 +partygw-telegw          IN	A	151.216.0.55 +telegw-noshutnat        IN	A	151.216.0.56 +noshutnat-telegw        IN	A	151.216.0.57 diff --git a/bind/master/named.conf b/bind/master/named.conf new file mode 100644 index 0000000..54adfdf --- /dev/null +++ b/bind/master/named.conf @@ -0,0 +1,55 @@ +// This named.conf was generated by make-named.pl at 20130327-1708 +// The current version of make-named.pl should not overwrite this file. +acl tg-nett  { 151.216.0.0/17; 2a02:ed02::/32; 127.0.0.0/8; ::1; 31.169.55.0/24; }; +acl ns-xfr   { 194.19.3.20; 151.216.125.2; 2a02:ed02:125::2; 151.216.126.2; 2a02:ed02:126::2; 151.216.124.0/24; }; +acl ripe-xfr { 194.19.3.20; 151.216.125.2; 2a02:ed02:125::2; 151.216.126.2; 2a02:ed02:126::2; 193.0.0.0/22; }; + +options { +        directory "/etc/bind"; +        allow-recursion { tg-nett; }; +        allow-query { any; }; +        allow-transfer { ns-xfr; }; +        recursion yes; +        auth-nxdomain no; +        listen-on-v6 { any; }; +}; + +key DHCP_UPDATER { +        algorithm HMAC-MD5.SIG-ALG.REG.INT; +        secret <removed>; +}; + +zone "tg13.gathering.org" { +        type master; +        file "tg13.gathering.org.zone"; +        notify yes; +        allow-transfer { ns-xfr; }; +}; + +zone "infra.tg13.gathering.org" { +        type master; +        file "infra.tg13.gathering.org.zone"; +        notify yes; +        allow-transfer { ns-xfr; }; +}; + +zone "2.0.d.e.2.0.a.2.ip6.arpa" { +        type master; +        allow-update { key DHCP_UPDATER; }; +        notify yes; +        file "2.0.d.e.2.0.a.2.ip6.arpa.zone"; +        allow-transfer { ns-xfr; ripe-xfr; }; +}; + +# ekstra /24-nett fra Blix +zone "55.169.31.in-addr.arpa" { +        type master; +        file "55.169.31.in-addr.arpa.zone"; +        notify yes; +        allow-transfer { ns-xfr; ripe-xfr; }; +}; + +include "/etc/bind/named.conf.default-zones"; +include "/etc/bind/steamorigin-zones"; +include "named.reverse4.conf"; +include "named.master-include.conf"; diff --git a/bind/master/named.conf.default-zones b/bind/master/named.conf.default-zones new file mode 100644 index 0000000..355338b --- /dev/null +++ b/bind/master/named.conf.default-zones @@ -0,0 +1,30 @@ +// prime the server with knowledge of the root servers +zone "." { +	type hint; +	file "/etc/bind/db.root"; +}; + +// be authoritative for the localhost forward and reverse zones, and for +// broadcast zones as per RFC 1912 + +zone "localhost" { +	type master; +	file "/etc/bind/db.local"; +}; + +zone "127.in-addr.arpa" { +	type master; +	file "/etc/bind/db.127"; +}; + +zone "0.in-addr.arpa" { +	type master; +	file "/etc/bind/db.0"; +}; + +zone "255.in-addr.arpa" { +	type master; +	file "/etc/bind/db.255"; +}; + + diff --git a/bind/master/named.conf.local b/bind/master/named.conf.local new file mode 100644 index 0000000..7a57b10 --- /dev/null +++ b/bind/master/named.conf.local @@ -0,0 +1,8 @@ +// +// Do any local configuration here +// + +// Consider adding the 1918 zones here, if they are not used in your +// organization +//include "/etc/bind/zones.rfc1918"; + diff --git a/bind/master/named.conf.options b/bind/master/named.conf.options new file mode 100644 index 0000000..170486b --- /dev/null +++ b/bind/master/named.conf.options @@ -0,0 +1,19 @@ +options { +	directory "/var/cache/bind"; + +	// If there is a firewall between you and nameservers you want +	// to talk to, you may need to fix the firewall to allow multiple +	// ports to talk.  See http://www.kb.cert.org/vuls/id/800113 + +	// If your ISP provided one or more IP addresses for stable  +	// nameservers, you probably want to use them as forwarders.   +	// Uncomment the following block, and insert the addresses replacing  +	// the all-0's placeholder. + +	// forwarders { +	// 	0.0.0.0; +	// }; + +	auth-nxdomain no;    # conform to RFC1035 +	listen-on-v6 { any; }; +}; diff --git a/bind/master/named.master-include.conf b/bind/master/named.master-include.conf new file mode 100644 index 0000000..0f7f9e7 --- /dev/null +++ b/bind/master/named.master-include.conf @@ -0,0 +1,159 @@ +include "/etc/bind/conf-master/ap-dist0.conf"; +include "/etc/bind/conf-master/ap-dist1.conf"; +include "/etc/bind/conf-master/ap-dist2.conf"; +include "/etc/bind/conf-master/ap-dist3.conf"; +include "/etc/bind/conf-master/ap-dist4.conf"; +include "/etc/bind/conf-master/care.conf"; +include "/etc/bind/conf-master/chillout.conf"; +include "/etc/bind/conf-master/creativia.conf"; +include "/etc/bind/conf-master/crew1.conf"; +include "/etc/bind/conf-master/crew2.conf"; +include "/etc/bind/conf-master/crew3.conf"; +include "/etc/bind/conf-master/crew4.conf"; +include "/etc/bind/conf-master/crew5.conf"; +include "/etc/bind/conf-master/crew6.conf"; +include "/etc/bind/conf-master/defektraid.conf"; +include "/etc/bind/conf-master/e1-3.conf"; +include "/etc/bind/conf-master/e1-4.conf"; +include "/etc/bind/conf-master/e11-1.conf"; +include "/etc/bind/conf-master/e11-2.conf"; +include "/etc/bind/conf-master/e11-3.conf"; +include "/etc/bind/conf-master/e11-4.conf"; +include "/etc/bind/conf-master/e13-1.conf"; +include "/etc/bind/conf-master/e13-2.conf"; +include "/etc/bind/conf-master/e13-3.conf"; +include "/etc/bind/conf-master/e13-4.conf"; +include "/etc/bind/conf-master/e15-1.conf"; +include "/etc/bind/conf-master/e15-2.conf"; +include "/etc/bind/conf-master/e15-3.conf"; +include "/etc/bind/conf-master/e15-4.conf"; +include "/etc/bind/conf-master/e17-1.conf"; +include "/etc/bind/conf-master/e17-2.conf"; +include "/etc/bind/conf-master/e17-3.conf"; +include "/etc/bind/conf-master/e17-4.conf"; +include "/etc/bind/conf-master/e19-1.conf"; +include "/etc/bind/conf-master/e19-2.conf"; +include "/etc/bind/conf-master/e19-3.conf"; +include "/etc/bind/conf-master/e19-4.conf"; +include "/etc/bind/conf-master/e21-1.conf"; +include "/etc/bind/conf-master/e21-2.conf"; +include "/etc/bind/conf-master/e21-3.conf"; +include "/etc/bind/conf-master/e21-4.conf"; +include "/etc/bind/conf-master/e23-1.conf"; +include "/etc/bind/conf-master/e23-2.conf"; +include "/etc/bind/conf-master/e23-3.conf"; +include "/etc/bind/conf-master/e23-4.conf"; +include "/etc/bind/conf-master/e25-1.conf"; +include "/etc/bind/conf-master/e25-2.conf"; +include "/etc/bind/conf-master/e25-3.conf"; +include "/etc/bind/conf-master/e25-4.conf"; +include "/etc/bind/conf-master/e27-1.conf"; +include "/etc/bind/conf-master/e27-2.conf"; +include "/etc/bind/conf-master/e29-1.conf"; +include "/etc/bind/conf-master/e29-2.conf"; +include "/etc/bind/conf-master/e3-3.conf"; +include "/etc/bind/conf-master/e3-4.conf"; +include "/etc/bind/conf-master/e31-1.conf"; +include "/etc/bind/conf-master/e31-2.conf"; +include "/etc/bind/conf-master/e33-1.conf"; +include "/etc/bind/conf-master/e33-2.conf"; +include "/etc/bind/conf-master/e35-1.conf"; +include "/etc/bind/conf-master/e35-2.conf"; +include "/etc/bind/conf-master/e37-1.conf"; +include "/etc/bind/conf-master/e37-2.conf"; +include "/etc/bind/conf-master/e39-1.conf"; +include "/etc/bind/conf-master/e39-2.conf"; +include "/etc/bind/conf-master/e41-1.conf"; +include "/etc/bind/conf-master/e41-2.conf"; +include "/etc/bind/conf-master/e43-1.conf"; +include "/etc/bind/conf-master/e43-2.conf"; +include "/etc/bind/conf-master/e43-3.conf"; +include "/etc/bind/conf-master/e43-4.conf"; +include "/etc/bind/conf-master/e45-1.conf"; +include "/etc/bind/conf-master/e45-2.conf"; +include "/etc/bind/conf-master/e45-3.conf"; +include "/etc/bind/conf-master/e45-4.conf"; +include "/etc/bind/conf-master/e47-1.conf"; +include "/etc/bind/conf-master/e47-2.conf"; +include "/etc/bind/conf-master/e47-3.conf"; +include "/etc/bind/conf-master/e47-4.conf"; +include "/etc/bind/conf-master/e49-1.conf"; +include "/etc/bind/conf-master/e49-2.conf"; +include "/etc/bind/conf-master/e49-3.conf"; +include "/etc/bind/conf-master/e49-4.conf"; +include "/etc/bind/conf-master/e5-3.conf"; +include "/etc/bind/conf-master/e5-4.conf"; +include "/etc/bind/conf-master/e51-1.conf"; +include "/etc/bind/conf-master/e51-2.conf"; +include "/etc/bind/conf-master/e51-3.conf"; +include "/etc/bind/conf-master/e51-4.conf"; +include "/etc/bind/conf-master/e53-1.conf"; +include "/etc/bind/conf-master/e53-2.conf"; +include "/etc/bind/conf-master/e53-3.conf"; +include "/etc/bind/conf-master/e53-4.conf"; +include "/etc/bind/conf-master/e55-1.conf"; +include "/etc/bind/conf-master/e55-2.conf"; +include "/etc/bind/conf-master/e55-3.conf"; +include "/etc/bind/conf-master/e55-4.conf"; +include "/etc/bind/conf-master/e57-1.conf"; +include "/etc/bind/conf-master/e57-2.conf"; +include "/etc/bind/conf-master/e57-3.conf"; +include "/etc/bind/conf-master/e57-4.conf"; +include "/etc/bind/conf-master/e59-1.conf"; +include "/etc/bind/conf-master/e59-2.conf"; +include "/etc/bind/conf-master/e59-3.conf"; +include "/etc/bind/conf-master/e59-4.conf"; +include "/etc/bind/conf-master/e61-1.conf"; +include "/etc/bind/conf-master/e61-2.conf"; +include "/etc/bind/conf-master/e61-3.conf"; +include "/etc/bind/conf-master/e61-4.conf"; +include "/etc/bind/conf-master/e63-1.conf"; +include "/etc/bind/conf-master/e63-2.conf"; +include "/etc/bind/conf-master/e63-3.conf"; +include "/etc/bind/conf-master/e63-4.conf"; +include "/etc/bind/conf-master/e65-1.conf"; +include "/etc/bind/conf-master/e65-2.conf"; +include "/etc/bind/conf-master/e65-3.conf"; +include "/etc/bind/conf-master/e65-4.conf"; +include "/etc/bind/conf-master/e67-1.conf"; +include "/etc/bind/conf-master/e67-2.conf"; +include "/etc/bind/conf-master/e67-3.conf"; +include "/etc/bind/conf-master/e67-4.conf"; +include "/etc/bind/conf-master/e69-1.conf"; +include "/etc/bind/conf-master/e69-2.conf"; +include "/etc/bind/conf-master/e69-3.conf"; +include "/etc/bind/conf-master/e69-4.conf"; +include "/etc/bind/conf-master/e7-3.conf"; +include "/etc/bind/conf-master/e7-4.conf"; +include "/etc/bind/conf-master/e71-1.conf"; +include "/etc/bind/conf-master/e71-2.conf"; +include "/etc/bind/conf-master/e71-3.conf"; +include "/etc/bind/conf-master/e71-4.conf"; +include "/etc/bind/conf-master/e73-1.conf"; +include "/etc/bind/conf-master/e73-2.conf"; +include "/etc/bind/conf-master/e73-3.conf"; +include "/etc/bind/conf-master/e73-4.conf"; +include "/etc/bind/conf-master/e75-1.conf"; +include "/etc/bind/conf-master/e75-2.conf"; +include "/etc/bind/conf-master/e75-3.conf"; +include "/etc/bind/conf-master/e75-4.conf"; +include "/etc/bind/conf-master/e77-1.conf"; +include "/etc/bind/conf-master/e77-2.conf"; +include "/etc/bind/conf-master/e9-3.conf"; +include "/etc/bind/conf-master/e9-4.conf"; +include "/etc/bind/conf-master/fugleberg1.conf"; +include "/etc/bind/conf-master/fugleberg2.conf"; +include "/etc/bind/conf-master/game.conf"; +include "/etc/bind/conf-master/gamehq.conf"; +include "/etc/bind/conf-master/lager.conf"; +include "/etc/bind/conf-master/logistikk.conf"; +include "/etc/bind/conf-master/marsrele.conf"; +include "/etc/bind/conf-master/noc.conf"; +include "/etc/bind/conf-master/presse.conf"; +include "/etc/bind/conf-master/secmedic.conf"; +include "/etc/bind/conf-master/sponsorvest.conf"; +include "/etc/bind/conf-master/stage.conf"; +include "/etc/bind/conf-master/stageboh.conf"; +include "/etc/bind/conf-master/tele.conf"; +include "/etc/bind/conf-master/wlan.conf"; +include "/etc/bind/conf-master/ymse.conf"; diff --git a/bind/master/named.reverse4.conf b/bind/master/named.reverse4.conf new file mode 100644 index 0000000..d8669f8 --- /dev/null +++ b/bind/master/named.reverse4.conf @@ -0,0 +1,1024 @@ +zone "0.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/0.216.151.in-addr.arpa.zone"; +}; + +zone "1.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/1.216.151.in-addr.arpa.zone"; +}; + +zone "2.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/2.216.151.in-addr.arpa.zone"; +}; + +zone "3.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/3.216.151.in-addr.arpa.zone"; +}; + +zone "4.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/4.216.151.in-addr.arpa.zone"; +}; + +zone "5.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/5.216.151.in-addr.arpa.zone"; +}; + +zone "6.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/6.216.151.in-addr.arpa.zone"; +}; + +zone "7.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/7.216.151.in-addr.arpa.zone"; +}; + +zone "8.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/8.216.151.in-addr.arpa.zone"; +}; + +zone "9.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/9.216.151.in-addr.arpa.zone"; +}; + +zone "10.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/10.216.151.in-addr.arpa.zone"; +}; + +zone "11.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/11.216.151.in-addr.arpa.zone"; +}; + +zone "12.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/12.216.151.in-addr.arpa.zone"; +}; + +zone "13.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/13.216.151.in-addr.arpa.zone"; +}; + +zone "14.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/14.216.151.in-addr.arpa.zone"; +}; + +zone "15.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/15.216.151.in-addr.arpa.zone"; +}; + +zone "16.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/16.216.151.in-addr.arpa.zone"; +}; + +zone "17.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/17.216.151.in-addr.arpa.zone"; +}; + +zone "18.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/18.216.151.in-addr.arpa.zone"; +}; + +zone "19.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/19.216.151.in-addr.arpa.zone"; +}; + +zone "20.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/20.216.151.in-addr.arpa.zone"; +}; + +zone "21.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/21.216.151.in-addr.arpa.zone"; +}; + +zone "22.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/22.216.151.in-addr.arpa.zone"; +}; + +zone "23.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/23.216.151.in-addr.arpa.zone"; +}; + +zone "24.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/24.216.151.in-addr.arpa.zone"; +}; + +zone "25.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/25.216.151.in-addr.arpa.zone"; +}; + +zone "26.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/26.216.151.in-addr.arpa.zone"; +}; + +zone "27.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/27.216.151.in-addr.arpa.zone"; +}; + +zone "28.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/28.216.151.in-addr.arpa.zone"; +}; + +zone "29.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/29.216.151.in-addr.arpa.zone"; +}; + +zone "30.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/30.216.151.in-addr.arpa.zone"; +}; + +zone "31.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/31.216.151.in-addr.arpa.zone"; +}; + +zone "32.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/32.216.151.in-addr.arpa.zone"; +}; + +zone "33.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/33.216.151.in-addr.arpa.zone"; +}; + +zone "34.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/34.216.151.in-addr.arpa.zone"; +}; + +zone "35.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/35.216.151.in-addr.arpa.zone"; +}; + +zone "36.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/36.216.151.in-addr.arpa.zone"; +}; + +zone "37.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/37.216.151.in-addr.arpa.zone"; +}; + +zone "38.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/38.216.151.in-addr.arpa.zone"; +}; + +zone "39.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/39.216.151.in-addr.arpa.zone"; +}; + +zone "40.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/40.216.151.in-addr.arpa.zone"; +}; + +zone "41.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/41.216.151.in-addr.arpa.zone"; +}; + +zone "42.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/42.216.151.in-addr.arpa.zone"; +}; + +zone "43.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/43.216.151.in-addr.arpa.zone"; +}; + +zone "44.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/44.216.151.in-addr.arpa.zone"; +}; + +zone "45.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/45.216.151.in-addr.arpa.zone"; +}; + +zone "46.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/46.216.151.in-addr.arpa.zone"; +}; + +zone "47.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/47.216.151.in-addr.arpa.zone"; +}; + +zone "48.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/48.216.151.in-addr.arpa.zone"; +}; + +zone "49.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/49.216.151.in-addr.arpa.zone"; +}; + +zone "50.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/50.216.151.in-addr.arpa.zone"; +}; + +zone "51.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/51.216.151.in-addr.arpa.zone"; +}; + +zone "52.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/52.216.151.in-addr.arpa.zone"; +}; + +zone "53.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/53.216.151.in-addr.arpa.zone"; +}; + +zone "54.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/54.216.151.in-addr.arpa.zone"; +}; + +zone "55.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/55.216.151.in-addr.arpa.zone"; +}; + +zone "56.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/56.216.151.in-addr.arpa.zone"; +}; + +zone "57.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/57.216.151.in-addr.arpa.zone"; +}; + +zone "58.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/58.216.151.in-addr.arpa.zone"; +}; + +zone "59.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/59.216.151.in-addr.arpa.zone"; +}; + +zone "60.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/60.216.151.in-addr.arpa.zone"; +}; + +zone "61.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/61.216.151.in-addr.arpa.zone"; +}; + +zone "62.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/62.216.151.in-addr.arpa.zone"; +}; + +zone "63.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/63.216.151.in-addr.arpa.zone"; +}; + +zone "64.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/64.216.151.in-addr.arpa.zone"; +}; + +zone "65.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/65.216.151.in-addr.arpa.zone"; +}; + +zone "66.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/66.216.151.in-addr.arpa.zone"; +}; + +zone "67.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/67.216.151.in-addr.arpa.zone"; +}; + +zone "68.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/68.216.151.in-addr.arpa.zone"; +}; + +zone "69.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/69.216.151.in-addr.arpa.zone"; +}; + +zone "70.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/70.216.151.in-addr.arpa.zone"; +}; + +zone "71.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/71.216.151.in-addr.arpa.zone"; +}; + +zone "72.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/72.216.151.in-addr.arpa.zone"; +}; + +zone "73.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/73.216.151.in-addr.arpa.zone"; +}; + +zone "74.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/74.216.151.in-addr.arpa.zone"; +}; + +zone "75.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/75.216.151.in-addr.arpa.zone"; +}; + +zone "76.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/76.216.151.in-addr.arpa.zone"; +}; + +zone "77.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/77.216.151.in-addr.arpa.zone"; +}; + +zone "78.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/78.216.151.in-addr.arpa.zone"; +}; + +zone "79.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/79.216.151.in-addr.arpa.zone"; +}; + +zone "80.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/80.216.151.in-addr.arpa.zone"; +}; + +zone "81.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/81.216.151.in-addr.arpa.zone"; +}; + +zone "82.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/82.216.151.in-addr.arpa.zone"; +}; + +zone "83.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/83.216.151.in-addr.arpa.zone"; +}; + +zone "84.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/84.216.151.in-addr.arpa.zone"; +}; + +zone "85.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/85.216.151.in-addr.arpa.zone"; +}; + +zone "86.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/86.216.151.in-addr.arpa.zone"; +}; + +zone "87.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/87.216.151.in-addr.arpa.zone"; +}; + +zone "88.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/88.216.151.in-addr.arpa.zone"; +}; + +zone "89.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/89.216.151.in-addr.arpa.zone"; +}; + +zone "90.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/90.216.151.in-addr.arpa.zone"; +}; + +zone "91.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/91.216.151.in-addr.arpa.zone"; +}; + +zone "92.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/92.216.151.in-addr.arpa.zone"; +}; + +zone "93.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/93.216.151.in-addr.arpa.zone"; +}; + +zone "94.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/94.216.151.in-addr.arpa.zone"; +}; + +zone "95.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/95.216.151.in-addr.arpa.zone"; +}; + +zone "96.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/96.216.151.in-addr.arpa.zone"; +}; + +zone "97.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/97.216.151.in-addr.arpa.zone"; +}; + +zone "98.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/98.216.151.in-addr.arpa.zone"; +}; + +zone "99.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/99.216.151.in-addr.arpa.zone"; +}; + +zone "100.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/100.216.151.in-addr.arpa.zone"; +}; + +zone "101.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/101.216.151.in-addr.arpa.zone"; +}; + +zone "102.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/102.216.151.in-addr.arpa.zone"; +}; + +zone "103.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/103.216.151.in-addr.arpa.zone"; +}; + +zone "104.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/104.216.151.in-addr.arpa.zone"; +}; + +zone "105.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/105.216.151.in-addr.arpa.zone"; +}; + +zone "106.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/106.216.151.in-addr.arpa.zone"; +}; + +zone "107.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/107.216.151.in-addr.arpa.zone"; +}; + +zone "108.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/108.216.151.in-addr.arpa.zone"; +}; + +zone "109.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/109.216.151.in-addr.arpa.zone"; +}; + +zone "110.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/110.216.151.in-addr.arpa.zone"; +}; + +zone "111.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/111.216.151.in-addr.arpa.zone"; +}; + +zone "112.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/112.216.151.in-addr.arpa.zone"; +}; + +zone "113.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/113.216.151.in-addr.arpa.zone"; +}; + +zone "114.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/114.216.151.in-addr.arpa.zone"; +}; + +zone "115.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/115.216.151.in-addr.arpa.zone"; +}; + +zone "116.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/116.216.151.in-addr.arpa.zone"; +}; + +zone "117.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/117.216.151.in-addr.arpa.zone"; +}; + +zone "118.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/118.216.151.in-addr.arpa.zone"; +}; + +zone "119.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/119.216.151.in-addr.arpa.zone"; +}; + +zone "120.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/120.216.151.in-addr.arpa.zone"; +}; + +zone "121.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/121.216.151.in-addr.arpa.zone"; +}; + +zone "122.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/122.216.151.in-addr.arpa.zone"; +}; + +zone "123.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/123.216.151.in-addr.arpa.zone"; +}; + +zone "124.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/124.216.151.in-addr.arpa.zone"; +}; + +zone "125.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/125.216.151.in-addr.arpa.zone"; +}; + +zone "126.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/126.216.151.in-addr.arpa.zone"; +}; + +zone "127.216.151.in-addr.arpa"	{ +    type master; +    allow-update { key DHCP_UPDATER; }; +    notify yes; +    allow-transfer { 151.216.125.2; 193.0.0.0/22; 151.216.124.0/24; 2a02:ed02:124::/64; }; +    file "reverse/127.216.151.in-addr.arpa.zone"; +}; + diff --git a/bind/master/rndc.key b/bind/master/rndc.key new file mode 100644 index 0000000..6ad396d --- /dev/null +++ b/bind/master/rndc.key @@ -0,0 +1,4 @@ +key "rndc-key" { +	algorithm hmac-md5; +	secret "<removed>"; +}; diff --git a/bind/master/steamorigin-zones b/bind/master/steamorigin-zones new file mode 100644 index 0000000..b1d61f5 --- /dev/null +++ b/bind/master/steamorigin-zones @@ -0,0 +1,61 @@ + +zone "valve.vo.llnwd.net" { +	type forward; +	forwarders { 2001:67c:29f4::51; }; +}; +zone "steampowered.com" { +	type forward; +	forwarders { 2001:67c:29f4::51; }; +}; +zone "steamcommunity.com" { +	type forward; +	forwarders { 2001:67c:29f4::51; }; +}; + +zone "origin.com" { +	type forward; +	forwarders { 2001:67c:29f4::51; }; +}; +zone "ea.com" { +	type forward; +	forwarders { 2001:67c:29f4::51; }; +}; + + +zone "www.ea.com.edgekey.net" { +	type forward; +	forwarders { 2001:67c:29f4::51; }; +}; +zone "e6909.g.akamaiedge.net" { +	type forward; +	forwarders { 2001:67c:29f4::51; }; +}; +zone "ecommerce-origin-1434850512.us-east-1.elb.amazonaws.com" { +	type forward; +	forwarders { 2001:67c:29f4::51; }; +}; +zone "prod-chat-orgin-1410280267.us-east-1.elb.amazonaws.com" { +	type forward; +	forwarders { 2001:67c:29f4::51; }; +}; +zone "prod-avatar-origin-1061716926.us-east-1.elb.amazonaws.com" { +	type forward; +	forwarders { 2001:67c:29f4::51; }; +}; +zone "prod-friends-origin-1309711156.us-east-1.elb.amazonaws.com" { +	type forward; +	forwarders { 2001:67c:29f4::51; }; +}; +zone "prod-loginregistration-origin-1419075154.us-east-1.elb.amazonaws.com" { +	type forward; +	forwarders { 2001:67c:29f4::51; }; +}; +zone "static.ea.com.edgesuite.net" { +	type forward; +	forwarders { 2001:67c:29f4::51; }; +}; +zone "a1560.g.akamai.net" { +	type forward; +	forwarders { 2001:67c:29f4::51; }; +}; + diff --git a/bind/master/tg13.gathering.org.zone b/bind/master/tg13.gathering.org.zone new file mode 100644 index 0000000..af2255d --- /dev/null +++ b/bind/master/tg13.gathering.org.zone @@ -0,0 +1,91 @@ +$TTL 3600 +@	IN	SOA	winix.tg13.gathering.org.	abuse.gathering.org. ( +			2013032901; serial +			3600 ; refresh  +			1800 ; retry +			608400 ; expire +			3600 ) ; minimum and default TTL + +		IN	NS	ns1.tg13.gathering.org. +		IN	NS	ns2.tg13.gathering.org. + +ns1		IN	A	151.216.126.2 +ns1		IN	AAAA	2a02:ed02:126::2 +ns2		IN	A	151.216.125.2 +ns2		IN	AAAA	2a02:ed02:125::2 +winix		IN	A	151.216.126.2 +winix		IN	AAAA	2a02:ed02:126::2 +davetele	IN	A	151.216.126.4 +davetele	IN	AAAA	2a02:ed02:126::4 +tress90		IN	A	151.216.125.2 +tress90		IN	AAAA	2a02:ed02:125::2 +upstart		IN	A	151.216.125.3 +upstart		IN	AAAA	2a02:ed02:125::3 + +; Generated by make-all-config.sh on the bootstrapping/nms server. +; Will not be overwritten unless it is missing ;) + +krosus		IN	A	151.216.125.4 +krosus		IN	AAAA	2a02:ed02:125::4 +flexus		IN	A	151.216.125.5 +flexus		IN	AAAA	2a02:ed02:125::5 +wannabe		IN	A	151.216.125.6 +wannabe		IN	AAAA	2a02:ed02:125::6 +altinn		IN	A	151.216.125.7 +altinn		IN	AAAA	2a02:ed02:125::7 +au2sys		IN	A	151.216.125.8 +au2sys		IN	AAAA	2a02:ed02:125::8 + +kliniskarbeidsflate	IN	A	151.216.125.9 +kliniskarbeidsflate	IN	AAAA	2a02:ed02:125::9 +; Enkoder hos EBU i OB-bussen +politietno		IN	A	151.216.114.254 +politietno		IN	AAAA	2a02:ed02:114::254 + + +golf		IN	A	151.216.125.12 +golf		IN	AAAA	2a02:ed02:125::12 +tgjump		IN	A	151.216.125.14 +tgjump		IN	AAAA	2a02:ed02:125::14 +optimus		IN	A	151.216.125.15 +optimus		IN	AAAA	2a02:ed02:125::15 +mse		IN	A	151.216.125.16 +mse		IN	AAAA	2a02:ed02:125::16 +avinor1		IN	A	151.216.125.21 +avinor2		IN	A	151.216.125.22 +bigbrother	IN	A	151.216.125.17 + +nam3		IN	A	151.216.126.3 +nam3		IN	AAAA	2a02:ed02:126::3 + +stats		IN	CNAME	tgjump.tg13.gathering.org. + +stillcam	IN	A	212.62.229.140 +stillcam	IN	AAAA	2001:470:1f0b:c1::1 + +fuglecam	IN	A	151.216.99.254 +fuglecam	IN	AAAA	2a02:ed02:992:0:922b:34ff:fe5c:49d4 + +; Printer for Content +oi.content	IN	AAAA	2a02:ed02:992:0:21b:a9ff:fed5:1f18 + +; Services +tech		IN	CNAME   flexus.tg13.gathering.org. +nms		IN	CNAME	flexus.tg13.gathering.org. +nms-public	IN	CNAME	flexus.tg13.gathering.org. +stream		IN	CNAME	krosus.tg13.gathering.org. +smtp		IN	CNAME	tress90.tg13.gathering.org. + +; wuhuWTF +compo		IN	A	151.216.55.54 +compo		IN	AAAA	2A02:ED02:55:0:5054:FF:FEF4:FA3C +wuhu-admin	IN	CNAME	compo.tg13.gathering.org. +tgpc		IN	A	151.216.55.61 +tgpc		IN	AAAA	2A02:ED02:55:0:5054:FF:FEB7:4598 +hack		IN	A	151.216.55.56 + +; tng +tng		IN	CNAME	altinn.tg13.gathering.org. + +; server lek +nav		IN	CNAME	altinn.tg13.gathering.org. diff --git a/bind/master/zones.rfc1918 b/bind/master/zones.rfc1918 new file mode 100644 index 0000000..03b5546 --- /dev/null +++ b/bind/master/zones.rfc1918 @@ -0,0 +1,20 @@ +zone "10.in-addr.arpa"      { type master; file "/etc/bind/db.empty"; }; +  +zone "16.172.in-addr.arpa"  { type master; file "/etc/bind/db.empty"; }; +zone "17.172.in-addr.arpa"  { type master; file "/etc/bind/db.empty"; }; +zone "18.172.in-addr.arpa"  { type master; file "/etc/bind/db.empty"; }; +zone "19.172.in-addr.arpa"  { type master; file "/etc/bind/db.empty"; }; +zone "20.172.in-addr.arpa"  { type master; file "/etc/bind/db.empty"; }; +zone "21.172.in-addr.arpa"  { type master; file "/etc/bind/db.empty"; }; +zone "22.172.in-addr.arpa"  { type master; file "/etc/bind/db.empty"; }; +zone "23.172.in-addr.arpa"  { type master; file "/etc/bind/db.empty"; }; +zone "24.172.in-addr.arpa"  { type master; file "/etc/bind/db.empty"; }; +zone "25.172.in-addr.arpa"  { type master; file "/etc/bind/db.empty"; }; +zone "26.172.in-addr.arpa"  { type master; file "/etc/bind/db.empty"; }; +zone "27.172.in-addr.arpa"  { type master; file "/etc/bind/db.empty"; }; +zone "28.172.in-addr.arpa"  { type master; file "/etc/bind/db.empty"; }; +zone "29.172.in-addr.arpa"  { type master; file "/etc/bind/db.empty"; }; +zone "30.172.in-addr.arpa"  { type master; file "/etc/bind/db.empty"; }; +zone "31.172.in-addr.arpa"  { type master; file "/etc/bind/db.empty"; }; + +zone "168.192.in-addr.arpa" { type master; file "/etc/bind/db.empty"; }; diff --git a/bind/slave/bind.keys b/bind/slave/bind.keys new file mode 100644 index 0000000..b003c53 --- /dev/null +++ b/bind/slave/bind.keys @@ -0,0 +1,49 @@ +/* $Id: bind.keys,v 1.5.42.2 2011-01-04 19:14:48 each Exp $ */ +# The bind.keys file is used to override built-in DNSSEC trust anchors +# which are included as part of BIND 9.  As of the current release (BIND +# 9.7), the only trust anchor it sets is the one for the ISC DNSSEC +# Lookaside Validation zone ("dlv.isc.org").  Trust anchors for any other +# zones MUST be configured elsewhere; if they are configured here, they +# will not be recognized or used by named. +# +# This file also contains a copy of the trust anchor for the DNS root zone +# (".").  However, named does not use it; it is provided here for +# informational purposes only.  To switch on DNSSEC validation at the +# root, the root key below can be copied into named.conf. +# +# The built-in DLV trust anchor in this file is used directly by named. +# However, it is not activated unless specifically switched on.  To use +# the DLV key, set "dnssec-lookaside auto;" in the named.conf options. +# Without this option being set, the key in this file is ignored. +# +# This file is NOT expected to be user-configured. +# +# These keys are current as of January 2011.  If any key fails to +# initialize correctly, it may have expired.  In that event you should +# replace this file with a current version.  The latest version of +# bind.keys can always be obtained from ISC at https://www.isc.org/bind-keys. + +managed-keys { +	# ISC DLV: See https://www.isc.org/solutions/dlv for details. +        # NOTE: This key is activated by setting "dnssec-lookaside auto;" +        # in named.conf. +	dlv.isc.org. initial-key 257 3 5 "BEAAAAPHMu/5onzrEE7z1egmhg/WPO0+juoZrW3euWEn4MxDCE1+lLy2 +		brhQv5rN32RKtMzX6Mj70jdzeND4XknW58dnJNPCxn8+jAGl2FZLK8t+ +		1uq4W+nnA3qO2+DL+k6BD4mewMLbIYFwe0PG73Te9fZ2kJb56dhgMde5 +		ymX4BI/oQ+cAK50/xvJv00Frf8kw6ucMTwFlgPe+jnGxPPEmHAte/URk +		Y62ZfkLoBAADLHQ9IrS2tryAe7mbBZVcOwIeU/Rw/mRx/vwwMCTgNboM +		QKtUdvNXDrYJDSHZws3xiRXF1Rf+al9UmZfSav/4NWLKjHzpT59k/VSt +		TDN0YUuWrBNh"; + +	# ROOT KEY: See https://data.iana.org/root-anchors/root-anchors.xml +	# for current trust anchor information. +        # NOTE: This key is activated by setting "dnssec-validation auto;" +        # in named.conf. +	. initial-key 257 3 8 "AwEAAagAIKlVZrpC6Ia7gEzahOR+9W29euxhJhVVLOyQbSEW0O8gcCjF +		FVQUTf6v58fLjwBd0YI0EzrAcQqBGCzh/RStIoO8g0NfnfL2MTJRkxoX +		bfDaUeVPQuYEhg37NZWAJQ9VnMVDxP/VHL496M/QZxkjf5/Efucp2gaD +		X6RS6CXpoY68LsvPVjR0ZSwzz1apAzvN9dlzEheX7ICJBBtuA6G3LQpz +		W5hOA2hzCTMjJPJ8LbqF6dsV6DoBQzgul0sGIcGOYl7OyQdXfZ57relS +		Qageu+ipAdTTJ25AsRTAoub8ONGcLmqrAmRLKBP1dfwhYB4N7knNnulq +		QxA+Uk1ihz0="; +}; diff --git a/bind/slave/conf-slave/ap-dist0.conf b/bind/slave/conf-slave/ap-dist0.conf new file mode 100644 index 0000000..6cb150c --- /dev/null +++ b/bind/slave/conf-slave/ap-dist0.conf @@ -0,0 +1,7 @@ +zone "ap-dist0.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/ap-dist0.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/ap-dist1.conf b/bind/slave/conf-slave/ap-dist1.conf new file mode 100644 index 0000000..657aaac --- /dev/null +++ b/bind/slave/conf-slave/ap-dist1.conf @@ -0,0 +1,7 @@ +zone "ap-dist1.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/ap-dist1.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/ap-dist2.conf b/bind/slave/conf-slave/ap-dist2.conf new file mode 100644 index 0000000..96ac51e --- /dev/null +++ b/bind/slave/conf-slave/ap-dist2.conf @@ -0,0 +1,7 @@ +zone "ap-dist2.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/ap-dist2.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/ap-dist3.conf b/bind/slave/conf-slave/ap-dist3.conf new file mode 100644 index 0000000..1807f13 --- /dev/null +++ b/bind/slave/conf-slave/ap-dist3.conf @@ -0,0 +1,7 @@ +zone "ap-dist3.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/ap-dist3.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/ap-dist4.conf b/bind/slave/conf-slave/ap-dist4.conf new file mode 100644 index 0000000..0cebd7f --- /dev/null +++ b/bind/slave/conf-slave/ap-dist4.conf @@ -0,0 +1,7 @@ +zone "ap-dist4.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/ap-dist4.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/care.conf b/bind/slave/conf-slave/care.conf new file mode 100644 index 0000000..c42c48c --- /dev/null +++ b/bind/slave/conf-slave/care.conf @@ -0,0 +1,7 @@ +zone "care.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/care.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/chillout.conf b/bind/slave/conf-slave/chillout.conf new file mode 100644 index 0000000..5cd6569 --- /dev/null +++ b/bind/slave/conf-slave/chillout.conf @@ -0,0 +1,7 @@ +zone "chillout.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/chillout.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/creativia.conf b/bind/slave/conf-slave/creativia.conf new file mode 100644 index 0000000..668bc7d --- /dev/null +++ b/bind/slave/conf-slave/creativia.conf @@ -0,0 +1,7 @@ +zone "creativia.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/creativia.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/crew1.conf b/bind/slave/conf-slave/crew1.conf new file mode 100644 index 0000000..d30580a --- /dev/null +++ b/bind/slave/conf-slave/crew1.conf @@ -0,0 +1,7 @@ +zone "crew1.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/crew1.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/crew2.conf b/bind/slave/conf-slave/crew2.conf new file mode 100644 index 0000000..dc08880 --- /dev/null +++ b/bind/slave/conf-slave/crew2.conf @@ -0,0 +1,7 @@ +zone "crew2.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/crew2.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/crew3.conf b/bind/slave/conf-slave/crew3.conf new file mode 100644 index 0000000..456a90b --- /dev/null +++ b/bind/slave/conf-slave/crew3.conf @@ -0,0 +1,7 @@ +zone "crew3.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/crew3.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/crew4.conf b/bind/slave/conf-slave/crew4.conf new file mode 100644 index 0000000..56ad6c0 --- /dev/null +++ b/bind/slave/conf-slave/crew4.conf @@ -0,0 +1,7 @@ +zone "crew4.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/crew4.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/crew5.conf b/bind/slave/conf-slave/crew5.conf new file mode 100644 index 0000000..b562849 --- /dev/null +++ b/bind/slave/conf-slave/crew5.conf @@ -0,0 +1,7 @@ +zone "crew5.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/crew5.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/crew6.conf b/bind/slave/conf-slave/crew6.conf new file mode 100644 index 0000000..6bf3b9f --- /dev/null +++ b/bind/slave/conf-slave/crew6.conf @@ -0,0 +1,7 @@ +zone "crew6.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/crew6.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/defektraid.conf b/bind/slave/conf-slave/defektraid.conf new file mode 100644 index 0000000..fee8190 --- /dev/null +++ b/bind/slave/conf-slave/defektraid.conf @@ -0,0 +1,7 @@ +zone "defektraid.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/defektraid.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e1-3.conf b/bind/slave/conf-slave/e1-3.conf new file mode 100644 index 0000000..b32ca6c --- /dev/null +++ b/bind/slave/conf-slave/e1-3.conf @@ -0,0 +1,7 @@ +zone "e1-3.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e1-3.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e1-4.conf b/bind/slave/conf-slave/e1-4.conf new file mode 100644 index 0000000..f24e839 --- /dev/null +++ b/bind/slave/conf-slave/e1-4.conf @@ -0,0 +1,7 @@ +zone "e1-4.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e1-4.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e11-1.conf b/bind/slave/conf-slave/e11-1.conf new file mode 100644 index 0000000..2a4f1a1 --- /dev/null +++ b/bind/slave/conf-slave/e11-1.conf @@ -0,0 +1,7 @@ +zone "e11-1.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e11-1.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e11-2.conf b/bind/slave/conf-slave/e11-2.conf new file mode 100644 index 0000000..0872ce0 --- /dev/null +++ b/bind/slave/conf-slave/e11-2.conf @@ -0,0 +1,7 @@ +zone "e11-2.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e11-2.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e11-3.conf b/bind/slave/conf-slave/e11-3.conf new file mode 100644 index 0000000..a88eff2 --- /dev/null +++ b/bind/slave/conf-slave/e11-3.conf @@ -0,0 +1,7 @@ +zone "e11-3.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e11-3.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e11-4.conf b/bind/slave/conf-slave/e11-4.conf new file mode 100644 index 0000000..8ab56ee --- /dev/null +++ b/bind/slave/conf-slave/e11-4.conf @@ -0,0 +1,7 @@ +zone "e11-4.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e11-4.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e13-1.conf b/bind/slave/conf-slave/e13-1.conf new file mode 100644 index 0000000..089e887 --- /dev/null +++ b/bind/slave/conf-slave/e13-1.conf @@ -0,0 +1,7 @@ +zone "e13-1.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e13-1.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e13-2.conf b/bind/slave/conf-slave/e13-2.conf new file mode 100644 index 0000000..e766fc3 --- /dev/null +++ b/bind/slave/conf-slave/e13-2.conf @@ -0,0 +1,7 @@ +zone "e13-2.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e13-2.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e13-3.conf b/bind/slave/conf-slave/e13-3.conf new file mode 100644 index 0000000..e8f71e0 --- /dev/null +++ b/bind/slave/conf-slave/e13-3.conf @@ -0,0 +1,7 @@ +zone "e13-3.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e13-3.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e13-4.conf b/bind/slave/conf-slave/e13-4.conf new file mode 100644 index 0000000..268659b --- /dev/null +++ b/bind/slave/conf-slave/e13-4.conf @@ -0,0 +1,7 @@ +zone "e13-4.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e13-4.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e15-1.conf b/bind/slave/conf-slave/e15-1.conf new file mode 100644 index 0000000..1259ee2 --- /dev/null +++ b/bind/slave/conf-slave/e15-1.conf @@ -0,0 +1,7 @@ +zone "e15-1.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e15-1.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e15-2.conf b/bind/slave/conf-slave/e15-2.conf new file mode 100644 index 0000000..fa1762a --- /dev/null +++ b/bind/slave/conf-slave/e15-2.conf @@ -0,0 +1,7 @@ +zone "e15-2.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e15-2.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e15-3.conf b/bind/slave/conf-slave/e15-3.conf new file mode 100644 index 0000000..3c57263 --- /dev/null +++ b/bind/slave/conf-slave/e15-3.conf @@ -0,0 +1,7 @@ +zone "e15-3.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e15-3.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e15-4.conf b/bind/slave/conf-slave/e15-4.conf new file mode 100644 index 0000000..f91bf19 --- /dev/null +++ b/bind/slave/conf-slave/e15-4.conf @@ -0,0 +1,7 @@ +zone "e15-4.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e15-4.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e17-1.conf b/bind/slave/conf-slave/e17-1.conf new file mode 100644 index 0000000..52f7c74 --- /dev/null +++ b/bind/slave/conf-slave/e17-1.conf @@ -0,0 +1,7 @@ +zone "e17-1.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e17-1.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e17-2.conf b/bind/slave/conf-slave/e17-2.conf new file mode 100644 index 0000000..c1c99e7 --- /dev/null +++ b/bind/slave/conf-slave/e17-2.conf @@ -0,0 +1,7 @@ +zone "e17-2.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e17-2.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e17-3.conf b/bind/slave/conf-slave/e17-3.conf new file mode 100644 index 0000000..f80c69a --- /dev/null +++ b/bind/slave/conf-slave/e17-3.conf @@ -0,0 +1,7 @@ +zone "e17-3.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e17-3.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e17-4.conf b/bind/slave/conf-slave/e17-4.conf new file mode 100644 index 0000000..0494bce --- /dev/null +++ b/bind/slave/conf-slave/e17-4.conf @@ -0,0 +1,7 @@ +zone "e17-4.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e17-4.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e19-1.conf b/bind/slave/conf-slave/e19-1.conf new file mode 100644 index 0000000..d5ba505 --- /dev/null +++ b/bind/slave/conf-slave/e19-1.conf @@ -0,0 +1,7 @@ +zone "e19-1.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e19-1.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e19-2.conf b/bind/slave/conf-slave/e19-2.conf new file mode 100644 index 0000000..515ddf8 --- /dev/null +++ b/bind/slave/conf-slave/e19-2.conf @@ -0,0 +1,7 @@ +zone "e19-2.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e19-2.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e19-3.conf b/bind/slave/conf-slave/e19-3.conf new file mode 100644 index 0000000..b09d915 --- /dev/null +++ b/bind/slave/conf-slave/e19-3.conf @@ -0,0 +1,7 @@ +zone "e19-3.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e19-3.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e19-4.conf b/bind/slave/conf-slave/e19-4.conf new file mode 100644 index 0000000..df1c48b --- /dev/null +++ b/bind/slave/conf-slave/e19-4.conf @@ -0,0 +1,7 @@ +zone "e19-4.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e19-4.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e21-1.conf b/bind/slave/conf-slave/e21-1.conf new file mode 100644 index 0000000..21eb664 --- /dev/null +++ b/bind/slave/conf-slave/e21-1.conf @@ -0,0 +1,7 @@ +zone "e21-1.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e21-1.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e21-2.conf b/bind/slave/conf-slave/e21-2.conf new file mode 100644 index 0000000..4278ba6 --- /dev/null +++ b/bind/slave/conf-slave/e21-2.conf @@ -0,0 +1,7 @@ +zone "e21-2.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e21-2.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e21-3.conf b/bind/slave/conf-slave/e21-3.conf new file mode 100644 index 0000000..85e116e --- /dev/null +++ b/bind/slave/conf-slave/e21-3.conf @@ -0,0 +1,7 @@ +zone "e21-3.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e21-3.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e21-4.conf b/bind/slave/conf-slave/e21-4.conf new file mode 100644 index 0000000..1a5c247 --- /dev/null +++ b/bind/slave/conf-slave/e21-4.conf @@ -0,0 +1,7 @@ +zone "e21-4.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e21-4.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e23-1.conf b/bind/slave/conf-slave/e23-1.conf new file mode 100644 index 0000000..7a6d56c --- /dev/null +++ b/bind/slave/conf-slave/e23-1.conf @@ -0,0 +1,7 @@ +zone "e23-1.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e23-1.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e23-2.conf b/bind/slave/conf-slave/e23-2.conf new file mode 100644 index 0000000..a98f4e7 --- /dev/null +++ b/bind/slave/conf-slave/e23-2.conf @@ -0,0 +1,7 @@ +zone "e23-2.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e23-2.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e23-3.conf b/bind/slave/conf-slave/e23-3.conf new file mode 100644 index 0000000..391dd08 --- /dev/null +++ b/bind/slave/conf-slave/e23-3.conf @@ -0,0 +1,7 @@ +zone "e23-3.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e23-3.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e23-4.conf b/bind/slave/conf-slave/e23-4.conf new file mode 100644 index 0000000..311fa59 --- /dev/null +++ b/bind/slave/conf-slave/e23-4.conf @@ -0,0 +1,7 @@ +zone "e23-4.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e23-4.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e25-1.conf b/bind/slave/conf-slave/e25-1.conf new file mode 100644 index 0000000..ff327b0 --- /dev/null +++ b/bind/slave/conf-slave/e25-1.conf @@ -0,0 +1,7 @@ +zone "e25-1.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e25-1.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e25-2.conf b/bind/slave/conf-slave/e25-2.conf new file mode 100644 index 0000000..9d77158 --- /dev/null +++ b/bind/slave/conf-slave/e25-2.conf @@ -0,0 +1,7 @@ +zone "e25-2.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e25-2.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e25-3.conf b/bind/slave/conf-slave/e25-3.conf new file mode 100644 index 0000000..805de20 --- /dev/null +++ b/bind/slave/conf-slave/e25-3.conf @@ -0,0 +1,7 @@ +zone "e25-3.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e25-3.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e25-4.conf b/bind/slave/conf-slave/e25-4.conf new file mode 100644 index 0000000..9b2c652 --- /dev/null +++ b/bind/slave/conf-slave/e25-4.conf @@ -0,0 +1,7 @@ +zone "e25-4.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e25-4.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e27-1.conf b/bind/slave/conf-slave/e27-1.conf new file mode 100644 index 0000000..72f0ea7 --- /dev/null +++ b/bind/slave/conf-slave/e27-1.conf @@ -0,0 +1,7 @@ +zone "e27-1.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e27-1.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e27-2.conf b/bind/slave/conf-slave/e27-2.conf new file mode 100644 index 0000000..a798852 --- /dev/null +++ b/bind/slave/conf-slave/e27-2.conf @@ -0,0 +1,7 @@ +zone "e27-2.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e27-2.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e29-1.conf b/bind/slave/conf-slave/e29-1.conf new file mode 100644 index 0000000..20eb035 --- /dev/null +++ b/bind/slave/conf-slave/e29-1.conf @@ -0,0 +1,7 @@ +zone "e29-1.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e29-1.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e29-2.conf b/bind/slave/conf-slave/e29-2.conf new file mode 100644 index 0000000..d7cb7c7 --- /dev/null +++ b/bind/slave/conf-slave/e29-2.conf @@ -0,0 +1,7 @@ +zone "e29-2.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e29-2.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e3-3.conf b/bind/slave/conf-slave/e3-3.conf new file mode 100644 index 0000000..960faa0 --- /dev/null +++ b/bind/slave/conf-slave/e3-3.conf @@ -0,0 +1,7 @@ +zone "e3-3.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e3-3.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e3-4.conf b/bind/slave/conf-slave/e3-4.conf new file mode 100644 index 0000000..6dd6e8e --- /dev/null +++ b/bind/slave/conf-slave/e3-4.conf @@ -0,0 +1,7 @@ +zone "e3-4.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e3-4.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e31-1.conf b/bind/slave/conf-slave/e31-1.conf new file mode 100644 index 0000000..5706910 --- /dev/null +++ b/bind/slave/conf-slave/e31-1.conf @@ -0,0 +1,7 @@ +zone "e31-1.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e31-1.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e31-2.conf b/bind/slave/conf-slave/e31-2.conf new file mode 100644 index 0000000..013aad3 --- /dev/null +++ b/bind/slave/conf-slave/e31-2.conf @@ -0,0 +1,7 @@ +zone "e31-2.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e31-2.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e33-1.conf b/bind/slave/conf-slave/e33-1.conf new file mode 100644 index 0000000..f99f582 --- /dev/null +++ b/bind/slave/conf-slave/e33-1.conf @@ -0,0 +1,7 @@ +zone "e33-1.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e33-1.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e33-2.conf b/bind/slave/conf-slave/e33-2.conf new file mode 100644 index 0000000..f0aa378 --- /dev/null +++ b/bind/slave/conf-slave/e33-2.conf @@ -0,0 +1,7 @@ +zone "e33-2.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e33-2.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e35-1.conf b/bind/slave/conf-slave/e35-1.conf new file mode 100644 index 0000000..4a26cfe --- /dev/null +++ b/bind/slave/conf-slave/e35-1.conf @@ -0,0 +1,7 @@ +zone "e35-1.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e35-1.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e35-2.conf b/bind/slave/conf-slave/e35-2.conf new file mode 100644 index 0000000..b46070c --- /dev/null +++ b/bind/slave/conf-slave/e35-2.conf @@ -0,0 +1,7 @@ +zone "e35-2.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e35-2.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e37-1.conf b/bind/slave/conf-slave/e37-1.conf new file mode 100644 index 0000000..1cf7c8b --- /dev/null +++ b/bind/slave/conf-slave/e37-1.conf @@ -0,0 +1,7 @@ +zone "e37-1.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e37-1.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e37-2.conf b/bind/slave/conf-slave/e37-2.conf new file mode 100644 index 0000000..9f69ae7 --- /dev/null +++ b/bind/slave/conf-slave/e37-2.conf @@ -0,0 +1,7 @@ +zone "e37-2.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e37-2.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e39-1.conf b/bind/slave/conf-slave/e39-1.conf new file mode 100644 index 0000000..c05033c --- /dev/null +++ b/bind/slave/conf-slave/e39-1.conf @@ -0,0 +1,7 @@ +zone "e39-1.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e39-1.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e39-2.conf b/bind/slave/conf-slave/e39-2.conf new file mode 100644 index 0000000..047959c --- /dev/null +++ b/bind/slave/conf-slave/e39-2.conf @@ -0,0 +1,7 @@ +zone "e39-2.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e39-2.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e41-1.conf b/bind/slave/conf-slave/e41-1.conf new file mode 100644 index 0000000..fea60b1 --- /dev/null +++ b/bind/slave/conf-slave/e41-1.conf @@ -0,0 +1,7 @@ +zone "e41-1.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e41-1.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e41-2.conf b/bind/slave/conf-slave/e41-2.conf new file mode 100644 index 0000000..9da06c5 --- /dev/null +++ b/bind/slave/conf-slave/e41-2.conf @@ -0,0 +1,7 @@ +zone "e41-2.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e41-2.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e43-1.conf b/bind/slave/conf-slave/e43-1.conf new file mode 100644 index 0000000..82f9ada --- /dev/null +++ b/bind/slave/conf-slave/e43-1.conf @@ -0,0 +1,7 @@ +zone "e43-1.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e43-1.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e43-2.conf b/bind/slave/conf-slave/e43-2.conf new file mode 100644 index 0000000..59aaae2 --- /dev/null +++ b/bind/slave/conf-slave/e43-2.conf @@ -0,0 +1,7 @@ +zone "e43-2.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e43-2.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e43-3.conf b/bind/slave/conf-slave/e43-3.conf new file mode 100644 index 0000000..bb30b66 --- /dev/null +++ b/bind/slave/conf-slave/e43-3.conf @@ -0,0 +1,7 @@ +zone "e43-3.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e43-3.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e43-4.conf b/bind/slave/conf-slave/e43-4.conf new file mode 100644 index 0000000..b46d34c --- /dev/null +++ b/bind/slave/conf-slave/e43-4.conf @@ -0,0 +1,7 @@ +zone "e43-4.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e43-4.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e45-1.conf b/bind/slave/conf-slave/e45-1.conf new file mode 100644 index 0000000..ef06167 --- /dev/null +++ b/bind/slave/conf-slave/e45-1.conf @@ -0,0 +1,7 @@ +zone "e45-1.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e45-1.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e45-2.conf b/bind/slave/conf-slave/e45-2.conf new file mode 100644 index 0000000..c19e209 --- /dev/null +++ b/bind/slave/conf-slave/e45-2.conf @@ -0,0 +1,7 @@ +zone "e45-2.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e45-2.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e45-3.conf b/bind/slave/conf-slave/e45-3.conf new file mode 100644 index 0000000..66378c7 --- /dev/null +++ b/bind/slave/conf-slave/e45-3.conf @@ -0,0 +1,7 @@ +zone "e45-3.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e45-3.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e45-4.conf b/bind/slave/conf-slave/e45-4.conf new file mode 100644 index 0000000..92f8dfc --- /dev/null +++ b/bind/slave/conf-slave/e45-4.conf @@ -0,0 +1,7 @@ +zone "e45-4.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e45-4.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e47-1.conf b/bind/slave/conf-slave/e47-1.conf new file mode 100644 index 0000000..6562fda --- /dev/null +++ b/bind/slave/conf-slave/e47-1.conf @@ -0,0 +1,7 @@ +zone "e47-1.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e47-1.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e47-2.conf b/bind/slave/conf-slave/e47-2.conf new file mode 100644 index 0000000..080c195 --- /dev/null +++ b/bind/slave/conf-slave/e47-2.conf @@ -0,0 +1,7 @@ +zone "e47-2.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e47-2.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e47-3.conf b/bind/slave/conf-slave/e47-3.conf new file mode 100644 index 0000000..a144fe0 --- /dev/null +++ b/bind/slave/conf-slave/e47-3.conf @@ -0,0 +1,7 @@ +zone "e47-3.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e47-3.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e47-4.conf b/bind/slave/conf-slave/e47-4.conf new file mode 100644 index 0000000..af177fb --- /dev/null +++ b/bind/slave/conf-slave/e47-4.conf @@ -0,0 +1,7 @@ +zone "e47-4.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e47-4.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e49-1.conf b/bind/slave/conf-slave/e49-1.conf new file mode 100644 index 0000000..7ceb877 --- /dev/null +++ b/bind/slave/conf-slave/e49-1.conf @@ -0,0 +1,7 @@ +zone "e49-1.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e49-1.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e49-2.conf b/bind/slave/conf-slave/e49-2.conf new file mode 100644 index 0000000..9757070 --- /dev/null +++ b/bind/slave/conf-slave/e49-2.conf @@ -0,0 +1,7 @@ +zone "e49-2.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e49-2.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e49-3.conf b/bind/slave/conf-slave/e49-3.conf new file mode 100644 index 0000000..04fec88 --- /dev/null +++ b/bind/slave/conf-slave/e49-3.conf @@ -0,0 +1,7 @@ +zone "e49-3.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e49-3.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e49-4.conf b/bind/slave/conf-slave/e49-4.conf new file mode 100644 index 0000000..ced68b7 --- /dev/null +++ b/bind/slave/conf-slave/e49-4.conf @@ -0,0 +1,7 @@ +zone "e49-4.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e49-4.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e5-3.conf b/bind/slave/conf-slave/e5-3.conf new file mode 100644 index 0000000..22c9f01 --- /dev/null +++ b/bind/slave/conf-slave/e5-3.conf @@ -0,0 +1,7 @@ +zone "e5-3.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e5-3.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e5-4.conf b/bind/slave/conf-slave/e5-4.conf new file mode 100644 index 0000000..088380c --- /dev/null +++ b/bind/slave/conf-slave/e5-4.conf @@ -0,0 +1,7 @@ +zone "e5-4.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e5-4.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e51-1.conf b/bind/slave/conf-slave/e51-1.conf new file mode 100644 index 0000000..ba6f76f --- /dev/null +++ b/bind/slave/conf-slave/e51-1.conf @@ -0,0 +1,7 @@ +zone "e51-1.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e51-1.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e51-2.conf b/bind/slave/conf-slave/e51-2.conf new file mode 100644 index 0000000..9895e5f --- /dev/null +++ b/bind/slave/conf-slave/e51-2.conf @@ -0,0 +1,7 @@ +zone "e51-2.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e51-2.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e51-3.conf b/bind/slave/conf-slave/e51-3.conf new file mode 100644 index 0000000..50c249b --- /dev/null +++ b/bind/slave/conf-slave/e51-3.conf @@ -0,0 +1,7 @@ +zone "e51-3.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e51-3.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e51-4.conf b/bind/slave/conf-slave/e51-4.conf new file mode 100644 index 0000000..2598407 --- /dev/null +++ b/bind/slave/conf-slave/e51-4.conf @@ -0,0 +1,7 @@ +zone "e51-4.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e51-4.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e53-1.conf b/bind/slave/conf-slave/e53-1.conf new file mode 100644 index 0000000..2b88c48 --- /dev/null +++ b/bind/slave/conf-slave/e53-1.conf @@ -0,0 +1,7 @@ +zone "e53-1.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e53-1.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e53-2.conf b/bind/slave/conf-slave/e53-2.conf new file mode 100644 index 0000000..b93f388 --- /dev/null +++ b/bind/slave/conf-slave/e53-2.conf @@ -0,0 +1,7 @@ +zone "e53-2.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e53-2.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e53-3.conf b/bind/slave/conf-slave/e53-3.conf new file mode 100644 index 0000000..efb8a17 --- /dev/null +++ b/bind/slave/conf-slave/e53-3.conf @@ -0,0 +1,7 @@ +zone "e53-3.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e53-3.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e53-4.conf b/bind/slave/conf-slave/e53-4.conf new file mode 100644 index 0000000..74e65fa --- /dev/null +++ b/bind/slave/conf-slave/e53-4.conf @@ -0,0 +1,7 @@ +zone "e53-4.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e53-4.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e55-1.conf b/bind/slave/conf-slave/e55-1.conf new file mode 100644 index 0000000..3d5e7f8 --- /dev/null +++ b/bind/slave/conf-slave/e55-1.conf @@ -0,0 +1,7 @@ +zone "e55-1.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e55-1.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e55-2.conf b/bind/slave/conf-slave/e55-2.conf new file mode 100644 index 0000000..815138f --- /dev/null +++ b/bind/slave/conf-slave/e55-2.conf @@ -0,0 +1,7 @@ +zone "e55-2.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e55-2.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e55-3.conf b/bind/slave/conf-slave/e55-3.conf new file mode 100644 index 0000000..5da6c91 --- /dev/null +++ b/bind/slave/conf-slave/e55-3.conf @@ -0,0 +1,7 @@ +zone "e55-3.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e55-3.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e55-4.conf b/bind/slave/conf-slave/e55-4.conf new file mode 100644 index 0000000..bc37351 --- /dev/null +++ b/bind/slave/conf-slave/e55-4.conf @@ -0,0 +1,7 @@ +zone "e55-4.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e55-4.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e57-1.conf b/bind/slave/conf-slave/e57-1.conf new file mode 100644 index 0000000..33ef734 --- /dev/null +++ b/bind/slave/conf-slave/e57-1.conf @@ -0,0 +1,7 @@ +zone "e57-1.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e57-1.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e57-2.conf b/bind/slave/conf-slave/e57-2.conf new file mode 100644 index 0000000..e175561 --- /dev/null +++ b/bind/slave/conf-slave/e57-2.conf @@ -0,0 +1,7 @@ +zone "e57-2.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e57-2.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e57-3.conf b/bind/slave/conf-slave/e57-3.conf new file mode 100644 index 0000000..19f1456 --- /dev/null +++ b/bind/slave/conf-slave/e57-3.conf @@ -0,0 +1,7 @@ +zone "e57-3.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e57-3.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e57-4.conf b/bind/slave/conf-slave/e57-4.conf new file mode 100644 index 0000000..7624646 --- /dev/null +++ b/bind/slave/conf-slave/e57-4.conf @@ -0,0 +1,7 @@ +zone "e57-4.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e57-4.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e59-1.conf b/bind/slave/conf-slave/e59-1.conf new file mode 100644 index 0000000..970d5ca --- /dev/null +++ b/bind/slave/conf-slave/e59-1.conf @@ -0,0 +1,7 @@ +zone "e59-1.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e59-1.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e59-2.conf b/bind/slave/conf-slave/e59-2.conf new file mode 100644 index 0000000..c797ef8 --- /dev/null +++ b/bind/slave/conf-slave/e59-2.conf @@ -0,0 +1,7 @@ +zone "e59-2.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e59-2.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e59-3.conf b/bind/slave/conf-slave/e59-3.conf new file mode 100644 index 0000000..36b17e5 --- /dev/null +++ b/bind/slave/conf-slave/e59-3.conf @@ -0,0 +1,7 @@ +zone "e59-3.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e59-3.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e59-4.conf b/bind/slave/conf-slave/e59-4.conf new file mode 100644 index 0000000..85c005a --- /dev/null +++ b/bind/slave/conf-slave/e59-4.conf @@ -0,0 +1,7 @@ +zone "e59-4.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e59-4.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e61-1.conf b/bind/slave/conf-slave/e61-1.conf new file mode 100644 index 0000000..982baee --- /dev/null +++ b/bind/slave/conf-slave/e61-1.conf @@ -0,0 +1,7 @@ +zone "e61-1.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e61-1.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e61-2.conf b/bind/slave/conf-slave/e61-2.conf new file mode 100644 index 0000000..6d59df1 --- /dev/null +++ b/bind/slave/conf-slave/e61-2.conf @@ -0,0 +1,7 @@ +zone "e61-2.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e61-2.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e61-3.conf b/bind/slave/conf-slave/e61-3.conf new file mode 100644 index 0000000..54c958a --- /dev/null +++ b/bind/slave/conf-slave/e61-3.conf @@ -0,0 +1,7 @@ +zone "e61-3.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e61-3.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e61-4.conf b/bind/slave/conf-slave/e61-4.conf new file mode 100644 index 0000000..b3d2da7 --- /dev/null +++ b/bind/slave/conf-slave/e61-4.conf @@ -0,0 +1,7 @@ +zone "e61-4.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e61-4.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e63-1.conf b/bind/slave/conf-slave/e63-1.conf new file mode 100644 index 0000000..67708e9 --- /dev/null +++ b/bind/slave/conf-slave/e63-1.conf @@ -0,0 +1,7 @@ +zone "e63-1.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e63-1.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e63-2.conf b/bind/slave/conf-slave/e63-2.conf new file mode 100644 index 0000000..504ec09 --- /dev/null +++ b/bind/slave/conf-slave/e63-2.conf @@ -0,0 +1,7 @@ +zone "e63-2.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e63-2.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e63-3.conf b/bind/slave/conf-slave/e63-3.conf new file mode 100644 index 0000000..6610f52 --- /dev/null +++ b/bind/slave/conf-slave/e63-3.conf @@ -0,0 +1,7 @@ +zone "e63-3.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e63-3.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e63-4.conf b/bind/slave/conf-slave/e63-4.conf new file mode 100644 index 0000000..4fe4dcf --- /dev/null +++ b/bind/slave/conf-slave/e63-4.conf @@ -0,0 +1,7 @@ +zone "e63-4.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e63-4.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e65-1.conf b/bind/slave/conf-slave/e65-1.conf new file mode 100644 index 0000000..8fbbfe7 --- /dev/null +++ b/bind/slave/conf-slave/e65-1.conf @@ -0,0 +1,7 @@ +zone "e65-1.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e65-1.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e65-2.conf b/bind/slave/conf-slave/e65-2.conf new file mode 100644 index 0000000..574b3f5 --- /dev/null +++ b/bind/slave/conf-slave/e65-2.conf @@ -0,0 +1,7 @@ +zone "e65-2.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e65-2.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e65-3.conf b/bind/slave/conf-slave/e65-3.conf new file mode 100644 index 0000000..f1b5f56 --- /dev/null +++ b/bind/slave/conf-slave/e65-3.conf @@ -0,0 +1,7 @@ +zone "e65-3.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e65-3.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e65-4.conf b/bind/slave/conf-slave/e65-4.conf new file mode 100644 index 0000000..5a813aa --- /dev/null +++ b/bind/slave/conf-slave/e65-4.conf @@ -0,0 +1,7 @@ +zone "e65-4.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e65-4.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e67-1.conf b/bind/slave/conf-slave/e67-1.conf new file mode 100644 index 0000000..4a75285 --- /dev/null +++ b/bind/slave/conf-slave/e67-1.conf @@ -0,0 +1,7 @@ +zone "e67-1.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e67-1.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e67-2.conf b/bind/slave/conf-slave/e67-2.conf new file mode 100644 index 0000000..281e94c --- /dev/null +++ b/bind/slave/conf-slave/e67-2.conf @@ -0,0 +1,7 @@ +zone "e67-2.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e67-2.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e67-3.conf b/bind/slave/conf-slave/e67-3.conf new file mode 100644 index 0000000..5c3cc69 --- /dev/null +++ b/bind/slave/conf-slave/e67-3.conf @@ -0,0 +1,7 @@ +zone "e67-3.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e67-3.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e67-4.conf b/bind/slave/conf-slave/e67-4.conf new file mode 100644 index 0000000..89093c5 --- /dev/null +++ b/bind/slave/conf-slave/e67-4.conf @@ -0,0 +1,7 @@ +zone "e67-4.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e67-4.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e69-1.conf b/bind/slave/conf-slave/e69-1.conf new file mode 100644 index 0000000..f261b89 --- /dev/null +++ b/bind/slave/conf-slave/e69-1.conf @@ -0,0 +1,7 @@ +zone "e69-1.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e69-1.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e69-2.conf b/bind/slave/conf-slave/e69-2.conf new file mode 100644 index 0000000..db517c3 --- /dev/null +++ b/bind/slave/conf-slave/e69-2.conf @@ -0,0 +1,7 @@ +zone "e69-2.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e69-2.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e69-3.conf b/bind/slave/conf-slave/e69-3.conf new file mode 100644 index 0000000..df212d7 --- /dev/null +++ b/bind/slave/conf-slave/e69-3.conf @@ -0,0 +1,7 @@ +zone "e69-3.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e69-3.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e69-4.conf b/bind/slave/conf-slave/e69-4.conf new file mode 100644 index 0000000..4ae60fa --- /dev/null +++ b/bind/slave/conf-slave/e69-4.conf @@ -0,0 +1,7 @@ +zone "e69-4.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e69-4.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e7-3.conf b/bind/slave/conf-slave/e7-3.conf new file mode 100644 index 0000000..4693800 --- /dev/null +++ b/bind/slave/conf-slave/e7-3.conf @@ -0,0 +1,7 @@ +zone "e7-3.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e7-3.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e7-4.conf b/bind/slave/conf-slave/e7-4.conf new file mode 100644 index 0000000..41455fd --- /dev/null +++ b/bind/slave/conf-slave/e7-4.conf @@ -0,0 +1,7 @@ +zone "e7-4.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e7-4.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e71-1.conf b/bind/slave/conf-slave/e71-1.conf new file mode 100644 index 0000000..71ddb54 --- /dev/null +++ b/bind/slave/conf-slave/e71-1.conf @@ -0,0 +1,7 @@ +zone "e71-1.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e71-1.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e71-2.conf b/bind/slave/conf-slave/e71-2.conf new file mode 100644 index 0000000..94d8520 --- /dev/null +++ b/bind/slave/conf-slave/e71-2.conf @@ -0,0 +1,7 @@ +zone "e71-2.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e71-2.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e71-3.conf b/bind/slave/conf-slave/e71-3.conf new file mode 100644 index 0000000..b3c1c59 --- /dev/null +++ b/bind/slave/conf-slave/e71-3.conf @@ -0,0 +1,7 @@ +zone "e71-3.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e71-3.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e71-4.conf b/bind/slave/conf-slave/e71-4.conf new file mode 100644 index 0000000..f6bdd4f --- /dev/null +++ b/bind/slave/conf-slave/e71-4.conf @@ -0,0 +1,7 @@ +zone "e71-4.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e71-4.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e73-1.conf b/bind/slave/conf-slave/e73-1.conf new file mode 100644 index 0000000..230edcd --- /dev/null +++ b/bind/slave/conf-slave/e73-1.conf @@ -0,0 +1,7 @@ +zone "e73-1.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e73-1.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e73-2.conf b/bind/slave/conf-slave/e73-2.conf new file mode 100644 index 0000000..2fead83 --- /dev/null +++ b/bind/slave/conf-slave/e73-2.conf @@ -0,0 +1,7 @@ +zone "e73-2.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e73-2.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e73-3.conf b/bind/slave/conf-slave/e73-3.conf new file mode 100644 index 0000000..f28825e --- /dev/null +++ b/bind/slave/conf-slave/e73-3.conf @@ -0,0 +1,7 @@ +zone "e73-3.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e73-3.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e73-4.conf b/bind/slave/conf-slave/e73-4.conf new file mode 100644 index 0000000..a0586d7 --- /dev/null +++ b/bind/slave/conf-slave/e73-4.conf @@ -0,0 +1,7 @@ +zone "e73-4.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e73-4.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e75-1.conf b/bind/slave/conf-slave/e75-1.conf new file mode 100644 index 0000000..bcdd0fe --- /dev/null +++ b/bind/slave/conf-slave/e75-1.conf @@ -0,0 +1,7 @@ +zone "e75-1.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e75-1.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e75-2.conf b/bind/slave/conf-slave/e75-2.conf new file mode 100644 index 0000000..0631366 --- /dev/null +++ b/bind/slave/conf-slave/e75-2.conf @@ -0,0 +1,7 @@ +zone "e75-2.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e75-2.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e75-3.conf b/bind/slave/conf-slave/e75-3.conf new file mode 100644 index 0000000..4ce2c1d --- /dev/null +++ b/bind/slave/conf-slave/e75-3.conf @@ -0,0 +1,7 @@ +zone "e75-3.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e75-3.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e75-4.conf b/bind/slave/conf-slave/e75-4.conf new file mode 100644 index 0000000..e361095 --- /dev/null +++ b/bind/slave/conf-slave/e75-4.conf @@ -0,0 +1,7 @@ +zone "e75-4.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e75-4.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e77-1.conf b/bind/slave/conf-slave/e77-1.conf new file mode 100644 index 0000000..898f8d9 --- /dev/null +++ b/bind/slave/conf-slave/e77-1.conf @@ -0,0 +1,7 @@ +zone "e77-1.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e77-1.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e77-2.conf b/bind/slave/conf-slave/e77-2.conf new file mode 100644 index 0000000..70d651b --- /dev/null +++ b/bind/slave/conf-slave/e77-2.conf @@ -0,0 +1,7 @@ +zone "e77-2.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e77-2.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e9-3.conf b/bind/slave/conf-slave/e9-3.conf new file mode 100644 index 0000000..fff493a --- /dev/null +++ b/bind/slave/conf-slave/e9-3.conf @@ -0,0 +1,7 @@ +zone "e9-3.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e9-3.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/e9-4.conf b/bind/slave/conf-slave/e9-4.conf new file mode 100644 index 0000000..42374e8 --- /dev/null +++ b/bind/slave/conf-slave/e9-4.conf @@ -0,0 +1,7 @@ +zone "e9-4.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/e9-4.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/fugleberg1.conf b/bind/slave/conf-slave/fugleberg1.conf new file mode 100644 index 0000000..b5b39cf --- /dev/null +++ b/bind/slave/conf-slave/fugleberg1.conf @@ -0,0 +1,7 @@ +zone "fugleberg1.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/fugleberg1.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/fugleberg2.conf b/bind/slave/conf-slave/fugleberg2.conf new file mode 100644 index 0000000..e3ffcad --- /dev/null +++ b/bind/slave/conf-slave/fugleberg2.conf @@ -0,0 +1,7 @@ +zone "fugleberg2.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/fugleberg2.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/game.conf b/bind/slave/conf-slave/game.conf new file mode 100644 index 0000000..04fdc30 --- /dev/null +++ b/bind/slave/conf-slave/game.conf @@ -0,0 +1,7 @@ +zone "game.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/game.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/gamehq.conf b/bind/slave/conf-slave/gamehq.conf new file mode 100644 index 0000000..11c35c2 --- /dev/null +++ b/bind/slave/conf-slave/gamehq.conf @@ -0,0 +1,7 @@ +zone "gamehq.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/gamehq.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/lager.conf b/bind/slave/conf-slave/lager.conf new file mode 100644 index 0000000..cec1eb0 --- /dev/null +++ b/bind/slave/conf-slave/lager.conf @@ -0,0 +1,7 @@ +zone "lager.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/lager.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/logistikk.conf b/bind/slave/conf-slave/logistikk.conf new file mode 100644 index 0000000..84ff89f --- /dev/null +++ b/bind/slave/conf-slave/logistikk.conf @@ -0,0 +1,7 @@ +zone "logistikk.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/logistikk.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/marsrele.conf b/bind/slave/conf-slave/marsrele.conf new file mode 100644 index 0000000..56639ea --- /dev/null +++ b/bind/slave/conf-slave/marsrele.conf @@ -0,0 +1,7 @@ +zone "marsrele.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/marsrele.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/noc.conf b/bind/slave/conf-slave/noc.conf new file mode 100644 index 0000000..955695e --- /dev/null +++ b/bind/slave/conf-slave/noc.conf @@ -0,0 +1,7 @@ +zone "noc.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/noc.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/presse.conf b/bind/slave/conf-slave/presse.conf new file mode 100644 index 0000000..81ceebe --- /dev/null +++ b/bind/slave/conf-slave/presse.conf @@ -0,0 +1,7 @@ +zone "presse.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/presse.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/secmedic.conf b/bind/slave/conf-slave/secmedic.conf new file mode 100644 index 0000000..4f32330 --- /dev/null +++ b/bind/slave/conf-slave/secmedic.conf @@ -0,0 +1,7 @@ +zone "secmedic.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/secmedic.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/sponsorvest.conf b/bind/slave/conf-slave/sponsorvest.conf new file mode 100644 index 0000000..4f4a255 --- /dev/null +++ b/bind/slave/conf-slave/sponsorvest.conf @@ -0,0 +1,7 @@ +zone "sponsorvest.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/sponsorvest.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/stage.conf b/bind/slave/conf-slave/stage.conf new file mode 100644 index 0000000..c459678 --- /dev/null +++ b/bind/slave/conf-slave/stage.conf @@ -0,0 +1,7 @@ +zone "stage.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/stage.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/stageboh.conf b/bind/slave/conf-slave/stageboh.conf new file mode 100644 index 0000000..7081f38 --- /dev/null +++ b/bind/slave/conf-slave/stageboh.conf @@ -0,0 +1,7 @@ +zone "stageboh.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/stageboh.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/tele.conf b/bind/slave/conf-slave/tele.conf new file mode 100644 index 0000000..1484d25 --- /dev/null +++ b/bind/slave/conf-slave/tele.conf @@ -0,0 +1,7 @@ +zone "tele.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/tele.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/wlan.conf b/bind/slave/conf-slave/wlan.conf new file mode 100644 index 0000000..4a6b83d --- /dev/null +++ b/bind/slave/conf-slave/wlan.conf @@ -0,0 +1,7 @@ +zone "wlan.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/wlan.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/conf-slave/ymse.conf b/bind/slave/conf-slave/ymse.conf new file mode 100644 index 0000000..bf26b4c --- /dev/null +++ b/bind/slave/conf-slave/ymse.conf @@ -0,0 +1,7 @@ +zone "ymse.tg13.gathering.org" { +        type slave; +        notify no; +        masters { bootstrap; }; +        file "slave/ymse.tg13.gathering.org.zone"; +        allow-transfer { ns-xfr; }; +}; diff --git a/bind/slave/db.0 b/bind/slave/db.0 new file mode 100644 index 0000000..e3aabdb --- /dev/null +++ b/bind/slave/db.0 @@ -0,0 +1,12 @@ +; +; BIND reverse data file for broadcast zone +; +$TTL	604800 +@	IN	SOA	localhost. root.localhost. ( +			      1		; Serial +			 604800		; Refresh +			  86400		; Retry +			2419200		; Expire +			 604800 )	; Negative Cache TTL +; +@	IN	NS	localhost. diff --git a/bind/slave/db.127 b/bind/slave/db.127 new file mode 100644 index 0000000..cd05bef --- /dev/null +++ b/bind/slave/db.127 @@ -0,0 +1,13 @@ +; +; BIND reverse data file for local loopback interface +; +$TTL	604800 +@	IN	SOA	localhost. root.localhost. ( +			      1		; Serial +			 604800		; Refresh +			  86400		; Retry +			2419200		; Expire +			 604800 )	; Negative Cache TTL +; +@	IN	NS	localhost. +1.0.0	IN	PTR	localhost. diff --git a/bind/slave/db.255 b/bind/slave/db.255 new file mode 100644 index 0000000..e3aabdb --- /dev/null +++ b/bind/slave/db.255 @@ -0,0 +1,12 @@ +; +; BIND reverse data file for broadcast zone +; +$TTL	604800 +@	IN	SOA	localhost. root.localhost. ( +			      1		; Serial +			 604800		; Refresh +			  86400		; Retry +			2419200		; Expire +			 604800 )	; Negative Cache TTL +; +@	IN	NS	localhost. diff --git a/bind/slave/db.empty b/bind/slave/db.empty new file mode 100644 index 0000000..8a12858 --- /dev/null +++ b/bind/slave/db.empty @@ -0,0 +1,14 @@ +; BIND reverse data file for empty rfc1918 zone +; +; DO NOT EDIT THIS FILE - it is used for multiple zones. +; Instead, copy it, edit named.conf, and use that copy. +; +$TTL	86400 +@	IN	SOA	localhost. root.localhost. ( +			      1		; Serial +			 604800		; Refresh +			  86400		; Retry +			2419200		; Expire +			  86400 )	; Negative Cache TTL +; +@	IN	NS	localhost. diff --git a/bind/slave/db.local b/bind/slave/db.local new file mode 100644 index 0000000..2f272d4 --- /dev/null +++ b/bind/slave/db.local @@ -0,0 +1,14 @@ +; +; BIND data file for local loopback interface +; +$TTL	604800 +@	IN	SOA	localhost. root.localhost. ( +			      2		; Serial +			 604800		; Refresh +			  86400		; Retry +			2419200		; Expire +			 604800 )	; Negative Cache TTL +; +@	IN	NS	localhost. +@	IN	A	127.0.0.1 +@	IN	AAAA	::1 diff --git a/bind/slave/db.root b/bind/slave/db.root new file mode 100644 index 0000000..6c19741 --- /dev/null +++ b/bind/slave/db.root @@ -0,0 +1,88 @@ +;       This file holds the information on root name servers needed to +;       initialize cache of Internet domain name servers +;       (e.g. reference this file in the "cache  .  <file>" +;       configuration file of BIND domain name servers). +; +;       This file is made available by InterNIC  +;       under anonymous FTP as +;           file                /domain/named.cache +;           on server           FTP.INTERNIC.NET +;       -OR-                    RS.INTERNIC.NET +; +;       last update:    Jan 3, 2013 +;       related version of root zone:   2013010300 +; +; formerly NS.INTERNIC.NET +; +.                        3600000  IN  NS    A.ROOT-SERVERS.NET. +A.ROOT-SERVERS.NET.      3600000      A     198.41.0.4 +A.ROOT-SERVERS.NET.      3600000      AAAA  2001:503:BA3E::2:30 +; +; FORMERLY NS1.ISI.EDU +; +.                        3600000      NS    B.ROOT-SERVERS.NET. +B.ROOT-SERVERS.NET.      3600000      A     192.228.79.201 +; +; FORMERLY C.PSI.NET +; +.                        3600000      NS    C.ROOT-SERVERS.NET. +C.ROOT-SERVERS.NET.      3600000      A     192.33.4.12 +; +; FORMERLY TERP.UMD.EDU +; +.                        3600000      NS    D.ROOT-SERVERS.NET. +D.ROOT-SERVERS.NET.      3600000      A     199.7.91.13 +D.ROOT-SERVERS.NET.	 3600000      AAAA  2001:500:2D::D +; +; FORMERLY NS.NASA.GOV +; +.                        3600000      NS    E.ROOT-SERVERS.NET. +E.ROOT-SERVERS.NET.      3600000      A     192.203.230.10 +; +; FORMERLY NS.ISC.ORG +; +.                        3600000      NS    F.ROOT-SERVERS.NET. +F.ROOT-SERVERS.NET.      3600000      A     192.5.5.241 +F.ROOT-SERVERS.NET.      3600000      AAAA  2001:500:2F::F +; +; FORMERLY NS.NIC.DDN.MIL +; +.                        3600000      NS    G.ROOT-SERVERS.NET. +G.ROOT-SERVERS.NET.      3600000      A     192.112.36.4 +; +; FORMERLY AOS.ARL.ARMY.MIL +; +.                        3600000      NS    H.ROOT-SERVERS.NET. +H.ROOT-SERVERS.NET.      3600000      A     128.63.2.53 +H.ROOT-SERVERS.NET.      3600000      AAAA  2001:500:1::803F:235 +; +; FORMERLY NIC.NORDU.NET +; +.                        3600000      NS    I.ROOT-SERVERS.NET. +I.ROOT-SERVERS.NET.      3600000      A     192.36.148.17 +I.ROOT-SERVERS.NET.      3600000      AAAA  2001:7FE::53 +; +; OPERATED BY VERISIGN, INC. +; +.                        3600000      NS    J.ROOT-SERVERS.NET. +J.ROOT-SERVERS.NET.      3600000      A     192.58.128.30 +J.ROOT-SERVERS.NET.      3600000      AAAA  2001:503:C27::2:30 +; +; OPERATED BY RIPE NCC +; +.                        3600000      NS    K.ROOT-SERVERS.NET. +K.ROOT-SERVERS.NET.      3600000      A     193.0.14.129 +K.ROOT-SERVERS.NET.      3600000      AAAA  2001:7FD::1 +; +; OPERATED BY ICANN +; +.                        3600000      NS    L.ROOT-SERVERS.NET. +L.ROOT-SERVERS.NET.      3600000      A     199.7.83.42 +L.ROOT-SERVERS.NET.      3600000      AAAA  2001:500:3::42 +; +; OPERATED BY WIDE +; +.                        3600000      NS    M.ROOT-SERVERS.NET. +M.ROOT-SERVERS.NET.      3600000      A     202.12.27.33 +M.ROOT-SERVERS.NET.      3600000      AAAA  2001:DC3::35 +; End of File diff --git a/bind/slave/named.conf b/bind/slave/named.conf new file mode 100644 index 0000000..c960730 --- /dev/null +++ b/bind/slave/named.conf @@ -0,0 +1,57 @@ +// This named.conf was generated by make-named.pl at 20130327-1708 +// The current version of make-named.pl should not overwrite this file. +acl tg-nett  { 151.216.0.0/17; 2a02:ed02::/32; 127.0.0.0/8; ::1; 31.169.55.0/24; }; +acl ns-xfr   { 194.19.3.20; 151.216.125.2; 2a02:ed02:125::2; 151.216.126.2; 2a02:ed02:126::2; 151.216.124.0/24; }; +acl ripe-xfr { 194.19.3.20; 151.216.125.2; 2a02:ed02:125::2; 151.216.126.2; 2a02:ed02:126::2; 193.0.0.0/22; }; + +options { +        directory "/etc/bind"; +        allow-recursion { tg-nett; }; +        allow-query { any; }; +        allow-transfer { ns-xfr; }; +        recursion yes; +        auth-nxdomain no; +        listen-on-v6 { any; }; +}; + +key DHCP_UPDATER { +        algorithm HMAC-MD5.SIG-ALG.REG.INT; +        secret <removed>; +}; + +masters bootstrap  { 151.216.126.2; }; + +zone "tg13.gathering.org" { +        type slave; +        file "slave/tg13.gathering.org"; +        notify no; +	masters { bootstrap; }; +}; + +zone "infra.tg13.gathering.org" { +        type slave; +        file "slave/infra.tg13.gathering.org"; +        notify no; +	masters { bootstrap; }; +}; + +zone "2.0.d.e.2.0.a.2.ip6.arpa" { +        type slave; +        notify no; +	masters { bootstrap; }; +        file "slave/2.0.d.e.2.0.a.2.ip6.arpa:"; +        allow-transfer { ns-xfr; ripe-xfr; }; +}; + +include "named.conf.default-zones"; +include "named.slave-reverse4.conf"; +include "named.slave-include.conf"; + +# ekstra /24-nett fra Blix +zone "55.169.31.in-addr.arpa" { +        type slave; +	notify no; +	masters { bootstrap; }; +        file "slave/55.169.31.in-addr.arpa"; +        allow-transfer { ns-xfr; ripe-xfr; }; +}; diff --git a/bind/slave/named.conf.default-zones b/bind/slave/named.conf.default-zones new file mode 100644 index 0000000..355338b --- /dev/null +++ b/bind/slave/named.conf.default-zones @@ -0,0 +1,30 @@ +// prime the server with knowledge of the root servers +zone "." { +	type hint; +	file "/etc/bind/db.root"; +}; + +// be authoritative for the localhost forward and reverse zones, and for +// broadcast zones as per RFC 1912 + +zone "localhost" { +	type master; +	file "/etc/bind/db.local"; +}; + +zone "127.in-addr.arpa" { +	type master; +	file "/etc/bind/db.127"; +}; + +zone "0.in-addr.arpa" { +	type master; +	file "/etc/bind/db.0"; +}; + +zone "255.in-addr.arpa" { +	type master; +	file "/etc/bind/db.255"; +}; + + diff --git a/bind/slave/named.conf.local b/bind/slave/named.conf.local new file mode 100644 index 0000000..7a57b10 --- /dev/null +++ b/bind/slave/named.conf.local @@ -0,0 +1,8 @@ +// +// Do any local configuration here +// + +// Consider adding the 1918 zones here, if they are not used in your +// organization +//include "/etc/bind/zones.rfc1918"; + diff --git a/bind/slave/named.conf.options b/bind/slave/named.conf.options new file mode 100644 index 0000000..af79758 --- /dev/null +++ b/bind/slave/named.conf.options @@ -0,0 +1,20 @@ +options { +	directory "/var/cache/bind"; + +	// If there is a firewall between you and nameservers you want +	// to talk to, you may need to fix the firewall to allow multiple +	// ports to talk.  See http://www.kb.cert.org/vuls/id/800113 + +	// If your ISP provided one or more IP addresses for stable  +	// nameservers, you probably want to use them as forwarders.   +	// Uncomment the following block, and insert the addresses replacing  +	// the all-0's placeholder. + +	// forwarders { +	// 	0.0.0.0; +	// }; + +	auth-nxdomain no;    # conform to RFC1035 +	listen-on-v6 { any; }; +}; + diff --git a/bind/slave/named.slave-include.conf b/bind/slave/named.slave-include.conf new file mode 100644 index 0000000..2284b6e --- /dev/null +++ b/bind/slave/named.slave-include.conf @@ -0,0 +1,159 @@ +include "/etc/bind/conf-slave/ap-dist0.conf"; +include "/etc/bind/conf-slave/ap-dist1.conf"; +include "/etc/bind/conf-slave/ap-dist2.conf"; +include "/etc/bind/conf-slave/ap-dist3.conf"; +include "/etc/bind/conf-slave/ap-dist4.conf"; +include "/etc/bind/conf-slave/care.conf"; +include "/etc/bind/conf-slave/chillout.conf"; +include "/etc/bind/conf-slave/creativia.conf"; +include "/etc/bind/conf-slave/crew1.conf"; +include "/etc/bind/conf-slave/crew2.conf"; +include "/etc/bind/conf-slave/crew3.conf"; +include "/etc/bind/conf-slave/crew4.conf"; +include "/etc/bind/conf-slave/crew5.conf"; +include "/etc/bind/conf-slave/crew6.conf"; +include "/etc/bind/conf-slave/defektraid.conf"; +include "/etc/bind/conf-slave/e1-3.conf"; +include "/etc/bind/conf-slave/e1-4.conf"; +include "/etc/bind/conf-slave/e11-1.conf"; +include "/etc/bind/conf-slave/e11-2.conf"; +include "/etc/bind/conf-slave/e11-3.conf"; +include "/etc/bind/conf-slave/e11-4.conf"; +include "/etc/bind/conf-slave/e13-1.conf"; +include "/etc/bind/conf-slave/e13-2.conf"; +include "/etc/bind/conf-slave/e13-3.conf"; +include "/etc/bind/conf-slave/e13-4.conf"; +include "/etc/bind/conf-slave/e15-1.conf"; +include "/etc/bind/conf-slave/e15-2.conf"; +include "/etc/bind/conf-slave/e15-3.conf"; +include "/etc/bind/conf-slave/e15-4.conf"; +include "/etc/bind/conf-slave/e17-1.conf"; +include "/etc/bind/conf-slave/e17-2.conf"; +include "/etc/bind/conf-slave/e17-3.conf"; +include "/etc/bind/conf-slave/e17-4.conf"; +include "/etc/bind/conf-slave/e19-1.conf"; +include "/etc/bind/conf-slave/e19-2.conf"; +include "/etc/bind/conf-slave/e19-3.conf"; +include "/etc/bind/conf-slave/e19-4.conf"; +include "/etc/bind/conf-slave/e21-1.conf"; +include "/etc/bind/conf-slave/e21-2.conf"; +include "/etc/bind/conf-slave/e21-3.conf"; +include "/etc/bind/conf-slave/e21-4.conf"; +include "/etc/bind/conf-slave/e23-1.conf"; +include "/etc/bind/conf-slave/e23-2.conf"; +include "/etc/bind/conf-slave/e23-3.conf"; +include "/etc/bind/conf-slave/e23-4.conf"; +include "/etc/bind/conf-slave/e25-1.conf"; +include "/etc/bind/conf-slave/e25-2.conf"; +include "/etc/bind/conf-slave/e25-3.conf"; +include "/etc/bind/conf-slave/e25-4.conf"; +include "/etc/bind/conf-slave/e27-1.conf"; +include "/etc/bind/conf-slave/e27-2.conf"; +include "/etc/bind/conf-slave/e29-1.conf"; +include "/etc/bind/conf-slave/e29-2.conf"; +include "/etc/bind/conf-slave/e3-3.conf"; +include "/etc/bind/conf-slave/e3-4.conf"; +include "/etc/bind/conf-slave/e31-1.conf"; +include "/etc/bind/conf-slave/e31-2.conf"; +include "/etc/bind/conf-slave/e33-1.conf"; +include "/etc/bind/conf-slave/e33-2.conf"; +include "/etc/bind/conf-slave/e35-1.conf"; +include "/etc/bind/conf-slave/e35-2.conf"; +include "/etc/bind/conf-slave/e37-1.conf"; +include "/etc/bind/conf-slave/e37-2.conf"; +include "/etc/bind/conf-slave/e39-1.conf"; +include "/etc/bind/conf-slave/e39-2.conf"; +include "/etc/bind/conf-slave/e41-1.conf"; +include "/etc/bind/conf-slave/e41-2.conf"; +include "/etc/bind/conf-slave/e43-1.conf"; +include "/etc/bind/conf-slave/e43-2.conf"; +include "/etc/bind/conf-slave/e43-3.conf"; +include "/etc/bind/conf-slave/e43-4.conf"; +include "/etc/bind/conf-slave/e45-1.conf"; +include "/etc/bind/conf-slave/e45-2.conf"; +include "/etc/bind/conf-slave/e45-3.conf"; +include "/etc/bind/conf-slave/e45-4.conf"; +include "/etc/bind/conf-slave/e47-1.conf"; +include "/etc/bind/conf-slave/e47-2.conf"; +include "/etc/bind/conf-slave/e47-3.conf"; +include "/etc/bind/conf-slave/e47-4.conf"; +include "/etc/bind/conf-slave/e49-1.conf"; +include "/etc/bind/conf-slave/e49-2.conf"; +include "/etc/bind/conf-slave/e49-3.conf"; +include "/etc/bind/conf-slave/e49-4.conf"; +include "/etc/bind/conf-slave/e5-3.conf"; +include "/etc/bind/conf-slave/e5-4.conf"; +include "/etc/bind/conf-slave/e51-1.conf"; +include "/etc/bind/conf-slave/e51-2.conf"; +include "/etc/bind/conf-slave/e51-3.conf"; +include "/etc/bind/conf-slave/e51-4.conf"; +include "/etc/bind/conf-slave/e53-1.conf"; +include "/etc/bind/conf-slave/e53-2.conf"; +include "/etc/bind/conf-slave/e53-3.conf"; +include "/etc/bind/conf-slave/e53-4.conf"; +include "/etc/bind/conf-slave/e55-1.conf"; +include "/etc/bind/conf-slave/e55-2.conf"; +include "/etc/bind/conf-slave/e55-3.conf"; +include "/etc/bind/conf-slave/e55-4.conf"; +include "/etc/bind/conf-slave/e57-1.conf"; +include "/etc/bind/conf-slave/e57-2.conf"; +include "/etc/bind/conf-slave/e57-3.conf"; +include "/etc/bind/conf-slave/e57-4.conf"; +include "/etc/bind/conf-slave/e59-1.conf"; +include "/etc/bind/conf-slave/e59-2.conf"; +include "/etc/bind/conf-slave/e59-3.conf"; +include "/etc/bind/conf-slave/e59-4.conf"; +include "/etc/bind/conf-slave/e61-1.conf"; +include "/etc/bind/conf-slave/e61-2.conf"; +include "/etc/bind/conf-slave/e61-3.conf"; +include "/etc/bind/conf-slave/e61-4.conf"; +include "/etc/bind/conf-slave/e63-1.conf"; +include "/etc/bind/conf-slave/e63-2.conf"; +include "/etc/bind/conf-slave/e63-3.conf"; +include "/etc/bind/conf-slave/e63-4.conf"; +include "/etc/bind/conf-slave/e65-1.conf"; +include "/etc/bind/conf-slave/e65-2.conf"; +include "/etc/bind/conf-slave/e65-3.conf"; +include "/etc/bind/conf-slave/e65-4.conf"; +include "/etc/bind/conf-slave/e67-1.conf"; +include "/etc/bind/conf-slave/e67-2.conf"; +include "/etc/bind/conf-slave/e67-3.conf"; +include "/etc/bind/conf-slave/e67-4.conf"; +include "/etc/bind/conf-slave/e69-1.conf"; +include "/etc/bind/conf-slave/e69-2.conf"; +include "/etc/bind/conf-slave/e69-3.conf"; +include "/etc/bind/conf-slave/e69-4.conf"; +include "/etc/bind/conf-slave/e7-3.conf"; +include "/etc/bind/conf-slave/e7-4.conf"; +include "/etc/bind/conf-slave/e71-1.conf"; +include "/etc/bind/conf-slave/e71-2.conf"; +include "/etc/bind/conf-slave/e71-3.conf"; +include "/etc/bind/conf-slave/e71-4.conf"; +include "/etc/bind/conf-slave/e73-1.conf"; +include "/etc/bind/conf-slave/e73-2.conf"; +include "/etc/bind/conf-slave/e73-3.conf"; +include "/etc/bind/conf-slave/e73-4.conf"; +include "/etc/bind/conf-slave/e75-1.conf"; +include "/etc/bind/conf-slave/e75-2.conf"; +include "/etc/bind/conf-slave/e75-3.conf"; +include "/etc/bind/conf-slave/e75-4.conf"; +include "/etc/bind/conf-slave/e77-1.conf"; +include "/etc/bind/conf-slave/e77-2.conf"; +include "/etc/bind/conf-slave/e9-3.conf"; +include "/etc/bind/conf-slave/e9-4.conf"; +include "/etc/bind/conf-slave/fugleberg1.conf"; +include "/etc/bind/conf-slave/fugleberg2.conf"; +include "/etc/bind/conf-slave/game.conf"; +include "/etc/bind/conf-slave/gamehq.conf"; +include "/etc/bind/conf-slave/lager.conf"; +include "/etc/bind/conf-slave/logistikk.conf"; +include "/etc/bind/conf-slave/marsrele.conf"; +include "/etc/bind/conf-slave/noc.conf"; +include "/etc/bind/conf-slave/presse.conf"; +include "/etc/bind/conf-slave/secmedic.conf"; +include "/etc/bind/conf-slave/sponsorvest.conf"; +include "/etc/bind/conf-slave/stage.conf"; +include "/etc/bind/conf-slave/stageboh.conf"; +include "/etc/bind/conf-slave/tele.conf"; +include "/etc/bind/conf-slave/wlan.conf"; +include "/etc/bind/conf-slave/ymse.conf"; diff --git a/bind/slave/named.slave-reverse4.conf b/bind/slave/named.slave-reverse4.conf new file mode 100644 index 0000000..263b90c --- /dev/null +++ b/bind/slave/named.slave-reverse4.conf @@ -0,0 +1,1024 @@ +zone "0.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/0.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "1.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/1.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "2.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/2.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "3.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/3.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "4.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/4.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "5.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/5.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "6.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/6.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "7.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/7.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "8.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/8.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "9.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/9.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "10.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/10.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "11.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/11.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "12.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/12.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "13.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/13.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "14.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/14.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "15.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/15.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "16.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/16.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "17.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/17.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "18.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/18.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "19.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/19.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "20.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/20.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "21.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/21.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "22.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/22.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "23.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/23.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "24.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/24.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "25.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/25.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "26.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/26.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "27.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/27.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "28.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/28.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "29.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/29.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "30.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/30.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "31.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/31.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "32.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/32.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "33.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/33.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "34.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/34.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "35.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/35.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "36.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/36.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "37.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/37.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "38.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/38.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "39.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/39.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "40.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/40.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "41.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/41.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "42.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/42.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "43.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/43.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "44.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/44.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "45.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/45.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "46.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/46.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "47.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/47.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "48.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/48.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "49.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/49.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "50.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/50.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "51.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/51.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "52.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/52.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "53.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/53.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "54.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/54.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "55.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/55.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "56.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/56.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "57.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/57.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "58.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/58.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "59.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/59.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "60.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/60.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "61.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/61.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "62.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/62.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "63.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/63.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "64.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/64.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "65.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/65.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "66.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/66.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "67.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/67.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "68.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/68.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "69.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/69.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "70.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/70.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "71.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/71.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "72.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/72.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "73.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/73.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "74.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/74.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "75.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/75.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "76.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/76.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "77.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/77.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "78.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/78.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "79.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/79.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "80.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/80.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "81.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/81.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "82.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/82.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "83.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/83.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "84.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/84.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "85.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/85.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "86.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/86.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "87.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/87.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "88.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/88.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "89.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/89.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "90.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/90.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "91.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/91.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "92.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/92.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "93.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/93.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "94.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/94.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "95.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/95.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "96.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/96.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "97.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/97.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "98.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/98.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "99.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/99.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "100.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/100.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "101.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/101.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "102.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/102.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "103.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/103.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "104.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/104.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "105.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/105.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "106.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/106.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "107.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/107.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "108.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/108.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "109.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/109.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "110.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/110.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "111.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/111.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "112.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/112.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "113.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/113.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "114.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/114.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "115.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/115.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "116.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/116.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "117.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/117.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "118.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/118.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "119.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/119.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "120.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/120.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "121.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/121.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "122.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/122.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "123.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/123.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "124.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/124.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "125.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/125.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "126.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/126.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + +zone "127.216.151.in-addr.arpa"	{ +    type slave; +    notify no; +    file "slave/127.216.151.in-addr.arpa.cache"; +    masters { bootstrap; }; +    allow-transfer { 193.0.0.0/22; }; +}; + diff --git a/bind/slave/rndc.key b/bind/slave/rndc.key new file mode 100644 index 0000000..6ad396d --- /dev/null +++ b/bind/slave/rndc.key @@ -0,0 +1,4 @@ +key "rndc-key" { +	algorithm hmac-md5; +	secret "<removed>"; +}; diff --git a/bind/slave/zones.rfc1918 b/bind/slave/zones.rfc1918 new file mode 100644 index 0000000..03b5546 --- /dev/null +++ b/bind/slave/zones.rfc1918 @@ -0,0 +1,20 @@ +zone "10.in-addr.arpa"      { type master; file "/etc/bind/db.empty"; }; +  +zone "16.172.in-addr.arpa"  { type master; file "/etc/bind/db.empty"; }; +zone "17.172.in-addr.arpa"  { type master; file "/etc/bind/db.empty"; }; +zone "18.172.in-addr.arpa"  { type master; file "/etc/bind/db.empty"; }; +zone "19.172.in-addr.arpa"  { type master; file "/etc/bind/db.empty"; }; +zone "20.172.in-addr.arpa"  { type master; file "/etc/bind/db.empty"; }; +zone "21.172.in-addr.arpa"  { type master; file "/etc/bind/db.empty"; }; +zone "22.172.in-addr.arpa"  { type master; file "/etc/bind/db.empty"; }; +zone "23.172.in-addr.arpa"  { type master; file "/etc/bind/db.empty"; }; +zone "24.172.in-addr.arpa"  { type master; file "/etc/bind/db.empty"; }; +zone "25.172.in-addr.arpa"  { type master; file "/etc/bind/db.empty"; }; +zone "26.172.in-addr.arpa"  { type master; file "/etc/bind/db.empty"; }; +zone "27.172.in-addr.arpa"  { type master; file "/etc/bind/db.empty"; }; +zone "28.172.in-addr.arpa"  { type master; file "/etc/bind/db.empty"; }; +zone "29.172.in-addr.arpa"  { type master; file "/etc/bind/db.empty"; }; +zone "30.172.in-addr.arpa"  { type master; file "/etc/bind/db.empty"; }; +zone "31.172.in-addr.arpa"  { type master; file "/etc/bind/db.empty"; }; + +zone "168.192.in-addr.arpa" { type master; file "/etc/bind/db.empty"; }; diff --git a/clients/accesspoints.pl b/clients/accesspoints.pl new file mode 100755 index 0000000..d998252 --- /dev/null +++ b/clients/accesspoints.pl @@ -0,0 +1,76 @@ +#! /usr/bin/perl +use strict; +use warnings; +use BER; +use DBI; +use POSIX; +use Time::HiRes; +use Net::Ping; +require 'SNMP_Session.pm'; + +use lib '../include'; +use nms; +use threads; + +poll_loop();	 + +sub poll_loop { +	my $dbh = nms::db_connect(); +	my $qcores = $dbh->prepare('SELECT DISTINCT coreswitches.sysname, coreswitches.switch, coreswitches.ip, coreswitches.community FROM uplinks JOIN switches AS coreswitches ON (uplinks.coreswitch = coreswitches.switch)'); +	my $qaps = $dbh->prepare("SELECT switches.sysname, switches.switch, uplinks.blade, uplinks.port FROM uplinks NATURAL JOIN switches WHERE uplinks.coreswitch = ?"); +	my $qpoll = $dbh->prepare("UPDATE ap_poll SET model=?, last_poll=now() WHERE switch = ?"); + +	while (1) { +		$qcores->execute(); +		my $cores = $qcores->fetchall_hashref("sysname"); + +		foreach my $core (keys %$cores) { +			my $ip = $cores->{$core}{'ip'}; +			my $community = $cores->{$core}{'community'}; +			printf "Polling %s (%s)\n", $core, $ip; +			eval { +				my $session = SNMPv2c_Session->open($ip, $community, 161) or die "Couldn't talk to switch"; +				$qaps->execute($cores->{$core}{'switch'}); +				while (my $aps = $qaps->fetchrow_hashref()) { +					my $sysname = $aps->{'sysname'}; +					my $blade = $aps->{'blade'}; +					my $port = $aps->{'port'}; +					my $oid = BER::encode_oid(1,3,6,1,2,1,105,1,1,1,9,$blade,$port);     # POWER-ETHERNET-MIB...pethPsePortType +					my $mode = fetch_snmp($session, $oid); +					$qpoll->execute($mode, $aps->{'switch'}); +					printf "%s (%s:%s/%s): %s\n", $sysname, $core, $blade, $port, $mode; +				} +			}; +			if ($@) { +				mylog("ERROR: $@ (during poll of $ip)"); +				$dbh->rollback; +			} +		} +		sleep 2; +	} +} + +# Kokt fra snmpfetch.pl, vi bør nok lage et lib +sub fetch_snmp { +        my ($session, $oid) = @_; + +        if ($session->get_request_response($oid)) { +                my ($bindings) = $session->decode_get_response ($session->{pdu_buffer}); +                my $binding; +                while ($bindings ne '') { +                        ($binding,$bindings) = &decode_sequence ($bindings); +                        my ($oid,$value) = &decode_by_template ($binding, "%O%@"); +                        return BER::pretty_print($value); +                } +        } +        die "Couldn't get info from switch"; +} + +sub mylog { +	my $msg = shift; +	my $time = POSIX::ctime(time); +	$time =~ s/\n.*$//; +	printf STDERR "[%s] %s\n", $time, $msg; +} + + diff --git a/clients/admintool.sh b/clients/admintool.sh new file mode 100755 index 0000000..889dd19 --- /dev/null +++ b/clients/admintool.sh @@ -0,0 +1,19 @@ +while :; do +        ( +                for i in $( cut -d" " -f1 pingswitches.txt ); do +			ADMINADDR=$( echo $i | perl -pi -le '@x = split /\./; $x[3] += 2; $_ = join(".", @x);' ) +                        ( ( +                                if ping -c2 -W3 -q $ADMINADDR >/dev/null; then +                                        grep $i pingswitches.txt | sed 's/^/PONGER: /' +                                else +                                        grep $i pingswitches.txt | sed 's/^/PONGER IKKE: /' +                                fi +                        ) & ) +                done +        ) > pong.new +	while pidof ping > /dev/null; do sleep 1; done +        mv pong.new pong +        echo "sleeping" +        sleep 10 +done + diff --git a/clients/dhcptail.pl b/clients/dhcptail.pl new file mode 100755 index 0000000..e7898aa --- /dev/null +++ b/clients/dhcptail.pl @@ -0,0 +1,74 @@ +#! /usr/bin/perl +use DBI; +use POSIX; +use lib '../include'; +use nms; +use strict; +use warnings; + +BEGIN { +        require "../include/config.pm"; +        eval { +                require "../include/config.local.pm"; +        }; +} + +my $year = $nms::config::tgname; +$year =~ s/tg/20/; # hihi + +my %months = ( +	Jan => 1, +	Feb => 2, +	Mar => 3, +	Apr => 4, +	May => 5, +	Jun => 6, +	Jul => 7, +	Aug => 8, +	Sep => 9, +	Oct => 10, +	Nov => 11, +	Dec => 12 +); + +my ($dbh, $q, $cq); +open(SYSLOG, "tail -n 9999999 -F /var/log/syslog |") or die "Unable to tail syslog: $!"; +while (<SYSLOG>) { +	/(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s+(\d+)\s+(\d+:\d+:\d+).*DHCPACK on (\d+\.\d+\.\d+\.\d+) to (\S+)/ or next; +	my $date = $year . "-" . $months{$1} . "-" . $2 . " " . $3; +	my $machine = $5; +	my $owner_color; + +	if ($machine eq '00:15:c5:42:ce:e9') { +		$owner_color = '#00ff00';  # Steinar +	} elsif ($machine eq '00:1e:37:1c:d2:65') { +		$owner_color = '#c0ffee';  # Trygve +	} elsif ($machine eq '00:16:d3:ce:8f:a7') { +		$owner_color = '#f00f00';  # Jon +	} elsif ($machine eq '00:16:d4:0c:8a:1c') { +		$owner_color = '#ff99ff';  # Jørgen +	} elsif ($machine eq '00:18:8b:aa:2f:f8') { +		$owner_color = '#663300';  # Kjetil +	} elsif ($machine eq '00:15:58:29:14:e3') { +		$owner_color = '#f1720f';  # BÃ¥rd +	} else { +		$owner_color = "#000000";  # Unknown +	} + +	if (!defined($dbh) || !$dbh->ping) { +		$dbh = nms::db_connect(); +		$q = $dbh->prepare("UPDATE dhcp SET last_ack=? WHERE ?::inet << network AND ( last_ack < ? OR last_ack IS NULL )") +			or die "Couldn't prepare query"; +		$cq = $dbh->prepare("UPDATE dhcp SET owner_color=? WHERE ?::inet << network AND owner_color IS NULL") +			or die "Couldn't prepare query"; +	} + +	print STDERR "$date $4\n"; +	$q->execute($date, $4, $date) +		or die "Couldn't push $1 into database"; +	if (defined($owner_color)) { +		$cq->execute($owner_color, $4) +			or die "Couldn't push $1 into database"; +	} +} +close SYSLOG; diff --git a/clients/ipv6-dns.pl b/clients/ipv6-dns.pl new file mode 100755 index 0000000..d965acc --- /dev/null +++ b/clients/ipv6-dns.pl @@ -0,0 +1,133 @@ +#! /usr/bin/perl +use DBI; +use Net::DNS; +use Net::IP; +use lib '../include'; +use nms; +use strict; +use warnings; + +BEGIN { +        require "../include/config.pm"; +        eval { +                require "../include/config.local.pm"; +        }; +} + +my $dbh = nms::db_connect() or die "Can't connect to database"; +my $res = Net::DNS::Resolver->new; + +$res->nameservers("$nms::config::pri_a.$nms::config::tgname.gathering.org"); + +my $kname = 'DHCP_UPDATER'; + +sub get_reverse { +	my ($ip) = shift; +	$ip = new Net::IP($ip) or return 0; +	my $a = $res->query($ip->reverse_ip, 'PTR') or return 0; +	foreach my $n ($a->answer) { +		return $n->{'ptrdname'}; # Return first element, ignore the rest (= +	} +	return 0; +} + +sub any_quad_a { +	my ($host) = shift; +	my $a = $res->query($host, 'AAAA') or return 0; +	foreach my $n ($a->answer) { +		return 1 if ($n->{'type'} eq 'AAAA'); +	} +	return 0; +} + +print "Running automagic IPv6 DNS updates\n"; +while (1) { +	 +	# Fetch visible IPv6 addresses from the last three minutes +	my $q = $dbh->prepare("SELECT DISTINCT ON (ipv6.mac) ipv6.address AS v6, ipv6.mac, ipv4.address AS v4, ipv6.time - ipv6.age*'1 second'::interval FROM ipv6 LEFT JOIN ipv4 ON ipv4.mac = ipv6.mac WHERE ipv6.time > NOW()-'3 min'::interval ORDER BY ipv6.mac, ipv6.time DESC, mac") +		or die "Can't prepare query"; +	$q->execute() or die "Can't execute query"; +	 +	my $aaaas = 0; +	my $aaaa_errors = 0; +	my $ptrs = 0; +	my $ptr_errors = 0; +	my $update; +	my $v6; +	while (my $ref = $q->fetchrow_hashref()) { +		my $hostname = get_reverse($ref->{'v4'}); +		if ($hostname) { +			$v6 = $ref->{'v6'}; +			my @parts = split('\.', $hostname); +			my $hostname = shift @parts; +			my $domain = join('.', @parts); +			my $v6arpa = (new Net::IP($v6))->reverse_ip; +	 +			# Don't add records for nets we don't control +			next if not $v6arpa =~ m/$nms::config::ipv6zone/; +	 +			# Add IPv6 reverse +			if (!get_reverse($ref->{'v6'})) { +				$update = Net::DNS::Update->new($nms::config::ipv6zone); +				$update->push(pre => nxrrset("$v6arpa IN PTR")); # Only update if the RR is nonexistent +				$update->push(update => rr_add("$v6arpa IN PTR $hostname.$domain.")); +				$update->sign_tsig($kname, $nms::config::ddns_key); +				my $reply = $res->send($update); +				if ($reply->header->rcode eq 'NOERROR') { +					$ptrs++; +				} else { +					$ptr_errors++; +				} +			} +	 +			# Add IPv6 forward +			if (!any_quad_a("$hostname.$domain")) { +				$update = Net::DNS::Update->new($domain); +				$update->push(pre => nxrrset("$hostname.$domain. IN AAAA $v6")); # Only update if the RR is nonexistent +				$update->push(update => rr_add("$hostname.$domain. IN AAAA $v6")); +				$update->sign_tsig($kname, $nms::config::ddns_key); +				my $reply = $res->send($update); +				if ($reply->header->rcode eq 'NOERROR') { +					$aaaas++; +				} else { +					$aaaa_errors++; +				} +			} +		} +	} +	print "Added $ptrs PTR records. $ptr_errors errors occured.\n"; +	print "Added $aaaas AAAA records. $aaaa_errors errors occured.\n"; +	 +	 +	# Remove old PTR records, that is, for hosts we haven't seen the last four +	# hours, but not older than four and a half hours, as it would take forever to +	# try to delete everything. FIXME: Query the zone file and diff against the +	# database, to avoid running as many NS-updates as tuples in the result set. +	 +	$q = $dbh->prepare("SELECT DISTINCT address AS v6 FROM ipv6 WHERE time < NOW() - '4 hours'::interval AND time > NOW() - '4 hours 30 minutes'::interval") +		or die "Can't prepare query"; +	$q->execute() or die "Can't execute query"; +	 +	my $i = 0; +	my $errors = 0; +	while (my $ref = $q->fetchrow_hashref()) { +		$v6 = $ref->{'v6'}; +		if (get_reverse($v6)) { +			my $v6arpa = (new Net::IP($v6))->reverse_ip; +			my $update = Net::DNS::Update->new($nms::config::ipv6zone); +			$update->push(pre => yxrrset("$v6arpa PTR")); # Only update if the RR exists +			$update->push(update => rr_del("$v6arpa IN PTR")); +			$update->sign_tsig($kname, $nms::config::ddns_key); +			my $reply = $res->send($update); +			if ($reply->header->rcode eq 'NOERROR') { +				$i++; +			} else { +				$errors++; +			} +		} +	} +	 +	print "Deleted $i old PTR records. $errors errors occured.\n"; +	print "Sleeping for two minutes.\n"; +	sleep(120); +} diff --git a/clients/ipv6-stats.pl b/clients/ipv6-stats.pl new file mode 100755 index 0000000..59dacbd --- /dev/null +++ b/clients/ipv6-stats.pl @@ -0,0 +1,89 @@ +#!/usr/bin/perl + +use warnings; +use strict; +use lib '../include'; +use nms qw(switch_connect switch_exec switch_disconnect); +use Net::Telnet::Cisco; + +BEGIN { +        require "../include/config.pm"; +        eval { +                require "../include/config.local.pm"; +        }; +} + +# +# Fetch list of MAC addresses and IPv6 addresses +# +sub query_router { +	my ($host) = @_; + +	my $ios = Net::Telnet::Cisco->new( +			Host => $host, +			Errmode => 'return'); +	if (not defined $ios) { +		warn "Can't connect to $host: $!, skipping"; +		return (); +	} +	if (not $ios->login($nms::config::ios_user, $nms::config::ios_pass)) { +		warn "Can't login to $host. Wrong username or password?"; +		return (); +	} +	$ios->autopage(0); +	$ios->cmd("terminal length 0"); +	my @v6data = $ios->cmd('show ipv6 neighbors') +		or warn "$host wouldn't let me run show ipv6 neighbors."; +	my @v4data = $ios->cmd('show ip arp') +		or warn "$host wouldn't let me run show ip arp."; + +	# Remove useless header and footer +#	shift @v6data;  +	pop @v6data; +#	shift @v4data; +	pop @v4data; + +	return { 'v6' => \@v6data, 'v4' => \@v4data }; +} + +while (1) { +	print "Gathering IPv6 and IPv4 stats\n"; +	# Connect to DB +	my $dbh = nms::db_connect(); +	$dbh->{AutoCommit} = 0; + +	my ($v4, $v6) = 0; +	foreach my $router (@nms::config::distrobox_ips) { +		my $data = query_router($router); +		# IPv6 +		foreach my $line (@{$data->{'v6'}}) { +			my ($address, $age, $mac, undef, undef) = split('\s+', $line); +			if ($mac =~ /[a-f0-9]{4}\.[a-f0-9]{4}\.[a-f0-9]{4}/ && # Sanity check MAC address +				 $address !~ /^FE.*/) { # Filter out non-routable addresses +				my $q = $dbh->prepare('INSERT INTO ipv6 (address, age, mac, time) VALUES (?, ?, ?, timeofday()::timestamp)') +					or die "Can't prepare query: $!"; +				$q->execute($address, $age, $mac) +					or die "Can't execute query: $!"; +				$v6++; +			} +		} +		# IPv4 +		foreach my $line (@{$data->{'v4'}}) { +			my (undef, $address, $age, $mac, undef, undef) = split('\s+', $line); +			if ($mac =~ /[a-f0-9]{4}\.[a-f0-9]{4}\.[a-f0-9]{4}/) {# Sanity check MAC address +				$age = 0 if $age eq '-'; +				my $q = $dbh->prepare('INSERT INTO ipv4 (address, age, mac, time) VALUES (?, ?, ?, timeofday()::timestamp)') +					or die "Can't prepare query: $!"; +				$q->execute($address, $age, $mac) +					or die "Can't execute query: $!"; +				$v4++; +			} +		} +	} +	print "Added $v6 IPv6 addresses and $v4 IPv4 addresses.\n"; +	$dbh->commit; +	$dbh->disconnect; +	 +	print "Sleeping for two minutes.\n"; +	sleep 120; # Sleep for two minutes +} diff --git a/clients/portnames.pl b/clients/portnames.pl new file mode 100755 index 0000000..2b29189 --- /dev/null +++ b/clients/portnames.pl @@ -0,0 +1,18 @@ +#! /usr/bin/perl + +my ($host,$switchtype,$community) = @ARGV; + +open SNMP, "snmpwalk -Os -c $community -v 2c $host ifDescr |" +	or die "snmpwalk: $!"; + +print "begin;\n"; +print "delete from portnames where switchtype='$switchtype';\n"; + +while (<SNMP>) { +	chomp; +	/^ifDescr\.(\d+) = STRING: (.*)$/ or next; + +	print "insert into portnames (switchtype,port,description) values ('$switchtype',$1,'$2 (port $1)');\n"; +} + +print "end;\n"; diff --git a/clients/smanagrun.pl b/clients/smanagrun.pl new file mode 100755 index 0000000..4d03696 --- /dev/null +++ b/clients/smanagrun.pl @@ -0,0 +1,167 @@ +#!/usr/bin/perl +# +# + +use warnings; +use strict; +use Net::Telnet; +use DBI; +use POSIX; +use lib '../include'; +use nms; +use Data::Dumper::Simple; + +BEGIN { +	require "../include/config.pm"; +	eval { +		require "../include/config.local.pm"; +	}; +} +# Tweak and check +my $password = ''; +my $timeout = 15; +my $delaytime = 30; +my $poll_frequency = 60; + +my $dbh = db_connect(); +$dbh->{AutoCommit} = 0; + +my $spoll = $dbh->prepare(" +SELECT +  addr, +  sysname +FROM +  squeue +WHERE +  processed = 'f' AND +  disabled = 'f' AND +  (locked='f' OR now() - updated > '10 minutes'::interval) AND +  (delay IS NULL OR delay < now()) +ORDER BY +  priority DESC, +  added +LIMIT 1"); +my $sgetallpoll = $dbh->prepare(" +SELECT +  id, +  gid, +  addr, +  sysname, +  cmd +FROM +  squeue +WHERE +  sysname = ? AND +  disabled = 'f' AND +  processed = 'f' +ORDER BY +  priority DESC, +  added"); + +my $slock = $dbh->prepare("UPDATE squeue SET locked = 't', updated=now() WHERE sysname = ?") +	or die "Unable to prepare slock"; +my $sunlock = $dbh->prepare("UPDATE squeue SET locked = 'f', updated=now() WHERE sysname = ?") +	or die "Unable to prepare sunlock"; +my $sresult = $dbh->prepare("UPDATE squeue SET updated = now(), result = ?, +                            processed = 't' WHERE id = ?") +	or die "Unable to prepare sresult"; +my $sdelay = $dbh->prepare("UPDATE squeue SET delay = now() + delaytime, updated=now(), result = ? WHERE sysname = ?") +	or die "Unable to prepae sdelay"; + +## Send a command to switch and return the data recvied from the switch +#sub switch_exec($$) { +#	my ($cmd, $conn) = @_; +# +#	# Send the command and get data from switch +#	my @data = $conn->cmd($cmd); +#	my @lines = (); +#	foreach my $line (@data) { +#		# Remove escape-7 sequence +#		$line =~ s/\x1b\x37//g; +#		push (@lines, $line); +#	} +# +#	return @data; +#} +# +#sub switch_connect($) { +#	my ($ip) = @_; +# +#	my $conn = new Net::Telnet(	Timeout => $timeout, +#					Dump_Log => '/tmp/dumplog-queue', +#					Errmode => 'return', +#					Prompt => '/DGS-3100\#/i'); +#	my $ret = $conn->open(	Host => $ip); +#	if (!$ret || $ret != 1) { +#		return (undef); +#	} +#	# XXX: Just send the password as text, I did not figure out how to +#	# handle authentication with only password through $conn->login(). +#	#$conn->login(»·Prompt => '/password[: ]*$/i', +#	#		Name => $password, +#	#		Password => $password); +#	$conn->cmd($password); +#	# Get rid of banner +#	$conn->get; +#	return ($conn); +#} +# +sub mylog { +	my $msg = shift; +	my $time = POSIX::ctime(time); +	$time =~ s/\n.*$//; +	printf STDERR "[%s] %s\n", $time, $msg; +} + +while (1) { +	$spoll->execute() or die "Could not execute spoll"; +	my $switch = $spoll->fetchrow_hashref(); +	if (!defined($switch)) { +		$dbh->commit; +		mylog("No available switches in pool, sleeping."); +		sleep 10; +		next; +	} +	$slock->execute($switch->{sysname}); +	$dbh->commit(); + +	if ($switch->{'locked'}) { +		mylog("WARNING: Lock timed out on $switch->{'ip'}, breaking lock"); +	} + +	mylog("Connecting to $switch->{sysname} on $switch->{addr}"); +	my $conn = switch_connect($switch->{addr}); +	if (!defined($conn)) { +		mylog("Could not connect to ".$switch->{sysname}."(".$switch->{addr}.")"); +		$sdelay->execute("Could not connect to switch, delaying...", $switch->{sysname}); +		$sunlock->execute($switch->{sysname}); +		$dbh->commit(); +		next; +	} +	my $error; +	$error = $sgetallpoll->execute($switch->{sysname}); +	if (!$error) { +		print "Could not execute sgetallpoll\n".$dbh->errstr(); +		$conn->close; +		next; +	} +	while (my $row = $sgetallpoll->fetchrow_hashref()) { +		print "sysname: ".$row->{sysname}." cmd: ".$row->{cmd}."\n"; +		my @data; +		my @commands = split(/[\r\n\000]+/, $row->{cmd}); +		for my $cmd (@commands) { +			next unless $cmd =~ /\S/; # ignorer linjer med kun whitespace +			push @data, "# $cmd"; +			if ($cmd =~ s/^!//) { +				push @data, switch_exec($cmd, $conn, 1); +			} else { +				push @data, switch_exec($cmd, $conn); +			} +		} +		my $result = join("\n", @data); +		$sresult->execute($result, $row->{id}); +	} +	$conn->close(); +	$sunlock->execute($switch->{sysname}); +} + diff --git a/clients/snmp.sql b/clients/snmp.sql new file mode 100644 index 0000000..47b4458 --- /dev/null +++ b/clients/snmp.sql @@ -0,0 +1,24 @@ +create table switchtypes ( +	switchtype varchar not null primary key, +	ports varchar not null +); + +create table switches ( +	switch serial not null primary key, +	ip inet not null, +	sysname varchar not null, +	switchtype varchar not null references switchtypes, +	last_updated timestamp, +	locked boolean not null default 'f' +); + +create table poll ( +	time timestamp not null, +	switch integer not null references switches, +	port integer not null, +	bytes_in bigint not null, +	bytes_out bigint not null, + +	primary key ( time, switch, port ) +); +create index poll_switch_port on poll ( switch, port ); diff --git a/clients/snmpfetch.pl b/clients/snmpfetch.pl new file mode 100755 index 0000000..487ae11 --- /dev/null +++ b/clients/snmpfetch.pl @@ -0,0 +1,281 @@ +#! /usr/bin/perl +use BER; +use DBI; +use POSIX; +use Time::HiRes; +use Net::Telnet; +use strict; +use warnings; +require 'SNMP_Session.pm'; + +use lib '../include'; +use nms; +use threads; + +# normal mode: fetch switches from the database +# instant mode: poll the switches specified on the command line +if (defined($ARGV[0])) { +	poll_loop(@ARGV); +} else { +	my $threads = 50; +	for (1..$threads) { +		threads->create(\&poll_loop); +	} +	poll_loop();	 +} + +sub poll_loop { +	my @switches = @_; +	my $instant = (scalar @switches > 0); +	my $timeout = 15; + +	my $dbh = nms::db_connect(); +	$dbh->{AutoCommit} = 0; + +	my $qualification; +	if ($instant) { +		$qualification = "sysname=?"; +	} else { +		$qualification = <<"EOF"; +  (last_updated IS NULL OR now() - last_updated > poll_frequency) +  AND (locked='f' OR now() - last_updated > '15 minutes'::interval) +  AND ip is not null +EOF +	} + +	my $qswitch = $dbh->prepare(<<"EOF") +SELECT  +  *, +  DATE_TRUNC('second', now() - last_updated - poll_frequency) AS overdue +FROM +  switches +  NATURAL LEFT JOIN switchtypes +WHERE $qualification +ORDER BY +  priority DESC, +  overdue DESC +LIMIT 1 +FOR UPDATE OF switches +EOF +		or die "Couldn't prepare qswitch"; +	my $qlock = $dbh->prepare("UPDATE switches SET locked='t', last_updated=now() WHERE switch=?") +		or die "Couldn't prepare qlock"; +	my $qunlock = $dbh->prepare("UPDATE switches SET locked='f', last_updated=now() WHERE switch=?") +		or die "Couldn't prepare qunlock"; +	my $qpoll = $dbh->prepare("INSERT INTO polls (time, switch, port, bytes_in, bytes_out, errors_in, errors_out) VALUES (timeofday()::timestamp,?,?,?,?,?,?)") +		or die "Couldn't prepare qpoll"; +	my $qtemppoll = $dbh->prepare("INSERT INTO temppoll (time, switch, temp) VALUES (timeofday()::timestamp,?::text::int,?::text::float)") +		or die "Couldn't prepare qtemppoll"; +	my $qcpupoll = $dbh->prepare("INSERT INTO cpuloadpoll (time, switch, entity, value) VALUES (timeofday()::timestamp,?::text::int,?,?)") +		or die "Couldn't prepare qtemppoll"; + +	while (1) { +		my $sysname; +		if ($instant) { +			$sysname = shift @ARGV; +			exit if (!defined($sysname)); +			$qswitch->execute($sysname) +				or die "Couldn't get switch"; +		} else { +			# Find a switch to grab +			$qswitch->execute() +				or die "Couldn't get switch"; +		} +		my $switch = $qswitch->fetchrow_hashref(); + +		if (!defined($switch)) { +			$dbh->commit; + +			if ($instant) { +				mylog("No such switch $sysname available, quitting."); +				exit; +			} else {	 +				mylog("No available switches in pool, sleeping."); +				sleep 15; +				next; +			} +		} + +		$qlock->execute($switch->{'switch'}) +			or die "Couldn't lock switch"; +		$dbh->commit; + +		if ($switch->{'locked'}) { +			mylog("WARNING: Lock timed out on $switch->{'ip'}, breaking lock"); +		} + +		my $msg; +		if (defined($switch->{'overdue'})) { +			$msg = sprintf "Polling ports %s on %s (%s), %s overdue.", +				$switch->{'ports'}, $switch->{'ip'}, $switch->{'sysname'}, $switch->{'overdue'}; +		} else { +			$msg = sprintf "Polling ports %s on %s (%s), never polled before.", +				$switch->{'ports'}, $switch->{'ip'}, $switch->{'sysname'}; +		} +		mylog($msg); + +		my $ip = $switch->{'ip'}; + +		if ($ip eq '127.0.0.1') { +			mylog("Polling disabled for this switch, skipping."); +			$qunlock->execute($switch->{'switch'}) +				or die "Couldn't unlock switch"; +			$dbh->commit; +			next; +		} + +		my $community = $switch->{'community'}; +		my $start = [Time::HiRes::gettimeofday]; +		eval { +			my $session; +			if ($switch->{'wide_counters'}) { +				$session = SNMPv2c_Session->open($ip, $community, 161) +					or die "Couldn't talk to switch"; +			} else { +				$session = SNMP_Session->open($ip, $community, 161) +					or die "Couldn't talk to switch"; +			} +			my @ports = expand_ports($switch->{'ports'}); + +			for my $port (@ports) { +				my $in = fetch_data($session, $port, 0, $switch->{'wide_counters'}); +				die $switch->{'switch'}.":$port: failed reading in" if !defined $in; +				my $out = fetch_data($session, $port, 1, $switch->{'wide_counters'}); +				die $switch->{'switch'}.":$port: failed reading out" if !defined $out; +				my $ine = fetch_errors($session, $port, 0); +				die $switch->{'switch'}. ":$port: failed reading in-errors" if !defined $ine; +				my $oute = fetch_errors($session, $port, 1); +				die $switch->{'switch'}. ":$port: failed reading out-errors" if !defined $oute; + +				$qpoll->execute($switch->{'switch'}, $port, $in, $out, $ine, $oute) || die "%s:%s: %s\n", $switch->{'switch'}, $port, $in; +			} +			$session->close; +		}; +		if ($@) { +			mylog("ERROR: $@ (during poll of $ip)"); +			$dbh->rollback; +		} +		 +		my $elapsed = Time::HiRes::tv_interval($start); +		$msg = sprintf "Polled $switch->{'ip'} in %5.3f seconds.", $elapsed;		 +		mylog($msg); + +		$qunlock->execute($switch->{'switch'}) +			or warn "Couldn't unlock switch"; +		$dbh->commit; +	} +} + +sub fetch_data { +	my ($session, $port, $out, $wide_counters) = @_; +	 +	my $oid; +	if ($wide_counters) { +		if ($out) { +			$oid = BER::encode_oid(1, 3, 6, 1, 2, 1, 31, 1, 1, 1, 10, $port);  # interfaces.ifTable.ifEntry.ifHCOutOctets +		} else { +			$oid = BER::encode_oid(1, 3, 6, 1, 2, 1, 31, 1, 1, 1, 6, $port);  # interfaces.ifTable.ifEntry.ifHCInOctets +		} +	} else { +		if ($out) { +			$oid = BER::encode_oid(1, 3, 6, 1, 2, 1, 2, 2, 1, 16, $port);  # interfaces.ifTable.ifEntry.ifOutOctets +		} else { +			$oid = BER::encode_oid(1, 3, 6, 1, 2, 1, 2, 2, 1, 10, $port);  # interfaces.ifTable.ifEntry.ifInOctets +		} +	} + +	return fetch_snmp($session, $oid); +} +sub fetch_errors { +	my ($session, $port, $out) = @_; +	 +	my $oid; +	if ($out) { +		$oid = BER::encode_oid(1, 3, 6, 1, 2, 1, 2, 2, 1, 20, $port);     # interfaces.ifTable.ifEntry.ifOutErrors +	} else { +		$oid = BER::encode_oid(1, 3, 6, 1, 2, 1, 2, 2, 1, 14, $port);     # interfaces.ifTable.ifEntry.ifInErrors +	} + +	return fetch_snmp($session, $oid); +} +	 +sub fetch_snmp { +	my ($session, $oid) = @_; + +	if ($session->get_request_response($oid)) { +		my ($bindings) = $session->decode_get_response ($session->{pdu_buffer}); +		my $binding; +		while ($bindings ne '') { +			($binding,$bindings) = &decode_sequence ($bindings); +			my ($oid,$value) = &decode_by_template ($binding, "%O%@"); +			return BER::pretty_print($value); +		} +	} +	die "Couldn't get info from switch"; +} + +sub expand_ports { +	my $in = shift; +	my @ranges = split /,/, $in; +	my @ret = (); + +	for my $range (@ranges) { +		if ($range =~ /^\d+$/) { +			push @ret, $range; +		} elsif ($range =~ /^(\d+)-(\d+)$/) { +			for my $i ($1..$2) { +				push @ret, $i; +			} +		} else { +			die "Couldn't understand '$range' in ports"; +		} +	} + +	return (sort { $a <=> $b } @ret);  +} + +sub mylog { +	my $msg = shift; +	my $time = POSIX::ctime(time); +	$time =~ s/\n.*$//; +	printf STDERR "[%s] %s\n", $time, $msg; +} + +#sub switch_exec { +#	my ($cmd, $conn) = @_; +# +#	# Send the command and get data from switch +##	$conn->dump_log(*STDOUT); +#	my @data = $conn->cmd($cmd); +#	my @lines = (); +#	foreach my $line (@data) { +#		# Remove escape-7 sequence +#		$line =~ s/\x1b\x37//g; +#		push @lines, $line; +#	} +# +#	return @lines; +#} + +#sub switch_connect { +#	my ($ip) = @_; +# +#	my $conn = new Net::Telnet(     Timeout => $timeout, +#					Dump_Log => '/tmp/dumplog-tempfetch', +#					Errmode => 'return', +#					Prompt => '/es-3024|e(\-)?\d+\-\dsw>/i'); +#	my $ret = $conn->open(  Host => $ip); +#	if (!$ret || $ret != 1) { +#		return (0); +#	} +#	# XXX: Just send the password as text, I did not figure out how to +#	# handle authentication with only password through $conn->login(). +#	#$conn->login(  Prompt => '/password[: ]*$/i', +#	#	       Name => $password, +#	#	       Password => $password); +#	my @data = $conn->cmd($password); +#	# Get rid of banner +#	$conn->get; +#	return $conn; +#} + diff --git a/clients/update-public-nms.sh b/clients/update-public-nms.sh new file mode 100755 index 0000000..ed1807c --- /dev/null +++ b/clients/update-public-nms.sh @@ -0,0 +1,12 @@ +#!/bin/sh +DIR=/srv/www/nms-public.tg13.gathering.org + +wget -qO$DIR/nettkart-trafikk.png.new http://nms.tg13.gathering.org/nettkart.pl +wget -qO$DIR/nettkart-dhcp.png.new http://nms.tg13.gathering.org/dhcpkart.pl +wget -qO$DIR/led.txt.new http://nms.tg13.gathering.org/led.pl +mv $DIR/nettkart-trafikk.png.new $DIR/nettkart-trafikk.png +mv $DIR/nettkart-dhcp.png.new $DIR/nettkart-dhcp.png +mv $DIR/led.txt.new $DIR/led.txt + +/usr/bin/perl -i -pe 'use POSIX qw(strftime); my $timestamp = strftime("%a, %d %b %Y %H:%M:%S %z", localtime(time())); s/Sist oppdatert:.*/Sist oppdatert: $timestamp/g;' /srv/www/nms-public.tg13.gathering.org/dhcp.html +/usr/bin/perl -i -pe 'use POSIX qw(strftime); my $timestamp = strftime("%a, %d %b %Y %H:%M:%S %z", localtime(time())); s/Sist oppdatert:.*/Sist oppdatert: $timestamp/g;' /srv/www/nms-public.tg13.gathering.org/trafikk.html diff --git a/clients/update-switch-placements.pl b/clients/update-switch-placements.pl new file mode 100644 index 0000000..d635f87 --- /dev/null +++ b/clients/update-switch-placements.pl @@ -0,0 +1,53 @@ +#! /usr/bin/perl + +print "begin;\n"; +print "delete from placements;\n"; + +open PATCHLIST, "../patchlist.txt" +	or die "../patchlist.txt: $!"; + +my $RANGE = "87.76."; + +my $i = 1; +while (<PATCHLIST>) { +	chomp; +	my ($name, $distro, $port) = split / /; + +	$name =~ /e(\d+)-(\d+)/; +	my ($e, $s) = ($1, $2); + +	my $x = int(168 + $e * 11); +	my $y; + +	$x += 1  if ($e >= 11); +	$x += 2  if ($e >= 15); +	$x += 2  if ($e >= 15 && $e < 45 && $s > 2); +	$x += 2  if ($e >= 21); +	$x += 2  if ($e >= 27 && $e < 45 && $s > 2); +	$x += 9  if ($e >= 29); +	$x += 1  if ($e >= 31); +	$x += 2  if ($e >= 35); +	$x += 15 if ($e >= 45); +	$x += 2  if ($e >= 51); +	$x += 11 if ($e >= 61); +	$x += 1  if ($e >= 67); +	$x += 1  if ($e >= 71); +	$x += 1  if ($e >= 75); +	$x += 1  if ($e >= 81); + +	if ($s > 2) { +		$y = 152 + 88 - 88 * ($s-3); +	} else { +		$y = 357 + 88 - 88 * ($s-1); +	} + +	my $xx = $x + 16; +	my $yy = $y + 88; + +	# Justeringer + +	print "insert into placements (switch, placement) values ($i, box '(($x,$y),($xx,$yy))');\n"; +	$i++; +} + +print "end;\n"; diff --git a/dhcp/README b/dhcp/README new file mode 100644 index 0000000..9675ea0 --- /dev/null +++ b/dhcp/README @@ -0,0 +1,7 @@ +P + +"Jag fÃ¥r ingen DHCP!" -- http://files.jocke.no/b/ingen-dhcp.jpg + +This directory is a copy of our install, please do not use these directly! +It is provided to show you what the scripts are generating for you… + diff --git a/dhcp/ciscowlc.conf b/dhcp/ciscowlc.conf new file mode 100644 index 0000000..2e06179 --- /dev/null +++ b/dhcp/ciscowlc.conf @@ -0,0 +1,9 @@ +option space CiscoAP; +option CiscoAP.server-address code 241 = array of ip-address; +set vendor-string = option vendor-class-identifier; + +class "cisco-aps" { +       match if substring (option vendor-class-identifier, 0, 8) = "Cisco AP"; +       vendor-option-space CiscoAP; +       option CiscoAP.server-address 151.216.125.21,151.216.125.22; +} diff --git a/dhcp/conf.d/ap-dist0.conf b/dhcp/conf.d/ap-dist0.conf new file mode 100644 index 0000000..e370d08 --- /dev/null +++ b/dhcp/conf.d/ap-dist0.conf @@ -0,0 +1,14 @@ +zone ap-dist0.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.116.0 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.116.1; +    option domain-name "ap-dist0.tg13.gathering.org"; +    ddns-domainname "ap-dist0.tg13.gathering.org"; +    range 151.216.116.5 151.216.116.62; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/ap-dist1.conf b/dhcp/conf.d/ap-dist1.conf new file mode 100644 index 0000000..5294af2 --- /dev/null +++ b/dhcp/conf.d/ap-dist1.conf @@ -0,0 +1,14 @@ +zone ap-dist1.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.116.64 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.116.65; +    option domain-name "ap-dist1.tg13.gathering.org"; +    ddns-domainname "ap-dist1.tg13.gathering.org"; +    range 151.216.116.69 151.216.116.126; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/ap-dist2.conf b/dhcp/conf.d/ap-dist2.conf new file mode 100644 index 0000000..0a16ca9 --- /dev/null +++ b/dhcp/conf.d/ap-dist2.conf @@ -0,0 +1,14 @@ +zone ap-dist2.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.116.128 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.116.129; +    option domain-name "ap-dist2.tg13.gathering.org"; +    ddns-domainname "ap-dist2.tg13.gathering.org"; +    range 151.216.116.133 151.216.116.190; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/ap-dist3.conf b/dhcp/conf.d/ap-dist3.conf new file mode 100644 index 0000000..ec88126 --- /dev/null +++ b/dhcp/conf.d/ap-dist3.conf @@ -0,0 +1,14 @@ +zone ap-dist3.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.116.192 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.116.193; +    option domain-name "ap-dist3.tg13.gathering.org"; +    ddns-domainname "ap-dist3.tg13.gathering.org"; +    range 151.216.116.197 151.216.116.254; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/ap-dist4.conf b/dhcp/conf.d/ap-dist4.conf new file mode 100644 index 0000000..8e76846 --- /dev/null +++ b/dhcp/conf.d/ap-dist4.conf @@ -0,0 +1,14 @@ +zone ap-dist4.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.117.0 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.117.1; +    option domain-name "ap-dist4.tg13.gathering.org"; +    ddns-domainname "ap-dist4.tg13.gathering.org"; +    range 151.216.117.5 151.216.117.62; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/care.conf b/dhcp/conf.d/care.conf new file mode 100644 index 0000000..8f9ae38 --- /dev/null +++ b/dhcp/conf.d/care.conf @@ -0,0 +1,14 @@ +zone care.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.104.0 netmask 255.255.255.0 { +    authoritative; +    option routers 151.216.104.1; +    option domain-name "care.tg13.gathering.org"; +    ddns-domainname "care.tg13.gathering.org"; +    range 151.216.104.5 151.216.104.254; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/chillout.conf b/dhcp/conf.d/chillout.conf new file mode 100644 index 0000000..a1c8828 --- /dev/null +++ b/dhcp/conf.d/chillout.conf @@ -0,0 +1,18 @@ +zone chillout.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.55.0 netmask 255.255.255.0 { +    authoritative; +    option routers 151.216.55.1; +    option domain-name "chillout.tg13.gathering.org"; +    ddns-domainname "chillout.tg13.gathering.org"; +    range 151.216.55.5 151.216.55.254; +    ignore client-updates; +} + +host compo { hardware ethernet 52:54:00:f4:fa:3c; fixed-address 151.216.55.54; } +host tgpc { hardware ethernet 52:54:00:b7:45:98; fixed-address 151.216.55.61; } +host hack { hardware ethernet 52:54:00:84:ba:b9; fixed-address 151.216.55.56; } + diff --git a/dhcp/conf.d/creativia.conf b/dhcp/conf.d/creativia.conf new file mode 100644 index 0000000..d9d4bf1 --- /dev/null +++ b/dhcp/conf.d/creativia.conf @@ -0,0 +1,14 @@ +zone creativia.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.50.0 netmask 255.255.254.0 { +    authoritative; +    option routers 151.216.50.1; +    option domain-name "creativia.tg13.gathering.org"; +    ddns-domainname "creativia.tg13.gathering.org"; +    range 151.216.50.21 151.216.51.253; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/crew1.conf b/dhcp/conf.d/crew1.conf new file mode 100644 index 0000000..0065c70 --- /dev/null +++ b/dhcp/conf.d/crew1.conf @@ -0,0 +1,14 @@ +zone crew1.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.46.0 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.46.1; +    option domain-name "crew1.tg13.gathering.org"; +    ddns-domainname "crew1.tg13.gathering.org"; +    range 151.216.46.5 151.216.46.62; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/crew2.conf b/dhcp/conf.d/crew2.conf new file mode 100644 index 0000000..86687c6 --- /dev/null +++ b/dhcp/conf.d/crew2.conf @@ -0,0 +1,14 @@ +zone crew2.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.46.128 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.46.129; +    option domain-name "crew2.tg13.gathering.org"; +    ddns-domainname "crew2.tg13.gathering.org"; +    range 151.216.46.133 151.216.46.190; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/crew3.conf b/dhcp/conf.d/crew3.conf new file mode 100644 index 0000000..94472b5 --- /dev/null +++ b/dhcp/conf.d/crew3.conf @@ -0,0 +1,14 @@ +zone crew3.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.47.0 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.47.1; +    option domain-name "crew3.tg13.gathering.org"; +    ddns-domainname "crew3.tg13.gathering.org"; +    range 151.216.47.5 151.216.47.62; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/crew4.conf b/dhcp/conf.d/crew4.conf new file mode 100644 index 0000000..4abbfb1 --- /dev/null +++ b/dhcp/conf.d/crew4.conf @@ -0,0 +1,14 @@ +zone crew4.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.47.128 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.47.129; +    option domain-name "crew4.tg13.gathering.org"; +    ddns-domainname "crew4.tg13.gathering.org"; +    range 151.216.47.133 151.216.47.190; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/crew5.conf b/dhcp/conf.d/crew5.conf new file mode 100644 index 0000000..177340d --- /dev/null +++ b/dhcp/conf.d/crew5.conf @@ -0,0 +1,14 @@ +zone crew5.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.48.0 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.48.1; +    option domain-name "crew5.tg13.gathering.org"; +    ddns-domainname "crew5.tg13.gathering.org"; +    range 151.216.48.5 151.216.48.62; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/crew6.conf b/dhcp/conf.d/crew6.conf new file mode 100644 index 0000000..5857c12 --- /dev/null +++ b/dhcp/conf.d/crew6.conf @@ -0,0 +1,14 @@ +zone crew6.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.48.128 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.48.129; +    option domain-name "crew6.tg13.gathering.org"; +    ddns-domainname "crew6.tg13.gathering.org"; +    range 151.216.48.133 151.216.48.190; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/defektraid.conf b/dhcp/conf.d/defektraid.conf new file mode 100644 index 0000000..6754fdb --- /dev/null +++ b/dhcp/conf.d/defektraid.conf @@ -0,0 +1,14 @@ +zone defektraid.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.56.0 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.56.1; +    option domain-name "defektraid.tg13.gathering.org"; +    ddns-domainname "defektraid.tg13.gathering.org"; +    range 151.216.56.5 151.216.56.62; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e1-3.conf b/dhcp/conf.d/e1-3.conf new file mode 100644 index 0000000..3b4b1ee --- /dev/null +++ b/dhcp/conf.d/e1-3.conf @@ -0,0 +1,14 @@ +zone e1-3.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.1.0 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.1.1; +    option domain-name "e1-3.tg13.gathering.org"; +    ddns-domainname "e1-3.tg13.gathering.org"; +    range 151.216.1.5 151.216.1.62; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e1-4.conf b/dhcp/conf.d/e1-4.conf new file mode 100644 index 0000000..58c2468 --- /dev/null +++ b/dhcp/conf.d/e1-4.conf @@ -0,0 +1,14 @@ +zone e1-4.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.1.64 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.1.65; +    option domain-name "e1-4.tg13.gathering.org"; +    ddns-domainname "e1-4.tg13.gathering.org"; +    range 151.216.1.69 151.216.1.126; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e11-1.conf b/dhcp/conf.d/e11-1.conf new file mode 100644 index 0000000..101b566 --- /dev/null +++ b/dhcp/conf.d/e11-1.conf @@ -0,0 +1,14 @@ +zone e11-1.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.3.128 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.3.129; +    option domain-name "e11-1.tg13.gathering.org"; +    ddns-domainname "e11-1.tg13.gathering.org"; +    range 151.216.3.133 151.216.3.190; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e11-2.conf b/dhcp/conf.d/e11-2.conf new file mode 100644 index 0000000..7bfaa16 --- /dev/null +++ b/dhcp/conf.d/e11-2.conf @@ -0,0 +1,14 @@ +zone e11-2.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.3.192 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.3.193; +    option domain-name "e11-2.tg13.gathering.org"; +    ddns-domainname "e11-2.tg13.gathering.org"; +    range 151.216.3.197 151.216.3.254; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e11-3.conf b/dhcp/conf.d/e11-3.conf new file mode 100644 index 0000000..61f2b31 --- /dev/null +++ b/dhcp/conf.d/e11-3.conf @@ -0,0 +1,14 @@ +zone e11-3.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.4.0 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.4.1; +    option domain-name "e11-3.tg13.gathering.org"; +    ddns-domainname "e11-3.tg13.gathering.org"; +    range 151.216.4.5 151.216.4.62; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e11-4.conf b/dhcp/conf.d/e11-4.conf new file mode 100644 index 0000000..bb36c33 --- /dev/null +++ b/dhcp/conf.d/e11-4.conf @@ -0,0 +1,14 @@ +zone e11-4.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.4.64 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.4.65; +    option domain-name "e11-4.tg13.gathering.org"; +    ddns-domainname "e11-4.tg13.gathering.org"; +    range 151.216.4.69 151.216.4.126; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e13-1.conf b/dhcp/conf.d/e13-1.conf new file mode 100644 index 0000000..40e2ed6 --- /dev/null +++ b/dhcp/conf.d/e13-1.conf @@ -0,0 +1,14 @@ +zone e13-1.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.4.128 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.4.129; +    option domain-name "e13-1.tg13.gathering.org"; +    ddns-domainname "e13-1.tg13.gathering.org"; +    range 151.216.4.133 151.216.4.190; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e13-2.conf b/dhcp/conf.d/e13-2.conf new file mode 100644 index 0000000..efbf536 --- /dev/null +++ b/dhcp/conf.d/e13-2.conf @@ -0,0 +1,14 @@ +zone e13-2.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.4.192 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.4.193; +    option domain-name "e13-2.tg13.gathering.org"; +    ddns-domainname "e13-2.tg13.gathering.org"; +    range 151.216.4.197 151.216.4.254; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e13-3.conf b/dhcp/conf.d/e13-3.conf new file mode 100644 index 0000000..779d607 --- /dev/null +++ b/dhcp/conf.d/e13-3.conf @@ -0,0 +1,14 @@ +zone e13-3.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.5.0 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.5.1; +    option domain-name "e13-3.tg13.gathering.org"; +    ddns-domainname "e13-3.tg13.gathering.org"; +    range 151.216.5.5 151.216.5.62; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e13-4.conf b/dhcp/conf.d/e13-4.conf new file mode 100644 index 0000000..432173d --- /dev/null +++ b/dhcp/conf.d/e13-4.conf @@ -0,0 +1,14 @@ +zone e13-4.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.5.64 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.5.65; +    option domain-name "e13-4.tg13.gathering.org"; +    ddns-domainname "e13-4.tg13.gathering.org"; +    range 151.216.5.69 151.216.5.126; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e15-1.conf b/dhcp/conf.d/e15-1.conf new file mode 100644 index 0000000..4b377c0 --- /dev/null +++ b/dhcp/conf.d/e15-1.conf @@ -0,0 +1,14 @@ +zone e15-1.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.5.128 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.5.129; +    option domain-name "e15-1.tg13.gathering.org"; +    ddns-domainname "e15-1.tg13.gathering.org"; +    range 151.216.5.133 151.216.5.190; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e15-2.conf b/dhcp/conf.d/e15-2.conf new file mode 100644 index 0000000..5cfa45f --- /dev/null +++ b/dhcp/conf.d/e15-2.conf @@ -0,0 +1,14 @@ +zone e15-2.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.5.192 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.5.193; +    option domain-name "e15-2.tg13.gathering.org"; +    ddns-domainname "e15-2.tg13.gathering.org"; +    range 151.216.5.197 151.216.5.254; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e15-3.conf b/dhcp/conf.d/e15-3.conf new file mode 100644 index 0000000..2463d5d --- /dev/null +++ b/dhcp/conf.d/e15-3.conf @@ -0,0 +1,14 @@ +zone e15-3.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.6.0 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.6.1; +    option domain-name "e15-3.tg13.gathering.org"; +    ddns-domainname "e15-3.tg13.gathering.org"; +    range 151.216.6.5 151.216.6.62; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e15-4.conf b/dhcp/conf.d/e15-4.conf new file mode 100644 index 0000000..5a3895b --- /dev/null +++ b/dhcp/conf.d/e15-4.conf @@ -0,0 +1,14 @@ +zone e15-4.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.6.64 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.6.65; +    option domain-name "e15-4.tg13.gathering.org"; +    ddns-domainname "e15-4.tg13.gathering.org"; +    range 151.216.6.69 151.216.6.126; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e17-1.conf b/dhcp/conf.d/e17-1.conf new file mode 100644 index 0000000..1ad1721 --- /dev/null +++ b/dhcp/conf.d/e17-1.conf @@ -0,0 +1,14 @@ +zone e17-1.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.6.128 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.6.129; +    option domain-name "e17-1.tg13.gathering.org"; +    ddns-domainname "e17-1.tg13.gathering.org"; +    range 151.216.6.133 151.216.6.190; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e17-2.conf b/dhcp/conf.d/e17-2.conf new file mode 100644 index 0000000..96e1627 --- /dev/null +++ b/dhcp/conf.d/e17-2.conf @@ -0,0 +1,14 @@ +zone e17-2.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.6.192 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.6.193; +    option domain-name "e17-2.tg13.gathering.org"; +    ddns-domainname "e17-2.tg13.gathering.org"; +    range 151.216.6.197 151.216.6.254; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e17-3.conf b/dhcp/conf.d/e17-3.conf new file mode 100644 index 0000000..0db96f9 --- /dev/null +++ b/dhcp/conf.d/e17-3.conf @@ -0,0 +1,14 @@ +zone e17-3.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.7.0 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.7.1; +    option domain-name "e17-3.tg13.gathering.org"; +    ddns-domainname "e17-3.tg13.gathering.org"; +    range 151.216.7.5 151.216.7.62; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e17-4.conf b/dhcp/conf.d/e17-4.conf new file mode 100644 index 0000000..e191771 --- /dev/null +++ b/dhcp/conf.d/e17-4.conf @@ -0,0 +1,14 @@ +zone e17-4.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.7.64 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.7.65; +    option domain-name "e17-4.tg13.gathering.org"; +    ddns-domainname "e17-4.tg13.gathering.org"; +    range 151.216.7.69 151.216.7.126; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e19-1.conf b/dhcp/conf.d/e19-1.conf new file mode 100644 index 0000000..0940e48 --- /dev/null +++ b/dhcp/conf.d/e19-1.conf @@ -0,0 +1,14 @@ +zone e19-1.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.7.128 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.7.129; +    option domain-name "e19-1.tg13.gathering.org"; +    ddns-domainname "e19-1.tg13.gathering.org"; +    range 151.216.7.133 151.216.7.190; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e19-2.conf b/dhcp/conf.d/e19-2.conf new file mode 100644 index 0000000..5210c72 --- /dev/null +++ b/dhcp/conf.d/e19-2.conf @@ -0,0 +1,14 @@ +zone e19-2.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.7.192 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.7.193; +    option domain-name "e19-2.tg13.gathering.org"; +    ddns-domainname "e19-2.tg13.gathering.org"; +    range 151.216.7.197 151.216.7.254; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e19-3.conf b/dhcp/conf.d/e19-3.conf new file mode 100644 index 0000000..462ecd4 --- /dev/null +++ b/dhcp/conf.d/e19-3.conf @@ -0,0 +1,14 @@ +zone e19-3.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.8.0 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.8.1; +    option domain-name "e19-3.tg13.gathering.org"; +    ddns-domainname "e19-3.tg13.gathering.org"; +    range 151.216.8.5 151.216.8.62; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e19-4.conf b/dhcp/conf.d/e19-4.conf new file mode 100644 index 0000000..f4962c4 --- /dev/null +++ b/dhcp/conf.d/e19-4.conf @@ -0,0 +1,14 @@ +zone e19-4.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.8.64 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.8.65; +    option domain-name "e19-4.tg13.gathering.org"; +    ddns-domainname "e19-4.tg13.gathering.org"; +    range 151.216.8.69 151.216.8.126; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e21-1.conf b/dhcp/conf.d/e21-1.conf new file mode 100644 index 0000000..1d62d54 --- /dev/null +++ b/dhcp/conf.d/e21-1.conf @@ -0,0 +1,14 @@ +zone e21-1.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.8.128 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.8.129; +    option domain-name "e21-1.tg13.gathering.org"; +    ddns-domainname "e21-1.tg13.gathering.org"; +    range 151.216.8.133 151.216.8.190; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e21-2.conf b/dhcp/conf.d/e21-2.conf new file mode 100644 index 0000000..60d80d0 --- /dev/null +++ b/dhcp/conf.d/e21-2.conf @@ -0,0 +1,14 @@ +zone e21-2.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.8.192 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.8.193; +    option domain-name "e21-2.tg13.gathering.org"; +    ddns-domainname "e21-2.tg13.gathering.org"; +    range 151.216.8.197 151.216.8.254; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e21-3.conf b/dhcp/conf.d/e21-3.conf new file mode 100644 index 0000000..2ef40b0 --- /dev/null +++ b/dhcp/conf.d/e21-3.conf @@ -0,0 +1,14 @@ +zone e21-3.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.9.0 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.9.1; +    option domain-name "e21-3.tg13.gathering.org"; +    ddns-domainname "e21-3.tg13.gathering.org"; +    range 151.216.9.5 151.216.9.62; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e21-4.conf b/dhcp/conf.d/e21-4.conf new file mode 100644 index 0000000..84b41ce --- /dev/null +++ b/dhcp/conf.d/e21-4.conf @@ -0,0 +1,14 @@ +zone e21-4.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.9.64 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.9.65; +    option domain-name "e21-4.tg13.gathering.org"; +    ddns-domainname "e21-4.tg13.gathering.org"; +    range 151.216.9.69 151.216.9.126; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e23-1.conf b/dhcp/conf.d/e23-1.conf new file mode 100644 index 0000000..7ce1f65 --- /dev/null +++ b/dhcp/conf.d/e23-1.conf @@ -0,0 +1,14 @@ +zone e23-1.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.9.128 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.9.129; +    option domain-name "e23-1.tg13.gathering.org"; +    ddns-domainname "e23-1.tg13.gathering.org"; +    range 151.216.9.133 151.216.9.190; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e23-2.conf b/dhcp/conf.d/e23-2.conf new file mode 100644 index 0000000..458282c --- /dev/null +++ b/dhcp/conf.d/e23-2.conf @@ -0,0 +1,14 @@ +zone e23-2.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.9.192 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.9.193; +    option domain-name "e23-2.tg13.gathering.org"; +    ddns-domainname "e23-2.tg13.gathering.org"; +    range 151.216.9.197 151.216.9.254; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e23-3.conf b/dhcp/conf.d/e23-3.conf new file mode 100644 index 0000000..8d0bd2e --- /dev/null +++ b/dhcp/conf.d/e23-3.conf @@ -0,0 +1,14 @@ +zone e23-3.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.10.0 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.10.1; +    option domain-name "e23-3.tg13.gathering.org"; +    ddns-domainname "e23-3.tg13.gathering.org"; +    range 151.216.10.5 151.216.10.62; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e23-4.conf b/dhcp/conf.d/e23-4.conf new file mode 100644 index 0000000..6f85540 --- /dev/null +++ b/dhcp/conf.d/e23-4.conf @@ -0,0 +1,14 @@ +zone e23-4.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.10.64 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.10.65; +    option domain-name "e23-4.tg13.gathering.org"; +    ddns-domainname "e23-4.tg13.gathering.org"; +    range 151.216.10.69 151.216.10.126; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e25-1.conf b/dhcp/conf.d/e25-1.conf new file mode 100644 index 0000000..ea2f617 --- /dev/null +++ b/dhcp/conf.d/e25-1.conf @@ -0,0 +1,14 @@ +zone e25-1.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.10.128 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.10.129; +    option domain-name "e25-1.tg13.gathering.org"; +    ddns-domainname "e25-1.tg13.gathering.org"; +    range 151.216.10.133 151.216.10.190; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e25-2.conf b/dhcp/conf.d/e25-2.conf new file mode 100644 index 0000000..05a8e35 --- /dev/null +++ b/dhcp/conf.d/e25-2.conf @@ -0,0 +1,14 @@ +zone e25-2.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.10.192 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.10.193; +    option domain-name "e25-2.tg13.gathering.org"; +    ddns-domainname "e25-2.tg13.gathering.org"; +    range 151.216.10.197 151.216.10.254; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e25-3.conf b/dhcp/conf.d/e25-3.conf new file mode 100644 index 0000000..5e134e2 --- /dev/null +++ b/dhcp/conf.d/e25-3.conf @@ -0,0 +1,14 @@ +zone e25-3.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.11.0 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.11.1; +    option domain-name "e25-3.tg13.gathering.org"; +    ddns-domainname "e25-3.tg13.gathering.org"; +    range 151.216.11.5 151.216.11.62; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e25-4.conf b/dhcp/conf.d/e25-4.conf new file mode 100644 index 0000000..2b7ea20 --- /dev/null +++ b/dhcp/conf.d/e25-4.conf @@ -0,0 +1,14 @@ +zone e25-4.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.11.64 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.11.65; +    option domain-name "e25-4.tg13.gathering.org"; +    ddns-domainname "e25-4.tg13.gathering.org"; +    range 151.216.11.69 151.216.11.126; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e27-1.conf b/dhcp/conf.d/e27-1.conf new file mode 100644 index 0000000..d08ae0b --- /dev/null +++ b/dhcp/conf.d/e27-1.conf @@ -0,0 +1,14 @@ +zone e27-1.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.11.128 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.11.129; +    option domain-name "e27-1.tg13.gathering.org"; +    ddns-domainname "e27-1.tg13.gathering.org"; +    range 151.216.11.133 151.216.11.190; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e27-2.conf b/dhcp/conf.d/e27-2.conf new file mode 100644 index 0000000..71e41bc --- /dev/null +++ b/dhcp/conf.d/e27-2.conf @@ -0,0 +1,14 @@ +zone e27-2.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.11.192 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.11.193; +    option domain-name "e27-2.tg13.gathering.org"; +    ddns-domainname "e27-2.tg13.gathering.org"; +    range 151.216.11.197 151.216.11.254; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e29-1.conf b/dhcp/conf.d/e29-1.conf new file mode 100644 index 0000000..19c69aa --- /dev/null +++ b/dhcp/conf.d/e29-1.conf @@ -0,0 +1,14 @@ +zone e29-1.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.12.0 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.12.1; +    option domain-name "e29-1.tg13.gathering.org"; +    ddns-domainname "e29-1.tg13.gathering.org"; +    range 151.216.12.5 151.216.12.62; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e29-2.conf b/dhcp/conf.d/e29-2.conf new file mode 100644 index 0000000..838f6d1 --- /dev/null +++ b/dhcp/conf.d/e29-2.conf @@ -0,0 +1,14 @@ +zone e29-2.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.12.64 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.12.65; +    option domain-name "e29-2.tg13.gathering.org"; +    ddns-domainname "e29-2.tg13.gathering.org"; +    range 151.216.12.69 151.216.12.126; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e3-3.conf b/dhcp/conf.d/e3-3.conf new file mode 100644 index 0000000..68d65f0 --- /dev/null +++ b/dhcp/conf.d/e3-3.conf @@ -0,0 +1,14 @@ +zone e3-3.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.1.128 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.1.129; +    option domain-name "e3-3.tg13.gathering.org"; +    ddns-domainname "e3-3.tg13.gathering.org"; +    range 151.216.1.133 151.216.1.190; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e3-4.conf b/dhcp/conf.d/e3-4.conf new file mode 100644 index 0000000..cbb0fb5 --- /dev/null +++ b/dhcp/conf.d/e3-4.conf @@ -0,0 +1,14 @@ +zone e3-4.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.1.192 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.1.193; +    option domain-name "e3-4.tg13.gathering.org"; +    ddns-domainname "e3-4.tg13.gathering.org"; +    range 151.216.1.197 151.216.1.254; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e31-1.conf b/dhcp/conf.d/e31-1.conf new file mode 100644 index 0000000..aa78d55 --- /dev/null +++ b/dhcp/conf.d/e31-1.conf @@ -0,0 +1,14 @@ +zone e31-1.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.12.128 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.12.129; +    option domain-name "e31-1.tg13.gathering.org"; +    ddns-domainname "e31-1.tg13.gathering.org"; +    range 151.216.12.133 151.216.12.190; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e31-2.conf b/dhcp/conf.d/e31-2.conf new file mode 100644 index 0000000..ee8533e --- /dev/null +++ b/dhcp/conf.d/e31-2.conf @@ -0,0 +1,14 @@ +zone e31-2.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.12.192 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.12.193; +    option domain-name "e31-2.tg13.gathering.org"; +    ddns-domainname "e31-2.tg13.gathering.org"; +    range 151.216.12.197 151.216.12.254; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e33-1.conf b/dhcp/conf.d/e33-1.conf new file mode 100644 index 0000000..b0807ee --- /dev/null +++ b/dhcp/conf.d/e33-1.conf @@ -0,0 +1,14 @@ +zone e33-1.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.13.0 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.13.1; +    option domain-name "e33-1.tg13.gathering.org"; +    ddns-domainname "e33-1.tg13.gathering.org"; +    range 151.216.13.5 151.216.13.62; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e33-2.conf b/dhcp/conf.d/e33-2.conf new file mode 100644 index 0000000..d3ca1ce --- /dev/null +++ b/dhcp/conf.d/e33-2.conf @@ -0,0 +1,14 @@ +zone e33-2.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.13.64 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.13.65; +    option domain-name "e33-2.tg13.gathering.org"; +    ddns-domainname "e33-2.tg13.gathering.org"; +    range 151.216.13.69 151.216.13.126; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e35-1.conf b/dhcp/conf.d/e35-1.conf new file mode 100644 index 0000000..b66a9fe --- /dev/null +++ b/dhcp/conf.d/e35-1.conf @@ -0,0 +1,14 @@ +zone e35-1.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.13.128 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.13.129; +    option domain-name "e35-1.tg13.gathering.org"; +    ddns-domainname "e35-1.tg13.gathering.org"; +    range 151.216.13.133 151.216.13.190; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e35-2.conf b/dhcp/conf.d/e35-2.conf new file mode 100644 index 0000000..c890146 --- /dev/null +++ b/dhcp/conf.d/e35-2.conf @@ -0,0 +1,14 @@ +zone e35-2.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.13.192 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.13.193; +    option domain-name "e35-2.tg13.gathering.org"; +    ddns-domainname "e35-2.tg13.gathering.org"; +    range 151.216.13.197 151.216.13.254; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e37-1.conf b/dhcp/conf.d/e37-1.conf new file mode 100644 index 0000000..b4b19ed --- /dev/null +++ b/dhcp/conf.d/e37-1.conf @@ -0,0 +1,14 @@ +zone e37-1.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.14.0 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.14.1; +    option domain-name "e37-1.tg13.gathering.org"; +    ddns-domainname "e37-1.tg13.gathering.org"; +    range 151.216.14.5 151.216.14.62; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e37-2.conf b/dhcp/conf.d/e37-2.conf new file mode 100644 index 0000000..6186b64 --- /dev/null +++ b/dhcp/conf.d/e37-2.conf @@ -0,0 +1,14 @@ +zone e37-2.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.14.64 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.14.65; +    option domain-name "e37-2.tg13.gathering.org"; +    ddns-domainname "e37-2.tg13.gathering.org"; +    range 151.216.14.69 151.216.14.126; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e39-1.conf b/dhcp/conf.d/e39-1.conf new file mode 100644 index 0000000..64f3f8a --- /dev/null +++ b/dhcp/conf.d/e39-1.conf @@ -0,0 +1,14 @@ +zone e39-1.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.14.128 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.14.129; +    option domain-name "e39-1.tg13.gathering.org"; +    ddns-domainname "e39-1.tg13.gathering.org"; +    range 151.216.14.133 151.216.14.190; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e39-2.conf b/dhcp/conf.d/e39-2.conf new file mode 100644 index 0000000..f170fa5 --- /dev/null +++ b/dhcp/conf.d/e39-2.conf @@ -0,0 +1,14 @@ +zone e39-2.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.14.192 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.14.193; +    option domain-name "e39-2.tg13.gathering.org"; +    ddns-domainname "e39-2.tg13.gathering.org"; +    range 151.216.14.197 151.216.14.254; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e41-1.conf b/dhcp/conf.d/e41-1.conf new file mode 100644 index 0000000..60047a5 --- /dev/null +++ b/dhcp/conf.d/e41-1.conf @@ -0,0 +1,14 @@ +zone e41-1.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.15.0 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.15.1; +    option domain-name "e41-1.tg13.gathering.org"; +    ddns-domainname "e41-1.tg13.gathering.org"; +    range 151.216.15.5 151.216.15.62; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e41-2.conf b/dhcp/conf.d/e41-2.conf new file mode 100644 index 0000000..8bf803d --- /dev/null +++ b/dhcp/conf.d/e41-2.conf @@ -0,0 +1,14 @@ +zone e41-2.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.15.64 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.15.65; +    option domain-name "e41-2.tg13.gathering.org"; +    ddns-domainname "e41-2.tg13.gathering.org"; +    range 151.216.15.69 151.216.15.126; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e43-1.conf b/dhcp/conf.d/e43-1.conf new file mode 100644 index 0000000..0859e67 --- /dev/null +++ b/dhcp/conf.d/e43-1.conf @@ -0,0 +1,14 @@ +zone e43-1.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.15.128 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.15.129; +    option domain-name "e43-1.tg13.gathering.org"; +    ddns-domainname "e43-1.tg13.gathering.org"; +    range 151.216.15.133 151.216.15.190; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e43-2.conf b/dhcp/conf.d/e43-2.conf new file mode 100644 index 0000000..f5632c4 --- /dev/null +++ b/dhcp/conf.d/e43-2.conf @@ -0,0 +1,14 @@ +zone e43-2.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.15.192 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.15.193; +    option domain-name "e43-2.tg13.gathering.org"; +    ddns-domainname "e43-2.tg13.gathering.org"; +    range 151.216.15.197 151.216.15.254; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e43-3.conf b/dhcp/conf.d/e43-3.conf new file mode 100644 index 0000000..cbb22b5 --- /dev/null +++ b/dhcp/conf.d/e43-3.conf @@ -0,0 +1,14 @@ +zone e43-3.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.16.0 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.16.1; +    option domain-name "e43-3.tg13.gathering.org"; +    ddns-domainname "e43-3.tg13.gathering.org"; +    range 151.216.16.5 151.216.16.62; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e43-4.conf b/dhcp/conf.d/e43-4.conf new file mode 100644 index 0000000..3c1bb39 --- /dev/null +++ b/dhcp/conf.d/e43-4.conf @@ -0,0 +1,14 @@ +zone e43-4.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.16.64 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.16.65; +    option domain-name "e43-4.tg13.gathering.org"; +    ddns-domainname "e43-4.tg13.gathering.org"; +    range 151.216.16.69 151.216.16.126; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e45-1.conf b/dhcp/conf.d/e45-1.conf new file mode 100644 index 0000000..0214ecd --- /dev/null +++ b/dhcp/conf.d/e45-1.conf @@ -0,0 +1,14 @@ +zone e45-1.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.16.128 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.16.129; +    option domain-name "e45-1.tg13.gathering.org"; +    ddns-domainname "e45-1.tg13.gathering.org"; +    range 151.216.16.133 151.216.16.190; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e45-2.conf b/dhcp/conf.d/e45-2.conf new file mode 100644 index 0000000..e881d34 --- /dev/null +++ b/dhcp/conf.d/e45-2.conf @@ -0,0 +1,14 @@ +zone e45-2.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.16.192 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.16.193; +    option domain-name "e45-2.tg13.gathering.org"; +    ddns-domainname "e45-2.tg13.gathering.org"; +    range 151.216.16.197 151.216.16.254; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e45-3.conf b/dhcp/conf.d/e45-3.conf new file mode 100644 index 0000000..e686d74 --- /dev/null +++ b/dhcp/conf.d/e45-3.conf @@ -0,0 +1,14 @@ +zone e45-3.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.17.0 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.17.1; +    option domain-name "e45-3.tg13.gathering.org"; +    ddns-domainname "e45-3.tg13.gathering.org"; +    range 151.216.17.5 151.216.17.62; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e45-4.conf b/dhcp/conf.d/e45-4.conf new file mode 100644 index 0000000..d3855c3 --- /dev/null +++ b/dhcp/conf.d/e45-4.conf @@ -0,0 +1,14 @@ +zone e45-4.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.17.64 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.17.65; +    option domain-name "e45-4.tg13.gathering.org"; +    ddns-domainname "e45-4.tg13.gathering.org"; +    range 151.216.17.69 151.216.17.126; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e47-1.conf b/dhcp/conf.d/e47-1.conf new file mode 100644 index 0000000..6786b65 --- /dev/null +++ b/dhcp/conf.d/e47-1.conf @@ -0,0 +1,14 @@ +zone e47-1.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.17.128 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.17.129; +    option domain-name "e47-1.tg13.gathering.org"; +    ddns-domainname "e47-1.tg13.gathering.org"; +    range 151.216.17.133 151.216.17.190; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e47-2.conf b/dhcp/conf.d/e47-2.conf new file mode 100644 index 0000000..57b3830 --- /dev/null +++ b/dhcp/conf.d/e47-2.conf @@ -0,0 +1,14 @@ +zone e47-2.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.17.192 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.17.193; +    option domain-name "e47-2.tg13.gathering.org"; +    ddns-domainname "e47-2.tg13.gathering.org"; +    range 151.216.17.197 151.216.17.254; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e47-3.conf b/dhcp/conf.d/e47-3.conf new file mode 100644 index 0000000..acb3f53 --- /dev/null +++ b/dhcp/conf.d/e47-3.conf @@ -0,0 +1,14 @@ +zone e47-3.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.18.0 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.18.1; +    option domain-name "e47-3.tg13.gathering.org"; +    ddns-domainname "e47-3.tg13.gathering.org"; +    range 151.216.18.5 151.216.18.62; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e47-4.conf b/dhcp/conf.d/e47-4.conf new file mode 100644 index 0000000..5fe0ac3 --- /dev/null +++ b/dhcp/conf.d/e47-4.conf @@ -0,0 +1,14 @@ +zone e47-4.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.18.64 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.18.65; +    option domain-name "e47-4.tg13.gathering.org"; +    ddns-domainname "e47-4.tg13.gathering.org"; +    range 151.216.18.69 151.216.18.126; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e49-1.conf b/dhcp/conf.d/e49-1.conf new file mode 100644 index 0000000..4471449 --- /dev/null +++ b/dhcp/conf.d/e49-1.conf @@ -0,0 +1,14 @@ +zone e49-1.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.18.128 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.18.129; +    option domain-name "e49-1.tg13.gathering.org"; +    ddns-domainname "e49-1.tg13.gathering.org"; +    range 151.216.18.133 151.216.18.190; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e49-2.conf b/dhcp/conf.d/e49-2.conf new file mode 100644 index 0000000..138feeb --- /dev/null +++ b/dhcp/conf.d/e49-2.conf @@ -0,0 +1,14 @@ +zone e49-2.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.18.192 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.18.193; +    option domain-name "e49-2.tg13.gathering.org"; +    ddns-domainname "e49-2.tg13.gathering.org"; +    range 151.216.18.197 151.216.18.254; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e49-3.conf b/dhcp/conf.d/e49-3.conf new file mode 100644 index 0000000..0856374 --- /dev/null +++ b/dhcp/conf.d/e49-3.conf @@ -0,0 +1,14 @@ +zone e49-3.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.19.0 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.19.1; +    option domain-name "e49-3.tg13.gathering.org"; +    ddns-domainname "e49-3.tg13.gathering.org"; +    range 151.216.19.5 151.216.19.62; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e49-4.conf b/dhcp/conf.d/e49-4.conf new file mode 100644 index 0000000..d4dfd47 --- /dev/null +++ b/dhcp/conf.d/e49-4.conf @@ -0,0 +1,14 @@ +zone e49-4.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.19.64 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.19.65; +    option domain-name "e49-4.tg13.gathering.org"; +    ddns-domainname "e49-4.tg13.gathering.org"; +    range 151.216.19.69 151.216.19.126; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e5-3.conf b/dhcp/conf.d/e5-3.conf new file mode 100644 index 0000000..cf6fd80 --- /dev/null +++ b/dhcp/conf.d/e5-3.conf @@ -0,0 +1,14 @@ +zone e5-3.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.2.0 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.2.1; +    option domain-name "e5-3.tg13.gathering.org"; +    ddns-domainname "e5-3.tg13.gathering.org"; +    range 151.216.2.5 151.216.2.62; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e5-4.conf b/dhcp/conf.d/e5-4.conf new file mode 100644 index 0000000..754d883 --- /dev/null +++ b/dhcp/conf.d/e5-4.conf @@ -0,0 +1,14 @@ +zone e5-4.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.2.64 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.2.65; +    option domain-name "e5-4.tg13.gathering.org"; +    ddns-domainname "e5-4.tg13.gathering.org"; +    range 151.216.2.69 151.216.2.126; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e51-1.conf b/dhcp/conf.d/e51-1.conf new file mode 100644 index 0000000..b50439d --- /dev/null +++ b/dhcp/conf.d/e51-1.conf @@ -0,0 +1,14 @@ +zone e51-1.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.19.128 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.19.129; +    option domain-name "e51-1.tg13.gathering.org"; +    ddns-domainname "e51-1.tg13.gathering.org"; +    range 151.216.19.133 151.216.19.190; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e51-2.conf b/dhcp/conf.d/e51-2.conf new file mode 100644 index 0000000..17bbe65 --- /dev/null +++ b/dhcp/conf.d/e51-2.conf @@ -0,0 +1,14 @@ +zone e51-2.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.19.192 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.19.193; +    option domain-name "e51-2.tg13.gathering.org"; +    ddns-domainname "e51-2.tg13.gathering.org"; +    range 151.216.19.197 151.216.19.254; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e51-3.conf b/dhcp/conf.d/e51-3.conf new file mode 100644 index 0000000..52cbdd2 --- /dev/null +++ b/dhcp/conf.d/e51-3.conf @@ -0,0 +1,14 @@ +zone e51-3.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.20.0 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.20.1; +    option domain-name "e51-3.tg13.gathering.org"; +    ddns-domainname "e51-3.tg13.gathering.org"; +    range 151.216.20.5 151.216.20.62; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e51-4.conf b/dhcp/conf.d/e51-4.conf new file mode 100644 index 0000000..b7fb7b3 --- /dev/null +++ b/dhcp/conf.d/e51-4.conf @@ -0,0 +1,14 @@ +zone e51-4.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.20.64 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.20.65; +    option domain-name "e51-4.tg13.gathering.org"; +    ddns-domainname "e51-4.tg13.gathering.org"; +    range 151.216.20.69 151.216.20.126; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e53-1.conf b/dhcp/conf.d/e53-1.conf new file mode 100644 index 0000000..4abbc9f --- /dev/null +++ b/dhcp/conf.d/e53-1.conf @@ -0,0 +1,14 @@ +zone e53-1.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.20.128 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.20.129; +    option domain-name "e53-1.tg13.gathering.org"; +    ddns-domainname "e53-1.tg13.gathering.org"; +    range 151.216.20.133 151.216.20.190; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e53-2.conf b/dhcp/conf.d/e53-2.conf new file mode 100644 index 0000000..9b31e74 --- /dev/null +++ b/dhcp/conf.d/e53-2.conf @@ -0,0 +1,14 @@ +zone e53-2.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.20.192 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.20.193; +    option domain-name "e53-2.tg13.gathering.org"; +    ddns-domainname "e53-2.tg13.gathering.org"; +    range 151.216.20.197 151.216.20.254; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e53-3.conf b/dhcp/conf.d/e53-3.conf new file mode 100644 index 0000000..9011399 --- /dev/null +++ b/dhcp/conf.d/e53-3.conf @@ -0,0 +1,14 @@ +zone e53-3.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.21.0 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.21.1; +    option domain-name "e53-3.tg13.gathering.org"; +    ddns-domainname "e53-3.tg13.gathering.org"; +    range 151.216.21.5 151.216.21.62; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e53-4.conf b/dhcp/conf.d/e53-4.conf new file mode 100644 index 0000000..b551888 --- /dev/null +++ b/dhcp/conf.d/e53-4.conf @@ -0,0 +1,14 @@ +zone e53-4.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.21.64 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.21.65; +    option domain-name "e53-4.tg13.gathering.org"; +    ddns-domainname "e53-4.tg13.gathering.org"; +    range 151.216.21.69 151.216.21.126; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e55-1.conf b/dhcp/conf.d/e55-1.conf new file mode 100644 index 0000000..b6ee46d --- /dev/null +++ b/dhcp/conf.d/e55-1.conf @@ -0,0 +1,14 @@ +zone e55-1.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.21.128 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.21.129; +    option domain-name "e55-1.tg13.gathering.org"; +    ddns-domainname "e55-1.tg13.gathering.org"; +    range 151.216.21.133 151.216.21.190; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e55-2.conf b/dhcp/conf.d/e55-2.conf new file mode 100644 index 0000000..bcd889b --- /dev/null +++ b/dhcp/conf.d/e55-2.conf @@ -0,0 +1,14 @@ +zone e55-2.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.21.192 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.21.193; +    option domain-name "e55-2.tg13.gathering.org"; +    ddns-domainname "e55-2.tg13.gathering.org"; +    range 151.216.21.197 151.216.21.254; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e55-3.conf b/dhcp/conf.d/e55-3.conf new file mode 100644 index 0000000..148f442 --- /dev/null +++ b/dhcp/conf.d/e55-3.conf @@ -0,0 +1,14 @@ +zone e55-3.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.22.0 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.22.1; +    option domain-name "e55-3.tg13.gathering.org"; +    ddns-domainname "e55-3.tg13.gathering.org"; +    range 151.216.22.5 151.216.22.62; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e55-4.conf b/dhcp/conf.d/e55-4.conf new file mode 100644 index 0000000..cdbb728 --- /dev/null +++ b/dhcp/conf.d/e55-4.conf @@ -0,0 +1,14 @@ +zone e55-4.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.22.64 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.22.65; +    option domain-name "e55-4.tg13.gathering.org"; +    ddns-domainname "e55-4.tg13.gathering.org"; +    range 151.216.22.69 151.216.22.126; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e57-1.conf b/dhcp/conf.d/e57-1.conf new file mode 100644 index 0000000..1f0c5cb --- /dev/null +++ b/dhcp/conf.d/e57-1.conf @@ -0,0 +1,14 @@ +zone e57-1.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.22.128 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.22.129; +    option domain-name "e57-1.tg13.gathering.org"; +    ddns-domainname "e57-1.tg13.gathering.org"; +    range 151.216.22.133 151.216.22.190; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e57-2.conf b/dhcp/conf.d/e57-2.conf new file mode 100644 index 0000000..a2a73cd --- /dev/null +++ b/dhcp/conf.d/e57-2.conf @@ -0,0 +1,14 @@ +zone e57-2.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.22.192 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.22.193; +    option domain-name "e57-2.tg13.gathering.org"; +    ddns-domainname "e57-2.tg13.gathering.org"; +    range 151.216.22.197 151.216.22.254; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e57-3.conf b/dhcp/conf.d/e57-3.conf new file mode 100644 index 0000000..318d60a --- /dev/null +++ b/dhcp/conf.d/e57-3.conf @@ -0,0 +1,14 @@ +zone e57-3.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.23.0 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.23.1; +    option domain-name "e57-3.tg13.gathering.org"; +    ddns-domainname "e57-3.tg13.gathering.org"; +    range 151.216.23.5 151.216.23.62; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e57-4.conf b/dhcp/conf.d/e57-4.conf new file mode 100644 index 0000000..3db7c69 --- /dev/null +++ b/dhcp/conf.d/e57-4.conf @@ -0,0 +1,14 @@ +zone e57-4.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.23.64 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.23.65; +    option domain-name "e57-4.tg13.gathering.org"; +    ddns-domainname "e57-4.tg13.gathering.org"; +    range 151.216.23.69 151.216.23.126; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e59-1.conf b/dhcp/conf.d/e59-1.conf new file mode 100644 index 0000000..8251763 --- /dev/null +++ b/dhcp/conf.d/e59-1.conf @@ -0,0 +1,14 @@ +zone e59-1.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.23.128 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.23.129; +    option domain-name "e59-1.tg13.gathering.org"; +    ddns-domainname "e59-1.tg13.gathering.org"; +    range 151.216.23.133 151.216.23.190; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e59-2.conf b/dhcp/conf.d/e59-2.conf new file mode 100644 index 0000000..cb78cfe --- /dev/null +++ b/dhcp/conf.d/e59-2.conf @@ -0,0 +1,14 @@ +zone e59-2.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.23.192 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.23.193; +    option domain-name "e59-2.tg13.gathering.org"; +    ddns-domainname "e59-2.tg13.gathering.org"; +    range 151.216.23.197 151.216.23.254; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e59-3.conf b/dhcp/conf.d/e59-3.conf new file mode 100644 index 0000000..5f8b18a --- /dev/null +++ b/dhcp/conf.d/e59-3.conf @@ -0,0 +1,14 @@ +zone e59-3.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.24.0 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.24.1; +    option domain-name "e59-3.tg13.gathering.org"; +    ddns-domainname "e59-3.tg13.gathering.org"; +    range 151.216.24.5 151.216.24.62; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e59-4.conf b/dhcp/conf.d/e59-4.conf new file mode 100644 index 0000000..0f6303d --- /dev/null +++ b/dhcp/conf.d/e59-4.conf @@ -0,0 +1,14 @@ +zone e59-4.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.24.64 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.24.65; +    option domain-name "e59-4.tg13.gathering.org"; +    ddns-domainname "e59-4.tg13.gathering.org"; +    range 151.216.24.69 151.216.24.126; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e61-1.conf b/dhcp/conf.d/e61-1.conf new file mode 100644 index 0000000..93eaf53 --- /dev/null +++ b/dhcp/conf.d/e61-1.conf @@ -0,0 +1,14 @@ +zone e61-1.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.24.128 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.24.129; +    option domain-name "e61-1.tg13.gathering.org"; +    ddns-domainname "e61-1.tg13.gathering.org"; +    range 151.216.24.133 151.216.24.190; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e61-2.conf b/dhcp/conf.d/e61-2.conf new file mode 100644 index 0000000..56c2bd6 --- /dev/null +++ b/dhcp/conf.d/e61-2.conf @@ -0,0 +1,14 @@ +zone e61-2.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.24.192 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.24.193; +    option domain-name "e61-2.tg13.gathering.org"; +    ddns-domainname "e61-2.tg13.gathering.org"; +    range 151.216.24.197 151.216.24.254; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e61-3.conf b/dhcp/conf.d/e61-3.conf new file mode 100644 index 0000000..1fe77ac --- /dev/null +++ b/dhcp/conf.d/e61-3.conf @@ -0,0 +1,14 @@ +zone e61-3.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.25.0 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.25.1; +    option domain-name "e61-3.tg13.gathering.org"; +    ddns-domainname "e61-3.tg13.gathering.org"; +    range 151.216.25.5 151.216.25.62; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e61-4.conf b/dhcp/conf.d/e61-4.conf new file mode 100644 index 0000000..38767d1 --- /dev/null +++ b/dhcp/conf.d/e61-4.conf @@ -0,0 +1,14 @@ +zone e61-4.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.25.64 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.25.65; +    option domain-name "e61-4.tg13.gathering.org"; +    ddns-domainname "e61-4.tg13.gathering.org"; +    range 151.216.25.69 151.216.25.126; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e63-1.conf b/dhcp/conf.d/e63-1.conf new file mode 100644 index 0000000..b52c705 --- /dev/null +++ b/dhcp/conf.d/e63-1.conf @@ -0,0 +1,14 @@ +zone e63-1.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.25.128 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.25.129; +    option domain-name "e63-1.tg13.gathering.org"; +    ddns-domainname "e63-1.tg13.gathering.org"; +    range 151.216.25.133 151.216.25.190; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e63-2.conf b/dhcp/conf.d/e63-2.conf new file mode 100644 index 0000000..07d669f --- /dev/null +++ b/dhcp/conf.d/e63-2.conf @@ -0,0 +1,14 @@ +zone e63-2.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.25.192 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.25.193; +    option domain-name "e63-2.tg13.gathering.org"; +    ddns-domainname "e63-2.tg13.gathering.org"; +    range 151.216.25.197 151.216.25.254; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e63-3.conf b/dhcp/conf.d/e63-3.conf new file mode 100644 index 0000000..0f570ab --- /dev/null +++ b/dhcp/conf.d/e63-3.conf @@ -0,0 +1,14 @@ +zone e63-3.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.26.0 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.26.1; +    option domain-name "e63-3.tg13.gathering.org"; +    ddns-domainname "e63-3.tg13.gathering.org"; +    range 151.216.26.5 151.216.26.62; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e63-4.conf b/dhcp/conf.d/e63-4.conf new file mode 100644 index 0000000..427908a --- /dev/null +++ b/dhcp/conf.d/e63-4.conf @@ -0,0 +1,14 @@ +zone e63-4.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.26.64 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.26.65; +    option domain-name "e63-4.tg13.gathering.org"; +    ddns-domainname "e63-4.tg13.gathering.org"; +    range 151.216.26.69 151.216.26.126; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e65-1.conf b/dhcp/conf.d/e65-1.conf new file mode 100644 index 0000000..ae4e114 --- /dev/null +++ b/dhcp/conf.d/e65-1.conf @@ -0,0 +1,14 @@ +zone e65-1.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.26.128 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.26.129; +    option domain-name "e65-1.tg13.gathering.org"; +    ddns-domainname "e65-1.tg13.gathering.org"; +    range 151.216.26.133 151.216.26.190; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e65-2.conf b/dhcp/conf.d/e65-2.conf new file mode 100644 index 0000000..d23cfa5 --- /dev/null +++ b/dhcp/conf.d/e65-2.conf @@ -0,0 +1,14 @@ +zone e65-2.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.26.192 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.26.193; +    option domain-name "e65-2.tg13.gathering.org"; +    ddns-domainname "e65-2.tg13.gathering.org"; +    range 151.216.26.197 151.216.26.254; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e65-3.conf b/dhcp/conf.d/e65-3.conf new file mode 100644 index 0000000..6d2aa36 --- /dev/null +++ b/dhcp/conf.d/e65-3.conf @@ -0,0 +1,14 @@ +zone e65-3.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.27.0 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.27.1; +    option domain-name "e65-3.tg13.gathering.org"; +    ddns-domainname "e65-3.tg13.gathering.org"; +    range 151.216.27.5 151.216.27.62; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e65-4.conf b/dhcp/conf.d/e65-4.conf new file mode 100644 index 0000000..542be9a --- /dev/null +++ b/dhcp/conf.d/e65-4.conf @@ -0,0 +1,14 @@ +zone e65-4.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.27.64 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.27.65; +    option domain-name "e65-4.tg13.gathering.org"; +    ddns-domainname "e65-4.tg13.gathering.org"; +    range 151.216.27.69 151.216.27.126; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e67-1.conf b/dhcp/conf.d/e67-1.conf new file mode 100644 index 0000000..a689665 --- /dev/null +++ b/dhcp/conf.d/e67-1.conf @@ -0,0 +1,14 @@ +zone e67-1.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.27.128 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.27.129; +    option domain-name "e67-1.tg13.gathering.org"; +    ddns-domainname "e67-1.tg13.gathering.org"; +    range 151.216.27.133 151.216.27.190; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e67-2.conf b/dhcp/conf.d/e67-2.conf new file mode 100644 index 0000000..a34df75 --- /dev/null +++ b/dhcp/conf.d/e67-2.conf @@ -0,0 +1,14 @@ +zone e67-2.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.27.192 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.27.193; +    option domain-name "e67-2.tg13.gathering.org"; +    ddns-domainname "e67-2.tg13.gathering.org"; +    range 151.216.27.197 151.216.27.254; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e67-3.conf b/dhcp/conf.d/e67-3.conf new file mode 100644 index 0000000..e505ddb --- /dev/null +++ b/dhcp/conf.d/e67-3.conf @@ -0,0 +1,14 @@ +zone e67-3.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.28.0 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.28.1; +    option domain-name "e67-3.tg13.gathering.org"; +    ddns-domainname "e67-3.tg13.gathering.org"; +    range 151.216.28.5 151.216.28.62; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e67-4.conf b/dhcp/conf.d/e67-4.conf new file mode 100644 index 0000000..8096ddc --- /dev/null +++ b/dhcp/conf.d/e67-4.conf @@ -0,0 +1,14 @@ +zone e67-4.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.28.64 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.28.65; +    option domain-name "e67-4.tg13.gathering.org"; +    ddns-domainname "e67-4.tg13.gathering.org"; +    range 151.216.28.69 151.216.28.126; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e69-1.conf b/dhcp/conf.d/e69-1.conf new file mode 100644 index 0000000..0a10a9f --- /dev/null +++ b/dhcp/conf.d/e69-1.conf @@ -0,0 +1,14 @@ +zone e69-1.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.28.128 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.28.129; +    option domain-name "e69-1.tg13.gathering.org"; +    ddns-domainname "e69-1.tg13.gathering.org"; +    range 151.216.28.133 151.216.28.190; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e69-2.conf b/dhcp/conf.d/e69-2.conf new file mode 100644 index 0000000..b4eaf6a --- /dev/null +++ b/dhcp/conf.d/e69-2.conf @@ -0,0 +1,14 @@ +zone e69-2.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.28.192 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.28.193; +    option domain-name "e69-2.tg13.gathering.org"; +    ddns-domainname "e69-2.tg13.gathering.org"; +    range 151.216.28.197 151.216.28.254; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e69-3.conf b/dhcp/conf.d/e69-3.conf new file mode 100644 index 0000000..bb0a368 --- /dev/null +++ b/dhcp/conf.d/e69-3.conf @@ -0,0 +1,14 @@ +zone e69-3.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.29.0 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.29.1; +    option domain-name "e69-3.tg13.gathering.org"; +    ddns-domainname "e69-3.tg13.gathering.org"; +    range 151.216.29.5 151.216.29.62; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e69-4.conf b/dhcp/conf.d/e69-4.conf new file mode 100644 index 0000000..c335f7a --- /dev/null +++ b/dhcp/conf.d/e69-4.conf @@ -0,0 +1,14 @@ +zone e69-4.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.29.64 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.29.65; +    option domain-name "e69-4.tg13.gathering.org"; +    ddns-domainname "e69-4.tg13.gathering.org"; +    range 151.216.29.69 151.216.29.126; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e7-3.conf b/dhcp/conf.d/e7-3.conf new file mode 100644 index 0000000..e3c5aa0 --- /dev/null +++ b/dhcp/conf.d/e7-3.conf @@ -0,0 +1,14 @@ +zone e7-3.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.2.128 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.2.129; +    option domain-name "e7-3.tg13.gathering.org"; +    ddns-domainname "e7-3.tg13.gathering.org"; +    range 151.216.2.133 151.216.2.190; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e7-4.conf b/dhcp/conf.d/e7-4.conf new file mode 100644 index 0000000..80ce037 --- /dev/null +++ b/dhcp/conf.d/e7-4.conf @@ -0,0 +1,14 @@ +zone e7-4.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.2.192 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.2.193; +    option domain-name "e7-4.tg13.gathering.org"; +    ddns-domainname "e7-4.tg13.gathering.org"; +    range 151.216.2.197 151.216.2.254; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e71-1.conf b/dhcp/conf.d/e71-1.conf new file mode 100644 index 0000000..34478a8 --- /dev/null +++ b/dhcp/conf.d/e71-1.conf @@ -0,0 +1,14 @@ +zone e71-1.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.29.128 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.29.129; +    option domain-name "e71-1.tg13.gathering.org"; +    ddns-domainname "e71-1.tg13.gathering.org"; +    range 151.216.29.133 151.216.29.190; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e71-2.conf b/dhcp/conf.d/e71-2.conf new file mode 100644 index 0000000..2763460 --- /dev/null +++ b/dhcp/conf.d/e71-2.conf @@ -0,0 +1,14 @@ +zone e71-2.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.29.192 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.29.193; +    option domain-name "e71-2.tg13.gathering.org"; +    ddns-domainname "e71-2.tg13.gathering.org"; +    range 151.216.29.197 151.216.29.254; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e71-3.conf b/dhcp/conf.d/e71-3.conf new file mode 100644 index 0000000..dcd66d3 --- /dev/null +++ b/dhcp/conf.d/e71-3.conf @@ -0,0 +1,14 @@ +zone e71-3.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.30.0 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.30.1; +    option domain-name "e71-3.tg13.gathering.org"; +    ddns-domainname "e71-3.tg13.gathering.org"; +    range 151.216.30.5 151.216.30.62; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e71-4.conf b/dhcp/conf.d/e71-4.conf new file mode 100644 index 0000000..8dda936 --- /dev/null +++ b/dhcp/conf.d/e71-4.conf @@ -0,0 +1,14 @@ +zone e71-4.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.30.64 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.30.65; +    option domain-name "e71-4.tg13.gathering.org"; +    ddns-domainname "e71-4.tg13.gathering.org"; +    range 151.216.30.69 151.216.30.126; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e73-1.conf b/dhcp/conf.d/e73-1.conf new file mode 100644 index 0000000..5675ddc --- /dev/null +++ b/dhcp/conf.d/e73-1.conf @@ -0,0 +1,14 @@ +zone e73-1.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.30.128 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.30.129; +    option domain-name "e73-1.tg13.gathering.org"; +    ddns-domainname "e73-1.tg13.gathering.org"; +    range 151.216.30.133 151.216.30.190; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e73-2.conf b/dhcp/conf.d/e73-2.conf new file mode 100644 index 0000000..cb376a9 --- /dev/null +++ b/dhcp/conf.d/e73-2.conf @@ -0,0 +1,14 @@ +zone e73-2.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.30.192 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.30.193; +    option domain-name "e73-2.tg13.gathering.org"; +    ddns-domainname "e73-2.tg13.gathering.org"; +    range 151.216.30.197 151.216.30.254; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e73-3.conf b/dhcp/conf.d/e73-3.conf new file mode 100644 index 0000000..369fbb3 --- /dev/null +++ b/dhcp/conf.d/e73-3.conf @@ -0,0 +1,14 @@ +zone e73-3.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.31.0 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.31.1; +    option domain-name "e73-3.tg13.gathering.org"; +    ddns-domainname "e73-3.tg13.gathering.org"; +    range 151.216.31.5 151.216.31.62; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e73-4.conf b/dhcp/conf.d/e73-4.conf new file mode 100644 index 0000000..bc22c1c --- /dev/null +++ b/dhcp/conf.d/e73-4.conf @@ -0,0 +1,14 @@ +zone e73-4.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.31.64 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.31.65; +    option domain-name "e73-4.tg13.gathering.org"; +    ddns-domainname "e73-4.tg13.gathering.org"; +    range 151.216.31.69 151.216.31.126; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e75-1.conf b/dhcp/conf.d/e75-1.conf new file mode 100644 index 0000000..d8cf0cd --- /dev/null +++ b/dhcp/conf.d/e75-1.conf @@ -0,0 +1,14 @@ +zone e75-1.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.31.128 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.31.129; +    option domain-name "e75-1.tg13.gathering.org"; +    ddns-domainname "e75-1.tg13.gathering.org"; +    range 151.216.31.133 151.216.31.190; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e75-2.conf b/dhcp/conf.d/e75-2.conf new file mode 100644 index 0000000..be6c23d --- /dev/null +++ b/dhcp/conf.d/e75-2.conf @@ -0,0 +1,14 @@ +zone e75-2.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.31.192 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.31.193; +    option domain-name "e75-2.tg13.gathering.org"; +    ddns-domainname "e75-2.tg13.gathering.org"; +    range 151.216.31.197 151.216.31.254; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e75-3.conf b/dhcp/conf.d/e75-3.conf new file mode 100644 index 0000000..e5e859e --- /dev/null +++ b/dhcp/conf.d/e75-3.conf @@ -0,0 +1,14 @@ +zone e75-3.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.32.0 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.32.1; +    option domain-name "e75-3.tg13.gathering.org"; +    ddns-domainname "e75-3.tg13.gathering.org"; +    range 151.216.32.5 151.216.32.62; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e75-4.conf b/dhcp/conf.d/e75-4.conf new file mode 100644 index 0000000..6d1811f --- /dev/null +++ b/dhcp/conf.d/e75-4.conf @@ -0,0 +1,14 @@ +zone e75-4.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.32.64 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.32.65; +    option domain-name "e75-4.tg13.gathering.org"; +    ddns-domainname "e75-4.tg13.gathering.org"; +    range 151.216.32.69 151.216.32.126; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e77-1.conf b/dhcp/conf.d/e77-1.conf new file mode 100644 index 0000000..0d99446 --- /dev/null +++ b/dhcp/conf.d/e77-1.conf @@ -0,0 +1,14 @@ +zone e77-1.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.32.128 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.32.129; +    option domain-name "e77-1.tg13.gathering.org"; +    ddns-domainname "e77-1.tg13.gathering.org"; +    range 151.216.32.133 151.216.32.190; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e77-2.conf b/dhcp/conf.d/e77-2.conf new file mode 100644 index 0000000..b989747 --- /dev/null +++ b/dhcp/conf.d/e77-2.conf @@ -0,0 +1,14 @@ +zone e77-2.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.32.192 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.32.193; +    option domain-name "e77-2.tg13.gathering.org"; +    ddns-domainname "e77-2.tg13.gathering.org"; +    range 151.216.32.197 151.216.32.254; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e9-3.conf b/dhcp/conf.d/e9-3.conf new file mode 100644 index 0000000..fd1f08e --- /dev/null +++ b/dhcp/conf.d/e9-3.conf @@ -0,0 +1,14 @@ +zone e9-3.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.3.0 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.3.1; +    option domain-name "e9-3.tg13.gathering.org"; +    ddns-domainname "e9-3.tg13.gathering.org"; +    range 151.216.3.5 151.216.3.62; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/e9-4.conf b/dhcp/conf.d/e9-4.conf new file mode 100644 index 0000000..ae6638b --- /dev/null +++ b/dhcp/conf.d/e9-4.conf @@ -0,0 +1,14 @@ +zone e9-4.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.3.64 netmask 255.255.255.192 { +    authoritative; +    option routers 151.216.3.65; +    option domain-name "e9-4.tg13.gathering.org"; +    ddns-domainname "e9-4.tg13.gathering.org"; +    range 151.216.3.69 151.216.3.126; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/fugleberg1.conf b/dhcp/conf.d/fugleberg1.conf new file mode 100644 index 0000000..c3e6488 --- /dev/null +++ b/dhcp/conf.d/fugleberg1.conf @@ -0,0 +1,14 @@ +zone fugleberg1.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.99.0 netmask 255.255.255.128 { +    authoritative; +    option routers 151.216.99.1; +    option domain-name "fugleberg1.tg13.gathering.org"; +    ddns-domainname "fugleberg1.tg13.gathering.org"; +    range 151.216.99.5 151.216.99.126; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/fugleberg2.conf b/dhcp/conf.d/fugleberg2.conf new file mode 100644 index 0000000..1a223ab --- /dev/null +++ b/dhcp/conf.d/fugleberg2.conf @@ -0,0 +1,15 @@ +zone fugleberg2.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.99.128 netmask 255.255.255.128 { +    authoritative; +    option routers 151.216.99.129; +    option domain-name "fugleberg2.tg13.gathering.org"; +    ddns-domainname "fugleberg2.tg13.gathering.org"; +    range 151.216.99.133 151.216.99.254; +    ignore client-updates; +} + +host fuglecam { hardware ethernet 90:2b:34:5c:49:d4; fixed-address 151.216.99.254; } diff --git a/dhcp/conf.d/game.conf b/dhcp/conf.d/game.conf new file mode 100644 index 0000000..23fbf84 --- /dev/null +++ b/dhcp/conf.d/game.conf @@ -0,0 +1,14 @@ +zone game.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.101.0 netmask 255.255.255.0 { +    authoritative; +    option routers 151.216.101.1; +    option domain-name "game.tg13.gathering.org"; +    ddns-domainname "game.tg13.gathering.org"; +    range 151.216.101.5 151.216.101.254; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/gamehq.conf b/dhcp/conf.d/gamehq.conf new file mode 100644 index 0000000..a4ab629 --- /dev/null +++ b/dhcp/conf.d/gamehq.conf @@ -0,0 +1,14 @@ +zone gamehq.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.54.0 netmask 255.255.255.0 { +    authoritative; +    option routers 151.216.54.1; +    option domain-name "gamehq.tg13.gathering.org"; +    ddns-domainname "gamehq.tg13.gathering.org"; +    range 151.216.54.5 151.216.54.254; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/lager.conf b/dhcp/conf.d/lager.conf new file mode 100644 index 0000000..094e1d4 --- /dev/null +++ b/dhcp/conf.d/lager.conf @@ -0,0 +1,14 @@ +zone lager.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.113.0 netmask 255.255.255.0 { +    authoritative; +    option routers 151.216.113.1; +    option domain-name "lager.tg13.gathering.org"; +    ddns-domainname "lager.tg13.gathering.org"; +    range 151.216.113.5 151.216.113.254; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/logistikk.conf b/dhcp/conf.d/logistikk.conf new file mode 100644 index 0000000..1c9eeae --- /dev/null +++ b/dhcp/conf.d/logistikk.conf @@ -0,0 +1,14 @@ +zone logistikk.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.96.0 netmask 255.255.255.0 { +    authoritative; +    option routers 151.216.96.1; +    option domain-name "logistikk.tg13.gathering.org"; +    ddns-domainname "logistikk.tg13.gathering.org"; +    range 151.216.96.5 151.216.96.254; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/marsrele.conf b/dhcp/conf.d/marsrele.conf new file mode 100644 index 0000000..23b502c --- /dev/null +++ b/dhcp/conf.d/marsrele.conf @@ -0,0 +1,14 @@ +zone marsrele.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.118.0 netmask 255.255.255.128 { +    authoritative; +    option routers 151.216.118.1; +    option domain-name "marsrele.tg13.gathering.org"; +    ddns-domainname "marsrele.tg13.gathering.org"; +    range 151.216.118.5 151.216.118.126; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/noc.conf b/dhcp/conf.d/noc.conf new file mode 100644 index 0000000..1694bf0 --- /dev/null +++ b/dhcp/conf.d/noc.conf @@ -0,0 +1,34 @@ +zone noc.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.124.0 netmask 255.255.255.0 { +    authoritative; +    option routers 151.216.124.1; +    option domain-name "noc.tg13.gathering.org"; +    option domain-search "tg13.gathering.org", "infra.tg13.gathering.org", "noc.tg13.gathering.org"; +    ddns-domainname "noc.tg13.gathering.org"; + +    # Steam/Origin testing +    # VIKTIG med deny før allow :-))  +    pool { +      allow members of "steam-clients"; +      range 151.216.124.5 151.216.124.15; +    } +    pool { +      deny members of "steam-clients"; +      range 151.216.124.16 151.216.124.254; +    } + +    # dette fungerer ikke   :-)) +    #steam-clients +    #if (substring (option host-name, 0, 4) = "ior-") { +    #   range 151.216.124.5 151.216.124.15; +    #} else { +    #   range 151.216.124.16 151.216.124.254; +    #} +    ignore client-updates; +} + +host widecam.noc { hardware ethernet 00:02:d1:15:64:80; fixed-address 151.216.124.79; } diff --git a/dhcp/conf.d/presse.conf b/dhcp/conf.d/presse.conf new file mode 100644 index 0000000..8cdad57 --- /dev/null +++ b/dhcp/conf.d/presse.conf @@ -0,0 +1,14 @@ +zone presse.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.98.0 netmask 255.255.255.0 { +    authoritative; +    option routers 151.216.98.1; +    option domain-name "presse.tg13.gathering.org"; +    ddns-domainname "presse.tg13.gathering.org"; +    range 151.216.98.5 151.216.98.254; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/secmedic.conf b/dhcp/conf.d/secmedic.conf new file mode 100644 index 0000000..0976053 --- /dev/null +++ b/dhcp/conf.d/secmedic.conf @@ -0,0 +1,14 @@ +zone secmedic.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.112.0 netmask 255.255.255.0 { +    authoritative; +    option routers 151.216.112.1; +    option domain-name "secmedic.tg13.gathering.org"; +    ddns-domainname "secmedic.tg13.gathering.org"; +    range 151.216.112.5 151.216.112.254; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/sponsorvest.conf b/dhcp/conf.d/sponsorvest.conf new file mode 100644 index 0000000..65362d1 --- /dev/null +++ b/dhcp/conf.d/sponsorvest.conf @@ -0,0 +1,16 @@ +zone sponsorvest.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.105.0 netmask 255.255.255.0 { +    authoritative; +    option routers 151.216.105.1; +    option domain-name "sponsorvest.tg13.gathering.org"; +    ddns-domainname "sponsorvest.tg13.gathering.org"; +    range 151.216.105.5 151.216.105.254; +    ignore client-updates; +} + +host hacklol { hardware ethernet 00:24:7e:dd:e3:4c; fixed-address 151.216.105.9; } + diff --git a/dhcp/conf.d/stage.conf b/dhcp/conf.d/stage.conf new file mode 100644 index 0000000..bdfd3bc --- /dev/null +++ b/dhcp/conf.d/stage.conf @@ -0,0 +1,16 @@ +zone stage.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.114.0 netmask 255.255.255.0 { +    authoritative; +    option routers 151.216.114.1; +    option domain-name "stage.tg13.gathering.org"; +    ddns-domainname "stage.tg13.gathering.org"; +    range 151.216.114.5 151.216.114.254; +    ignore client-updates; +} + +host timer.stage { hardware ethernet 00:0c:29:6c:dd:ab; fixed-address 151.216.114.250; } +host politietno.stage { hardware ethernet 00:25:90:c1:bd:21; fixed-address 151.216.114.254; } diff --git a/dhcp/conf.d/stageboh.conf b/dhcp/conf.d/stageboh.conf new file mode 100644 index 0000000..62cc404 --- /dev/null +++ b/dhcp/conf.d/stageboh.conf @@ -0,0 +1,15 @@ +zone stageboh.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.107.0 netmask 255.255.255.0 { +    authoritative; +    option routers 151.216.107.1; +    option domain-name "stageboh.tg13.gathering.org"; +    ddns-domainname "stageboh.tg13.gathering.org"; +    range 151.216.107.5 151.216.107.254; +    ignore client-updates; +} + +host linux.stageboh { hardware ethernet f4:ce:46:7f:9c:7a; fixed-address 151.216.107.14; } diff --git a/dhcp/conf.d/tele.conf b/dhcp/conf.d/tele.conf new file mode 100644 index 0000000..b5b2dd6 --- /dev/null +++ b/dhcp/conf.d/tele.conf @@ -0,0 +1,14 @@ +zone tele.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.126.0 netmask 255.255.255.0 { +    authoritative; +    option routers 151.216.126.1; +    option domain-name "tele.tg13.gathering.org"; +    ddns-domainname "tele.tg13.gathering.org"; +    range 151.216.126.5 151.216.126.254; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/wlan.conf b/dhcp/conf.d/wlan.conf new file mode 100644 index 0000000..c3d779d --- /dev/null +++ b/dhcp/conf.d/wlan.conf @@ -0,0 +1,14 @@ +zone wlan.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.64.0 netmask 255.255.224.0 { +    authoritative; +    option routers 151.216.64.1; +    option domain-name "wlan.tg13.gathering.org"; +    ddns-domainname "wlan.tg13.gathering.org"; +    range 151.216.64.5 151.216.95.253; +    ignore client-updates; +} + diff --git a/dhcp/conf.d/ymse.conf b/dhcp/conf.d/ymse.conf new file mode 100644 index 0000000..06854df --- /dev/null +++ b/dhcp/conf.d/ymse.conf @@ -0,0 +1,15 @@ +zone ymse.tg13.gathering.org { +    primary 127.0.0.1; +    key DHCP_UPDATER; +} + +subnet 151.216.115.0 netmask 255.255.255.0 { +    authoritative; +    option routers 151.216.115.1; +    option domain-name "ymse.tg13.gathering.org"; +    ddns-domainname "ymse.tg13.gathering.org"; +    range 151.216.115.5 151.216.115.254; +    ignore client-updates; +} + +host recording02.stageboh { hardware ethernet 80:ee:73:33:8e:e4; fixed-address 151.216.115.254; } diff --git a/dhcp/dhcpd.conf b/dhcp/dhcpd.conf new file mode 100644 index 0000000..a907a0d --- /dev/null +++ b/dhcp/dhcpd.conf @@ -0,0 +1,30 @@ +# GENERATED BY make-dhcpd.pl +# +# Central concept: as little config in the main .conf, +# include almost everything from separate files.. +# +# log-facility local7; +option domain-name "tg13.gathering.org"; +option domain-name-servers 151.216.126.2, 151.216.125.2; +default-lease-time 3600; +max-lease-time 7200; +authoritative; + +ddns-update-style interim; +key DHCP_UPDATER { +        algorithm HMAC-MD5.SIG-ALG.REG.INT; +        secret <removed>; +} + +subnet 151.216.126.0 netmask 255.255.255.0 {} + +class "steam-clients" { +	match if ((substring(option host-name, 0, 4) = "ior-")); +} + +include "/etc/dhcp/revzones.conf"; +include "/etc/dhcp/generated-include.conf"; +include "/etc/dhcp/pxe-boot.conf"; +include "/etc/dhcp/ciscowlc.conf"; + + diff --git a/dhcp/generated-include.conf b/dhcp/generated-include.conf new file mode 100644 index 0000000..a334283 --- /dev/null +++ b/dhcp/generated-include.conf @@ -0,0 +1,159 @@ +include "/etc/dhcp/conf.d/ap-dist0.conf"; +include "/etc/dhcp/conf.d/ap-dist1.conf"; +include "/etc/dhcp/conf.d/ap-dist2.conf"; +include "/etc/dhcp/conf.d/ap-dist3.conf"; +include "/etc/dhcp/conf.d/ap-dist4.conf"; +include "/etc/dhcp/conf.d/care.conf"; +include "/etc/dhcp/conf.d/chillout.conf"; +include "/etc/dhcp/conf.d/creativia.conf"; +include "/etc/dhcp/conf.d/crew1.conf"; +include "/etc/dhcp/conf.d/crew2.conf"; +include "/etc/dhcp/conf.d/crew3.conf"; +include "/etc/dhcp/conf.d/crew4.conf"; +include "/etc/dhcp/conf.d/crew5.conf"; +include "/etc/dhcp/conf.d/crew6.conf"; +include "/etc/dhcp/conf.d/defektraid.conf"; +include "/etc/dhcp/conf.d/e1-3.conf"; +include "/etc/dhcp/conf.d/e1-4.conf"; +include "/etc/dhcp/conf.d/e11-1.conf"; +include "/etc/dhcp/conf.d/e11-2.conf"; +include "/etc/dhcp/conf.d/e11-3.conf"; +include "/etc/dhcp/conf.d/e11-4.conf"; +include "/etc/dhcp/conf.d/e13-1.conf"; +include "/etc/dhcp/conf.d/e13-2.conf"; +include "/etc/dhcp/conf.d/e13-3.conf"; +include "/etc/dhcp/conf.d/e13-4.conf"; +include "/etc/dhcp/conf.d/e15-1.conf"; +include "/etc/dhcp/conf.d/e15-2.conf"; +include "/etc/dhcp/conf.d/e15-3.conf"; +include "/etc/dhcp/conf.d/e15-4.conf"; +include "/etc/dhcp/conf.d/e17-1.conf"; +include "/etc/dhcp/conf.d/e17-2.conf"; +include "/etc/dhcp/conf.d/e17-3.conf"; +include "/etc/dhcp/conf.d/e17-4.conf"; +include "/etc/dhcp/conf.d/e19-1.conf"; +include "/etc/dhcp/conf.d/e19-2.conf"; +include "/etc/dhcp/conf.d/e19-3.conf"; +include "/etc/dhcp/conf.d/e19-4.conf"; +include "/etc/dhcp/conf.d/e21-1.conf"; +include "/etc/dhcp/conf.d/e21-2.conf"; +include "/etc/dhcp/conf.d/e21-3.conf"; +include "/etc/dhcp/conf.d/e21-4.conf"; +include "/etc/dhcp/conf.d/e23-1.conf"; +include "/etc/dhcp/conf.d/e23-2.conf"; +include "/etc/dhcp/conf.d/e23-3.conf"; +include "/etc/dhcp/conf.d/e23-4.conf"; +include "/etc/dhcp/conf.d/e25-1.conf"; +include "/etc/dhcp/conf.d/e25-2.conf"; +include "/etc/dhcp/conf.d/e25-3.conf"; +include "/etc/dhcp/conf.d/e25-4.conf"; +include "/etc/dhcp/conf.d/e27-1.conf"; +include "/etc/dhcp/conf.d/e27-2.conf"; +include "/etc/dhcp/conf.d/e29-1.conf"; +include "/etc/dhcp/conf.d/e29-2.conf"; +include "/etc/dhcp/conf.d/e3-3.conf"; +include "/etc/dhcp/conf.d/e3-4.conf"; +include "/etc/dhcp/conf.d/e31-1.conf"; +include "/etc/dhcp/conf.d/e31-2.conf"; +include "/etc/dhcp/conf.d/e33-1.conf"; +include "/etc/dhcp/conf.d/e33-2.conf"; +include "/etc/dhcp/conf.d/e35-1.conf"; +include "/etc/dhcp/conf.d/e35-2.conf"; +include "/etc/dhcp/conf.d/e37-1.conf"; +include "/etc/dhcp/conf.d/e37-2.conf"; +include "/etc/dhcp/conf.d/e39-1.conf"; +include "/etc/dhcp/conf.d/e39-2.conf"; +include "/etc/dhcp/conf.d/e41-1.conf"; +include "/etc/dhcp/conf.d/e41-2.conf"; +include "/etc/dhcp/conf.d/e43-1.conf"; +include "/etc/dhcp/conf.d/e43-2.conf"; +include "/etc/dhcp/conf.d/e43-3.conf"; +include "/etc/dhcp/conf.d/e43-4.conf"; +include "/etc/dhcp/conf.d/e45-1.conf"; +include "/etc/dhcp/conf.d/e45-2.conf"; +include "/etc/dhcp/conf.d/e45-3.conf"; +include "/etc/dhcp/conf.d/e45-4.conf"; +include "/etc/dhcp/conf.d/e47-1.conf"; +include "/etc/dhcp/conf.d/e47-2.conf"; +include "/etc/dhcp/conf.d/e47-3.conf"; +include "/etc/dhcp/conf.d/e47-4.conf"; +include "/etc/dhcp/conf.d/e49-1.conf"; +include "/etc/dhcp/conf.d/e49-2.conf"; +include "/etc/dhcp/conf.d/e49-3.conf"; +include "/etc/dhcp/conf.d/e49-4.conf"; +include "/etc/dhcp/conf.d/e5-3.conf"; +include "/etc/dhcp/conf.d/e5-4.conf"; +include "/etc/dhcp/conf.d/e51-1.conf"; +include "/etc/dhcp/conf.d/e51-2.conf"; +include "/etc/dhcp/conf.d/e51-3.conf"; +include "/etc/dhcp/conf.d/e51-4.conf"; +include "/etc/dhcp/conf.d/e53-1.conf"; +include "/etc/dhcp/conf.d/e53-2.conf"; +include "/etc/dhcp/conf.d/e53-3.conf"; +include "/etc/dhcp/conf.d/e53-4.conf"; +include "/etc/dhcp/conf.d/e55-1.conf"; +include "/etc/dhcp/conf.d/e55-2.conf"; +include "/etc/dhcp/conf.d/e55-3.conf"; +include "/etc/dhcp/conf.d/e55-4.conf"; +include "/etc/dhcp/conf.d/e57-1.conf"; +include "/etc/dhcp/conf.d/e57-2.conf"; +include "/etc/dhcp/conf.d/e57-3.conf"; +include "/etc/dhcp/conf.d/e57-4.conf"; +include "/etc/dhcp/conf.d/e59-1.conf"; +include "/etc/dhcp/conf.d/e59-2.conf"; +include "/etc/dhcp/conf.d/e59-3.conf"; +include "/etc/dhcp/conf.d/e59-4.conf"; +include "/etc/dhcp/conf.d/e61-1.conf"; +include "/etc/dhcp/conf.d/e61-2.conf"; +include "/etc/dhcp/conf.d/e61-3.conf"; +include "/etc/dhcp/conf.d/e61-4.conf"; +include "/etc/dhcp/conf.d/e63-1.conf"; +include "/etc/dhcp/conf.d/e63-2.conf"; +include "/etc/dhcp/conf.d/e63-3.conf"; +include "/etc/dhcp/conf.d/e63-4.conf"; +include "/etc/dhcp/conf.d/e65-1.conf"; +include "/etc/dhcp/conf.d/e65-2.conf"; +include "/etc/dhcp/conf.d/e65-3.conf"; +include "/etc/dhcp/conf.d/e65-4.conf"; +include "/etc/dhcp/conf.d/e67-1.conf"; +include "/etc/dhcp/conf.d/e67-2.conf"; +include "/etc/dhcp/conf.d/e67-3.conf"; +include "/etc/dhcp/conf.d/e67-4.conf"; +include "/etc/dhcp/conf.d/e69-1.conf"; +include "/etc/dhcp/conf.d/e69-2.conf"; +include "/etc/dhcp/conf.d/e69-3.conf"; +include "/etc/dhcp/conf.d/e69-4.conf"; +include "/etc/dhcp/conf.d/e7-3.conf"; +include "/etc/dhcp/conf.d/e7-4.conf"; +include "/etc/dhcp/conf.d/e71-1.conf"; +include "/etc/dhcp/conf.d/e71-2.conf"; +include "/etc/dhcp/conf.d/e71-3.conf"; +include "/etc/dhcp/conf.d/e71-4.conf"; +include "/etc/dhcp/conf.d/e73-1.conf"; +include "/etc/dhcp/conf.d/e73-2.conf"; +include "/etc/dhcp/conf.d/e73-3.conf"; +include "/etc/dhcp/conf.d/e73-4.conf"; +include "/etc/dhcp/conf.d/e75-1.conf"; +include "/etc/dhcp/conf.d/e75-2.conf"; +include "/etc/dhcp/conf.d/e75-3.conf"; +include "/etc/dhcp/conf.d/e75-4.conf"; +include "/etc/dhcp/conf.d/e77-1.conf"; +include "/etc/dhcp/conf.d/e77-2.conf"; +include "/etc/dhcp/conf.d/e9-3.conf"; +include "/etc/dhcp/conf.d/e9-4.conf"; +include "/etc/dhcp/conf.d/fugleberg1.conf"; +include "/etc/dhcp/conf.d/fugleberg2.conf"; +include "/etc/dhcp/conf.d/game.conf"; +include "/etc/dhcp/conf.d/gamehq.conf"; +include "/etc/dhcp/conf.d/lager.conf"; +include "/etc/dhcp/conf.d/logistikk.conf"; +include "/etc/dhcp/conf.d/marsrele.conf"; +include "/etc/dhcp/conf.d/noc.conf"; +include "/etc/dhcp/conf.d/presse.conf"; +include "/etc/dhcp/conf.d/secmedic.conf"; +include "/etc/dhcp/conf.d/sponsorvest.conf"; +include "/etc/dhcp/conf.d/stage.conf"; +include "/etc/dhcp/conf.d/stageboh.conf"; +include "/etc/dhcp/conf.d/tele.conf"; +include "/etc/dhcp/conf.d/wlan.conf"; +include "/etc/dhcp/conf.d/ymse.conf"; diff --git a/dhcp/pxe-boot.conf b/dhcp/pxe-boot.conf new file mode 100644 index 0000000..2641447 --- /dev/null +++ b/dhcp/pxe-boot.conf @@ -0,0 +1,2 @@ +next-server 151.216.125.3; +filename "pxelinux.0"; diff --git a/dhcp/revzones.conf b/dhcp/revzones.conf new file mode 100644 index 0000000..796d523 --- /dev/null +++ b/dhcp/revzones.conf @@ -0,0 +1,128 @@ +zone 0.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 1.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 2.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 3.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 4.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 5.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 6.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 7.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 8.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 9.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 10.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 11.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 12.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 13.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 14.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 15.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 16.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 17.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 18.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 19.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 20.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 21.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 22.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 23.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 24.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 25.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 26.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 27.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 28.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 29.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 30.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 31.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 32.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 33.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 34.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 35.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 36.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 37.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 38.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 39.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 40.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 41.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 42.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 43.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 44.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 45.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 46.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 47.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 48.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 49.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 50.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 51.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 52.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 53.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 54.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 55.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 56.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 57.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 58.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 59.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 60.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 61.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 62.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 63.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 64.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 65.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 66.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 67.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 68.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 69.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 70.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 71.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 72.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 73.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 74.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 75.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 76.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 77.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 78.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 79.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 80.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 81.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 82.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 83.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 84.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 85.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 86.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 87.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 88.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 89.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 90.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 91.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 92.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 93.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 94.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 95.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 96.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 97.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 98.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 99.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 100.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 101.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 102.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 103.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 104.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 105.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 106.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 107.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 108.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 109.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 110.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 111.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 112.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 113.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 114.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 115.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 116.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 117.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 118.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 119.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 120.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 121.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 122.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 123.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 124.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 125.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 126.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } +zone 127.216.151.in-addr.arpa { primary 127.0.0.1; key DHCP_UPDATER; } diff --git a/dlink-ng/dlink-ng.pl b/dlink-ng/dlink-ng.pl new file mode 100755 index 0000000..e395df9 --- /dev/null +++ b/dlink-ng/dlink-ng.pl @@ -0,0 +1,1097 @@ +#!/usr/bin/perl -I /root/tgmanage/ +use warnings; +use strict; +use lib '..'; +BEGIN { +        require "include/config.pm"; +        eval { +                require "include/config.local.pm"; +        }; +} +use Net::Telnet::Cisco; +use Net::Ping; +use Net::IP; +use Term::ANSIColor; +use threads; +use threads::shared; +use Thread::Queue; +use Getopt::Long; + +# Options +my $cisco_user = "$nms::config::ios_user";		# Username used when logging into the swithces +my $cisco_pass = "$nms::config::ios_pass";		# Password used when logging into the switches +my $domain_name = ".infra.$nms::config::tgname.gathering.org";	# DNS-name to append to hostnames +my $dlink_def_user = "admin";				# Default user for a factory-default D-Link +my $dlink_def_ip = "10.90.90.90";			# IP for a factory-default D-Link +my $dlink_def_mask = "255.255.255.0";			# Mask for a factory-default D-Link +my $dlink_router_ip = "10.90.90.91";			# IP to use on the router/core +my $dlink_prefix = "30";				# Prefix to use when setting D-Link IP +my $dhcprelay4_pri = "$nms::config::dhcp_server1";	# Primary ip helper-address / ip dhcp relay address +my $dhcprelay4_sec = "$nms::config::dhcp_server2";	# Secondary ip helper-address / ip dhcp relay address +my $dhcprelay6_pri = "";				# Primary ipv6 dhcp relay +my $dhcprelay6_sec = "";				# Secondary ipv6 dhcp relay +my $vrf_prefix = "dlink";				# What to prefix the VRF-number (Thread ID) with +my $max_threads = 20;					# Max threads to use +my $dlink_host_suffix = "_DGS-3100";			# Suffix for hostname on the D-Link switches (needed by NMS) +my $log_dir = "dlink-ng/log";				# Path to logfiles +my $default_coreswos = "ios";				# Default OS on coresw +my $dlink_lacp_start = '45';				# First port for LACP-group on D-Links +my $dlink_lacp_end = '48';				# Last port for LACP-group on D-Links +my $skip_last_port = 1;					# Skip last port -- set up as access port +my $access_vlan = '3602';				# VLAN to use for skipped port + +# Stuff +my $switchq = Thread::Queue->new(); 	# Queue to put switches in +my $switches : shared = 0;		# Number of successful switches +my $failed_switches : shared = 0;	# Number of failed switches +my $total_time : shared = 0;		# Total time spent for all switches +my %telnet_sessions : shared;		# Number of sessions currently in use +my $DLINK_TEMPLATE;			# Filehandle used for reading D-Link template + +# Custom Portchannel-config +my $po_config = { +	ios => [ +		"logging event link-status", +		#"ip access-group end-user-protection in", +		#"ip directed-broadcast 2000", +		#"ipv6 nd prefix default 300 300 no-autoconfig", +		#"ipv6 nd managed-config-flag", +		#"ipv6 nd other-config-flag", +		#"ipv6 dhcp relay destination $dhcprelay6_pri", +		#"ipv6 dhcp relay destination $dhcprelay6_sec" +	], +	nx => [ +		"", +	], +}; + +# Custom last port config +my $last_port_config = { +	ios => [ +		"logging event link-status", +		"switchport mode access", +		"switchport access vlan $access_vlan", +		"spanning-tree bpduguard enable", +	], +	nx => [ +		"", +	], +}; + +# Define what OS-version a coresw runs +# NX, XR, XE, etc +# The regex is matched against $coreswip +my $os_regex = { +	nx => 'flexusnexus', +}; + +# Configure settings for each OS +my $os_info = { +	ios => { +		max_sessions => 10, +	}, +	nx => { +		# define 64 sessions on nxos +		# nx-os# conf t +		# nx-os(config)# feature dhcp +		# nx-os(config)# line vty +		# nx-os(config-line)# session-limit 64 +		max_sessions => 50, +	}, +}; + +# Autoflush +$| = 1; + +# Get options +my ($cisco_config, $single_switch, $dlink_config, $save_config, $skipped_port_only, $skipped_port_desc_only, $no_skip); +if (@ARGV > 0) { +	GetOptions( +	'c|cisco|ciscoconfig'	=> \$cisco_config,		# Configure on the Cisco-side only (Portchannel, interfaces, etc) +	's|switch=s'		=> \$single_switch,		# Configure a single switch +	'd|dlink|dlinkconfig=s'	=> \$dlink_config,		# Push D-Link-template-config to D-Link (not used @ TG) +	'w|write'		=> \$save_config,		# Write config on Cisco-side +	'portskip'		=> \$skipped_port_only,		# Configure the skipped port only (Cisco-side) +	'skipdesc'		=> \$skipped_port_desc_only,	# Configure the skipped port description only (Cisco-side) +	'noskip'		=> \$no_skip			# Override $skip_last_port +	) +} + +# Exit if D-Link template file doesn't exist +if ($dlink_config){ +	unless(-e $dlink_config){ +		die("File '$dlink_config' does not exists. Aborting.\n"); +	} +} + +# Exit if $cisco_config and $skipped_port_only or $skipped_port_desc_only is set +if ($cisco_config && ($skipped_port_only || $skipped_port_desc_only)){ +	die("\$cisco_config and \$skipped_port_only (or \$skipped_port_desc_only) can't be used together.\n"); +} + +# Update $skip_last_port if $no_skip is set +if ($no_skip){ +	$skip_last_port = 0; +} + +# If skipdesc, assume $skipped_port_only +if ($skipped_port_desc_only){ +	$skipped_port_only = 1; +} + +# Print stuff +sub log_it{ +	my ($logtype, $color, $switchname, $msg) = @_; +	printf ("%-38s %s\n", colored("$logtype", "$color") . "/" . colored("$switchname", "bold") . ":", "$msg"); +} + +# INFO-logs +sub info{ +	my ($switchname, $msg) = @_; +	log_it("INFO", "blue", $switchname, $msg); +	return 1; +} + +# ERROR-logs +sub error{ +	my ($switchname, $msg) = @_; +	printf ("%-38s %s\n", colored("ERROR", "red") . "/" . colored("$switchname", "bold") . ":", "$msg"); +	return 0; +} + +# Debug from Net::Telnet::Cisco +sub debug{ +	my ($switchname, $errmsg) = @_; +	 +	if ($errmsg){ +		foreach my $line (split('\\n', $errmsg)){ +			error($switchname, $line); +		} +	} +} + +# Abort +sub abort{ +	my ($switchname, $t1, $t2) = @_; +	 +	$t1->close if defined($t1); +	$t2->close if defined($t2); +	 +	return error($switchname, "Aborting.");	 +} + +# Set coreswos +sub set_coreswos{ +	my $coreswip = shift; +	 +	my $os = $default_coreswos; +	 +	foreach my $swos ( sort keys %$os_regex ){ +		$os = $swos if ($coreswip =~ m/$os_regex->{$swos}/); +	} +	 +	return $os; +} + +# Is NX-OS? +sub is_nx{ +	my $coreswos = shift; +	return 1 if ($coreswos =~ m/^nx$/i); +	return 0; +} + +# Cisco-ping +sub cisco_ping{ +	my ($cisco, $ip, $timeout, $coreswos, $vrf) = @_; +	my $cmd; +	 +	if (is_nx($coreswos)){ +		$cmd = "ping $ip count 1 timeout 1"; +		$cmd .= " vrf ${vrf_prefix}${vrf}" if ($vrf && defined($vrf)); +	} else { +		# IOS +		$cmd = "ping"; +		$cmd .= " vrf ${vrf_prefix}${vrf}" if ($vrf && defined($vrf)); +		$cmd .= " $ip repeat 1 timeout 1"; +	} +	 +	my $pong = 0; +	my $tries = 0; +	while (($pong == 0) && ($tries < $timeout)){ +		my @res = $cisco->cmd($cmd); +		 +		# if blank, try again +		# happens at least on ME3600X +		next unless @res; + +		# sleep if it complains about no valid source address +		#  % VRF does not have a usable source address +		# this is caused by no link, or network not propagated +		# observed on WS-C6506-E with sup720 running 122-33.SXJ5 +		sleep 1 if ("@res" =~ m/VRF does not have a usable source address/); +		 +		if (is_nx($coreswos)){ +			$pong = 1 if ($res[1] =~ m/^64 bytes from $ip/i); +		} else { +			$pong = 1 if ($res[-1] =~ m/^\s*Success rate is 100 percent/i); +		} +		$tries++; +	} +	return $pong; +} + +# Net::Ping-ping +sub pong{ +	my ($ip, $timeout) = @_; +	my $pong = 0; +	my $tries = 0; +	 +	while(($pong == 0) && ($tries < $timeout)){ +		my $p = Net::Ping->new(); +		 +		if ($p->ping($ip, 5)) { +			$pong = 1; +		} +		 +		$tries++; +	} +	return $pong; +} + +# Create login to D-Link +sub dlink_login{ +	my ($switch, $ip, $vrf, $telnet_source) = @_; + +	my $dlink = Net::Telnet::Cisco->new( +			Host => $switch->{coreswip} . $domain_name, +			Errmode => 'return', +			output_log => "$log_dir/output-$switch->{coreswip}.log", +			input_log => "$log_dir/input-$switch->{coreswip}.log", +			Prompt => '/\S+[#>]/', +			Timeout => 60 +			); +	 +	unless (defined($dlink)) { +		return error($switch->{switchname}, "Could not connect to '$switch->{coreswip}'."); +	} + +	info($switch->{switchname}, "Logging in to coreswitch '$switch->{coreswip}' to telnet to D-Link."); +	 +	unless ($dlink->login($cisco_user, $cisco_pass)){ +		$dlink->close; +		return error($switch->{switchname}, "Can't log in to coreswitch '$switch->{coreswip}' (to telnet to D-Link)."); +	} +			 +	$dlink->enable; +	debug($switch->{switchname}, $dlink->errmsg); + +	my $cmd; +	if (is_nx($switch->{coreswos})){ +		$cmd = "telnet $ip"; +		$cmd .= " vrf ${vrf_prefix}${vrf}" if ($vrf && defined($vrf)); +		$cmd .= " source $telnet_source" if ($telnet_source && defined($telnet_source)); +	} else { +		# IOS +		$cmd = "telnet $ip"; +		$cmd .= " /vrf ${vrf_prefix}${vrf}" if ($vrf && defined($vrf)); +		$cmd .= " /source-interface $telnet_source" if ($telnet_source && defined($telnet_source)); +	} +	 +	info($switch->{switchname}, "Telneting to D-Link."); +	$dlink->print($cmd); + +	info($switch->{switchname}, "Waiting for login prompt."); +	$dlink->waitfor('/User ?Name:/') +		or return abort($switch->{switchname}, $dlink); +	 +	info($switch->{switchname}, "Got login prompt, logging in."); +	telnet_print($switch, $dlink, '', $dlink_def_user, 0) +		or return abort($switch->{switchname}, $dlink); +		 +	info($switch->{switchname}, "Waiting for prompt."); +	$dlink->waitfor('/\S+\#/') +		or return abort($switch->{switchname}, $dlink); +	 +	# disable CLI paging +	telnet_print($switch, $dlink, '', "disable clipaging") +		or return abort($switch->{switchname}, $dlink); + +	info($switch->{switchname}, "Logged in to D-Link"); +	return $dlink; +} + +# Execute telnet-command +sub telnet_cmd{ +	my ($switch, $telnet, $cmd) = @_; +			 +	unless ($telnet->cmd($cmd)){ +		error($switch->{switchname}, "Command '$cmd' failed"); +		debug($switch->{switchname}, $telnet->errmsg); +		return 0; +	} +	 +	return 1; +} + +# Execute telnet-print +sub telnet_print{ +	my ($switch, $telnet, $telnet2, $cmd, $waitfor) = @_; +		 +	unless (defined($waitfor)){ +			$waitfor = 1; +	} +	 +	unless ($telnet->print($cmd)){ +		error($switch->{switchname}, "Command '$cmd' failed."); +		debug($switch->{switchname}, $telnet->errmsg); +		return 0; +	} +	 +	if ($waitfor){ +		$telnet->waitfor('/\S+\#/') or return 0; +	} +			 +	return 1; +} + +# Make sure interface actually is shut +sub no_no_shut{ +	my ($switch, $cisco, $port) = @_; +	 +	info($switch->{switchname}, "Making sure interface $port /REALLY/ gets shut."); +	 +	# There is a few reasons as to why we want to do this. +	# On some boxes/OSes, default config for an interface is 'no shut'. +	# On some boxes/OSes, the 'shut' command isn't applied right away after +	# you do a 'shut'. +	 +	my $tries = 0; +	my $return = 0; +	 +	while (1){ +		if($tries >= 5){ +			# max 5 tries +			last; +		} +		 +		sleep 1; # wait a bit +		 +		telnet_cmd($switch, $cisco, "shut") +			or return abort($switch->{switchname}, $cisco);  + +		# now we need to check that the 'running config' actually reflects this + +		my @shut_info = $cisco->cmd("do sh run int $port | i shutdown"); +		 +		unless(@shut_info){ +			$tries++; +			next; +		} +		 +		my $shut = "@shut_info"; +		chomp($shut); +		 +		if ($shut =~ m/shutdown/i){ +			$return = 1; +			last; +		} else { +			$tries++; +			next; +		} +	} +	 +	return $return; +} + +# Reset all interfaces +sub reset_interfaces{ +	my ($switch, $cisco) = @_; +	 +	# Take down interface +	info($switch->{switchname}, "Resetting interfaces."); +	 +	telnet_cmd($switch, $cisco, "conf t") +		or return abort($switch->{switchname}, $cisco); +	 +	# Remove old config/return to defaults on interfaces +	# We also shut them to avoid D-Link looping +	foreach my $port (@{$switch->{ports}}){ +		telnet_cmd($switch, $cisco, "default int $port") +			or return abort($switch->{switchname}, $cisco); +		telnet_cmd($switch, $cisco, "int $port") +			or return abort($switch->{switchname}, $cisco); +		no_no_shut($switch, $cisco, $port) +			or return abort($switch->{switchname}, $cisco); +		telnet_cmd($switch, $cisco, "no switchport") +			or return abort($switch->{switchname}, $cisco); +	} + +	# Remove portchannel +	if(is_nx($switch->{coreswos})){ +		# NX-OS +		telnet_cmd($switch, $cisco, "no int Po$switch->{etherchannel}") +			or return abort($switch->{switchname}, $cisco); +	} else { +		# IOS fails on the next command, if the portchannel doesn't exist +		# Ignore error on this command +		$cisco->cmd("no int Po$switch->{etherchannel}"); +	} + +	telnet_cmd($switch, $cisco, "end") +		or return abort($switch->{switchname}, $cisco); +		 +	return 1; +} + +# Push D-Link template config to a D-Link +sub push_dlink_template_config{ +	my $switch = shift;	# switchinfo +	 +	# No need to bounce via Cisco-box; login directly to D-Link +	my $dlink = Net::Telnet::Cisco->new( +			Host => $switch->{ipv4address}, +			Errmode => 'return', +			output_log => "$log_dir/output-$switch->{ipv4address}.log", +			input_log => "$log_dir/input-$switch->{ipv4address}.log", +			Prompt => '/\S+[#>]/', +			Timeout => 60 +			); +	 +	unless (defined($dlink)) { +		return error($switch->{switchname}, "Could not connect to '$switch->{switchname}' ($switch->{ipv4})."); +	} + +	info($switch->{switchname}, "Logging in to D-Link '$switch->{switchname}' ($switch->{ipv4address})."); +	$dlink->waitfor('/User ?Name:/') +		or return abort($switch->{switchname}, $dlink); +	 +	info($switch->{switchname}, "Got login prompt, logging in."); +	telnet_print($switch, $dlink, '', $dlink_def_user, 0) +		or return abort($switch->{switchname}, $dlink); +	 +	info($switch->{switchname}, "Waiting for prompt."); +	$dlink->waitfor('/\S+\#/') +		or return abort($switch->{switchname}, $dlink); +	 +	# disable CLI paging +	telnet_print($switch, $dlink, '', "disable clipaging") +		or return abort($switch->{switchname}, $dlink); +	 +	info($switch->{switchname}, "Logged in to D-Link"); +	 +	# Done logging in, let's configure stuff +	info($switch->{switchname}, "Opening D-Link template file ($dlink_config)."); +	open $DLINK_TEMPLATE, '<', $dlink_config or return error($switch->{switchname}, "Couldn't open D-Link template ($dlink_config): $!"); + +	info($switch->{switchname}, "Applying config from D-Link template file ($dlink_config)."); +	 +	while (my $line=<$DLINK_TEMPLATE>) { +		chomp $line; +		 +		next if ($line =~ m/^\s*(((#|\!).*)|$)/);	# skip if comment, or blank line + +		telnet_print($switch, $dlink, '', $line) +			or return abort($switch->{switchname}, $dlink); +			 +		sleep 1; # The D-Link's are a bit slow... +	} + +	close $DLINK_TEMPLATE or return error($switch->{switchname}, "Couldn't close D-Link template ($dlink_config): $!"); + +	info($switch->{switchname}, "Done applying config from D-Link template file ($dlink_config). Saving..."); + +	# Save config + logout +	telnet_print($switch, $dlink, '', "save", 0) +		or return abort($switch->{switchname}, $dlink); +	telnet_print($switch, $dlink, '', "Y") +		or return abort($switch->{switchname}, $dlink); +	telnet_print($switch, $dlink, '', "logout") +		or return abort($switch->{switchname}, $dlink); + +	# Done +	log_it("SUCCESS", "green", $switch->{switchname}, "Done pushing D-Link template config to switch $switch->{switchname} ($switch->{ipv4address}). \\o/"); +	$dlink->close; +	return 1; +} + +# Setup a switch +sub setup{ +	my $switch = shift;		# switchinfo +	my $vrf = threads->tid();	# use thread ID as VRF-number +	 +	# Remove last port if we're skipping it +	my $skipped_port; +	if ($skip_last_port){ +		$skipped_port = pop(@{$switch->{ports}}); +	} +	 +	if($skipped_port_only){ +		info($switch->{switchname}, "Configuring skipped port only."); +	} +	 +	if($cisco_config){ +		info($switch->{switchname}, "Configuring things on the Cisco-side only."); +	} +	 +	unless($cisco_config || $skipped_port_only){ +		info($switch->{switchname}, "Starting configuration of $switch->{switchname} ($switch->{ipv4address})."); +		info($switch->{switchname}, "Trying to ping $switch->{ipv4address}."); +	 +		if (pong($switch->{ipv4address}, 1)){ +			# push template-config to D-Link if template-file is given as argument +			if($dlink_config){ +				log_it("INFO", "green", $switch->{switchname}, "Switch $switch->{switchname} ($switch->{ipv4address}) is already responding to ping! \\o/"); +				info($switch->{switchname}, "Going to push D-Link template config to switch $switch->{switchname} ($switch->{ipv4address})"); +				return push_dlink_template_config($switch); +			} else { +				# if not +				log_it("INFO", "green", $switch->{switchname}, "Skipping $switch->{switchname} ($switch->{ipv4address}): is already responding to ping! \\o/"); +				return 1; +			} +		} +	 +		info($switch->{switchname}, "Not responding to ping, configuring device."); +	} + +	info($switch->{switchname}, "Connecting to coreswitch '$switch->{coreswip}'."); + +	my $cisco = Net::Telnet::Cisco->new( +			Host => $switch->{coreswip} . $domain_name, +			Errmode => 'return', +			output_log => "$log_dir/output-$switch->{coreswip}.log", +			input_log => "$log_dir/input-$switch->{coreswip}.log", +			Prompt => '/\S+[#>]/', +			Timeout => 60 +			); + + 	unless (defined($cisco)){ +		return error($switch->{switchname}, "Could not connect to '$switch->{coreswip}'."); +	} + +	info($switch->{switchname}, "Logging in to coreswitch '$switch->{coreswip}'."); +	 +	unless ($cisco->login($cisco_user, $cisco_pass)){ +		$cisco->close; +		return error($switch->{switchname}, "Can't log in to '$switch->{coreswip}'."); +	} +	 +	$cisco->enable; +	debug($switch->{switchname}, $cisco->errmsg); + +	# Disable paging +	telnet_cmd($switch, $cisco, "terminal length 0") +		or return abort($switch->{switchname}, $cisco); +	 +	unless($cisco_config || $skipped_port_only){ +		# Prepare ports +		reset_interfaces($switch, $cisco) +			or return abort($switch->{switchname}, $cisco); + +		# Set up port 1 for D-Link telneting	 +		telnet_cmd($switch, $cisco, "conf t") +			or return abort($switch->{switchname}, $cisco); + +		info($switch->{switchname}, "Enabling VRF (${vrf_prefix}${vrf}). Applying to interface."); +		if(is_nx($switch->{coreswos})){ +			# Remove previous VRF +			# No error-check on the next command, as NX-OS +			# spits out "% VRF dlink-X not found" +			# making Net::Telnet::Cisco think it's an error +			 +			# Extra overhead to delete, not used +			#$cisco->cmd("no vrf context ${vrf_prefix}${vrf}"); +			#sleep 10;	# NX-OS seems to need some time to delete a VRF +		 +			# Create VRF +			telnet_cmd($switch, $cisco, "vrf context ${vrf_prefix}${vrf}") +				or return abort($switch->{switchname}, $cisco); +		} else { +			# IOS +			# IOS fails on the next command, if the vrf doesn't exist +			# Ignore error on this command +			 +			# Extra overhead to delete, not used +			#$cisco->cmd("no ip vrf ${vrf_prefix}${vrf}"); +			 +			# Create VRF +			telnet_cmd($switch, $cisco, "ip vrf ${vrf_prefix}${vrf}") +				or return abort($switch->{switchname}, $cisco); +			telnet_cmd($switch, $cisco, "rd $vrf:$vrf") +				or return abort($switch->{switchname}, $cisco); +		} +	 +		# Configure port #1 +		telnet_cmd($switch, $cisco, "int " . @{$switch->{ports}}[0]) +			or return abort($switch->{switchname}, $cisco); +		telnet_cmd($switch, $cisco, "no switchport") +			or return abort($switch->{switchname}, $cisco); +		 +		if(is_nx($switch->{coreswos})){ +			# No error-check on the next command, as NX-OS +			# spits out "% Deleted all L3 config on interface Ethernet1/45" +			# making Net::Telnet::Cisco think it's an error +		 +			$cisco->cmd("vrf member ${vrf_prefix}${vrf}"); +		} else { +			# IOS +			telnet_cmd($switch, $cisco, "ip vrf forwarding ${vrf_prefix}${vrf}") +				or return abort($switch->{switchname}, $cisco); +		} +	 +		# Add temporary D-Link IP +		info($switch->{switchname}, "Adding IP-address to interface."); + +		telnet_cmd($switch, $cisco, "ip address $dlink_router_ip $dlink_def_mask") +			or return abort($switch->{switchname}, $cisco); +	 +		# 'no shut'-patrol reporting in! +		telnet_cmd($switch, $cisco, "no shut") +			or return abort($switch->{switchname}, $cisco);  +	 +		telnet_cmd($switch, $cisco, "end") +			or return abort($switch->{switchname}, $cisco); + +		info($switch->{switchname}, "Waiting for D-Link to answer on $dlink_def_ip in VRF ${vrf_prefix}${vrf} on port #1 (" . @{$switch->{ports}}[0] . ")."); +	 +		# Use port 1 if ping succeeds +		my $p_count = 0; +		my $dlink_port = @{$switch->{ports}}[$p_count]; +		 +		until (cisco_ping($cisco, $dlink_def_ip, 30, $switch->{coreswos}, $vrf)) { +			# Did not ping, let's try next port +			# We do this because port#1 might be damaged/not patched +			 +			# First we need to check if there are more ports to test +			if ($p_count >= $#{$switch->{ports}}){ +				# Current port is last port available +				# Since it did not ping, we reset all interfaces +				 +				reset_interfaces($switch, $cisco) +					or return abort($switch->{switchname}, $cisco); +				$cisco->close; +				return error($switch->{switchname}, "No more ports on $switch->{switchname}. Aborting."); +			} +			 +			# Use next port +			$p_count++; +			 +			info($switch->{switchname}, "D-Link on port #" . ($p_count) . " ($dlink_port) did not respond. Trying next port (" . @{$switch->{ports}}[$p_count] . ")."); +			 +			# Try next port, reset old port +			telnet_cmd($switch, $cisco, "conf t") +				or return abort($switch->{switchname}, $cisco); +			telnet_cmd($switch, $cisco, "default int $dlink_port") +				or return abort($switch->{switchname}, $cisco); +			telnet_cmd($switch, $cisco, "int $dlink_port") +				or return abort($switch->{switchname}, $cisco); +			no_no_shut($switch, $cisco, $dlink_port) +				or return abort($switch->{switchname}, $cisco); +				 +			# Set new port +			$dlink_port = @{$switch->{ports}}[$p_count]; +			 +			# Configure new port +			telnet_cmd($switch, $cisco, "int $dlink_port") +				or return abort($switch->{switchname}, $cisco); +			telnet_cmd($switch, $cisco, "no switchport") +				or return abort($switch->{switchname}, $cisco); +		 +			if(is_nx($switch->{coreswos})){ +				# No error-check on the next command, as NX-OS +				# spits out "% Deleted all L3 config on interface Ethernet1/45" +				# making Net::Telnet::Cisco think it's an error + +				$cisco->cmd("vrf member ${vrf_prefix}${vrf}"); +			} else { +				# IOS +				telnet_cmd($switch, $cisco, "ip vrf forwarding ${vrf_prefix}${vrf}") +					or return abort($switch->{switchname}, $cisco); +			} +			 +			telnet_cmd($switch, $cisco, "ip address $dlink_router_ip $dlink_def_mask") +				or return abort($switch->{switchname}, $cisco); +			# 'no shut'-patrol reporting in! +			telnet_cmd($switch, $cisco, "no shut") +			 	or return abort($switch->{switchname}, $cisco); +			telnet_cmd($switch, $cisco, "end") +				or return abort($switch->{switchname}, $cisco); +		 +			info($switch->{switchname}, "Waiting for D-Link to answer on $dlink_def_ip in VRF ${vrf_prefix}${vrf} on port #" . ($p_count+1) . " (" . @{$switch->{ports}}[$p_count] . ")."); +		} + +		# Telnet to D-Link +		info($switch->{switchname}, "Starting D-Link config phase 1."); +		my $dlink = dlink_login($switch, $dlink_def_ip, $vrf) +			or return abort($switch->{switchname}, $cisco); + +		info($switch->{switchname}, "Setting hostname to $switch->{switchname}${dlink_host_suffix}"); +		telnet_print($switch, $dlink, $cisco, "config snmp system_name $switch->{switchname}${dlink_host_suffix}") +			or return abort($switch->{switchname}, $cisco, $dlink); +		 +		info($switch->{switchname}, "Adding LACP. Enabling STP."); +		telnet_print($switch, $dlink, $cisco, "create link_aggregation group_id 1 type lacp") +			or return abort($switch->{switchname}, $cisco, $dlink); +		telnet_print($switch, $dlink, $cisco, "config link_aggregation group_id 1 ports 1:($dlink_lacp_start-$dlink_lacp_end)") +			or return abort($switch->{switchname}, $cisco, $dlink); +		telnet_print($switch, $dlink, $cisco, "enable stp") +			or return abort($switch->{switchname}, $cisco, $dlink); +	 +		info($switch->{switchname}, "STP enabled, logging in again."); +		$dlink->close; + +		unless (cisco_ping($cisco, $dlink_def_ip, 60, $switch->{coreswos}, $vrf)) { +			reset_interfaces($switch, $cisco) +				or return abort($switch->{switchname}, $cisco); +			$cisco->close; +			return error($switch->{switchname}, "Can't login to $switch->{switchname} on $dlink_def_ip, aborting."); +		} + +		$dlink = dlink_login($switch, $dlink_def_ip, $vrf) or return abort($switch->{switchname}, $cisco); +	 +		info($switch->{switchname}, "Running STP config."); +		telnet_print($switch, $dlink, $cisco, "config stp version mstp") +			or return abort($switch->{switchname}, $cisco, $dlink); +		telnet_print($switch, $dlink, $cisco, "config stp priority 61440 instance_id 0") +			or return abort($switch->{switchname}, $cisco, $dlink); +		telnet_print($switch, $dlink, $cisco, "config stp ports 1:(1-44) edge true") +			or return abort($switch->{switchname}, $cisco, $dlink); +		telnet_print($switch, $dlink, $cisco, "enable lldp") +			or return abort($switch->{switchname}, $cisco, $dlink); +	 +		info($switch->{switchname}, "Setting IP address."); +		telnet_print($switch, $dlink, $cisco, "config ipif System ipaddress $switch->{ipv4address}/$dlink_prefix vlan default") +			or return abort($switch->{switchname}, $cisco, $dlink); +	 +		info($switch->{switchname}, "Closing D-Link link."); +		$dlink->close; + +		info($switch->{switchname}, "Configuring IP on gateway."); +		telnet_cmd($switch, $cisco, "conf t") +			or return abort($switch->{switchname}, $cisco); +		telnet_cmd($switch, $cisco, "default int $dlink_port") +			or return abort($switch->{switchname}, $cisco); +		telnet_cmd($switch, $cisco, "int $dlink_port") +			or return abort($switch->{switchname}, $cisco); +		telnet_cmd($switch, $cisco, "no switchport") +			or return abort($switch->{switchname}, $cisco); +		telnet_cmd($switch, $cisco, "ip address $switch->{ipv4gateway} $switch->{netmask}") +			or return abort($switch->{switchname}, $cisco); +		# 'no shut'-patrol reporting in! +		telnet_cmd($switch, $cisco, "no shut") +			or return abort($switch->{switchname}, $cisco); +		telnet_cmd($switch, $cisco, "end") +			or return abort($switch->{switchname}, $cisco); + +		# Wait for network convergence +		info($switch->{switchname}, "Waiting for network to converge."); +		unless (cisco_ping($cisco, $switch->{ipv4address}, 60, $switch->{coreswos})) { +			reset_interfaces($switch, $cisco) +				or return abort($switch->{switchname}, $cisco); +			$cisco->close; +			return error($switch->{switchname}, "Can't ping $switch->{switchname} on $switch->{ipv4address}, aborting."); +		} + +		# Do it again! +		info($switch->{switchname}, "D-Link config phase 2."); +		$dlink = dlink_login($switch, $switch->{ipv4address}, '', $dlink_port) or return abort($switch->{switchname}, $cisco); + +		info($switch->{switchname}, "Setting default route on switch. Saving config."); +		telnet_print($switch, $dlink, $cisco, "create iproute default $switch->{ipv4gateway}") +			or return abort($switch->{switchname}, $cisco, $dlink); +		telnet_print($switch, $dlink, $cisco, "save", 0) +			or return abort($switch->{switchname}, $cisco, $dlink); +		telnet_print($switch, $dlink, $cisco, "Y") +			or return abort($switch->{switchname}, $cisco, $dlink); +		telnet_print($switch, $dlink, $cisco, "logout") +			or return abort($switch->{switchname}, $cisco, $dlink); +		 +		info($switch->{switchname}, "Closing D-Link link."); +		$dlink->close; +	} +	 +	unless($skipped_port_only){ +		# Configure final IOS stuff +		info($switch->{switchname}, "Final IOS config phase. Setting up all interfaces + Port-Channel."); + +		# Reset interfaces +		reset_interfaces($switch, $cisco) +			or return abort($switch->{switchname}, $cisco); +		 +		telnet_cmd($switch, $cisco, "conf t") +			or return abort($switch->{switchname}, $cisco); + +		# this needs to be done on IOS-XE +		# Portchannel needs to exist before we can assign interfaces to it +		telnet_cmd($switch, $cisco, "int Po$switch->{etherchannel}") +			or return abort($switch->{switchname}, $cisco); +				 +		# Rest of the config +		my $etherchan_desc; +		foreach my $port (@{$switch->{ports}}){ +			telnet_cmd($switch, $cisco, "int $port") +				or return abort($switch->{switchname}, $cisco); +			telnet_cmd($switch, $cisco, "no switchport") +				or return abort($switch->{switchname}, $cisco); +			# 'no shut'-patrol reporting in! +			telnet_cmd($switch, $cisco, "no shut") +				or return abort($switch->{switchname}, $cisco); +			telnet_cmd($switch, $cisco, "desc D-Link $switch->{switchname}; RJ-45; 1G;") +				or return abort($switch->{switchname}, $cisco); +			telnet_cmd($switch, $cisco, "channel-group $switch->{etherchannel} mode passive") +				or return abort($switch->{switchname}, $cisco); +		 +			# add port to descr +			$etherchan_desc .= "$port; "; +		} +		 +		telnet_cmd($switch, $cisco, "int Po$switch->{etherchannel}") +			or return abort($switch->{switchname}, $cisco); +		telnet_cmd($switch, $cisco, "desc D-Link $switch->{switchname}; $etherchan_desc") +			or return abort($switch->{switchname}, $cisco); +		telnet_cmd($switch, $cisco, "ip address $switch->{ipv4gateway} $switch->{netmask}") +			or return abort($switch->{switchname}, $cisco); +	 +		# ipv6-stuff +		unless (is_nx($switch->{coreswos})){ +			# IOS +			telnet_cmd($switch, $cisco, "ipv6 enable") +				or return abort($switch->{switchname}, $cisco); +		} +	 +		telnet_cmd($switch, $cisco, "ipv6 address $switch->{ipv6address}") +			or return abort($switch->{switchname}, $cisco); +	 +		if (is_nx($switch->{coreswos})){ +			telnet_cmd($switch, $cisco, "ip dhcp relay address $dhcprelay4_pri") +				or return abort($switch->{switchname}, $cisco); +		 +			# define secondary if present +			if (defined($dhcprelay4_sec) && $dhcprelay4_sec){ +				telnet_cmd($switch, $cisco, "ip dhcp relay address $dhcprelay4_sec") +					or return abort($switch->{switchname}, $cisco); +			} +		} else { +			# IOS +			telnet_cmd($switch, $cisco, "ip helper-address $dhcprelay4_pri") +				or return abort($switch->{switchname}, $cisco); +		 +			# define secondary if present +			if (defined($dhcprelay4_sec) && $dhcprelay4_sec){ +				telnet_cmd($switch, $cisco, "ip helper-address $dhcprelay4_sec") +					or return abort($switch->{switchname}, $cisco); +			} +		} +	 +		# Custom Portchannel-config +		# Dynamically applied depending on OS +		foreach my $cmd (@{$po_config->{$switch->{coreswos}}}){ +			telnet_cmd($switch, $cisco, $cmd) +				or return abort($switch->{switchname}, $cisco); +		} +		 +		# 'no shut'-patrol reporting in! +		telnet_cmd($switch, $cisco, "no shut") +		 	or return abort($switch->{switchname}, $cisco); +		telnet_cmd($switch, $cisco, "end") +			or return abort($switch->{switchname}, $cisco); +	} +	 +	# If we skipped last port at the start, we configure it now +	if (($skip_last_port && $skipped_port && defined($skipped_port)) || ($skipped_port_only && defined($skipped_port_only))){ +		if ($skipped_port_desc_only){ +			info($switch->{switchname}, "Configuring skipped port... (description only)"); +		} else { +			info($switch->{switchname}, "Configuring skipped port..."); +		} +		 +		telnet_cmd($switch, $cisco, "conf t") +			or return abort($switch->{switchname}, $cisco); +		unless ($skipped_port_desc_only){ +			telnet_cmd($switch, $cisco, "default int $skipped_port") +				or return abort($switch->{switchname}, $cisco); +		} +		 +		telnet_cmd($switch, $cisco, "int $skipped_port") +			or return abort($switch->{switchname}, $cisco); +		telnet_cmd($switch, $cisco, "desc AP \@ D-Link $switch->{switchname}; RJ-45; 1G;") +			or return abort($switch->{switchname}, $cisco); +		 +		unless ($skipped_port_desc_only){ +			foreach my $cmd (@{$last_port_config->{$switch->{coreswos}}}){ +				telnet_cmd($switch, $cisco, $cmd) +					or return abort($switch->{switchname}, $cisco); +			} +			# 'no shut'-patrol reporting in! +			telnet_cmd($switch, $cisco, "no shut") +			 	or return abort($switch->{switchname}, $cisco); +		} +		telnet_cmd($switch, $cisco, "end") +			or return abort($switch->{switchname}, $cisco); +	} +	 +	# If only cisco-config +	if($cisco_config){ +		log_it("CONFIG", "green", $switch->{switchname}, "Cisco-config relevant to switch '$switch->{switchname}' ($switch->{ipv4address}) done! \\o/"); +	} + +	# Check if all is OK, but not if configuring skipped port only +	my $return = 0; +	if ($skipped_port_only){ +		info($switch->{switchname}, "Done doing skipped port config. Not checking if anything is online."); +		$return = 1; +	} else { +		unless (pong($switch->{ipv4address}, 15)){ +			if (cisco_ping($cisco, $switch->{ipv4address}, 60, $switch->{coreswos})) { +				# we can reach from core, but not from other places, lets warn +				log_it("ERROR", "red", $switch->{switchname}, "Switch $switch->{switchname} reachable only from core/distro."); +			} else { +				reset_interfaces($switch, $cisco) +					or return abort($switch->{switchname}, $cisco); +				$cisco->close; +				return error($switch->{switchname}, "Can't ping $switch->{switchname} on $switch->{ipv4address}, aborting."); +			} +		} else { +			# pingable, OK +			log_it("SUCCESS", "green", $switch->{switchname}, "Switch $switch->{switchname} ($switch->{ipv4address}) set up! \\o/");	 + +			$return = 1; +			 +			# push template-config to D-Link if template-file is given as argument +			if($dlink_config){ +				info($switch->{switchname}, "Going to push D-Link template config to switch $switch->{switchname} ($switch->{ipv4address})"); +				$return = push_dlink_template_config($switch); +			} +		} +	} +	 +	if($save_config){ +		# save the cisco-config +		info($switch->{switchname}, "Saving config on core-switch ($switch->{coreswip})."); +		telnet_cmd($switch, $cisco, "write") +			or return abort($switch->{switchname}, $cisco); +	} +	 +	$cisco->close; +	return $return; +} + +# Process switches +sub process_switches { +	while (my $switch = $switchq->dequeue()){ +		last if ($switch eq 'DONE');	# all done +		 +		my $time_start = time(); +		 +		# Wait till there is sessions/VTYs available +		while (1){ +			$telnet_sessions{$switch->{coreswip}} = 0 unless $telnet_sessions{$switch->{coreswip}}; +			$telnet_sessions{$switch->{coreswip}} += 2; + +			if ($telnet_sessions{$switch->{coreswip}} <= $os_info->{$switch->{coreswos}}{max_sessions}){ +				# lower or equal to max_sessions on current switch +				# lets move on +				last; +			} else { +				# we would exceed max_sessions on current switch +				# we wait until there is free sessions +				info($switch->{switchname}, "There are no more free sessions left on '$switch->{coreswip}' ($switch->{coreswos}). Waiting..."); +				$telnet_sessions{$switch->{coreswip}} -= 2; +				sleep (int(rand(10)) + 10); +			} +		} + +		info($switch->{switchname}, "Number of sessions on switch '$switch->{coreswip}': $telnet_sessions{$switch->{coreswip}}."); + +		if (setup($switch)) { +			# Count number of switches +			$switches++; +			 +		} else { +			log_it("FAILED", "red", $switch->{switchname}, "Configuring $switch->{switchname} failed."); +			 +			# Count failed switches +			$failed_switches++; +		} +		 +		# Remove session +		$telnet_sessions{$switch->{coreswip}} -= 2; +		 +		# Summarize total time spent, used to calculate average per switch +		$total_time += time() - $time_start; +	} +	 +  	# detach thread -- we're done +	threads->detach; +} + +# Let's start +my $time_start = time(); +log_it("INFO", "yellow", "dlink-ng", "Starting dlink-ng with $max_threads threads..."); +log_it("INFO", "yellow", "dlink-ng", "Configured to skip last port on all switches.") if $skip_last_port; + +# Let's add all switches to the queue +while (<STDIN>){ +	next if /^(.*#|\s+$)/;	# skip if comment, or blank line +	 +	my ($switchname, $coreswip, $etherchannel, $cidr, $ipv4address, $ipv4gateway, $ipv6address, @ports) = split; +	 +	# skip if less than 1 port is provided +	if (scalar(@ports) < 1){ +		log_it("FAILED", "red", $switchname, "Switch '$switchname' had less than 1 port configured. Skipping."); +		next; +	} +	 +	# define OS of the coresw +	my $coreswos = set_coreswos($switchname); +	 +	# find netmask +	my $netmask = Net::IP->new($cidr)->mask(); + +	my %switch = ( +		switchname => $switchname, +		coreswip => $coreswip, +		coreswos => $coreswos, +		etherchannel => $etherchannel, +		ipv4address => $ipv4address, +		ipv4gateway => $ipv4gateway, +		netmask => $netmask, +		ipv6address => $ipv6address, +		ports => \@ports, +	); + +	# Only configure a single switch? +	if (defined $single_switch){ +		unless ($single_switch eq $switchname){ +			next; +		} +	} +	 +	# Add switch to queue +	$switchq->enqueue(\%switch); +} + +# Let the threads know when they're done +$switchq->enqueue("DONE") for (1..$max_threads); + +# Start processing the queue +threads->create("process_switches") for (1..$max_threads); + +# Wait till all threads is done +sleep 5 while (threads->list(threads::running)); + +# If 0 switches +my $runtime = time() - $time_start; +my $total_switches = $switches + $failed_switches; +if($total_switches == 0){ +	log_it("INFO", "yellow", "dlink-ng", "Finished!"); +	log_it("INFO", "yellow", "dlink-ng", "Crunched 0 switches in $runtime seconds."); +	exit 1; +} + +# Done +my $avg = sprintf("%.1f", $total_time / $total_switches); +log_it("INFO", "yellow", "dlink-ng", "Finished!"); +log_it("INFO", "yellow", "dlink-ng", "Crunched $total_switches switches in $runtime seconds."); +log_it("INFO", "yellow", "dlink-ng", "$switches of these were successful, while $failed_switches failed."); +log_it("INFO", "yellow", "dlink-ng", "Average of $avg seconds per switch."); + diff --git a/dlink-ng/make-dlink-config.pl b/dlink-ng/make-dlink-config.pl new file mode 100755 index 0000000..54284ac --- /dev/null +++ b/dlink-ng/make-dlink-config.pl @@ -0,0 +1,70 @@ +#!/usr/bin/perl -I /root/tgmanage/ +use strict; +use warnings; +use lib '..'; +BEGIN { +        require "include/config.pm"; +        eval { +                require "include/config.local.pm"; +        }; +} + +unless (@ARGV > 0) { +	print "No arguments. Need switches.txt and patchlist.txt.\n"; +	exit 1; +} + +my $s = open(SWITCHES, "$ARGV[0]") or die ("Cannot open switches.txt"); +my $p = open(PATCH, "$ARGV[1]") or die ("Cannot open patchlist.txt"); + +my $portchannel_start = 10; +my %portchannels; +my $letter = "a"; + +my %switches; +while(<SWITCHES>) { +	chomp; +	my ($network, $netmask, $switchname, $mngmt_ip) = split; # $mngmt_ip is unused +	$switches{$switchname} = { +		network => $network, +		netmask => $netmask, +	}; +} +while (<PATCH>) { +	chomp; +	my ($switchname, $coregw, @ports) = split; +	my $network = $switches{$switchname}{network}; +	my $netmask = $switches{$switchname}{netmask}; +	my ($o1, $o2, $o3, $o4) = split(/\./, $network); +	 +	# TG13-fiks +	# Distroene ble kalt 1-5, men planning-forvirring førte til renaming 0-4 +	$coregw =~ s/^(distro)([0-9])$/$1 . ($2-1)/e; +	 +	# portchannel per distro +	$portchannels{$coregw} = $portchannel_start unless ($portchannels{$coregw} && defined($portchannels{$coregw})); +	 +	if ($o4 eq "0") { +                $letter = "a"; +        } elsif ($o4 eq "64") { +                $letter = "b"; +        } elsif ($o4 eq "128") { +                $letter = "c"; +        } elsif ($o4 eq "192") { +                $letter = "d"; +        } + +	my $v6addr = $nms::config::base_ipv6net . $o3 . $letter ."::1/64"; + +	$o4 += 1; +	my $gateway_addr = "$o1.$o2.$o3.$o4"; +	$o4 += 1; +	my $switch_addr = "$o1.$o2.$o3.$o4"; + +	print "$switchname $coregw $portchannels{$coregw} $network/$netmask $switch_addr $gateway_addr $v6addr " . join(' ', @ports) . "\n"; + +	# increase portchannel +	$portchannels{$coregw}++; + +	die("NO MORE ETHERCHANNELS!") if($portchannels{$coregw} > 64); # IOS-XE 4500 only supports 64 portchannels +}
\ No newline at end of file diff --git a/include/config.local.pm b/include/config.local.pm new file mode 100644 index 0000000..8e0eeee --- /dev/null +++ b/include/config.local.pm @@ -0,0 +1,100 @@ +#! /usr/bin/perl +use strict; +use warnings; +use DBI; +package nms::config; + +# Don't change this file for your local setup; use config.local.pm instead. + +our $db_name = "nms"; +our $db_host = "flexus.tg13.gathering.org"; +our $db_username = "nms"; +our $db_password = "<removed>"; + +our $dhcp_server1 = "151.216.126.2"; +our $dhcp_server2 = "151.216.125.17"; # Cisco ISE profiling + +our $ios_user = "nms"; +our $ios_pass = "<removed>"; + +# Tech:Net sets up at least a read-community for SNMP for use +# with dlink1g, nms and sosuch. This is the one: +our $snmp_community = "<removed>"; + +our $dlink1g_user = 'dlinkng'; +our $dlink1g_passwd = '<removed>'; + +# No longer in use as of '12 ? +# our $telegw_ip = "12.34.56.78"; +# our @telegw_wanlinks = ("gig1/1", "gig1/2"); + +our $tgname    = "tg13"; + +our $pri_a     = "winix"; +our $pri_ptr   = "151.216.126.2"; +our $pri_v6    = "2a02:ed02:126::2"; +our $pri_net   = "151.216.126.0/24"; +our $sec_a     = "tress90"; +our $sec_ptr   = "151.216.125.2"; +our $sec_v6    = "2a02:ed02:125::2"; + +# for RIPE to get reverse zones via DNS AXFR +our $ext_xfer  = "193.0.0.0/22"; +our $ext_ns    = "194.19.3.20"; + +# To generate new dnssec-key for ddns: +# dnssec-keygen -a HMAC-MD5 -b 128 -n HOST DHCP_UPDATER +our $ddns_key = "<removed>"; +our $ddns_to  = "127.0.0.1"; + +# Used by make-named.pl +our $noc_nett  = "151.216.124.0/24"; +our $noc_nett_v6 = "2a02:ed02:124::/64"; + +# Ikke i bruk i '11 til revers-soner. +# Ikke i bruk i '12 heller +# PÃ¥ tide Ã¥ fjerne dette i '13? +# Ikke brukt i '13 heller +# PÃ¥ tide Ã¥ fjerne dette i '14????????? :-D :-P +#our $root_arpa = "22.89.in-addr.arpa"; +#our $ipv6nett = "2001:8c0:9840::/48"; + +our $base_ipv4net = "151.216.0.0"; +our $base_ipv4prefix = 17; + +our $base_ipv6net = "2a02:ed02:"; +our $base_ipv6prefix = 32; +our $ipv6zone = "2.0.d.e.2.0.a.2.ip6.arpa"; + +our $pxe_server = "151.216.125.3"; +our $ciscowlc_a = "151.216.127.15"; + + +# static_switches is supposed to be legacy, and should be safe to remove. +#130, 144, 145, 196, 197, 198, 199, 200, 203, 201, 206, 208, 209, 211, 213, +#our @static_switches = ( +#	130,144,145,190,200,201,203,206,208,209,210,211,213,215,216,217,218,219,220,221,223,250,252 +#        ); +#our @static_nets = ( +#                  0, 212, 254, 255 +#        ); + +# Used by ipv6-stats, but never got updated for tg11-ip's. Commenting. +# The following is the list of routing netboxes (core, dist, tele, a.s.o) +our @distrobox_ips = ( +	'151.216.127.17', # distro0 +	'151.216.127.18', # distro1 +	'151.216.127.19', # distro2 +	'151.216.127.20', # distro3 +	'151.216.127.21', # distro4 +	'151.216.127.9',  # crewgw +	'151.216.127.11', # gamegw +	'151.216.124.1',  # nocgw +	'151.216.127.6',  # logistikkgw +	'151.216.127.5',  # wtfgw +); + +# Forwarding zones. +our @forwarding_zones = qw( ); + +1; diff --git a/include/config.pm b/include/config.pm new file mode 100644 index 0000000..17f2c68 --- /dev/null +++ b/include/config.pm @@ -0,0 +1,25 @@ +#! /usr/bin/perl +use strict; +use warnings; +use DBI; +package nms::config; + +# Don't change this file for your local setup; use config.local.pm instead. + +our $db_name = "<removed>"; +our $db_host = "nms.tg08.gathering.org"; +our $db_username = "<removed>"; +our $db_password = "<removed>"; + +our $zyxel_password = "<removed>"; +our $telnet_timeout = 300; + +# Tech:Net sets up at least a read-community for SNMP for use +our $ios_user = "<removed>"; +our $ios_pass = "<removed>"; + +# No longer in use as of '12 ? +#our $telegw_ip = "12.34.56.78"; +#our @telegw_wanlinks = ("gig1/1", "gig1/2"); + +1; diff --git a/include/nms.pm b/include/nms.pm new file mode 100644 index 0000000..9567bde --- /dev/null +++ b/include/nms.pm @@ -0,0 +1,104 @@ +#! /usr/bin/perl +use strict; +use warnings; +use DBI; +use Net::Telnet; +use Data::Dumper; +use FileHandle; +package nms; + + +use base 'Exporter'; +our @EXPORT = qw(switch_disconnect switch_connect switch_exec switch_timeout db_connect); + +BEGIN { +	require "config.pm"; +	eval { +		require "config.local.pm"; +	}; +} + +sub db_connect { +	my $dbh = DBI->connect("dbi:Pg:" . +				"dbname=" . $nms::config::db_name . +				";host=" . $nms::config::db_host, +				$nms::config::db_username, +				$nms::config::db_password) +	        or die "Couldn't connect to database"; +	return $dbh;	 +} + +sub switch_connect($) { +	my ($ip) = @_; + +	my $dumplog = FileHandle->new; +	$dumplog->open(">>/tmp/dumplog-queue") or die "/tmp/dumplog-queue: $!"; +	$dumplog->print("\n\nConnecting to " . $ip . "\n\n"); + +	my $inputlog = FileHandle->new; +	$inputlog->open(">>/tmp/inputlog-queue") or die "/tmp/inputlog-queue: $!"; +	$inputlog->print("\n\nConnecting to " . $ip . "\n\n"); + +	my $conn = new Net::Telnet(	Timeout => $nms::config::telnet_timeout, +					Dump_Log => $dumplog, +					Input_Log => $inputlog, +					Errmode => 'return', +					Prompt => '/DGS-3100# (?!\x1b\[K)/'); +	my $ret = $conn->open(	Host => $ip); +	if (!$ret || $ret != 1) { +		return (undef); +	} +	# Handle login with and without password +	print "Logging in without password\n"; +	$conn->waitfor('/User ?Name:/'); +	$conn->print('admin'); +	my (undef, $match) = $conn->waitfor('/DGS-3100#|Password:/'); +	die 'Unexpected prompt after login attempt' if (not defined $match); +	if ($match eq 'Password:') { +		$conn->print('gurbagurba'); # Dette passordet skal feile +		$conn->waitfor('/User ?Name:/'); +		$conn->print($nms::config::dlink1g_user); +		my (undef, $match) = $conn->waitfor('/DGS-3100#|Password:/'); +		if ($match eq 'Password:') { +			$conn->cmd($nms::config::dlink1g_passwd); +		} +	} +	return ($conn); +} + +# Send a command to switch and return the data recvied from the switch +sub switch_exec { +	my ($cmd, $conn, $print) = @_; + +	# Send the command and get data from switch +	my @data; +	if (defined($print)) { +		$conn->print($cmd); +		return; +	} else { +		@data = $conn->cmd($cmd); +		print $conn->errmsg, "\n"; +	} +	return @data; +#	my @lines = (); +#	foreach my $line (@data) { +#		# Remove escape-7 sequence +##		$line =~ s/\x1b\x37//g; +#		push (@lines, $line); +#	} +#	return @lines; +} +				 +sub switch_timeout { +	my ($timeout, $conn) = @_; + +	$conn->timeout($timeout); +	return ('Set timeout to ' . $timeout); +} + +sub switch_disconnect { +	my ($conn) = @_; +	$conn->close; +} + +1; diff --git a/include/tgmanage.cfg.sh b/include/tgmanage.cfg.sh new file mode 100644 index 0000000..a922f1c --- /dev/null +++ b/include/tgmanage.cfg.sh @@ -0,0 +1,19 @@ +# This file is autogenerated by tools/create-shellconf.pl, +# using data from nms::config. +# +# Do you need new common/configuration variables? +# Add/update include/config.local.pm and tools/create-shellconf.pl + +PRIMARY="winix.tg13.gathering.org" +SECONDARY="tress90.tg13.gathering.org" +TGNAME="tg13" + +PRI_PTR="151.216.126.2" +SEC_PTR="151.216.125.2" + +DDNS_KEY="<removed>" + +BASEV4="151.216.0.0" +PREFIXV4="17" +BASEV6="2a02:ed02:" +PREFIXV6="32" diff --git a/infra-dns.txt b/infra-dns.txt new file mode 100644 index 0000000..6297a16 --- /dev/null +++ b/infra-dns.txt @@ -0,0 +1,28 @@ +# telegw            151.216.127.1      2a02:ed02:FFFF::1                    +# nocgw             151.216.127.2      2a02:ed02:FFFF::2                   +# camgw             151.216.127.3      2a02:ed02:FFFF::3                   +# stageboh          151.216.127.4      2a02:ed02:FFFF::4                      +# wtfgw             151.216.127.5      2a02:ed02:FFFF::5                   +# logistikkGW       151.216.127.6      2a02:ed02:FFFF::6                         +# corengw           151.216.127.7      2a02:ed02:FFFF::7                     +# coresgw           151.216.127.8      2a02:ed02:FFFF::8                     +# crewgw            151.216.127.9      2a02:ed02:FFFF::9                    +# tvgw              151.216.127.10     2a02:ed02:FFFF::10                 +# gameGW            151.216.127.11     2a02:ed02:FFFF::11                   +# resepsjonGW       151.216.127.12     2a02:ed02:FFFF::12                        +# presseGW          151.216.127.13     2a02:ed02:FFFF::13                     +# sponsorGW         151.216.127.14     2a02:ed02:FFFF::14                      +# KomplettGW        151.216.127.15     2a02:ed02:FFFF::15                       +# eldregw           151.216.127.16     2a02:ed02:FFFF::16                    + distro0           151.216.127.17     2a02:ed02:FFFF::17                    + distro1           151.216.127.18     2a02:ed02:FFFF::18                    + distro2           151.216.127.19     2a02:ed02:FFFF::19                    + distro3           151.216.127.20     2a02:ed02:FFFF::20                    + distro4           151.216.127.21     2a02:ed02:FFFF::21                    + +# telegw -- BLIX SINE +#telegw-po1 185.12.59.2 2a02:ed01::2 +# nocgw +#nocgw-po1 151.216.0.3 nope +#vss-core 151.216.123.254 2A02:ED02:123::254 + diff --git a/iptables-dnat-hack.txt b/iptables-dnat-hack.txt new file mode 100644 index 0000000..caa36a4 --- /dev/null +++ b/iptables-dnat-hack.txt @@ -0,0 +1,140 @@ +Since several services thought our IP's didn't belong to Norway, they sent us  +to CDN's in Japan, Africa, and some other weird countries. NRK nett-tv also  +didn't think we was in Norway, hence it did not let you stream things. Action  +had to be taken. + +We had a /24 from our ISP that we knew would be recognized as Norwegian. We  +therefore decided to NAT everything related to those services behind that /24.  +We had to figure out all the destination prefixes used for the different  +services, and only NAT sessions going to those networks. Tests showed that even  +if Origin was being NATed behind "Norwegian IPs", it would still connect to  +lol-CDN. We then decided to DNAT all connections to these specific IPs. We  +found a suitable Origin-CDN hosted at Telenor/Canal Digital, that would accept  +connections. + +In the process of setting this up, we found out that Cisco ASR1k doesn't (at  +the time, at least) support more than _one_ DNAT-entry (with the same  +destination, at least). iptables to the rescue. + +Two 10gig-interfaces was set up. One as the 'inside', and the other as the  +'outside'. + +The solution worked flawlessly, and peaked at about ~2Gbps of traffic. + +## IPTABLES START +*filter +:INPUT DROP [0:0] +:FORWARD ACCEPT [497:117797] +:OUTPUT ACCEPT [0:0] +-A INPUT -i lo -j ACCEPT +-A INPUT -i gre5 -j ACCEPT +-A INPUT -i eth2 -j ACCEPT +-A INPUT -p icmp -j ACCEPT +-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT +-A INPUT -j DROP +-A FORWARD -i eth3 -o gre5 -m state --state RELATED,ESTABLISHED -j ACCEPT +-A FORWARD -i gre5 -o eth3 -j ACCEPT +-A OUTPUT -o lo -j ACCEPT +-A OUTPUT -j ACCEPT +COMMIT +# NAT +*nat +:PREROUTING ACCEPT [1073:112412] +:POSTROUTING ACCEPT [65:16154] +:OUTPUT ACCEPT [2:129] +:nataccept - [0:0] +-A PREROUTING -d 23.15.8.0/24 -j DNAT --to-destination 148.123.13.49 +-A PREROUTING -d 23.32.241.0/24 -j DNAT --to-destination 148.123.13.49 +-A PREROUTING -d 120.29.145.0/24 -j DNAT --to-destination 148.123.13.49 +-A PREROUTING -d 124.40.32.0/24 -j DNAT --to-destination 148.123.13.49 +-A PREROUTING -d 125.56.200.0/24 -j DNAT --to-destination 148.123.13.49 +-A POSTROUTING -s 151.216.0.0/17 -o eth3 -j nataccept +-A nataccept -j LOG --log-prefix "iptables nat accept " +-A nataccept -j SNAT --to-source 31.169.55.2-31.169.55.254 +COMMIT +## IPTABLES END + + +## Cisco ACL +! +ip access-list extended steamorigin + remark TEST +   10 permit ip 151.216.0.0 0.0.127.255 158.37.91.0 0.0.0.255 + remark ORIGIN +  100 permit ip 151.216.0.0 0.0.127.255 23.15.8.0 0.0.0.255 +  110 permit ip 151.216.0.0 0.0.127.255 23.21.0.0 0.0.255.255 +  120 permit ip 151.216.0.0 0.0.127.255 23.23.0.0 0.0.255.255 +  130 permit ip 151.216.0.0 0.0.127.255 23.32.241.0 0.0.0.255 +  140 permit ip 151.216.0.0 0.0.127.255 23.46.0.0 0.0.255.255 +  300 permit ip 151.216.0.0 0.0.127.255 50.16.0.0 0.0.255.255 +  310 permit ip 151.216.0.0 0.0.127.255 50.17.0.0 0.0.255.255 +  320 permit ip 151.216.0.0 0.0.127.255 54.225.0.0 0.0.255.255 +  400 permit ip 151.216.0.0 0.0.127.255 81.21.146.0 0.0.0.255 +  500 permit ip 151.216.0.0 0.0.127.255 107.20.244.0 0.0.0.255 +  510 permit ip 151.216.0.0 0.0.127.255 120.29.145.0 0.0.0.255 +  520 permit ip 151.216.0.0 0.0.127.255 124.40.32.0 0.0.0.255 +  530 permit ip 151.216.0.0 0.0.127.255 125.56.200.0 0.0.0.255 +  540 permit ip 151.216.0.0 0.0.127.255 164.177.139.0 0.0.0.255 +  550 permit ip 151.216.0.0 0.0.127.255 184.73.0.0 0.0.255.255 +  560 permit ip 151.216.0.0 0.0.127.255 204.236.239.0 0.0.0.255 + remark STEAM + 5100 permit ip 151.216.0.0 0.0.127.255 72.165.61.0 0.0.0.255 + 5110 permit ip 151.216.0.0 0.0.127.255 81.171.115.0 0.0.0.255 + 5120 permit ip 151.216.0.0 0.0.127.255 87.248.217.0 0.0.0.255 + 5300 permit ip 151.216.0.0 0.0.127.255 103.28.54.0 0.0.0.255 + 5310 permit ip 151.216.0.0 0.0.127.255 146.66.152.0 0.0.0.255 + 5500 permit ip 151.216.0.0 0.0.127.255 205.185.220.0 0.0.0.255 + 5510 permit ip 151.216.0.0 0.0.127.255 208.64.200.0 0.0.0.255 + 5520 permit ip 151.216.0.0 0.0.127.255 209.197.0.0 0.0.255.255 + 5530 permit ip 151.216.0.0 0.0.127.255 212.187.201.0 0.0.0.255 + remark NRK-TV + 9000 permit ip 151.216.0.0 0.0.127.255 23.8.146.0 0.0.0.255 + 9010 permit ip 151.216.0.0 0.0.127.255 46.137.77.0 0.0.0.255 + 9020 permit ip 151.216.0.0 0.0.127.255 50.16.209.0 0.0.0.255 + 9030 permit ip 151.216.0.0 0.0.127.255 50.16.231.0 0.0.0.255 + 9040 permit ip 151.216.0.0 0.0.127.255 50.17.243.0 0.0.0.255 + 9050 permit ip 151.216.0.0 0.0.127.255 54.225.239.0 0.0.0.255 + 9060 permit ip 151.216.0.0 0.0.127.255 54.243.145.0 0.0.0.255 + 9070 permit ip 151.216.0.0 0.0.127.255 54.243.68.0 0.0.0.255 + 9080 permit ip 151.216.0.0 0.0.127.255 65.52.155.0 0.0.0.255 + 9090 permit ip 151.216.0.0 0.0.127.255 77.88.106.0 0.0.0.255 + 9100 permit ip 151.216.0.0 0.0.127.255 82.96.58.0 0.0.0.255 + 9110 permit ip 151.216.0.0 0.0.127.255 94.245.71.0 0.0.0.255 + 9120 permit ip 151.216.0.0 0.0.127.255 160.68.205.0 0.0.0.255 + 9130 permit ip 151.216.0.0 0.0.127.255 174.129.219.0 0.0.0.255 + 9140 permit ip 151.216.0.0 0.0.127.255 184.28.17.0 0.0.0.255 + 9150 permit ip 151.216.0.0 0.0.127.255 184.73.220.0 0.0.0.255 + 9160 permit ip 151.216.0.0 0.0.127.255 204.245.63.0 0.0.0.255 + 9170 permit ip 151.216.0.0 0.0.127.255 204.236.234.0 0.0.0.255 +! + +## Cisco route-map +!!!! telegw; +! +route-map nat-madness permit 10 + match ip address steamorigin + set ip next-hop 151.216.0.57 +! +! +interface Port-channel2 + ip policy route-map nat-madness +! +interface Port-channel3 + ip policy route-map nat-madness +! +interface TenGigabitEthernet4/4 + ip policy route-map nat-madness +! + +!!!! nocgw +! +route-map nat-madness permit 10 + match ip address steamorigin + set ip next-hop 151.216.125.6 +! +! +interface vlan 124 + ip policy route-map nat-madness +! +! + diff --git a/mbd/access_list.pl b/mbd/access_list.pl new file mode 100644 index 0000000..89a8182 --- /dev/null +++ b/mbd/access_list.pl @@ -0,0 +1,294 @@ + +package Config; + +sub game_id { +  my ($data, $offset) = @_; +  my $id = ((ord(substr($data, $offset, 1)) << 8) | ord(substr($data, $offset + 1, 1))); +  return $id; +} + +our @access_list = ( +	# half-life - untested (packet dump only) +	{ +		name => 'Half-Life', +		ports => [ 27015 ], +		sizes => [ 16 ] +	}, + +	# cs 1.6 - verified +	# (funker muligens for _alle_ source-spill inkl. hl2/cs:s) +	{ +		name => 'CS:Source', +		ports => [ "26900..26903", "27015..27017" ], +		sizes => [ 25 ], +		filter => sub { return (game_id(shift, 4) == 0x4325); } +	}, +	{ +		name => 'Left 4 Dead', +		ports => [ "26900..26903", "27015..27017" ], +		sizes => [ 25 ], +		filter => sub { return (game_id(shift, 4) == 0x43f3); } +	}, +	{ +		name => 'CS 1.6', +		ports => [ "26900..26903", "27015..27017" ], +		sizes => [ 25 ], +		filter => sub { return (game_id(shift, 4) == 0x5453); } +	}, +	{ +		name => 'Unknown Source-based game (ID 0x4326)', +		ports => [ "26900..26903", "27015..27017" ], +		sizes => [ 25 ], +		filter => sub { return (game_id(shift, 4) == 0x4326); } +	}, +	{ +		name => 'Other Source game (unknown game ID)', +		ports => [ "26900..26903", "27015..27017" ], +		sizes => [ 25 ], +	}, +	{ +		name => 'Other Source game (unknown game ID, odd length 33)', +		ports => [ "26900..26903", "27015..27017" ], +		sizes => [ 33 ], +	}, +	{ +		name => 'Other Source game (unknown game ID, odd length 58)', +		ports => [ "26900..26903", "27015..27017" ], +		sizes => [ 58 ], +	}, +	{ +                name => 'Other Source game (unknown game ID, odd length 15)', +                ports => [ "26900..26903", "27015..27017" ], +                sizes => [ 15 ], +        }, + +	# doom 3 - verified +	{ +		name => 'Doom 3', +		ports => [ "27666" ], +		sizes => [ 14 ] +	}, + +	# quake 1 - verified +	{ +		name => 'Quake 1', +		ports => [ 26000 ], +		sizes => [ 12 ] +	}, + +	# q3a - tested with demo only +	# rtcw: enemy territory - untested (packet dump only) +	{ +		name => 'Quake 3 Arena, RTCW: ET', +#		ports => [ "27960..27969" ], +		ports => [ "27960..27961" ], +		sizes => [ 15 ] +	}, +	 +	# bf2 - tested with demo only +	# bf2142 reportedly uses same engine +	{ +		name => 'BF2/BF2142', +		ports => [ "29900" ], +		sizes => [ 8 ] +	}, + +	# bf1942 - unverified (packet dump only) +	{ +		name => 'BF1942', +		ports => [ "22000..22010" ], +		sizes => [ 8 ] +	}, +	 +	# quake 4 - tested with demo only, MUST select "internet" +	{ +		name => 'Quake 4', +		ports => [ 27950, 28004 ], +		sizes => [ 14 ] +	}, + +	# quake 2 - untested (packet dump only) +	{ +		name => 'Quake 2', +		ports => [ 27910 ], +		sizes => [ 11 ] +	}, + +	# warcraft 3 - untested (packet dump only) +	{ +		name => 'Warcraft 3: Reign of Chaos (1.00)', +      		ports => [ 6112 ], +		sizes => [ 16 ], +		filter => sub { my $data = shift; return (ord(substr($data, 1, 1)) == 0x2f) && game_id($data, 4) == 0x3352 && ord(substr($data, 8, 1)) == 0; } +	}, +	{ +		name => 'Warcraft 3: Reign of Chaos (1.07)', +      		ports => [ 6112 ], +		sizes => [ 16 ], +		filter => sub { my $data = shift; return (ord(substr($data, 1, 1)) == 0x2f) && game_id($data, 4) == 0x3352 && ord(substr($data, 8, 1)) == 7; } +	}, +	{ +		name => 'Warcraft 3: Reign of Chaos (1.20)', +     		ports => [ 6112 ], +		sizes => [ 16 ], +		filter => sub { my $data = shift; return (ord(substr($data, 1, 1)) == 0x2f) && game_id($data, 4) == 0x3352 && ord(substr($data, 8, 1)) == 20; } +	}, +	{ +		name => 'Warcraft 3: Reign of Chaos (1.22)', +     		ports => [ 6112 ], +		sizes => [ 16 ], +		filter => sub { my $data = shift; return (ord(substr($data, 1, 1)) == 0x2f) && game_id($data, 4) == 0x3352 && ord(substr($data, 8, 1)) == 22; } +	}, +	{ +		name => 'Warcraft 3: Reign of Chaos (1.23)', +      		ports => [ 6112 ], +		sizes => [ 16 ], +		filter => sub { my $data = shift; return (ord(substr($data, 1, 1)) == 0x2f) && game_id($data, 4) == 0x3352 && ord(substr($data, 8, 1)) == 23; } +	}, +	{ +		name => 'Warcraft 3: Reign of Chaos (other patch level)', +      		ports => [ 6112 ], +		sizes => [ 16 ], +		filter => sub { my $data = shift; return (ord(substr($data, 1, 1)) == 0x2f) && game_id($data, 4) == 0x3352; } +	}, +	{ +		name => 'Warcraft 3: The Frozen Throne (1.17)', +      		ports => [ 6112 ], +		sizes => [ 16 ], +		filter => sub { my $data = shift; return (ord(substr($data, 1, 1)) == 0x2f) && game_id($data, 4) == 0x5058 && ord(substr($data, 8, 1)) == 17; } +	}, +	{ +		name => 'Warcraft 3: The Frozen Throne (1.18)', +      		ports => [ 6112 ], +		sizes => [ 16 ], +		filter => sub { my $data = shift; return (ord(substr($data, 1, 1)) == 0x2f) && game_id($data, 4) == 0x5058 && ord(substr($data, 8, 1)) == 18; } +	}, +	{ +		name => 'Warcraft 3: The Frozen Throne (1.20)', +      		ports => [ 6112 ], +		sizes => [ 16 ], +		filter => sub { my $data = shift; return (ord(substr($data, 1, 1)) == 0x2f) && game_id($data, 4) == 0x5058 && ord(substr($data, 8, 1)) == 20; } +	}, +	{ +		name => 'Warcraft 3: The Frozen Throne (1.21)', +      		ports => [ 6112 ], +		sizes => [ 16 ], +		filter => sub { my $data = shift; return (ord(substr($data, 1, 1)) == 0x2f) && game_id($data, 4) == 0x5058 && ord(substr($data, 8, 1)) == 21; } +	}, +	{ +		name => 'Warcraft 3: The Frozen Throne (1.22)', +      		ports => [ 6112 ], +		sizes => [ 16 ], +		filter => sub { my $data = shift; return (ord(substr($data, 1, 1)) == 0x2f) && game_id($data, 4) == 0x5058 && ord(substr($data, 8, 1)) == 22; } +	}, +	{ +		name => 'Warcraft 3: The Frozen Throne (1.23)', +      		ports => [ 6112 ], +		sizes => [ 16 ], +		filter => sub { my $data = shift; return (ord(substr($data, 1, 1)) == 0x2f) && game_id($data, 4) == 0x5058 && ord(substr($data, 8, 1)) == 23; } +	}, +	{ +                name => 'Warcraft 3: The Frozen Throne (1.26)', +      		ports => [ 6112 ], +                sizes => [ 16 ], +                filter => sub { my $data = shift; return (ord(substr($data, 1, 1)) == 0x2f) && game_id($data, 4) == 0x5058 && ord(substr($data, 8, 1)) == 26; } +        }, +	{ +		name => 'Warcraft 3: The Frozen Throne (other patch level)', +      		ports => [ 6112 ], +		sizes => [ 16 ], +		filter => sub { my $data = shift; return (ord(substr($data, 1, 1)) == 0x2f) && game_id($data, 4) == 0x5058; } +	}, +	{ +		name => 'Warcraft 3 (unknown version)', +#		ports => [ "6112..6119" ], +      		ports => [ 6112 ], +		sizes => [ 16 ], +		filter => sub { my $data = shift; return (ord(substr($data, 1, 1)) == 0x2f) && game_id($data, 4) != 0x5058 && game_id($data, 4) != 0x3352; } +	}, +	{ +		name => 'Warcraft 3 (unknown version, odd length)', +		ports => [ 6112 ], +		sizes => [ 19 ], +	}, + +	# ut2003/ut2004 - untested (packet dump only) +	{ +		name => 'UT2003/UT2004', +		ports => [ 10777 ], +		sizes => [ 5 ] +	}, + +	# soldat - untested (packet dump only) +	{ +		name => 'Soldat', +		ports => [ 23073 ], +		sizes => [ 8 ] +	}, + +	# starcraft - untested (packet dump only) +	{ +		name => 'Starcraft', +		ports => [ 6111, 6112 ], +		sizes => [ 8 ], +		filter => sub { return (game_id(shift, 0) == 0x08ef); } +	}, +   { +		name => 'Starcraft: Brood War', +		ports => [ 6111, 6112 ], +		sizes => [ 8 ], +		filter => sub { return (game_id(shift, 0) == 0xf733); } +	}, +	{ +		name => 'Starcraft (unknown game ID)', +		ports => [ 6111, 6112 ], +		sizes => [ 8 ], +		filter => sub { my $id = game_id(shift, 0); return ($id != 0x08ef && $id != 0xf733); } +	}, + +	# trackmania nations - untested (packet dump only) +	{ +		name => 'Trackmania Nations', +		ports => [ "2350" ], +		sizes => [ 42, 30 ] +	}, + +	# company of heroes - untested (packet dump only) +	{ +		name => 'Company of Heroes', +		ports => [ 9100 ], +		sizes => [ 39 ] +	}, + +	# command & conquer 3 - untested (packet dump only, reported to have some kind +	# of chat functionality) +#	{ +#		name => 'Command & Conquer 3', +#		ports => [ "8086..8093" ], +#		sizes => [ 476 ], +#		filter => sub { return 0; } +#	}, + +	# openttd +	{ +		name => 'OpenTTD', +		ports => [ 3979 ], +		sizes => [ 3 ] +	}, + +	# CoD4 +	{ +		name => 'Call of Duty 4', +		ports => [ 28960 ], +		sizes => [ 15 ], +	}, +	 +   # Far Cry 2 +	{ +		name => 'Far Cry 2', +		ports => [ 9004 ], +		sizes => [ 114, 118, 122, 126 ], +	}, + +	# unreal tournament, port 9777? +) diff --git a/mbd/derpspan.c b/mbd/derpspan.c new file mode 100644 index 0000000..b9fb362 --- /dev/null +++ b/mbd/derpspan.c @@ -0,0 +1,48 @@ +// gcc -O2 -o derspan derspan.c -lpcap -std=gnu99 -Wall + +#include <pcap.h> +#include <stdlib.h> +#include <netinet/ip.h> +#include <stdint.h> +#include <stdio.h> + +int rawsock; + +void my_callback(u_char *user, const struct pcap_pkthdr *h, const u_char *bytes) +{ +	int len = h->caplen; +	if (len < 40) { +		//printf("skipped short packet\n"); +		return; +	} +	if (bytes[14] != 0x88 || bytes[15] != 0xbe) { +		//printf("skipped non-ethernet packet\n"); +		return; +	} +	if (bytes[36] != 0x08 || bytes[37] != 0x00) { +		//printf("skipped non-IPv4 packet\n"); +		return; +	} + +	struct sockaddr_in self; +	self.sin_family = AF_INET; +	self.sin_addr.s_addr = htonl(0x7f000001);  // localhost +	self.sin_port = htons(1337); + +	sendto(rawsock, bytes + 38, len - 38, 0, (struct sockaddr *)&self, sizeof(self)); +} + +int main(int argc, char **argv) +{ +	rawsock = socket(AF_INET, SOCK_RAW, IPPROTO_RAW); +	if (rawsock == -1) { +		perror("socket"); +		exit(0); +	} + +	pcap_t *pcap = pcap_open_live(argv[1], 1500, 1, 1000, NULL); +	pcap_activate(pcap); +	pcap_loop(pcap, -1, my_callback, NULL); +	return 0; +} + diff --git a/mbd/generate-helper-list.pl b/mbd/generate-helper-list.pl new file mode 100755 index 0000000..fd89475 --- /dev/null +++ b/mbd/generate-helper-list.pl @@ -0,0 +1,15 @@ +#! /usr/bin/perl +use strict; +use warnings; +require './access_list.pl'; +require './nets.pl'; +require './mbd.pm'; + +my @ports = mbd::find_all_ports(); + +print "no ip forward-protocol udp 137\n"; +print "no ip forward-protocol udp 138\n"; + +for my $port (@ports) { +	print "ip forward-protocol udp $port\n"; +} diff --git a/mbd/make-mbd-nets.pl b/mbd/make-mbd-nets.pl new file mode 100644 index 0000000..6af76f0 --- /dev/null +++ b/mbd/make-mbd-nets.pl @@ -0,0 +1,26 @@ +#!/usr/bin/perl -I /root/tgmanage/ +use strict; +use warnings; + +unless (@ARGV > 0) { +        print "No arguments. Need netlist.txt.\n"; +        exit 1; +} + +my $n = open(NETLIST, "$ARGV[0]") or die ("Cannot open netlist.txt"); + +print "# Autogenerated. Do not touch!\n"; +print "package Config;\n"; +print "our \@networks = (\n"; + +while(<NETLIST>) { +	next if /^(.*#|\s+$)/;  # skip if comment, or blank line + +        chomp; +        my ($network, $prefix, $switchname, undef) = split; + +        print "\t\"$network/$prefix\",\n"; +} + +print ");\n"; +print "1;\n"; diff --git a/mbd/mbd-unicast-segfaulting.pl b/mbd/mbd-unicast-segfaulting.pl new file mode 100644 index 0000000..c167511 --- /dev/null +++ b/mbd/mbd-unicast-segfaulting.pl @@ -0,0 +1,273 @@ +#! /usr/bin/perl +use strict; +use warnings; +use Socket; +use Net::CIDR; +use Net::RawIP; +use Time::HiRes; +require './access_list.pl'; +require './nets.pl'; +require './survey.pl'; +require './mbd.pm'; +use lib '../include'; +use nms; +use strict; +use warnings; +use threads; + +# Mark packets with DSCP CS7 +my $tos = 56; + +my ($dbh, $q); + +sub fhbits { +	my $bits = 0; +	for my $fh (@_) { +		vec($bits, fileno($fh), 1) = 1; +	} +	return $bits; +} + +# used for rate limiting +my %last_sent = (); + +# for own surveying +my %active_surveys = (); +my %last_survey = (); + +my %cidrcache = (); +sub cache_cidrlookup { +	my ($addr, $net) = @_; +	my $key = $addr . " " . $net; + +	if (!exists($cidrcache{$key})) { +		$cidrcache{$key} = Net::CIDR::cidrlookup($addr, $net); +	} +	return $cidrcache{$key}; +} + +my %rangecache = (); +sub cache_cidrrange { +	my ($net) = @_; + +	if (!exists($rangecache{$net})) { +		my ($range) = Net::CIDR::cidr2range($net); +		$range =~ /(\d+)\.(\d+)\.(\d+)\.(\d+)-(\d+)\.(\d+)\.(\d+)\.(\d+)/ or die "Did not understand range: $range"; +		my @range = (); +		for my $l (($4+1)..($8-1)) { +			push @range, "$1.$2.$3.$l"; +		} +		($rangecache{$net}) = \@range; +	} + +	return @{$rangecache{$net}}; +} + +open LOG, ">>", "mbd.log"; + +my @ports = ( mbd::find_all_ports() , $Config::survey_port_low .. $Config::survey_port_high ); + +# Open a socket for each port +my @socks = (); +my $udp = getprotobyname("udp"); +for my $p (@ports) { +	my $sock; +	socket($sock, PF_INET, SOCK_DGRAM, $udp); +	bind($sock, sockaddr_in($p, INADDR_ANY)); +	push @socks, $sock; +} + +my $sendsock = Net::RawIP->new({udp => {}}); + +print "Listening on " . scalar @ports . " ports.\n"; + +# Main loop +while (1) { +	my $rin = fhbits(@socks); +	my $rout; + +	my $nfound = select($rout=$rin, undef, undef, undef); +	my $now = [Time::HiRes::gettimeofday]; + +	# First of all, close any surveys that are due. +	for my $sport (keys %active_surveys) { +		my $age = Time::HiRes::tv_interval($active_surveys{$sport}{start}, $now); +		if ($age > $Config::survey_time && $active_surveys{$sport}{active}) { +			my $hexdump = join(' ', map { sprintf "0x%02x", ord($_) } (split //, $active_surveys{$sport}{data})); +			print "Survey ($hexdump) for '" . $Config::access_list[$active_surveys{$sport}{entry}]->{name} . "'/" . +				$active_surveys{$sport}{dport} . ": " . $active_surveys{$sport}{num} . " active servers.\n"; +			$active_surveys{$sport}{active} = 0; +	 +			# (re)connect to the database if needed	 +			if (!defined($dbh) || !$dbh->ping) { +				$dbh = nms::db_connect(); +				$q = $dbh->prepare("INSERT INTO mbd_log (ts,game,port,description,active_servers) VALUES (CURRENT_TIMESTAMP,?,?,?,?)") +					or die "Couldn't prepare query"; +			} +			$q->execute($active_surveys{$sport}{entry}, $active_surveys{$sport}{dport}, $Config::access_list[$active_surveys{$sport}{entry}]->{name}, $active_surveys{$sport}{num}); +		} +		if ($age > $Config::survey_time * 3.0) { +			delete $active_surveys{$sport}; +		} +	} + +	for my $sock (@socks) { +		next unless (vec($rout, fileno($sock), 1) == 1); + +		my $data; +		my $addr = recv($sock, $data, 8192, 0);   # jumbo broadcast! :-P +		my ($sport, $saddr) = sockaddr_in($addr); +		my ($dport, $daddr) = sockaddr_in(getsockname($sock)); +		my $size = length($data); + +		# Check if this is a survey reply +		if ($dport >= $Config::survey_port_low && $dport <= $Config::survey_port_high) { +			if (!exists($active_surveys{$dport})) { +				print "WARNING: Unknown survey port $dport, ignoring\n"; +				next; +			} +			if (!$active_surveys{$dport}{active}) { +				# remains +				next; +			} +			 +			++$active_surveys{$dport}{num}; + +			next; +		} +		 +		# Rate limiting +		if (exists($last_sent{$saddr}{$dport})) { +			my $elapsed = Time::HiRes::tv_interval($last_sent{$saddr}{$dport}, $now); +			if ($elapsed < 1.0) { +				print LOG "$dport $size 2\n"; +				print inet_ntoa($saddr), ", $dport, $size bytes => rate-limited ($elapsed secs since last)\n"; +				next; +			} +		} +		 +		# We don't get the packet's destination address, but I guess this should do... +		# Check against the ACL. +		my $pass = 0; +		my $entry = -1; +		for my $rule (@Config::access_list) { +			++$entry; + +			next unless (mbd::match_ranges($dport, $rule->{'ports'})); +			next unless (mbd::match_ranges($size, $rule->{'sizes'})); + +			if ($rule->{'filter'}) { +				next unless ($rule->{'filter'}($data)); +			} + +			$pass = 1; +			last; +		} + +		print LOG "$dport $size $pass\n"; + +		if (!$pass) { +			print inet_ntoa($saddr), ", $dport, $size bytes => filtered\n"; +			next; +		} + +		$last_sent{$saddr}{$dport} = $now; + +		# The packet is OK! Do we already have a recent enough survey +		# for this port, or should we use this packet? +		my $survey = 1; +		if (exists($last_survey{$entry . "/" . $dport})) { +			my $age = Time::HiRes::tv_interval($last_survey{$entry . "/" . $dport}, $now); +			if ($age < $Config::survey_freq) { +				$survey = 0; +			} +		} + +		# New survey; find an unused port +		my $survey_sport; +		if ($survey) { +			for my $port ($Config::survey_port_low..$Config::survey_port_high) { +				if (!exists($active_surveys{$port})) { +					$survey_sport = $port; + +					$active_surveys{$port} = { +						start => $now, +						active => 1, +						dport => $dport, +						entry => $entry, +						num => 0, +						data => $data, +					}; +					$last_survey{$entry . "/" . $dport} = $now; + +					last; +				} +			} + +			if (!defined($survey_sport)) { +				print "WARNING: no free survey source ports, not surveying.\n"; +				$survey = 0; +			} +		} + +		# precache +		for my $net (@Config::networks) { +			cache_cidrrange($net); +			cache_cidrlookup(inet_ntoa($saddr), $net); +		} + +		threads->create(sub { +			my $sendsock = Net::RawIP->new({udp => {}}); +			my ($survey_sport, $dport, $data) = @_; + +			my $num_nets = 0; +			for my $net (@Config::networks) { +				my @daddrs = cache_cidrrange($net); + +				if ($survey) { +					for my $daddr (@daddrs) { +						$sendsock->set({ +							ip => { +								saddr => $Config::survey_ip, +								daddr => $daddr, +								tos => $tos +							}, +							udp => { +								source => $survey_sport, +								dest => $dport, +								data => $data +							} +						}); +						$sendsock->send; +					} +				} + +				next if (cache_cidrlookup(inet_ntoa($saddr), $net)); + +				for my $daddr (@daddrs) { +					$sendsock->set({ +						ip => { +							saddr => inet_ntoa($saddr), +							daddr => $daddr, +							tos => $tos +						}, +						udp => { +							source => $sport, +							dest => $dport, +							data => $data +						} +					}); +					$sendsock->send; +				} + +				++$num_nets; +			} +			if ($survey) { +				print inet_ntoa($saddr), ", $dport, $size bytes => ($num_nets networks) [+survey from port $survey_sport]\n"; +			} else { +				print inet_ntoa($saddr), ", $dport, $size bytes => ($num_nets networks)\n"; +			} +		}, $survey_sport, $dport, $data)->detach(); +	} +} + diff --git a/mbd/mbd-unicast.pl b/mbd/mbd-unicast.pl new file mode 100644 index 0000000..6e63dee --- /dev/null +++ b/mbd/mbd-unicast.pl @@ -0,0 +1,254 @@ +#! /usr/bin/perl +use strict; +use warnings; +use Socket; +use Net::CIDR; +use Net::RawIP; +use Time::HiRes; +require './access_list.pl'; +require './nets.pl'; +require './survey.pl'; +require './mbd.pm'; +use lib '../include'; +use nms; +use strict; +use warnings; +use threads; + +# Mark packets with DSCP CS7 +my $tos = 56; + +my ($dbh, $q); + +sub fhbits { +	my $bits = 0; +	for my $fh (@_) { +		vec($bits, fileno($fh), 1) = 1; +	} +	return $bits; +} + +# used for rate limiting +my %last_sent = (); + +# for own surveying +my %active_surveys = (); +my %last_survey = (); + +my %cidrcache = (); +sub cache_cidrlookup { +	my ($addr, $net) = @_; +	my $key = $addr . " " . $net; + +	if (!exists($cidrcache{$key})) { +		$cidrcache{$key} = Net::CIDR::cidrlookup($addr, $net); +	} +	return $cidrcache{$key}; +} + +my %rangecache = (); +sub cache_cidrrange { +	my ($net) = @_; + +	if (!exists($rangecache{$net})) { +		my ($range) = Net::CIDR::cidr2range($net); +		$range =~ /(\d+)\.(\d+)\.(\d+)\.(\d+)-(\d+)\.(\d+)\.(\d+)\.(\d+)/ or die "Did not understand range: $range"; +		my @range = (); +		for my $l (($4+1)..($8-1)) { +			push @range, "$1.$2.$3.$l"; +		} +		($rangecache{$net}) = \@range; +	} + +	return @{$rangecache{$net}}; +} + +open LOG, ">>", "mbd.log"; + +my @ports = ( mbd::find_all_ports() , $Config::survey_port_low .. $Config::survey_port_high ); + +# Open a socket for each port +my @socks = (); +my $udp = getprotobyname("udp"); +for my $p (@ports) { +	my $sock; +	socket($sock, PF_INET, SOCK_DGRAM, $udp); +	bind($sock, sockaddr_in($p, INADDR_ANY)); +	push @socks, $sock; +} + +my $sendsock = Net::RawIP->new({udp => {}}); + +print "Listening on " . scalar @ports . " ports.\n"; +		 +open PKTS, "| ./packetpusher" +	or die "./packetpusher: $!"; + +# Main loop +while (1) { +	my $rin = fhbits(@socks); +	my $rout; + +	my $nfound = select($rout=$rin, undef, undef, undef); +	my $now = [Time::HiRes::gettimeofday]; + +	# First of all, close any surveys that are due. +	for my $sport (keys %active_surveys) { +		my $age = Time::HiRes::tv_interval($active_surveys{$sport}{start}, $now); +		if ($age > $Config::survey_time && $active_surveys{$sport}{active}) { +			my $hexdump = join(' ', map { sprintf "0x%02x", ord($_) } (split //, $active_surveys{$sport}{data})); +			print "Survey ($hexdump) for '" . $Config::access_list[$active_surveys{$sport}{entry}]->{name} . "'/" . +				$active_surveys{$sport}{dport} . ": " . $active_surveys{$sport}{num} . " active servers.\n"; +			$active_surveys{$sport}{active} = 0; +	 +			# (re)connect to the database if needed	 +			if (!defined($dbh) || !$dbh->ping) { +				$dbh = nms::db_connect(); +				$q = $dbh->prepare("INSERT INTO mbd_log (ts,game,port,description,active_servers) VALUES (CURRENT_TIMESTAMP,?,?,?,?)") +					or die "Couldn't prepare query"; +			} +			$q->execute($active_surveys{$sport}{entry}, $active_surveys{$sport}{dport}, $Config::access_list[$active_surveys{$sport}{entry}]->{name}, $active_surveys{$sport}{num}); +		} +		if ($age > $Config::survey_time * 3.0) { +			delete $active_surveys{$sport}; +		} +	} + +	for my $sock (@socks) { +		next unless (vec($rout, fileno($sock), 1) == 1); + +		my $data; +		my $addr = recv($sock, $data, 8192, 0);   # jumbo broadcast! :-P +		my ($sport, $saddr) = sockaddr_in($addr); +		my ($dport, $daddr) = sockaddr_in(getsockname($sock)); +		my $size = length($data); + +		# Check if this is a survey reply +		if ($dport >= $Config::survey_port_low && $dport <= $Config::survey_port_high) { +			if (!exists($active_surveys{$dport})) { +				print "WARNING: Unknown survey port $dport, ignoring\n"; +				next; +			} +			if (!$active_surveys{$dport}{active}) { +				# remains +				next; +			} +			 +			++$active_surveys{$dport}{num}; + +			next; +		} +		 +		# Rate limiting +		if (exists($last_sent{$saddr}{$dport})) { +			my $elapsed = Time::HiRes::tv_interval($last_sent{$saddr}{$dport}, $now); +			if ($elapsed < 1.0) { +				print LOG "$dport $size 2\n"; +				print inet_ntoa($saddr), ", $dport, $size bytes => rate-limited ($elapsed secs since last)\n"; +				next; +			} +		} +		 +		# We don't get the packet's destination address, but I guess this should do... +		# Check against the ACL. +		my $pass = 0; +		my $entry = -1; +		for my $rule (@Config::access_list) { +			++$entry; + +			next unless (mbd::match_ranges($dport, $rule->{'ports'})); +			next unless (mbd::match_ranges($size, $rule->{'sizes'})); + +			if ($rule->{'filter'}) { +				next unless ($rule->{'filter'}($data)); +			} + +			$pass = 1; +			last; +		} + +		print LOG "$dport $size $pass\n"; + +		if (!$pass) { +			print inet_ntoa($saddr), ", $dport, $size bytes => filtered\n"; +			next; +		} + +		$last_sent{$saddr}{$dport} = $now; + +		# The packet is OK! Do we already have a recent enough survey +		# for this port, or should we use this packet? +		my $survey = 1; +		if (exists($last_survey{$entry . "/" . $dport})) { +			my $age = Time::HiRes::tv_interval($last_survey{$entry . "/" . $dport}, $now); +			if ($age < $Config::survey_freq) { +				$survey = 0; +			} +		} + +		# New survey; find an unused port +		my $survey_sport; +		if ($survey) { +			for my $port ($Config::survey_port_low..$Config::survey_port_high) { +				if (!exists($active_surveys{$port})) { +					$survey_sport = $port; + +					$active_surveys{$port} = { +						start => $now, +						active => 1, +						dport => $dport, +						entry => $entry, +						num => 0, +						data => $data, +					}; +					$last_survey{$entry . "/" . $dport} = $now; + +					last; +				} +			} + +			if (!defined($survey_sport)) { +				print "WARNING: no free survey source ports, not surveying.\n"; +				$survey = 0; +			} +		} + +		# precache +		for my $net (@Config::networks) { +			cache_cidrrange($net); +			cache_cidrlookup(inet_ntoa($saddr), $net); +		} + +		my @packets = (); + +		my $num_nets = 0; +		for my $net (@Config::networks) { +			my @daddrs = cache_cidrrange($net); + +			if ($survey) { +				for my $daddr (@daddrs) { +					push @packets, [ $Config::survey_ip, $survey_sport, $daddr, $dport ]; +				} +			} + +			next if (cache_cidrlookup(inet_ntoa($saddr), $net)); + +			for my $daddr (@daddrs) { +				push @packets, [ inet_ntoa($saddr), $sport, $daddr, $dport ]; +			} + +			++$num_nets; +		} +		if ($survey) { +			print inet_ntoa($saddr), ", $dport, $size bytes => ($num_nets networks) [+survey from port $survey_sport]\n"; +		} else { +			print inet_ntoa($saddr), ", $dport, $size bytes => ($num_nets networks)\n"; +		} + +		printf PKTS "%d %s\n", scalar @packets, unpack('h*', $data); +		for my $pkt (@packets) { +			printf PKTS "%s %s %s %s\n", $pkt->[0], $pkt->[1], $pkt->[2], $pkt->[3]; +		} +	} +} + diff --git a/mbd/mbd.pl b/mbd/mbd.pl new file mode 100644 index 0000000..065e76c --- /dev/null +++ b/mbd/mbd.pl @@ -0,0 +1,254 @@ +#! /usr/bin/perl +use strict; +use warnings; +use Socket; +use Net::CIDR; +use Net::RawIP; +use Time::HiRes; +require './access_list.pl'; +require './nets.pl'; +require './survey.pl'; +require './mbd.pm'; +use lib '../include'; +use nms; +use strict; +use warnings; + +# Mark packets with DSCP CS7 +my $tos = 56; + +my ($dbh, $q); + +sub fhbits { +	my $bits = 0; +	for my $fh (@_) { +		vec($bits, fileno($fh), 1) = 1; +	} +	return $bits; +} + +# used for rate limiting +my %last_sent = (); + +# for own surveying +my %active_surveys = (); +my %last_survey = (); + +my %cidrcache = (); +sub cache_cidrlookup { +	my ($addr, $net) = @_; +	my $key = $addr . " " . $net; + +	if (!exists($cidrcache{$key})) { +		$cidrcache{$key} = Net::CIDR::cidrlookup($addr, $net); +	} +	return $cidrcache{$key}; +} + +my %rangecache = (); +sub cache_cidrrange { +	my ($net) = @_; + +	if (!exists($rangecache{$net})) { +		($rangecache{$net}) = Net::CIDR::cidr2range($net); +	} + +	return $rangecache{$net}; +} + +open LOG, ">>", "mbd.log"; + +my @ports = ( mbd::find_all_ports() , $Config::survey_port_low .. $Config::survey_port_high ); + +# Open a socket for each port +my @socks = (); +my $udp = getprotobyname("udp"); +for my $p (@ports) { +	my $sock; +	socket($sock, PF_INET, SOCK_DGRAM, $udp); +	bind($sock, sockaddr_in($p, INADDR_ANY)); +	push @socks, $sock; +} + +my $sendsock = Net::RawIP->new({udp => {}}); + +print "Listening on " . scalar @ports . " ports.\n"; + +# Main loop +while (1) { +	my $rin = fhbits(@socks); +	my $rout; + +	my $nfound = select($rout=$rin, undef, undef, undef); +	my $now = [Time::HiRes::gettimeofday]; + +	# First of all, close any surveys that are due. +	for my $sport (keys %active_surveys) { +		my $age = Time::HiRes::tv_interval($active_surveys{$sport}{start}, $now); +		if ($age > $Config::survey_time && $active_surveys{$sport}{active}) { +			my $hexdump = join(' ', map { sprintf "0x%02x", ord($_) } (split //, $active_surveys{$sport}{data})); +			print "Survey ($hexdump) for '" . $Config::access_list[$active_surveys{$sport}{entry}]->{name} . "'/" . +				$active_surveys{$sport}{dport} . ": " . $active_surveys{$sport}{num} . " active servers.\n"; +			$active_surveys{$sport}{active} = 0; +	 +			# (re)connect to the database if needed	 +			if (!defined($dbh) || !$dbh->ping) { +				$dbh = nms::db_connect(); +				$q = $dbh->prepare("INSERT INTO mbd_log (ts,game,port,description,active_servers) VALUES (CURRENT_TIMESTAMP,?,?,?,?)") +					or die "Couldn't prepare query"; +			} +			$q->execute($active_surveys{$sport}{entry}, $active_surveys{$sport}{dport}, $Config::access_list[$active_surveys{$sport}{entry}]->{name}, $active_surveys{$sport}{num}); +		} +		if ($age > $Config::survey_time * 3.0) { +			delete $active_surveys{$sport}; +		} +	} + +	for my $sock (@socks) { +		next unless (vec($rout, fileno($sock), 1) == 1); + +		my $data; +		my $addr = recv($sock, $data, 8192, 0);   # jumbo broadcast! :-P +		my ($sport, $saddr) = sockaddr_in($addr); +		my ($dport, $daddr) = sockaddr_in(getsockname($sock)); +		my $size = length($data); + +		# Check if this is a survey reply +		if ($dport >= $Config::survey_port_low && $dport <= $Config::survey_port_high) { +			if (!exists($active_surveys{$dport})) { +				print "WARNING: Unknown survey port $dport, ignoring\n"; +				next; +			} +			if (!$active_surveys{$dport}{active}) { +				# remains +				next; +			} +			 +			++$active_surveys{$dport}{num}; + +			next; +		} +		 +		# Rate limiting +		if (exists($last_sent{$saddr}{$dport})) { +			my $elapsed = Time::HiRes::tv_interval($last_sent{$saddr}{$dport}, $now); +			if ($elapsed < 1.0) { +				print LOG "$dport $size 2\n"; +				print inet_ntoa($saddr), ", $dport, $size bytes => rate-limited ($elapsed secs since last)\n"; +				next; +			} +		} +		 +		# We don't get the packet's destination address, but I guess this should do... +		# Check against the ACL. +		my $pass = 0; +		my $entry = -1; +		for my $rule (@Config::access_list) { +			++$entry; + +			next unless (mbd::match_ranges($dport, $rule->{'ports'})); +			next unless (mbd::match_ranges($size, $rule->{'sizes'})); + +			if ($rule->{'filter'}) { +				next unless ($rule->{'filter'}($data)); +			} + +			$pass = 1; +			last; +		} + +		print LOG "$dport $size $pass\n"; + +		if (!$pass) { +			print inet_ntoa($saddr), ", $dport, $size bytes => filtered\n"; +			next; +		} + +		$last_sent{$saddr}{$dport} = $now; + +		# The packet is OK! Do we already have a recent enough survey +		# for this port, or should we use this packet? +		my $survey = 1; +		if (exists($last_survey{$entry . "/" . $dport})) { +			my $age = Time::HiRes::tv_interval($last_survey{$entry . "/" . $dport}, $now); +			if ($age < $Config::survey_freq) { +				$survey = 0; +			} +		} + +		# New survey; find an unused port +		my $survey_sport; +		if ($survey) { +			for my $port ($Config::survey_port_low..$Config::survey_port_high) { +				if (!exists($active_surveys{$port})) { +					$survey_sport = $port; + +					$active_surveys{$port} = { +						start => $now, +						active => 1, +						dport => $dport, +						entry => $entry, +						num => 0, +						data => $data, +					}; +					$last_survey{$entry . "/" . $dport} = $now; + +					last; +				} +			} + +			if (!defined($survey_sport)) { +				print "WARNING: no free survey source ports, not surveying.\n"; +				$survey = 0; +			} +		} + +		my $num_nets = 0; +		for my $net (@Config::networks) { +			my ($range) = cache_cidrrange($net); +			$range =~ /-(.*?)$/; +			my $broadcast = $1; + +			if ($survey) { +				$sendsock->set({ +					ip => { +						saddr => $Config::survey_ip, +						daddr => $broadcast, +						tos => $tos +					}, +					udp => { +						source => $survey_sport, +						dest => $dport, +						data => $data +					} +				}); +				$sendsock->send; +			} + +			next if (cache_cidrlookup(inet_ntoa($saddr), $net)); + +			$sendsock->set({ +				ip => { +					saddr => inet_ntoa($saddr), +					daddr => $broadcast, +					tos => $tos +				}, +				udp => { +					source => $sport, +					dest => $dport, +					data => $data +				} +			}); +			$sendsock->send; + +			++$num_nets; +		} + +		if ($survey) { +			print inet_ntoa($saddr), ", $dport, $size bytes => ($num_nets networks) [+survey from port $survey_sport]\n"; +		} else { +			print inet_ntoa($saddr), ", $dport, $size bytes => ($num_nets networks)\n"; +		} +	} +} + diff --git a/mbd/mbd.pm b/mbd/mbd.pm new file mode 100644 index 0000000..b844e5b --- /dev/null +++ b/mbd/mbd.pm @@ -0,0 +1,50 @@ +#! /usr/bin/perl +use strict; +use warnings; +use Socket; +use Net::CIDR; +use Net::RawIP; +require './access_list.pl'; +require './nets.pl'; + +package mbd; + +sub expand_range { +	my $range = shift; + +	if ($range =~ /^(\d+)\.\.(\d+)$/) { +		return $1..$2; +	} else { +		return $range; +	} +} + +sub match_ranges { +	my ($elem, $ranges) = @_; +	 +	for my $range (@$ranges) { +		if ($range =~ /^(\d+)\.\.(\d+)$/) { +			return 1 if ($elem >= $1 && $elem <= $2); +		} else { +			return 1 if ($elem == $range); +		} +	} + +	return 0; +} + +sub find_all_ports { +	# Find what ports we need to listen on +	my %port_hash = (); +	for my $e (@Config::access_list) { +		for my $r (@{$e->{'ports'}}) { +			for my $p (expand_range($r)) { +				$port_hash{$p} = 1; +			} +		} +	} +	my @ports = sort { $a <=> $b } keys %port_hash; +	return @ports; +} + +1; diff --git a/mbd/nets.pl b/mbd/nets.pl new file mode 100644 index 0000000..3298657 --- /dev/null +++ b/mbd/nets.pl @@ -0,0 +1,171 @@ +# Autogenerated. Do not touch! +package Config; +our @networks = ( +	"176.110.98.0/24", +	"176.110.99.0/24", +	"176.110.100.0/24", +	"176.110.102.0/24", +	"176.110.103.0/24", +	"176.110.106.0/24", +	"176.110.107.0/24", +	"176.110.108.0/22", +	"176.110.112.0/24", +	"176.110.113.0/24", +	"176.110.114.0/24", +	"176.110.115.0/24", +	"176.110.116.0/24", +	"176.110.117.0/24", +	"176.110.118.0/24", +	"176.110.119.0/24", +	"176.110.120.0/24", +	"176.110.121.0/24", +	"176.110.122.0/24", +	"176.110.123.0/24", +	"176.110.124.0/24", +	"176.110.126.0/24", +	"176.110.2.0/25", +	"176.110.2.128/25", +	"176.110.4.0/25", +	"176.110.4.128/25", +	"176.110.6.0/25", +	"176.110.6.128/25", +	"176.110.8.0/25", +	"176.110.8.128/25", +	"176.110.10.0/25", +	"176.110.10.128/25", +	"176.110.11.0/25", +	"176.110.11.128/25", +	"176.110.12.0/25", +	"176.110.12.128/25", +	"176.110.13.0/25", +	"176.110.13.128/25", +	"176.110.14.0/25", +	"176.110.14.128/25", +	"176.110.15.0/25", +	"176.110.15.128/25", +	"176.110.16.0/25", +	"176.110.16.128/25", +	"176.110.17.0/25", +	"176.110.17.128/25", +	"176.110.18.0/25", +	"176.110.18.128/25", +	"176.110.19.0/25", +	"176.110.19.128/25", +	"176.110.20.0/25", +	"176.110.20.128/25", +	"176.110.21.0/25", +	"176.110.21.128/25", +	"176.110.22.0/25", +	"176.110.22.128/25", +	"176.110.23.0/25", +	"176.110.23.128/25", +	"176.110.24.0/25", +	"176.110.24.128/25", +	"176.110.25.0/25", +	"176.110.25.128/25", +	"176.110.26.0/25", +	"176.110.26.128/25", +	"176.110.27.0/25", +	"176.110.27.128/25", +	"176.110.29.0/25", +	"176.110.29.128/25", +	"176.110.31.0/25", +	"176.110.31.128/25", +	"176.110.33.0/25", +	"176.110.33.128/25", +	"176.110.35.0/25", +	"176.110.35.128/25", +	"176.110.37.0/25", +	"176.110.37.128/25", +	"176.110.39.0/25", +	"176.110.39.128/25", +	"176.110.41.0/25", +	"176.110.41.128/25", +	"176.110.43.0/25", +	"176.110.43.128/25", +	"176.110.44.0/25", +	"176.110.44.128/25", +	"176.110.45.0/25", +	"176.110.45.128/25", +	"176.110.46.0/25", +	"176.110.46.128/25", +	"176.110.47.0/25", +	"176.110.47.128/25", +	"176.110.48.0/25", +	"176.110.48.128/25", +	"176.110.49.0/25", +	"176.110.49.128/25", +	"176.110.50.0/25", +	"176.110.50.128/25", +	"176.110.51.0/25", +	"176.110.51.128/25", +	"176.110.52.0/25", +	"176.110.52.128/25", +	"176.110.53.0/25", +	"176.110.53.128/25", +	"176.110.54.0/25", +	"176.110.54.128/25", +	"176.110.55.0/25", +	"176.110.55.128/25", +	"176.110.56.0/25", +	"176.110.56.128/25", +	"176.110.57.0/25", +	"176.110.57.128/25", +	"176.110.58.0/25", +	"176.110.58.128/25", +	"176.110.59.0/25", +	"176.110.59.128/25", +	"176.110.60.0/25", +	"176.110.60.128/25", +	"176.110.61.0/25", +	"176.110.61.128/25", +	"176.110.62.0/25", +	"176.110.62.128/25", +	"176.110.63.0/25", +	"176.110.63.128/25", +	"176.110.64.0/25", +	"176.110.64.128/25", +	"176.110.65.0/25", +	"176.110.65.128/25", +	"176.110.66.0/25", +	"176.110.66.128/25", +	"176.110.67.0/25", +	"176.110.67.128/25", +	"176.110.68.0/25", +	"176.110.68.128/25", +	"176.110.69.0/25", +	"176.110.69.128/25", +	"176.110.70.0/25", +	"176.110.70.128/25", +	"176.110.71.0/25", +	"176.110.71.128/25", +	"176.110.72.0/25", +	"176.110.72.128/25", +	"176.110.73.0/25", +	"176.110.73.128/25", +	"176.110.74.0/25", +	"176.110.74.128/25", +	"176.110.75.0/25", +	"176.110.75.128/25", +	"176.110.76.0/25", +	"176.110.76.128/25", +	"176.110.77.0/25", +	"176.110.77.128/25", +	"176.110.79.0/25", +	"176.110.79.128/25", +	"176.110.81.0/25", +	"176.110.81.128/25", +	"176.110.83.0/25", +	"176.110.83.128/25", +	"176.110.84.0/25", +	"176.110.84.128/25", +	"176.110.85.0/25", +	"176.110.85.128/25", +	"176.110.86.0/25", +	"176.110.86.128/25", +	"176.110.87.0/25", +	"176.110.87.128/25", +	"176.110.88.0/25", +	"176.110.88.128/25", +); +1; diff --git a/mbd/packetpusher.c b/mbd/packetpusher.c new file mode 100644 index 0000000..c21a084 --- /dev/null +++ b/mbd/packetpusher.c @@ -0,0 +1,127 @@ +#include <stdio.h> +#include <sys/socket.h> +#include <stdlib.h> +#include <string.h> +#include <netinet/in.h> +#include <netinet/ip.h> +#include <netinet/udp.h> +#include <stdint.h> +#include <arpa/inet.h> + +char encoded_pkt[4096], workspace[4096]; +unsigned char pkt[2048]; + +typedef uint32_t u_int32_t; + +u_int32_t checksum(unsigned char *buf, unsigned nbytes, u_int32_t sum) +{ +	int i; +	/* Checksum all the pairs of bytes first... */ +	for (i = 0; i < (nbytes & ~1U); i += 2) { +		sum += (u_int16_t)ntohs(*((u_int16_t *)(buf + i))); +		if (sum > 0xFFFF) +			sum -= 0xFFFF; +	} + +	/* +	 * If there's a single byte left over, checksum it, too. +	 * Network byte order is big-endian, so the remaining byte is +	 * the high byte. +	 */ + +	if (i < nbytes) { +		sum += buf[i] << 8; +		if (sum > 0xFFFF) +			sum -= 0xFFFF; +	} + +	return (sum); +} + +u_int32_t wrapsum(u_int32_t sum) +{ +	sum = ~sum & 0xFFFF; +	return (htons(sum)); +} + +int main(int argc, char **argv) +{ +	int sock = socket(AF_INET, SOCK_RAW, IPPROTO_RAW); +	if (sock == -1) { +		perror("socket"); +		exit(1); +	} + +	for ( ;; ) { +		int num_pkts; +		int ret = scanf("%d %s", &num_pkts, encoded_pkt); +		if (ret != 2) { +			fprintf(stderr, "error parsing! ret=%d\n", ret); +			exit(1); +		} +		if ((strlen(encoded_pkt) % 2) != 0) { +			fprintf(stderr, "hex packet has odd length\n"); +			exit(1); +		} + +		// de-hex packet +		for (int i = 0; i < strlen(encoded_pkt); i += 2) { +			char c[3]; +			c[0] = encoded_pkt[i]; +			c[1] = encoded_pkt[i + 1]; +			c[2] = 0; +			int h = strtol(c, NULL, 16); +			pkt[i / 2] = h; +		} + +		int datalen = strlen(encoded_pkt) / 2; + +		for (int i = 0; i < num_pkts; ++i) { +			char from_ip[256], to_ip[256]; +			int sport, dport; +			if (scanf("%s %d %s %d", from_ip, &sport, to_ip, &dport) != 4) { +				fprintf(stderr, "error parsing packet %d!\n", i); +				exit(1); +			} + +			// IP header +			struct iphdr *ip = (struct iphdr *)workspace; +			ip->version = 4; +			ip->ihl = 5; +			ip->tos = 0; +			ip->tot_len = htons(datalen + sizeof(struct iphdr) + sizeof(struct udphdr)); +			ip->id = 0; +			ip->frag_off = 0; +			ip->ttl = 64; +			ip->protocol = 17;  // UDP +			ip->saddr = inet_addr(from_ip); +			ip->daddr = inet_addr(to_ip); +			ip->check = 0; +			ip->check = wrapsum(checksum((unsigned char *)ip, sizeof(*ip), 0)); + +			// UDP header +			struct udphdr *udp = (struct udphdr *)(workspace + sizeof(struct iphdr)); +			udp->source = htons(sport); +			udp->dest = htons(dport); +			udp->len = htons(datalen + sizeof(struct udphdr)); +			udp->check = 0; + +			int sum = checksum((unsigned char *)&ip->saddr, 2 * sizeof(ip->saddr), IPPROTO_UDP + ntohs(udp->len)); +			sum = checksum((unsigned char *)pkt, datalen, sum); +			sum = checksum((unsigned char *)udp, sizeof(*udp), sum); +			udp->check = wrapsum(sum); + +			// Data +			memcpy(workspace + sizeof(struct iphdr) + sizeof(struct udphdr), +			       pkt, datalen); + +			// Send out the packet physically +			struct sockaddr_in to; +			to.sin_family = AF_INET; +			to.sin_addr.s_addr = inet_addr(to_ip); +			to.sin_port = htons(dport); + +			sendto(sock, workspace, ntohs(ip->tot_len), 0, (struct sockaddr *)&to, sizeof(to)); +		} +	} +} diff --git a/mbd/survey.pl b/mbd/survey.pl new file mode 100644 index 0000000..be33038 --- /dev/null +++ b/mbd/survey.pl @@ -0,0 +1,10 @@ +package Config; + +our $survey_ip = "176.110.125.15"; +our $survey_port_low = 60100; +our $survey_port_high = 60200; +our $survey_freq = 60.0; +our $survey_time = 10.0; + +1; + diff --git a/netlist.txt b/netlist.txt new file mode 100644 index 0000000..268d85f --- /dev/null +++ b/netlist.txt @@ -0,0 +1,162 @@ +151.216.46.0 26 crew1 +151.216.46.128 26 crew2 +151.216.47.0 26 crew3 +151.216.47.128 26 crew4 +151.216.48.0 26 crew5 +151.216.48.128 26 crew6 +151.216.50.0 23 creativia +151.216.54.0 24 gamehq +151.216.55.0 24 chillout +151.216.56.0 26 defektraid +151.216.64.0 19 wlan +151.216.96.0 24 logistikk +151.216.98.0 24 presse +151.216.99.0 25 fugleberg1 +151.216.99.128 25 fugleberg2 +151.216.101.0 24 game +151.216.104.0 24 care +151.216.105.0 24 sponsorvest +151.216.107.0 24 stageboh +151.216.112.0 24 secmedic +151.216.113.0 24 lager +151.216.114.0 24 stage +151.216.115.0 24 ymse +151.216.116.0 26 ap-dist0 +151.216.116.64 26 ap-dist1 +151.216.116.128 26 ap-dist2 +151.216.116.192 26 ap-dist3 +151.216.117.0 26 ap-dist4 +151.216.118.0 25 marsrele +151.216.124.0 24 noc +# --> Denne er det ikke meningen Ã¥ rulle ut: 151.216.125.0 24 noc-server +151.216.126.0 24 tele +# Start av switches.txt fra planning.cpp +151.216.1.0 26 e1-3 x.x.x.x +151.216.1.64 26 e1-4 x.x.x.x +151.216.1.128 26 e3-3 x.x.x.x +151.216.1.192 26 e3-4 x.x.x.x +151.216.2.0 26 e5-3 x.x.x.x +151.216.2.64 26 e5-4 x.x.x.x +151.216.2.128 26 e7-3 x.x.x.x +151.216.2.192 26 e7-4 x.x.x.x +151.216.3.0 26 e9-3 x.x.x.x +151.216.3.64 26 e9-4 x.x.x.x +151.216.3.128 26 e11-1 x.x.x.x +151.216.3.192 26 e11-2 x.x.x.x +151.216.4.0 26 e11-3 x.x.x.x +151.216.4.64 26 e11-4 x.x.x.x +151.216.4.128 26 e13-1 x.x.x.x +151.216.4.192 26 e13-2 x.x.x.x +151.216.5.0 26 e13-3 x.x.x.x +151.216.5.64 26 e13-4 x.x.x.x +151.216.5.128 26 e15-1 x.x.x.x +151.216.5.192 26 e15-2 x.x.x.x +151.216.6.0 26 e15-3 x.x.x.x +151.216.6.64 26 e15-4 x.x.x.x +151.216.6.128 26 e17-1 x.x.x.x +151.216.6.192 26 e17-2 x.x.x.x +151.216.7.0 26 e17-3 x.x.x.x +151.216.7.64 26 e17-4 x.x.x.x +151.216.7.128 26 e19-1 x.x.x.x +151.216.7.192 26 e19-2 x.x.x.x +151.216.8.0 26 e19-3 x.x.x.x +151.216.8.64 26 e19-4 x.x.x.x +151.216.8.128 26 e21-1 x.x.x.x +151.216.8.192 26 e21-2 x.x.x.x +151.216.9.0 26 e21-3 x.x.x.x +151.216.9.64 26 e21-4 x.x.x.x +151.216.9.128 26 e23-1 x.x.x.x +151.216.9.192 26 e23-2 x.x.x.x +151.216.10.0 26 e23-3 x.x.x.x +151.216.10.64 26 e23-4 x.x.x.x +151.216.10.128 26 e25-1 x.x.x.x +151.216.10.192 26 e25-2 x.x.x.x +151.216.11.0 26 e25-3 x.x.x.x +151.216.11.64 26 e25-4 x.x.x.x +151.216.11.128 26 e27-1 x.x.x.x +151.216.11.192 26 e27-2 x.x.x.x +151.216.12.0 26 e29-1 x.x.x.x +151.216.12.64 26 e29-2 x.x.x.x +151.216.12.128 26 e31-1 x.x.x.x +151.216.12.192 26 e31-2 x.x.x.x +151.216.13.0 26 e33-1 x.x.x.x +151.216.13.64 26 e33-2 x.x.x.x +151.216.13.128 26 e35-1 x.x.x.x +151.216.13.192 26 e35-2 x.x.x.x +151.216.14.0 26 e37-1 x.x.x.x +151.216.14.64 26 e37-2 x.x.x.x +151.216.14.128 26 e39-1 x.x.x.x +151.216.14.192 26 e39-2 x.x.x.x +151.216.15.0 26 e41-1 x.x.x.x +151.216.15.64 26 e41-2 x.x.x.x +151.216.15.128 26 e43-1 x.x.x.x +151.216.15.192 26 e43-2 x.x.x.x +151.216.16.0 26 e43-3 x.x.x.x +151.216.16.64 26 e43-4 x.x.x.x +151.216.16.128 26 e45-1 x.x.x.x +151.216.16.192 26 e45-2 x.x.x.x +151.216.17.0 26 e45-3 x.x.x.x +151.216.17.64 26 e45-4 x.x.x.x +151.216.17.128 26 e47-1 x.x.x.x +151.216.17.192 26 e47-2 x.x.x.x +151.216.18.0 26 e47-3 x.x.x.x +151.216.18.64 26 e47-4 x.x.x.x +151.216.18.128 26 e49-1 x.x.x.x +151.216.18.192 26 e49-2 x.x.x.x +151.216.19.0 26 e49-3 x.x.x.x +151.216.19.64 26 e49-4 x.x.x.x +151.216.19.128 26 e51-1 x.x.x.x +151.216.19.192 26 e51-2 x.x.x.x +151.216.20.0 26 e51-3 x.x.x.x +151.216.20.64 26 e51-4 x.x.x.x +151.216.20.128 26 e53-1 x.x.x.x +151.216.20.192 26 e53-2 x.x.x.x +151.216.21.0 26 e53-3 x.x.x.x +151.216.21.64 26 e53-4 x.x.x.x +151.216.21.128 26 e55-1 x.x.x.x +151.216.21.192 26 e55-2 x.x.x.x +151.216.22.0 26 e55-3 x.x.x.x +151.216.22.64 26 e55-4 x.x.x.x +151.216.22.128 26 e57-1 x.x.x.x +151.216.22.192 26 e57-2 x.x.x.x +151.216.23.0 26 e57-3 x.x.x.x +151.216.23.64 26 e57-4 x.x.x.x +151.216.23.128 26 e59-1 x.x.x.x +151.216.23.192 26 e59-2 x.x.x.x +151.216.24.0 26 e59-3 x.x.x.x +151.216.24.64 26 e59-4 x.x.x.x +151.216.24.128 26 e61-1 x.x.x.x +151.216.24.192 26 e61-2 x.x.x.x +151.216.25.0 26 e61-3 x.x.x.x +151.216.25.64 26 e61-4 x.x.x.x +151.216.25.128 26 e63-1 x.x.x.x +151.216.25.192 26 e63-2 x.x.x.x +151.216.26.0 26 e63-3 x.x.x.x +151.216.26.64 26 e63-4 x.x.x.x +151.216.26.128 26 e65-1 x.x.x.x +151.216.26.192 26 e65-2 x.x.x.x +151.216.27.0 26 e65-3 x.x.x.x +151.216.27.64 26 e65-4 x.x.x.x +151.216.27.128 26 e67-1 x.x.x.x +151.216.27.192 26 e67-2 x.x.x.x +151.216.28.0 26 e67-3 x.x.x.x +151.216.28.64 26 e67-4 x.x.x.x +151.216.28.128 26 e69-1 x.x.x.x +151.216.28.192 26 e69-2 x.x.x.x +151.216.29.0 26 e69-3 x.x.x.x +151.216.29.64 26 e69-4 x.x.x.x +151.216.29.128 26 e71-1 x.x.x.x +151.216.29.192 26 e71-2 x.x.x.x +151.216.30.0 26 e71-3 x.x.x.x +151.216.30.64 26 e71-4 x.x.x.x +151.216.30.128 26 e73-1 x.x.x.x +151.216.30.192 26 e73-2 x.x.x.x +151.216.31.0 26 e73-3 x.x.x.x +151.216.31.64 26 e73-4 x.x.x.x +151.216.31.128 26 e75-1 x.x.x.x +151.216.31.192 26 e75-2 x.x.x.x +151.216.32.0 26 e75-3 x.x.x.x +151.216.32.64 26 e75-4 x.x.x.x +151.216.32.128 26 e77-1 x.x.x.x +151.216.32.192 26 e77-2 x.x.x.x +# Slutt av switches.txt fra planning.cpp diff --git a/patches/README b/patches/README new file mode 100644 index 0000000..c89deaf --- /dev/null +++ b/patches/README @@ -0,0 +1,13 @@ +Includes various patch(es) we had to use. + +> dhcpd-never-broadcast.diff + +When using DHCP in routed networks, the router has to participate in rewriting +and sending DHCP replies on to the user.    Unfortunately, some devices, +in particular Cisco's Nexus series of switches, drop such DHCP reply packets +with the broadcast bit in the flags field of the DHCP message header set. +Thi means that some operating systems, in particular Microsoft Windows Vista, +can have problems getting DHCP to work in such environments.   If you enable +this flag, the DHCP server will never set the broadcast flags in the replies +it sends, even if the client set the broadcast flag.   This flag overrides +the never-broadcast flag if both are set. diff --git a/patches/dhcpd-never-broadcast.diff b/patches/dhcpd-never-broadcast.diff new file mode 100644 index 0000000..ac6d24d --- /dev/null +++ b/patches/dhcpd-never-broadcast.diff @@ -0,0 +1,88 @@ +diff -ur isc-dhcp-4.1.1-P1/includes/dhcpd.h isc-dhcp-4.1.1-P1.patched//includes/dhcpd.h +--- isc-dhcp-4.1.1-P1/includes/dhcpd.h	2012-04-04 16:49:44.000000000 +0200 ++++ isc-dhcp-4.1.1-P1.patched//includes/dhcpd.h	2012-04-04 14:56:43.000000000 +0200 +@@ -626,6 +626,7 @@ + #define SV_LIMIT_PREFS_PER_IA		57 + #define SV_DELAYED_ACK			58 + #define SV_MAX_ACK_DELAY		59 ++#define SV_NEVER_BROADCAST		60 +  + #if !defined (DEFAULT_PING_TIMEOUT) + # define DEFAULT_PING_TIMEOUT 1 +diff -ur isc-dhcp-4.1.1-P1/server/bootp.c isc-dhcp-4.1.1-P1.patched//server/bootp.c +--- isc-dhcp-4.1.1-P1/server/bootp.c	2009-07-25 00:04:52.000000000 +0200 ++++ isc-dhcp-4.1.1-P1.patched//server/bootp.c	2012-04-04 14:55:21.000000000 +0200 +@@ -283,6 +283,15 @@ + 					   &lease -> scope, oc, MDL)) + 		raw.flags |= htons (BOOTP_BROADCAST); +  ++	/* The inverse. */ ++	if ((oc = lookup_option (&server_universe, ++				options, SV_NEVER_BROADCAST)) && ++	    evaluate_boolean_option_cache (&ignorep, packet, lease, ++					   (struct client_state *)0, ++					   packet -> options, options, ++					   &lease -> scope, oc, MDL)) ++		raw.flags &= htons (~BOOTP_BROADCAST); ++ + 	/* Figure out the address of the next server. */ + 	memset (&d1, 0, sizeof d1); + 	oc = lookup_option (&server_universe, options, SV_NEXT_SERVER); +diff -ur isc-dhcp-4.1.1-P1/server/dhcp.c isc-dhcp-4.1.1-P1.patched//server/dhcp.c +--- isc-dhcp-4.1.1-P1/server/dhcp.c	2012-04-04 16:48:46.000000000 +0200 ++++ isc-dhcp-4.1.1-P1.patched//server/dhcp.c	2012-04-04 14:55:45.000000000 +0200 +@@ -2482,6 +2482,15 @@ + 					   &lease -> scope, oc, MDL)) + 		state -> bootp_flags |= htons (BOOTP_BROADCAST); +  ++	/* The inverse. */ ++	if ((oc = lookup_option (&server_universe, state -> options, ++				SV_NEVER_BROADCAST)) && ++	    evaluate_boolean_option_cache (&ignorep, packet, lease, ++					   (struct client_state *)0, ++					   packet -> options, state -> options, ++					   &lease -> scope, oc, MDL)) ++		state -> bootp_flags &= htons (~BOOTP_BROADCAST); ++ + 	/* Get the Maximum Message Size option from the packet, if one + 	   was sent. */ + 	oc = lookup_option (&dhcp_universe, packet -> options, +diff -ur isc-dhcp-4.1.1-P1/server/dhcpd.conf.5 isc-dhcp-4.1.1-P1.patched//server/dhcpd.conf.5 +--- isc-dhcp-4.1.1-P1/server/dhcpd.conf.5	2012-04-04 16:48:46.000000000 +0200 ++++ isc-dhcp-4.1.1-P1.patched//server/dhcpd.conf.5	2012-04-04 16:45:44.000000000 +0200 +@@ -1914,6 +1914,24 @@ + .RE + .PP + The ++.I never-broadcast ++statement ++.RS 0.25i ++.PP ++.B never-broadcast \fIflag\fR\fB;\fR ++.PP ++When using DHCP in routed networks, the router has to participate in rewriting ++and sending DHCP replies on to the user.    Unfortunately, some devices, ++in particular Cisco's Nexus series of switches, drop such DHCP reply packets ++with the broadcast bit in the flags field of the DHCP message header set. ++Thi means that some operating systems, in particular Microsoft Windows Vista, ++can have problems getting DHCP to work in such environments.   If you enable ++this flag, the DHCP server will never set the broadcast flags in the replies ++it sends, even if the client set the broadcast flag.   This flag overrides ++the never-broadcast flag if both are set. ++.RE ++.PP ++The + .I always-reply-rfc1048 + statement + .RS 0.25i +diff -ur isc-dhcp-4.1.1-P1/server/stables.c isc-dhcp-4.1.1-P1.patched//server/stables.c +--- isc-dhcp-4.1.1-P1/server/stables.c	2012-04-04 16:49:44.000000000 +0200 ++++ isc-dhcp-4.1.1-P1.patched//server/stables.c	2012-04-04 14:56:43.000000000 +0200 +@@ -203,6 +203,7 @@ + 	{ "always-reply-rfc1048", "f",		&server_universe,  20, 1 }, + 	{ "site-option-space", "X",		&server_universe,  21, 1 }, + 	{ "always-broadcast", "f",		&server_universe,  22, 1 }, ++	{ "never-broadcast", "f",		&server_universe,  60, 1 }, + 	{ "ddns-domainname", "t",		&server_universe,  23, 1 }, + 	{ "ddns-hostname", "t",			&server_universe,  24, 1 }, + 	{ "ddns-rev-domainname", "t",		&server_universe,  25, 1 }, diff --git a/patchlist.txt b/patchlist.txt new file mode 100644 index 0000000..30285d5 --- /dev/null +++ b/patchlist.txt @@ -0,0 +1,128 @@ +e1-3 distro1 Gi1/1 Gi2/1 Gi5/1 Gi6/1 +e1-4 distro1 Gi1/2 Gi2/2 Gi5/2 Gi6/2 +e3-3 distro1 Gi1/3 Gi2/3 Gi5/3 Gi6/3 +e3-4 distro1 Gi1/4 Gi2/4 Gi5/4 Gi6/4 +e5-3 distro1 Gi1/5 Gi2/5 Gi5/5 Gi6/5 +e5-4 distro1 Gi1/6 Gi2/6 Gi5/6 Gi6/6 +e7-3 distro1 Gi1/7 Gi2/7 Gi5/7 Gi6/7 +e7-4 distro1 Gi1/8 Gi2/8 Gi5/8 Gi6/8 +e9-3 distro1 Gi1/9 Gi2/9 Gi5/9 Gi6/9 +e9-4 distro1 Gi1/10 Gi2/10 Gi5/10 Gi6/10 +e11-1 distro2 Gi1/1 Gi2/1 Gi5/1 Gi6/1 +e11-2 distro2 Gi1/2 Gi2/2 Gi5/2 Gi6/2 +e11-3 distro1 Gi1/11 Gi2/11 Gi5/11 Gi6/11 +e11-4 distro1 Gi1/12 Gi2/12 Gi5/12 Gi6/12 +e13-1 distro2 Gi1/3 Gi2/3 Gi5/3 Gi6/3 +e13-2 distro2 Gi1/4 Gi2/4 Gi5/4 Gi6/4 +e13-3 distro1 Gi1/13 Gi2/13 Gi5/13 Gi6/13 +e13-4 distro1 Gi1/14 Gi2/14 Gi5/14 Gi6/14 +e15-1 distro2 Gi1/5 Gi2/5 Gi5/5 Gi6/5 +e15-2 distro2 Gi1/6 Gi2/6 Gi5/6 Gi6/6 +e15-3 distro1 Gi1/15 Gi2/15 Gi5/15 Gi6/15 +e15-4 distro1 Gi1/16 Gi2/16 Gi5/16 Gi6/16 +e17-1 distro2 Gi1/7 Gi2/7 Gi5/7 Gi6/7 +e17-2 distro2 Gi1/8 Gi2/8 Gi5/8 Gi6/8 +e17-3 distro1 Gi1/17 Gi2/17 Gi5/17 Gi6/17 +e17-4 distro1 Gi1/18 Gi2/18 Gi5/18 Gi6/18 +e19-1 distro2 Gi1/9 Gi2/9 Gi5/9 Gi6/9 +e19-2 distro2 Gi1/10 Gi2/10 Gi5/10 Gi6/10 +e19-3 distro1 Gi1/19 Gi2/19 Gi5/19 Gi6/19 +e19-4 distro1 Gi1/20 Gi2/20 Gi5/20 Gi6/20 +e21-1 distro2 Gi1/11 Gi2/11 Gi5/11 Gi6/11 +e21-2 distro2 Gi1/12 Gi2/12 Gi5/12 Gi6/12 +e21-3 distro1 Gi1/21 Gi2/21 Gi5/21 Gi6/21 +e21-4 distro1 Gi1/22 Gi2/22 Gi5/22 Gi6/22 +e23-1 distro2 Gi1/13 Gi2/13 Gi5/13 Gi6/13 +e23-2 distro2 Gi1/14 Gi2/14 Gi5/14 Gi6/14 +e23-3 distro1 Gi1/23 Gi2/23 Gi5/23 Gi6/23 +e23-4 distro1 Gi1/24 Gi2/24 Gi5/24 Gi6/24 +e25-1 distro2 Gi1/15 Gi2/15 Gi5/15 Gi6/15 +e25-2 distro2 Gi1/16 Gi2/16 Gi5/16 Gi6/16 +e25-3 distro1 Gi1/25 Gi2/25 Gi5/25 Gi6/25 +e25-4 distro1 Gi1/26 Gi2/26 Gi5/26 Gi6/26 +e27-1 distro2 Gi1/17 Gi2/17 Gi5/17 Gi6/17 +e27-2 distro2 Gi1/18 Gi2/18 Gi5/18 Gi6/18 +e29-1 distro2 Gi1/19 Gi2/19 Gi5/19 Gi6/19 +e29-2 distro2 Gi1/20 Gi2/20 Gi5/20 Gi6/20 +e31-1 distro2 Gi1/21 Gi2/21 Gi5/21 Gi6/21 +e31-2 distro2 Gi1/22 Gi2/22 Gi5/22 Gi6/22 +e33-1 distro3 Gi1/1 Gi2/1 Gi5/1 Gi6/1 +e33-2 distro2 Gi1/23 Gi2/23 Gi5/23 Gi6/23 +e35-1 distro3 Gi1/2 Gi2/2 Gi5/2 Gi6/2 +e35-2 distro3 Gi1/3 Gi2/3 Gi5/3 Gi6/3 +e37-1 distro3 Gi1/4 Gi2/4 Gi5/4 Gi6/4 +e37-2 distro3 Gi1/5 Gi2/5 Gi5/5 Gi6/5 +e39-1 distro3 Gi1/6 Gi2/6 Gi5/6 Gi6/6 +e39-2 distro3 Gi1/7 Gi2/7 Gi5/7 Gi6/7 +e41-1 distro3 Gi1/8 Gi2/8 Gi5/8 Gi6/8 +e41-2 distro3 Gi1/9 Gi2/9 Gi5/9 Gi6/9 +e43-1 distro3 Gi1/10 Gi2/10 Gi5/10 Gi6/10 +e43-2 distro3 Gi1/11 Gi2/11 Gi5/11 Gi6/11 +e43-3 distro4 Gi1/1 Gi2/1 Gi5/1 Gi6/1 +e43-4 distro4 Gi1/2 Gi2/2 Gi5/2 Gi6/2 +e45-1 distro3 Gi1/12 Gi2/12 Gi5/12 Gi6/12 +e45-2 distro3 Gi1/13 Gi2/13 Gi5/13 Gi6/13 +e45-3 distro4 Gi1/3 Gi2/3 Gi5/3 Gi6/3 +e45-4 distro4 Gi1/4 Gi2/4 Gi5/4 Gi6/4 +e47-1 distro3 Gi1/14 Gi2/14 Gi5/14 Gi6/14 +e47-2 distro3 Gi1/15 Gi2/15 Gi5/15 Gi6/15 +e47-3 distro4 Gi1/5 Gi2/5 Gi5/5 Gi6/5 +e47-4 distro4 Gi1/6 Gi2/6 Gi5/6 Gi6/6 +e49-1 distro3 Gi1/16 Gi2/16 Gi5/16 Gi6/16 +e49-2 distro3 Gi1/17 Gi2/17 Gi5/17 Gi6/17 +e49-3 distro4 Gi1/7 Gi2/7 Gi5/7 Gi6/7 +e49-4 distro4 Gi1/8 Gi2/8 Gi5/8 Gi6/8 +e51-1 distro3 Gi1/18 Gi2/18 Gi5/18 Gi6/18 +e51-2 distro3 Gi1/19 Gi2/19 Gi5/19 Gi6/19 +e51-3 distro4 Gi1/9 Gi2/9 Gi5/9 Gi6/9 +e51-4 distro4 Gi1/10 Gi2/10 Gi5/10 Gi6/10 +e53-1 distro3 Gi1/20 Gi2/20 Gi5/20 Gi6/20 +e53-2 distro3 Gi1/21 Gi2/21 Gi5/21 Gi6/21 +e53-3 distro4 Gi1/11 Gi2/11 Gi5/11 Gi6/11 +e53-4 distro4 Gi1/12 Gi2/12 Gi5/12 Gi6/12 +e55-1 distro3 Gi1/22 Gi2/22 Gi5/22 Gi6/22 +e55-2 distro3 Gi1/23 Gi2/23 Gi5/23 Gi6/23 +e55-3 distro4 Gi1/13 Gi2/13 Gi5/13 Gi6/13 +e55-4 distro4 Gi1/14 Gi2/14 Gi5/14 Gi6/14 +e57-1 distro3 Gi1/24 Gi2/24 Gi5/24 Gi6/24 +e57-2 distro3 Gi1/25 Gi2/25 Gi5/25 Gi6/25 +e57-3 distro4 Gi1/15 Gi2/15 Gi5/15 Gi6/15 +e57-4 distro4 Gi1/16 Gi2/16 Gi5/16 Gi6/16 +e59-1 distro5 Gi1/1 Gi2/1 Gi5/1 Gi6/1 +e59-2 distro5 Gi1/2 Gi2/2 Gi5/2 Gi6/2 +e59-3 distro4 Gi1/17 Gi2/17 Gi5/17 Gi6/17 +e59-4 distro4 Gi1/18 Gi2/18 Gi5/18 Gi6/18 +e61-1 distro5 Gi1/3 Gi2/3 Gi5/3 Gi6/3 +e61-2 distro5 Gi1/4 Gi2/4 Gi5/4 Gi6/4 +e61-3 distro4 Gi1/19 Gi2/19 Gi5/19 Gi6/19 +e61-4 distro4 Gi1/20 Gi2/20 Gi5/20 Gi6/20 +e63-1 distro5 Gi1/5 Gi2/5 Gi5/5 Gi6/5 +e63-2 distro5 Gi1/6 Gi2/6 Gi5/6 Gi6/6 +e63-3 distro5 Gi1/7 Gi2/7 Gi5/7 Gi6/7 +e63-4 distro5 Gi1/8 Gi2/8 Gi5/8 Gi6/8 +e65-1 distro5 Gi1/9 Gi2/9 Gi5/9 Gi6/9 +e65-2 distro5 Gi1/10 Gi2/10 Gi5/10 Gi6/10 +e65-3 distro5 Gi1/11 Gi2/11 Gi5/11 Gi6/11 +e65-4 distro5 Gi1/12 Gi2/12 Gi5/12 Gi6/12 +e67-1 distro5 Gi1/13 Gi2/13 Gi5/13 Gi6/13 +e67-2 distro5 Gi1/14 Gi2/14 Gi5/14 Gi6/14 +e67-3 distro5 Gi1/15 Gi2/15 Gi5/15 Gi6/15 +e67-4 distro5 Gi1/16 Gi2/16 Gi5/16 Gi6/16 +e69-1 distro5 Gi1/17 Gi2/17 Gi5/17 Gi6/17 +e69-2 distro5 Gi1/18 Gi2/18 Gi5/18 Gi6/18 +e69-3 distro5 Gi1/19 Gi2/19 Gi5/19 Gi6/19 +e69-4 distro5 Gi1/20 Gi2/20 Gi5/20 Gi6/20 +e71-1 distro5 Gi1/21 Gi2/21 Gi5/21 Gi6/21 +e71-2 distro5 Gi1/22 Gi2/22 Gi5/22 Gi6/22 +e71-3 distro5 Gi1/23 Gi2/23 Gi5/23 Gi6/23 +e71-4 distro5 Gi1/24 Gi2/24 Gi5/24 Gi6/24 +e73-1 distro5 Gi1/25 Gi2/25 Gi5/25 Gi6/25 +e73-2 distro5 Gi1/26 Gi2/26 Gi5/26 Gi6/26 +e73-3 distro5 Gi1/27 Gi2/27 Gi5/27 Gi6/27 +e73-4 distro5 Gi1/28 Gi2/28 Gi5/28 Gi6/28 +e75-1 distro5 Gi1/29 Gi2/29 Gi5/29 Gi6/29 +e75-2 distro5 Gi1/30 Gi2/30 Gi5/30 Gi6/30 +e75-3 distro5 Gi1/31 Gi2/31 Gi5/31 Gi6/31 +e75-4 distro5 Gi1/32 Gi2/32 Gi5/32 Gi6/32 +e77-1 distro5 Gi1/33 Gi2/33 Gi5/33 Gi6/33 +e77-2 distro5 Gi1/34 Gi2/34 Gi5/34 Gi6/34 diff --git a/patchlist.txt.crew b/patchlist.txt.crew new file mode 100644 index 0000000..c69136a --- /dev/null +++ b/patchlist.txt.crew @@ -0,0 +1,6 @@ +crew1 crewgw Gi1/11 Gi1/12 Gi1/13 Gi1/14 +crew2 crewgw Gi1/15 Gi1/16 Gi1/17 Gi1/18 +crew3 crewgw Gi1/19 Gi1/20 Gi1/21 Gi1/22 +crew4 crewgw Gi1/23 Gi1/24 Gi1/25 Gi1/26 +crew5 crewgw Gi1/27 Gi1/28 Gi1/29 Gi1/30 +crew6 crewgw Gi1/31 Gi1/32 Gi1/33 Gi1/34 diff --git a/pingswitches.txt b/pingswitches.txt new file mode 100644 index 0000000..efd8454 --- /dev/null +++ b/pingswitches.txt @@ -0,0 +1,128 @@ +151.216.1.0 26 e1-3 x.x.x.x +151.216.1.64 26 e1-4 x.x.x.x +151.216.1.128 26 e3-3 x.x.x.x +151.216.1.192 26 e3-4 x.x.x.x +151.216.2.0 26 e5-3 x.x.x.x +151.216.2.64 26 e5-4 x.x.x.x +151.216.2.128 26 e7-3 x.x.x.x +151.216.2.192 26 e7-4 x.x.x.x +151.216.3.0 26 e9-3 x.x.x.x +151.216.3.64 26 e9-4 x.x.x.x +151.216.3.128 26 e11-1 x.x.x.x +151.216.3.192 26 e11-2 x.x.x.x +151.216.4.0 26 e11-3 x.x.x.x +151.216.4.64 26 e11-4 x.x.x.x +151.216.4.128 26 e13-1 x.x.x.x +151.216.4.192 26 e13-2 x.x.x.x +151.216.5.0 26 e13-3 x.x.x.x +151.216.5.64 26 e13-4 x.x.x.x +151.216.5.128 26 e15-1 x.x.x.x +151.216.5.192 26 e15-2 x.x.x.x +151.216.6.0 26 e15-3 x.x.x.x +151.216.6.64 26 e15-4 x.x.x.x +151.216.6.128 26 e17-1 x.x.x.x +151.216.6.192 26 e17-2 x.x.x.x +151.216.7.0 26 e17-3 x.x.x.x +151.216.7.64 26 e17-4 x.x.x.x +151.216.7.128 26 e19-1 x.x.x.x +151.216.7.192 26 e19-2 x.x.x.x +151.216.8.0 26 e19-3 x.x.x.x +151.216.8.64 26 e19-4 x.x.x.x +151.216.8.128 26 e21-1 x.x.x.x +151.216.8.192 26 e21-2 x.x.x.x +151.216.9.0 26 e21-3 x.x.x.x +151.216.9.64 26 e21-4 x.x.x.x +151.216.9.128 26 e23-1 x.x.x.x +151.216.9.192 26 e23-2 x.x.x.x +151.216.10.0 26 e23-3 x.x.x.x +151.216.10.64 26 e23-4 x.x.x.x +151.216.10.128 26 e25-1 x.x.x.x +151.216.10.192 26 e25-2 x.x.x.x +151.216.11.0 26 e25-3 x.x.x.x +151.216.11.64 26 e25-4 x.x.x.x +151.216.11.128 26 e27-1 x.x.x.x +151.216.11.192 26 e27-2 x.x.x.x +151.216.12.0 26 e29-1 x.x.x.x +151.216.12.64 26 e29-2 x.x.x.x +151.216.12.128 26 e31-1 x.x.x.x +151.216.12.192 26 e31-2 x.x.x.x +151.216.13.0 26 e33-1 x.x.x.x +151.216.13.64 26 e33-2 x.x.x.x +151.216.13.128 26 e35-1 x.x.x.x +151.216.13.192 26 e35-2 x.x.x.x +151.216.14.0 26 e37-1 x.x.x.x +151.216.14.64 26 e37-2 x.x.x.x +151.216.14.128 26 e39-1 x.x.x.x +151.216.14.192 26 e39-2 x.x.x.x +151.216.15.0 26 e41-1 x.x.x.x +151.216.15.64 26 e41-2 x.x.x.x +151.216.15.128 26 e43-1 x.x.x.x +151.216.15.192 26 e43-2 x.x.x.x +151.216.16.0 26 e43-3 x.x.x.x +151.216.16.64 26 e43-4 x.x.x.x +151.216.16.128 26 e45-1 x.x.x.x +151.216.16.192 26 e45-2 x.x.x.x +151.216.17.0 26 e45-3 x.x.x.x +151.216.17.64 26 e45-4 x.x.x.x +151.216.17.128 26 e47-1 x.x.x.x +151.216.17.192 26 e47-2 x.x.x.x +151.216.18.0 26 e47-3 x.x.x.x +151.216.18.64 26 e47-4 x.x.x.x +151.216.18.128 26 e49-1 x.x.x.x +151.216.18.192 26 e49-2 x.x.x.x +151.216.19.0 26 e49-3 x.x.x.x +151.216.19.64 26 e49-4 x.x.x.x +151.216.19.128 26 e51-1 x.x.x.x +151.216.19.192 26 e51-2 x.x.x.x +151.216.20.0 26 e51-3 x.x.x.x +151.216.20.64 26 e51-4 x.x.x.x +151.216.20.128 26 e53-1 x.x.x.x +151.216.20.192 26 e53-2 x.x.x.x +151.216.21.0 26 e53-3 x.x.x.x +151.216.21.64 26 e53-4 x.x.x.x +151.216.21.128 26 e55-1 x.x.x.x +151.216.21.192 26 e55-2 x.x.x.x +151.216.22.0 26 e55-3 x.x.x.x +151.216.22.64 26 e55-4 x.x.x.x +151.216.22.128 26 e57-1 x.x.x.x +151.216.22.192 26 e57-2 x.x.x.x +151.216.23.0 26 e57-3 x.x.x.x +151.216.23.64 26 e57-4 x.x.x.x +151.216.23.128 26 e59-1 x.x.x.x +151.216.23.192 26 e59-2 x.x.x.x +151.216.24.0 26 e59-3 x.x.x.x +151.216.24.64 26 e59-4 x.x.x.x +151.216.24.128 26 e61-1 x.x.x.x +151.216.24.192 26 e61-2 x.x.x.x +151.216.25.0 26 e61-3 x.x.x.x +151.216.25.64 26 e61-4 x.x.x.x +151.216.25.128 26 e63-1 x.x.x.x +151.216.25.192 26 e63-2 x.x.x.x +151.216.26.0 26 e63-3 x.x.x.x +151.216.26.64 26 e63-4 x.x.x.x +151.216.26.128 26 e65-1 x.x.x.x +151.216.26.192 26 e65-2 x.x.x.x +151.216.27.0 26 e65-3 x.x.x.x +151.216.27.64 26 e65-4 x.x.x.x +151.216.27.128 26 e67-1 x.x.x.x +151.216.27.192 26 e67-2 x.x.x.x +151.216.28.0 26 e67-3 x.x.x.x +151.216.28.64 26 e67-4 x.x.x.x +151.216.28.128 26 e69-1 x.x.x.x +151.216.28.192 26 e69-2 x.x.x.x +151.216.29.0 26 e69-3 x.x.x.x +151.216.29.64 26 e69-4 x.x.x.x +151.216.29.128 26 e71-1 x.x.x.x +151.216.29.192 26 e71-2 x.x.x.x +151.216.30.0 26 e71-3 x.x.x.x +151.216.30.64 26 e71-4 x.x.x.x +151.216.30.128 26 e73-1 x.x.x.x +151.216.30.192 26 e73-2 x.x.x.x +151.216.31.0 26 e73-3 x.x.x.x +151.216.31.64 26 e73-4 x.x.x.x +151.216.31.128 26 e75-1 x.x.x.x +151.216.31.192 26 e75-2 x.x.x.x +151.216.32.0 26 e75-3 x.x.x.x +151.216.32.64 26 e75-4 x.x.x.x +151.216.32.128 26 e77-1 x.x.x.x +151.216.32.192 26 e77-2 x.x.x.x diff --git a/planning/planning.cpp b/planning/planning.cpp new file mode 100644 index 0000000..04dde6f --- /dev/null +++ b/planning/planning.cpp @@ -0,0 +1,579 @@ +// Find optimal assignment of access switches using min-cost max-flow. +// About three times as fast as the old DP+heuristics-based solution +// (<2ms for planning TG), and can deal with less regular cost metrics. +// +// Given D distro switches and N access switches, complexity is approx. O(dn³) +// (runs n iterations, each iteration is O(VE), V is O(n), E is O(dn))). +// +// g++ -std=gnu++0x -Wall -g -O2 -DOUTPUT_FILES=1 -o planning planning.cc && ./planning -6 11 22 -26 35 + +#include <stdio.h> +#include <math.h> +#include <string.h> +#include <stdlib.h> +#include <stdarg.h> +#include <unistd.h> +#include <limits.h> +#include <assert.h> +#include <sys/socket.h> +#include <netinet/in.h> +#include <arpa/inet.h> + +#include <vector> +#include <map> +#include <algorithm> +#include <string> +#include <utility> +#include <queue> + +#define NUM_DISTRO 5 +#define SWITCHES_PER_ROW 4 +#define PORTS_PER_DISTRO 38 + +#define TRUNCATE_METRIC 1 +#define EXTENSION_COST 70 +#define HORIZ_GAP_COST 100 + +#define FIRST_SUBNET_ADDRESS "151.216.1.0" +#define SUBNET_SIZE 26 + +#define _INF 99999 + +struct Switch { +	unsigned row, num; + +	Switch(unsigned row, unsigned num) : row(row), num(num) {} +}; + +struct Inventory { +	Inventory() : num_10m(0), num_30m(0), num_50m(0), extensions(0), horiz_gap_crossings(0) {} + +	Inventory& operator+= (const Inventory& other) +	{ +		this->num_10m += other.num_10m; +		this->num_30m += other.num_30m; +		this->num_50m += other.num_50m; +		this->extensions += other.extensions; +		this->horiz_gap_crossings += other.horiz_gap_crossings; +		return *this; +	} + +	std::string to_string() const +	{ +		if (num_10m >= _INF) { +			return "XXXXX"; +		} + +		std::string ret; +		Inventory copy = *this; +		while (copy.num_50m-- > 0) { +			if (!ret.empty()) { +				ret += '+'; +			} +			ret += "50"; +		} +		while (copy.num_30m-- > 0) { +			if (!ret.empty()) { +				ret += '+'; +			} +			ret += "30"; +		} +		while (copy.num_10m-- > 0) { +			if (!ret.empty()) { +				ret += '+'; +			} +			ret += "10"; +		} +		return ret; +	} + +	unsigned num_10m, num_30m, num_50m; +	unsigned extensions, horiz_gap_crossings; +}; + +// Data structures for flow algorithm. +struct Node; +struct Edge { +	Node *to; +	Edge *reverse;  // Edge in opposite direction. + +	int capacity, flow; +	int cost; +}; +struct Node { +	std::vector<Edge *> edges; + +	// For debugging. +	char name[16]; + +	// Used in Dijkstra search. +	int cost_from_source; +	bool seen; +	Edge *prev_edge; +}; + + +const unsigned horiz_cost[SWITCHES_PER_ROW] = { +	216, 72, 72, 216  // Gap costs are added separately. +}; + +class Planner { + private: +	int distro_placements[NUM_DISTRO]; +	std::vector<Switch> switches; +	std::map<unsigned, unsigned> num_ports_used; +	std::string *log_buf; + +	unsigned find_distance(Switch from_where, unsigned distro); +	unsigned find_slack(Inventory inventory, unsigned distance); +	unsigned find_cost(Switch from_where, unsigned distro); +	Inventory find_inventory(Switch from_where, unsigned distro); +	void logprintf(const char *str, ...); +	void init_switches(); + + public: +	Planner() : log_buf(NULL) {} +	void set_log_buf(std::string *log_buf) { this->log_buf = log_buf; } +	int do_work(int distro_placements[NUM_DISTRO]); +}; + +unsigned Planner::find_distance(Switch from_where, unsigned distro) +{ +	const int dp = abs(distro_placements[distro]); + +	// 3.7m from row to row (2.5m gap + 1.2m boards). +	unsigned base_cost = 37 * abs(from_where.row - dp) + +		horiz_cost[from_where.num]; + +	if ((distro_placements[distro] >= 0) == (from_where.num >= 2)) { +		// 5.0m horizontal gap. +		base_cost += 50; +	} +	 +	// 4m, 5m, 4m gaps (1.5m, 2.5m, 1.5m extra). +	if ((from_where.row <= 5) == (dp >= 6)) +		base_cost += 15; +	if ((from_where.row <= 13) == (dp >= 14)) +		base_cost += 15; +	if ((from_where.row <= 21) == (dp >= 22)) +		base_cost += 25; +	if ((from_where.row <= 29) == (dp >= 30)) +		base_cost += 15; + +	// Add 5m slack. +	return base_cost + 50; +} +	 +Inventory Planner::find_inventory(Switch from_where, unsigned distro) +{ +	unsigned distance = find_distance(from_where, distro); + +	Inventory inv; +	if (distance <= 100) { +		inv.num_10m = 1; +	} else if (distance <= 200) { +		inv.num_10m = 2; +		inv.extensions = 1; +	} else if (distance <= 300) { +		inv.num_30m = 1; +	} else if (distance <= 400) { +		inv.num_10m = 1; +		inv.num_30m = 1; +		inv.extensions = 1; +	} else if (distance <= 500) { +		inv.num_50m = 1; +	} else if (distance <= 600) { +		inv.num_10m = 1; +		inv.num_50m = 1; +		inv.extensions = 1; +	} else if (distance <= 800) { +		inv.num_30m = 1; +		inv.num_50m = 1; +		inv.extensions = 1; +	} else if (distance <= 1000) { +		inv.num_50m = 2; +		inv.extensions = 1; +	} else { +		inv.num_10m = _INF; +	} + +	if ((distro_placements[distro] >= 0) == (from_where.num >= 2)) { +		inv.horiz_gap_crossings = 1; +	} + +	return inv; +} + +unsigned Planner::find_slack(Inventory inventory, unsigned distance) +{ +	return 100 * inventory.num_10m + 300 * inventory.num_30m + 500 * inventory.num_50m - distance; +} + +unsigned Planner::find_cost(Switch from_where, unsigned distro) +{ +	Inventory inv = find_inventory(from_where, distro); +	unsigned cost; + +#if TRUNCATE_METRIC +	cost = 100 * inv.num_10m + 300 * inv.num_30m + 500 * inv.num_50m + EXTENSION_COST * inv.extensions; +	// cost = find_slack(inv, distance); +#else +	cost = find_distance(from_where, distro); +	// cost = ((distance + 90) / 100) * 100; +#endif + +	// We really, really do not want to cross the gap on the north side. +	if (from_where.row <= 30) { +		cost += _INF * inv.horiz_gap_crossings; +	} else { +		cost += HORIZ_GAP_COST * inv.horiz_gap_crossings; +	} + +	return cost; +} + +void Planner::logprintf(const char *fmt, ...) +{ +	if (log_buf == NULL) { +		return; +	} + +	char buf[1024]; +	va_list ap; +	va_start(ap, fmt); +	vsnprintf(buf, sizeof(buf), fmt, ap); +	va_end(ap); + +	log_buf->append(buf); +} + +std::string distro_name(unsigned distro) +{ +	char buf[16]; +	sprintf(buf, "distro%d", distro + 1); +	return buf; +} + +std::string port_name(unsigned distro, unsigned portnum) +{ +	char buf[16]; +	int distros[] = { 1, 2, 5, 6 }; +	sprintf(buf, "Gi%u/%u", distros[portnum / 48], (portnum % 48) + 1); +	return buf; +} + +void Planner::init_switches() +{ +	switches.clear(); +	for (unsigned i = 1; i <= 39; ++i) { +		if (!(i >= 1 && i <= 5)) { +			switches.push_back(Switch(i, 0)); +			switches.push_back(Switch(i, 1)); +		} +		if (!(i >= 14 && i <= 21) && +		    !(i >= 39)) { +			switches.push_back(Switch(i, 2)); +			switches.push_back(Switch(i, 3)); +		} +	} +} + +void add_edge(Node *from, Node *to, int capacity, int cost, std::vector<Edge> *edges) +{ +	assert(edges->size() + 2 <= edges->capacity()); +	edges->resize(edges->size() + 2); + +	Edge *e1 = &edges->at(edges->size() - 2); +	Edge *e2 = &edges->at(edges->size() - 1); + +	e1->to = to; +	e1->capacity = capacity; +	e1->flow = 0; +	e1->cost = cost; +	e1->reverse = e2; +	from->edges.push_back(e1); + +	e2->to = from; +	e2->capacity = 0; +	e2->flow = 0; +	e2->cost = -cost; +	e2->reverse = e1; +	to->edges.push_back(e2); +} +		 +int Planner::do_work(int distro_placements[NUM_DISTRO]) +{ +	memcpy(this->distro_placements, distro_placements, sizeof(distro_placements[0]) * NUM_DISTRO); + +	num_ports_used.clear(); + +#if OUTPUT_FILES +	FILE *patchlist = fopen("patchlist.txt", "w"); +	FILE *switchlist = fopen("switches.txt", "w"); +#endif +	Inventory total_inv; +	unsigned total_cost = 0, total_slack = 0; + +	init_switches(); + +	logprintf("Finding optimal layout for %u switches\n", switches.size()); + +	// Min-cost max-flow in a graph that looks something like this +	// (ie., all distros connect to all access switches): +	// +	//         ---- D1 \---/-- A1 -- +	//        /         \ /         \          . +	// source ----- D2 --X---- A2 --- sink +	//        \         / \         / + 	//         ---- D3 /---\-- A3 -/ +	// +	// Capacity from source to distro is 48 (or whatever), cost is 0. +	// Capacity from distro to access is 1, cost is cable length + penalties. +	// Capacity from access to sink is 1, cost is 0. +	Node source_node, sink_node; +	Node distro_nodes[NUM_DISTRO]; +	std::vector<Node> switch_nodes; +	std::vector<Edge> edges; +	switch_nodes.resize(switches.size()); +	edges.reserve(switches.size() * NUM_DISTRO * 2 + 16); + +	for (unsigned i = 0; i < NUM_DISTRO; ++i) { +		add_edge(&source_node, &distro_nodes[i], PORTS_PER_DISTRO, 0, &edges); +	} +	for (unsigned i = 0; i < NUM_DISTRO; ++i) { +		for (unsigned j = 0; j < switches.size(); ++j) { +			int cost = find_cost(switches[j], i); +			if (cost >= _INF) { +				continue; +			} +			add_edge(&distro_nodes[i], &switch_nodes[j], 1, cost, &edges); +		} +	} +	for (unsigned i = 0; i < switches.size(); ++i) { +		add_edge(&switch_nodes[i], &sink_node, 1, 0, &edges); +	} +	 +	std::vector<Node*> all_nodes; +	all_nodes.push_back(&source_node); +	strcpy(source_node.name, "source"); + +	all_nodes.push_back(&sink_node); +	strcpy(sink_node.name, "sink"); + +	for (unsigned i = 0; i < NUM_DISTRO; ++i) { +		all_nodes.push_back(&distro_nodes[i]); +		sprintf(distro_nodes[i].name, "distro%d", i); +	} +	for (unsigned i = 0; i < switches.size(); ++i) { +		all_nodes.push_back(&switch_nodes[i]); +		sprintf(switch_nodes[i].name, "switch%d", i); +	} + +	// We use the successive shortest path algorithm, using a primitive Dijkstra +	// (not heap-based, so O(VE)) for search. +	int num_paths = 0; +	for ( ;; ) { +		// Reset Dijkstra state. +		for (unsigned i = 0; i < all_nodes.size(); ++i) { +			Node *n = all_nodes[i]; +			n->cost_from_source = _INF; +			n->seen = false; +			n->prev_edge = NULL; +		} +		source_node.cost_from_source = 0; + +		for (unsigned i = 0; i < switches.size(); ++i) { +			Node *cheapest_unseen_node = NULL; +			for (unsigned i = 0; i < all_nodes.size(); ++i) { +				Node *n = all_nodes[i]; +				if (n->seen || n->cost_from_source >= _INF) { +					continue; +				} +				if (cheapest_unseen_node == NULL || +				    n->cost_from_source < cheapest_unseen_node->cost_from_source) { +					cheapest_unseen_node = n; +				} +			} +			if (cheapest_unseen_node == NULL) { +				// Oops, no usable path. +				goto end; +			} +			if (cheapest_unseen_node == &sink_node) { +				// Yay, we found a path to the sink. +				break; +			} + +			cheapest_unseen_node->seen = true; + +			// See if any of the edges out from this are feasible. +			for (unsigned i = 0; i < cheapest_unseen_node->edges.size(); ++i) { +				Edge *e = cheapest_unseen_node->edges[i]; +				if (e->flow + 1 > e->capacity || e->reverse->flow - 1 > e->reverse->capacity) { +					// Not feasible. +					continue; +				} +				if (e->to->cost_from_source <= cheapest_unseen_node->cost_from_source + e->cost) { +					// Already seen through a better path. +					continue; +				} +				e->to->seen = false; +				e->to->prev_edge = e; +				e->to->cost_from_source = cheapest_unseen_node->cost_from_source + e->cost; +			} +		} + +		// Increase flow along the path, moving backwards towards the source. +		Node *n = &sink_node; +		for ( ;; ) { +			if (n->prev_edge == NULL) { +				break; +			} + +			n->prev_edge->flow += 1; +			n->prev_edge->reverse->flow -= 1; + +			n = n->prev_edge->reverse->to; +		} +		++num_paths; +	} + +end: +	logprintf("Augmented using %d paths.\n", num_paths, (unsigned)switches.size()); +	int last_row = 0, last_num = -1; +#if OUTPUT_FILES +	in_addr_t subnet_address = inet_addr(FIRST_SUBNET_ADDRESS); +#endif +	for (unsigned i = 0; i < switches.size(); ++i) { +		// Figure out which distro this switch was connected to. +		int distro = -1; +		for (unsigned j = 0; j < NUM_DISTRO; ++j) { +			Edge *flow_edge = NULL; +			for (unsigned k = 0; k < distro_nodes[j].edges.size(); ++k) { +				Edge *e = distro_nodes[j].edges[k]; +				if (e->to == &switch_nodes[i]) { +					flow_edge = e; +					break; +				} +			} +			if (flow_edge != NULL && flow_edge->flow > 0) { +				distro = j; +				break; +			} +		} + +		if (i == 0 || switches[i].row != switches[i - 1].row) { +			if (last_row == 13 || last_row == 21 || last_row == 29) { +				logprintf("\n"); +			} +			logprintf("\n[31;22m%2u (%2u-%2u)    ", switches[i].row, switches[i].row * 2 - 1, switches[i].row * 2 + 0); +			last_num = -1; +		} +		for (unsigned j = last_num; j + 1 < switches[i].num; ++j) { +			logprintf("%19s", ""); +		} + +		char distro_marker_left[16] = " "; +		char distro_marker_right[16] = " "; +		if (switches[i].num == 1) { +			for (int d = 0; d < NUM_DISTRO; ++d) { +				if (int(switches[i].row) == distro_placements[d]) { +					sprintf(distro_marker_left, "[%u;1m*", d + 32); +				} +				if (int(switches[i].row) == -distro_placements[d]) { +					sprintf(distro_marker_right, "[%u;1m*", d + 32); +				} +			} +		} + +		int this_distance; +		Inventory this_inv; +		if (distro == -1) { +			this_distance = _INF; +			this_inv.num_10m = _INF; +			logprintf("[%u;22m- ", distro + 32); +		} else { +			this_distance = find_distance(switches[i], distro); +			this_inv = find_inventory(switches[i], distro); +			total_cost += find_cost(switches[i], distro); +			logprintf("[%u;22m%u ", distro + 32, distro); +		} +	 +#if TRUNCATE_METRIC +		logprintf("(%-5s) (%3.1f)%s %s", this_inv.to_string().c_str(), this_distance / 10.0, distro_marker_left, distro_marker_right); +#else +		logprintf("(%3.1f)%s %s", this_distance / 10.0, distro_marker_left, distro_marker_right); +#endif +		total_slack += find_slack(this_inv, this_distance); +		total_inv += this_inv; +				 +		last_row = switches[i].row; +		last_num = switches[i].num; +			 +#if OUTPUT_FILES +		int port_num = num_ports_used[distro]++; +		fprintf(patchlist, "e%u-%u %s %s %s %s %s\n", +			last_row * 2 - 1, last_num + 1, +			distro_name(distro).c_str(), +			port_name(distro, port_num).c_str(), +			port_name(distro, port_num + 48).c_str(), +			port_name(distro, port_num + 96).c_str(), +			port_name(distro, port_num + 144).c_str()); + +		in_addr subnet_addr4; +		subnet_addr4.s_addr = subnet_address; +		fprintf(switchlist, "%s %u e%u-%u x.x.x.x\n", +			inet_ntoa(subnet_addr4), SUBNET_SIZE, last_row * 2 - 1, last_num + 1); +		subnet_address = htonl(ntohl(subnet_address) + (1ULL << (32 - SUBNET_SIZE))); +#endif +	} +#if OUTPUT_FILES +	fclose(patchlist); +	fclose(switchlist); +#endif +	logprintf("\n"); +	logprintf("[%u;22m\n", 37); + +#if TRUNCATE_METRIC +	logprintf("\n"); +	logprintf("10m: %3u\n", total_inv.num_10m); +	logprintf("30m: %3u\n", total_inv.num_30m); +	logprintf("50m: %3u\n", total_inv.num_50m); +	logprintf("Extensions: %u\n", total_inv.extensions); +	logprintf("Horizontal gap crossings: %u\n", total_inv.horiz_gap_crossings); +	logprintf("\n"); + +	if (total_inv.num_10m >= _INF) { +		logprintf("Total cost: Impossible\n"); +		return INT_MAX; +	} +	int total_cable = 100 * total_inv.num_10m + 300 * total_inv.num_30m + 500 * total_inv.num_50m; +#else +	// Not correct unless EXTENSION_COST = HORIZ_GAP_COST = 0, but okay. +	int total_cable = total_cost; +#endif + +	logprintf("Total cable: %.1fm (cost = %.1fm)\n", total_cable / 10.0, total_cost / 10.0); +	logprintf("Total slack: %.1fm (%.2f%%)\n", total_slack / 10.0, 100.0 * double(total_slack) / double(total_cable)); + +	for (int i = 0; i < NUM_DISTRO; ++i) { +		Edge *e = source_node.edges[i]; +		logprintf("Remaining ports on distro %d: %d\n", i + 1, e->capacity - e->flow); +	} +	return total_cost; +} + +int main(int argc, char **argv) +{ +	int distro_placements[NUM_DISTRO]; +	for (int i = 0; i < NUM_DISTRO; ++i) { +		distro_placements[i] = atoi(argv[i + 1]); +	} + +	std::string log; +	Planner p; +	log.clear(); +	p.set_log_buf(&log); +	(void)p.do_work(distro_placements); +	printf("%s\n", log.c_str()); +	return 0; +} diff --git a/pxe/chain.c32 b/pxe/chain.c32 Binary files differnew file mode 100644 index 0000000..cb1813b --- /dev/null +++ b/pxe/chain.c32 diff --git a/pxe/menu.c32 b/pxe/menu.c32 Binary files differnew file mode 100644 index 0000000..4fa0a1c --- /dev/null +++ b/pxe/menu.c32 diff --git a/pxe/menus/background.png b/pxe/menus/background.png Binary files differnew file mode 100644 index 0000000..293e591 --- /dev/null +++ b/pxe/menus/background.png diff --git a/pxe/menus/bg.png b/pxe/menus/bg.png Binary files differnew file mode 100644 index 0000000..00bc09a --- /dev/null +++ b/pxe/menus/bg.png diff --git a/pxe/menus/common.cfg b/pxe/menus/common.cfg new file mode 100644 index 0000000..904b2db --- /dev/null +++ b/pxe/menus/common.cfg @@ -0,0 +1,24 @@ +MENU BACKGROUND menus/background.png +ALLOWOPTIONS 1 +PROMPT 0 +MENU WIDTH 77 +MENU ROWS 14 +MENU TABMSGROW 25 +MENU CMDLINEROW 25 +MENU HELPMSGROW 23 +MENU MARGIN 15 +MENU VSHIFT 4 +MENU COLOR BORDER       37;40 #00000000 #00000000 none +MENU COLOR TITLE        37;40 #ff6b0035 #ffffffff none + +MENU COLOR UNSEL        37;40 #ffeb088d #00ffffff none +MENU COLOR HOTKEY       37;40 #ff6b0035 #00ffffff none + +MENU COLOR SEL          37;40 #ffeb088d #ffb1dbfa none +MENU COLOR HOTSEL       37;40 #ff6b0035 #ffb1dbfa none + +MENU COLOR HELP         37;40 #fff9a11d #00ffffff none +MENU COLOR TIMEOUT_MSG  37;40 #fff9a11d #0faaaaaa none +MENU COLOR TIMEOUT      37;40 #fff9a11d #0faaaaff none + +MENU SEPARATOR diff --git a/pxe/menus/debian.cfg b/pxe/menus/debian.cfg new file mode 100644 index 0000000..e5e2376 --- /dev/null +++ b/pxe/menus/debian.cfg @@ -0,0 +1,35 @@ +# /var/lib/tftpboot/menus/debian.cfg +MENU INCLUDE menus/common.cfg +MENU TITLE Debian Installers + +LABEL mainmenu +        MENU LABEL ^R Return to Main Menu +        COM32 vesamenu.c32 +        APPEND ~ + +MENU SEPARATOR + + +LABEL squeeze_amd64_install +        MENU LABEL ^1 Debian Stable amd64 (Squeeze) netinstall +        KERNEL debian/squeeze/amd64/linux +        APPEND vga=normal initrd=debian/squeeze/amd64/initrd.gz  -- + +LABEL squeeze_i386_install +        MENU LABEL ^2 Debian Stable i386 (Squeeze) netinstall +        KERNEL debian/squeeze/i386/linux +        APPEND vga=normal initrd=debian/squeeze/i386/initrd.gz  -- + +MENU SEPARATOR + +LABEL wheezy_amd64_install +        MENU LABEL ^3 Debian Testing amd64 (Wheezy) netinstall +        KERNEL debian/wheezy/amd64/linux +        APPEND vga=normal initrd=debian/wheezy/amd64/initrd.gz  -- + +LABEL wheezy_i386_install +        MENU LABEL ^4 Debian Testing i386 (Wheezy) netinstall +        KERNEL debian/wheezy/i386/linux +        APPEND vga=normal initrd=debian/wheezy/i386/initrd.gz  -- + +TIMEOUT 900 diff --git a/pxe/menus/tools.cfg b/pxe/menus/tools.cfg new file mode 100644 index 0000000..aa37dd0 --- /dev/null +++ b/pxe/menus/tools.cfg @@ -0,0 +1,36 @@ +# /var/lib/tftpboot/menus/debian.cfg +MENU INCLUDE menus/common.cfg +MENU TITLE Tools + +LABEL mainmenu +        MENU LABEL ^R Return to Main Menu +        COM32 vesamenu.c32 +        APPEND ~ + +MENU SEPARATOR + +LABEL memtest +        MENU LABEL ^Memory test using Memtest86+ +        TEXT HELP +Run memory test using Memtest86+ +        ENDTEXT +        KERNEL tools/memtest + +LABEL hdt +	MENU LABEL ^HDT - Hardware Detection Tool +	TEXT HELP +Used to examine system devices, system information, diagnostics +	ENDTEXT +	COM32 tools/hdt_0_5_2.c32 +	APPEND pciids=tools/pci.ids + +LABEL ntpasswd +	MENU LABEL ^Offline NT Password Recovery ... +	MENU PASSWD nexuserbest +	TEXT HELP +Can be used to recover/clear Windows password. Password protected. +	ENDTEXT +	KERNEL tools/ntpasswd/vmlinuz +	INITRD tools/ntpasswd/initrd.cgz,tools/ntpasswd/scsi.cgz + +TIMEOUT 900 diff --git a/pxe/menus/ubuntu.cfg b/pxe/menus/ubuntu.cfg new file mode 100644 index 0000000..081bc61 --- /dev/null +++ b/pxe/menus/ubuntu.cfg @@ -0,0 +1,47 @@ +# /var/lib/tftpboot/menus/ubuntu.cfg +MENU INCLUDE menus/common.cfg +MENU TITLE Ubuntu Live boot + +LABEL mainmenu +        MENU LABEL ^R Return to Main Menu +        COM32 vesamenu.c32 +        APPEND ~ + +MENU SEPARATOR + +LABEL pangolin32live +        MENU LABEL ^1 Ubuntu 12.04.2 32bit LIVE boot +        KERNEL ubuntu/12.04.2/i386/live/vmlinuz +        APPEND boot=casper netboot=nfs nfsroot=151.216.125.3:/var/nfsroot/ubuntu/12.04.2/i386 quiet splash initrd=ubuntu/12.04.2/i386/live/initrd.lz -- + +LABEL pangolin64live +        MENU LABEL ^2 Ubuntu 12.04.2 64bit LIVE boot +        KERNEL ubuntu/12.04.2/amd64/live/vmlinuz.efi +        APPEND boot=casper netboot=nfs nfsroot=151.216.125.3:/var/nfsroot/ubuntu/12.04.2/amd64 quiet splash initrd=ubuntu/12.04.2/amd64/live/initrd.lz -- + +MENU SEPARATOR + +LABEL xpangolin32live +        MENU LABEL ^3 xubuntu 12.04.2 32bit LIVE boot +        KERNEL xubuntu/12.04.2/i386/live/vmlinuz +        APPEND boot=casper netboot=nfs nfsroot=151.216.125.3:/var/nfsroot/xubuntu/12.04.2/i386 quiet splash initrd=xubuntu/12.04.2/i386/live/initrd.lz -- + +LABEL xpangolin64live +        MENU LABEL ^4 xubuntu 12.04.2 64bit LIVE boot +        KERNEL xubuntu/12.04.2/amd64/live/vmlinuz +        APPEND boot=casper netboot=nfs nfsroot=151.216.125.3:/var/nfsroot/xubuntu/12.04.2/amd64 quiet splash initrd=xubuntu/12.04.2/amd64/live/initrd.lz -- + +MENU SEPARATOR + +LABEL quetzal64 +        MENU LABEL ^5 Ubuntu 12.10 64bit Installer +        KERNEL ubuntu/12.10/amd64/linux +        APPEND boot=casper quiet splash initrd=ubuntu/12.10/amd64/initrd.gz -- + +LABEL quetzal32 +        MENU LABEL ^6 Ubuntu 12.10 32bit Installer +        KERNEL ubuntu/12.10/i386/linux +        APPEND boot=casper quiet splash initrd=ubuntu/12.10/i386/initrd.gz -- + + +TIMEOUT 900 diff --git a/pxe/pxelinux.0 b/pxe/pxelinux.0 Binary files differnew file mode 100644 index 0000000..c763741 --- /dev/null +++ b/pxe/pxelinux.0 diff --git a/pxe/pxelinux.cfg/default b/pxe/pxelinux.cfg/default new file mode 100644 index 0000000..8c594fa --- /dev/null +++ b/pxe/pxelinux.cfg/default @@ -0,0 +1,39 @@ +# /var/lib/tftpboot/pxelinux.cfg/default +DEFAULT vesamenu.c32 +MENU INCLUDE menus/common.cfg +MENU TITLE The Gathering 2013 - Singularity boot menu + +LABEL boot_hd0 +        MENU LABEL Boot from first hard drive +        MENU DEFAULT +        TEXT HELP +Boots your system as normal from the first BIOS drive +        ENDTEXT +        COM32 chain.c32 +        APPEND hd0 + +MENU SEPARATOR  + +LABEL debian +        MENU LABEL ^1 Debian  +        TEXT HELP +Debian installers and live-boot options. +        ENDTEXT +        COM32 vesamenu.c32 +        APPEND menus/debian.cfg + +LABEL ubuntu +        MENU LABEL ^2 Ubuntu  +        TEXT HELP +Ubuntu installers and live-boot options. +        ENDTEXT +        COM32 vesamenu.c32 +        APPEND menus/ubuntu.cfg + +LABEL tools +        MENU LABEL ^3 Tools +        COM32 vesamenu.c32 +        APPEND menus/tools.cfg + +ONTIMEOUT boot_hd0 +TIMEOUT 300 diff --git a/pxe/version.info b/pxe/version.info new file mode 100644 index 0000000..8a4a704 --- /dev/null +++ b/pxe/version.info @@ -0,0 +1,2 @@ +Debian version:  6.0 (squeeze) +Installer build: 20110106+squeeze4+b3 diff --git a/pxe/vesamenu.c32 b/pxe/vesamenu.c32 Binary files differnew file mode 100644 index 0000000..8dca92f --- /dev/null +++ b/pxe/vesamenu.c32 diff --git a/sql/nms.sql b/sql/nms.sql new file mode 100644 index 0000000..881e19a --- /dev/null +++ b/sql/nms.sql @@ -0,0 +1,2043 @@ +-- +-- PostgreSQL database cluster dump +-- + +\connect postgres + +SET client_encoding = 'UTF8'; +SET standard_conforming_strings = on; + +-- +-- Roles +-- + +CREATE ROLE nms; +ALTER ROLE nms WITH NOSUPERUSER INHERIT NOCREATEROLE NOCREATEDB LOGIN NOREPLICATION PASSWORD '<removed>'; +CREATE ROLE postgres; +ALTER ROLE postgres WITH SUPERUSER INHERIT CREATEROLE CREATEDB LOGIN REPLICATION; + + + + + + +-- +-- Database creation +-- + +CREATE DATABASE nms WITH TEMPLATE = template0 OWNER = nms; +REVOKE ALL ON DATABASE template1 FROM PUBLIC; +REVOKE ALL ON DATABASE template1 FROM postgres; +GRANT ALL ON DATABASE template1 TO postgres; +GRANT CONNECT ON DATABASE template1 TO PUBLIC; + + +\connect nms + +-- +-- PostgreSQL database dump +-- + +SET statement_timeout = 0; +SET client_encoding = 'UTF8'; +SET standard_conforming_strings = on; +SET check_function_bodies = false; +SET client_min_messages = warning; + +-- +-- Name: plpgsql; Type: EXTENSION; Schema: -; Owner:  +-- + +CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog; + + +-- +-- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner:  +-- + +COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language'; + + +SET search_path = public, pg_catalog; + +-- +-- Name: datarate; Type: TYPE; Schema: public; Owner: nms +-- + +CREATE TYPE datarate AS ( +	switch integer, +	port integer, +	bytes_in double precision, +	bytes_out double precision, +	last_poll_time timestamp with time zone +); + + +ALTER TYPE public.datarate OWNER TO nms; + +-- +-- Name: sample; Type: TYPE; Schema: public; Owner: postgres +-- + +CREATE TYPE sample AS ( +	value bigint, +	polled timestamp with time zone +); + + +ALTER TYPE public.sample OWNER TO postgres; + +-- +-- Name: sample_state; Type: TYPE; Schema: public; Owner: postgres +-- + +CREATE TYPE sample_state AS ( +	last sample, +	next_last sample +); + + +ALTER TYPE public.sample_state OWNER TO postgres; + +-- +-- Name: add_new_element(sample[], sample); Type: FUNCTION; Schema: public; Owner: postgres +-- + +CREATE FUNCTION add_new_element(sample[], sample) RETURNS sample[] +    LANGUAGE sql +    AS $_$ select ('{' || $1[1] || ', ' || $2 || '}')::sample[] $_$; + + +ALTER FUNCTION public.add_new_element(sample[], sample) OWNER TO postgres; + +-- +-- Name: add_new_element(sample_state, sample); Type: FUNCTION; Schema: public; Owner: postgres +-- + +CREATE FUNCTION add_new_element(sample_state, sample) RETURNS sample_state +    LANGUAGE sql +    AS $_$ +        SELECT ($1.next_last, $2)::sample_state +$_$; + + +ALTER FUNCTION public.add_new_element(sample_state, sample) OWNER TO postgres; + +-- +-- Name: get_current_datarate(); Type: FUNCTION; Schema: public; Owner: nms +-- + +CREATE FUNCTION get_current_datarate() RETURNS SETOF datarate +    LANGUAGE plpgsql +    AS $$ +DECLARE +        num_entries INTEGER; +        poll polls; +        first_poll polls; +        last_poll polls; +        timediff float; +        ret datarate; +BEGIN +        num_entries := 0; +        last_poll.switch := -1; + +        FOR poll IN select * from polls where time >= now() - '15 minutes'::interval and time < now() order by switch,port,time LOOP +                IF poll.switch <> last_poll.switch OR poll.port <> last_poll.port THEN +                        IF num_entries >= 2 THEN +                                timediff := EXTRACT(epoch from last_poll.time - first_poll.time); +                                ret.switch := last_poll.switch; +                                ret.port := last_poll.port; + +                                IF last_poll.bytes_in >= first_poll.bytes_in AND last_poll.bytes_out >= first_poll.bytes_out THEN +                                        ret.bytes_in := (last_poll.bytes_in - first_poll.bytes_in) / timediff; +                                        ret.bytes_out := (last_poll.bytes_out - first_poll.bytes_out) / timediff; +					ret.last_poll_time := last_poll.time; +                                        return next ret;  +                                END IF; +                        END IF; +                        num_entries := 0; +                ELSE +                        -- reset if we have wraparound +                        IF last_poll.bytes_in < first_poll.bytes_in OR +                           last_poll.bytes_out < first_poll.bytes_out THEN +                                num_entries := 0; +                        END IF; +                END IF; + +                num_entries := num_entries + 1; +                IF num_entries = 1 THEN +                        first_poll.switch := poll.switch; +                        first_poll.port := poll.port; +                        first_poll.time := poll.time; +                        first_poll.bytes_in := poll.bytes_in; +                        first_poll.bytes_out := poll.bytes_out; +                END IF; + +                last_poll.switch := poll.switch; +                last_poll.port := poll.port; +                last_poll.time := poll.time; +                last_poll.bytes_in := poll.bytes_in; +                last_poll.bytes_out := poll.bytes_out; +        END LOOP; + +        -- last +        IF num_entries >= 2 THEN +                timediff := EXTRACT(epoch from last_poll.time - first_poll.time); +                ret.switch := last_poll.switch; +                ret.port := last_poll.port; + +                IF last_poll.bytes_in >= first_poll.bytes_in AND +                   last_poll.bytes_out >= first_poll.bytes_out THEN +                        ret.bytes_in := (last_poll.bytes_in - first_poll.bytes_in) / timediff; +                        ret.bytes_out := (last_poll.bytes_out - first_poll.bytes_out) / timediff; +			ret.last_poll_time := last_poll.time; +                        return next ret;  +                END IF; +        END IF; + +        RETURN; +END; +$$; + + +ALTER FUNCTION public.get_current_datarate() OWNER TO nms; + +-- +-- Name: get_datarate(); Type: FUNCTION; Schema: public; Owner: nms +-- + +CREATE FUNCTION get_datarate() RETURNS SETOF datarate +    LANGUAGE plpgsql +    AS $$ +DECLARE +        num_entries INTEGER; +        poll polls; +        second_last_poll polls; +        last_poll polls; +        timediff float; +        ret datarate; +BEGIN +        num_entries := 0; +        last_poll.switch = -1; + +        FOR poll IN select * from polls where time >= now() - '15 minutes'::interval and time < now() order by switch,port,time LOOP +                IF poll.switch <> last_poll.switch OR poll.port <> last_poll.port THEN +                        IF num_entries >= 2 THEN +                                timediff := EXTRACT(epoch from last_poll.time - second_last_poll.time); +                                ret.switch := last_poll.switch; +                                ret.port := last_poll.port; +                                 +                                IF last_poll.bytes_in < second_last_poll.bytes_in THEN +                                        second_last_poll.bytes_in = 0; +                                END IF; +                                IF last_poll.bytes_out < second_last_poll.bytes_out THEN +                                        second_last_poll.bytes_out = 0; +                                END IF; + +                                ret.bytes_in := (last_poll.bytes_in - second_last_poll.bytes_in) / timediff; +                                ret.bytes_out := (last_poll.bytes_out - second_last_poll.bytes_out) / timediff; +                                ret.last_poll_time := last_poll.time; +                                return next ret; +                        ELSIF num_entries = 1 THEN +                                ret.switch := last_poll.switch; +                                ret.port := last_poll.port; +                                ret.bytes_in := -1; +                                ret.bytes_out := -1; +                                ret.last_poll_time := last_poll.time; +                                return next ret; +                        END IF; +                        num_entries := 1; +                ELSE +                        num_entries := num_entries + 1; +                END IF; +                second_last_poll.switch := last_poll.switch; +                second_last_poll.port := last_poll.port; +                second_last_poll.time := last_poll.time; +                second_last_poll.bytes_in := last_poll.bytes_in; +                second_last_poll.bytes_out := last_poll.bytes_out; +                last_poll.switch := poll.switch; +                last_poll.port := poll.port; +                last_poll.time := poll.time; +                last_poll.bytes_in := poll.bytes_in; +                last_poll.bytes_out := poll.bytes_out; +        END LOOP; +       -- pah, and once more, for the last switch/port... +        IF num_entries >= 2 THEN +                timediff := EXTRACT(epoch from last_poll.time - second_last_poll.time); +                ret.switch := last_poll.switch; +                ret.port := last_poll.port; +                 +                IF last_poll.bytes_in < second_last_poll.bytes_in THEN +                        second_last_poll.bytes_in = 0; +                END IF; +                IF last_poll.bytes_out < second_last_poll.bytes_out THEN +                        second_last_poll.bytes_out = 0; +                END IF; + +                ret.bytes_in := (last_poll.bytes_in - second_last_poll.bytes_in) / timediff; +                ret.bytes_out := (last_poll.bytes_out - second_last_poll.bytes_out) / timediff; +		ret.last_poll_time := last_poll.time; +                return next ret; +        ELSIF num_entries = 1 THEN +                ret.switch := last_poll.switch; +                ret.port := last_poll.port; +                ret.bytes_in := -1; +                ret.bytes_out := -1; +		ret.last_poll_time := last_poll.time; +                return next ret; +        END IF; +         +        RETURN; +END; +$$; + + +ALTER FUNCTION public.get_datarate() OWNER TO nms; + +-- +-- Name: current_change(sample); Type: AGGREGATE; Schema: public; Owner: postgres +-- + +CREATE AGGREGATE current_change(sample) ( +    SFUNC = public.add_new_element, +    STYPE = sample_state +); + + +ALTER AGGREGATE public.current_change(sample) OWNER TO postgres; + +SET default_tablespace = ''; + +SET default_with_oids = false; + +-- +-- Name: ap_poll; Type: TABLE; Schema: public; Owner: nms; Tablespace:  +-- + +CREATE TABLE ap_poll ( +    switch integer NOT NULL, +    model character varying DEFAULT ''::character varying NOT NULL, +    last_poll timestamp with time zone +); + + +ALTER TABLE public.ap_poll OWNER TO nms; + +-- +-- Name: backup_polls; Type: TABLE; Schema: public; Owner: nms; Tablespace:  +-- + +CREATE TABLE backup_polls ( +    "time" timestamp with time zone, +    switch integer, +    port integer, +    bytes_in bigint, +    bytes_out bigint, +    errors_in bigint, +    errors_out bigint +); + + +ALTER TABLE public.backup_polls OWNER TO nms; + +-- +-- Name: cpuloadpoll_id_seq; Type: SEQUENCE; Schema: public; Owner: nms +-- + +CREATE SEQUENCE cpuloadpoll_id_seq +    START WITH 1 +    INCREMENT BY 1 +    NO MINVALUE +    NO MAXVALUE +    CACHE 1; + + +ALTER TABLE public.cpuloadpoll_id_seq OWNER TO nms; + +-- +-- Name: cpuloadpoll; Type: TABLE; Schema: public; Owner: nms; Tablespace:  +-- + +CREATE TABLE cpuloadpoll ( +    id integer DEFAULT nextval('cpuloadpoll_id_seq'::regclass) NOT NULL, +    "time" timestamp without time zone NOT NULL, +    switch integer NOT NULL, +    entity integer NOT NULL, +    value integer NOT NULL +); + + +ALTER TABLE public.cpuloadpoll OWNER TO nms; + +-- +-- Name: dhcp; Type: TABLE; Schema: public; Owner: nms; Tablespace:  +-- + +CREATE TABLE dhcp ( +    switch integer NOT NULL, +    network cidr NOT NULL, +    last_ack timestamp without time zone, +    owner_color character varying +); + + +ALTER TABLE public.dhcp OWNER TO nms; + +-- +-- Name: ipv4; Type: TABLE; Schema: public; Owner: nms; Tablespace:  +-- + +CREATE TABLE ipv4 ( +    mac macaddr NOT NULL, +    address inet NOT NULL, +    "time" timestamp without time zone NOT NULL, +    age integer +); + + +ALTER TABLE public.ipv4 OWNER TO nms; + +-- +-- Name: ipv6; Type: TABLE; Schema: public; Owner: nms; Tablespace:  +-- + +CREATE TABLE ipv6 ( +    mac macaddr NOT NULL, +    address inet NOT NULL, +    "time" timestamp with time zone NOT NULL, +    age integer, +    vlan text +); + + +ALTER TABLE public.ipv6 OWNER TO nms; + +-- +-- Name: mbd_log; Type: TABLE; Schema: public; Owner: nms; Tablespace:  +-- + +CREATE TABLE mbd_log ( +    ts timestamp without time zone, +    game character varying, +    port integer, +    description character varying, +    active_servers integer +); + + +ALTER TABLE public.mbd_log OWNER TO nms; + +-- +-- Name: mldpolls; Type: TABLE; Schema: public; Owner: postgres; Tablespace:  +-- + +CREATE TABLE mldpolls ( +    "time" timestamp with time zone NOT NULL, +    switch integer NOT NULL, +    mcast_group inet NOT NULL, +    count integer NOT NULL, +    raw_portlist character varying +); + + +ALTER TABLE public.mldpolls OWNER TO postgres; + +-- +-- Name: placements; Type: TABLE; Schema: public; Owner: nms; Tablespace:  +-- + +CREATE TABLE placements ( +    switch integer NOT NULL, +    placement box NOT NULL, +    zorder integer DEFAULT 0 NOT NULL +); + + +ALTER TABLE public.placements OWNER TO nms; + +-- +-- Name: polls; Type: TABLE; Schema: public; Owner: nms; Tablespace:  +-- + +CREATE TABLE polls ( +    "time" timestamp with time zone NOT NULL, +    switch integer NOT NULL, +    port integer NOT NULL, +    bytes_in bigint NOT NULL, +    bytes_out bigint NOT NULL, +    errors_in bigint NOT NULL, +    errors_out bigint NOT NULL +); +ALTER TABLE ONLY polls ALTER COLUMN "time" SET STATISTICS 100; + + +ALTER TABLE public.polls OWNER TO nms; + +-- +-- Name: polls_poll_seq; Type: SEQUENCE; Schema: public; Owner: nms +-- + +CREATE SEQUENCE polls_poll_seq +    START WITH 1 +    INCREMENT BY 1 +    NO MINVALUE +    NO MAXVALUE +    CACHE 1; + + +ALTER TABLE public.polls_poll_seq OWNER TO nms; + +-- +-- Name: portnames; Type: TABLE; Schema: public; Owner: nms; Tablespace:  +-- + +CREATE TABLE portnames ( +    switchtype character varying NOT NULL, +    port integer NOT NULL, +    description character varying NOT NULL +); + + +ALTER TABLE public.portnames OWNER TO nms; + +-- +-- Name: squeue; Type: TABLE; Schema: public; Owner: nms; Tablespace:  +-- + +CREATE TABLE squeue ( +    id integer DEFAULT nextval(('squeue_sequence'::text)::regclass) NOT NULL, +    gid integer NOT NULL, +    added timestamp with time zone NOT NULL, +    updated timestamp with time zone, +    addr inet, +    cmd character varying NOT NULL, +    locked boolean DEFAULT false NOT NULL, +    processed boolean DEFAULT false NOT NULL, +    disabled boolean DEFAULT false NOT NULL, +    priority integer DEFAULT 3, +    sysname character varying NOT NULL, +    author character varying NOT NULL, +    result character varying, +    delay timestamp with time zone, +    delaytime interval DEFAULT '00:01:00'::interval +); + + +ALTER TABLE public.squeue OWNER TO nms; + +-- +-- Name: squeue_group_sequence; Type: SEQUENCE; Schema: public; Owner: nms +-- + +CREATE SEQUENCE squeue_group_sequence +    START WITH 1 +    INCREMENT BY 1 +    NO MINVALUE +    NO MAXVALUE +    CACHE 1; + + +ALTER TABLE public.squeue_group_sequence OWNER TO nms; + +-- +-- Name: squeue_sequence; Type: SEQUENCE; Schema: public; Owner: nms +-- + +CREATE SEQUENCE squeue_sequence +    START WITH 1 +    INCREMENT BY 1 +    NO MINVALUE +    NO MAXVALUE +    CACHE 1; + + +ALTER TABLE public.squeue_sequence OWNER TO nms; + +-- +-- Name: stemppoll_sequence; Type: SEQUENCE; Schema: public; Owner: nms +-- + +CREATE SEQUENCE stemppoll_sequence +    START WITH 1 +    INCREMENT BY 1 +    NO MINVALUE +    NO MAXVALUE +    CACHE 1; + + +ALTER TABLE public.stemppoll_sequence OWNER TO nms; + +-- +-- Name: switches; Type: TABLE; Schema: public; Owner: nms; Tablespace:  +-- + +CREATE TABLE switches ( +    switch integer DEFAULT nextval(('"switches_switch_seq"'::text)::regclass) NOT NULL, +    ip inet NOT NULL, +    sysname character varying NOT NULL, +    switchtype character varying NOT NULL, +    last_updated timestamp with time zone, +    locked boolean DEFAULT false NOT NULL, +    priority integer DEFAULT 0 NOT NULL, +    poll_frequency interval DEFAULT '00:05:00'::interval NOT NULL, +    community character varying DEFAULT 'public'::character varying NOT NULL +); + + +ALTER TABLE public.switches OWNER TO nms; + +-- +-- Name: switches_switch_seq; Type: SEQUENCE; Schema: public; Owner: nms +-- + +CREATE SEQUENCE switches_switch_seq +    START WITH 1 +    INCREMENT BY 1 +    NO MINVALUE +    NO MAXVALUE +    CACHE 1; + + +ALTER TABLE public.switches_switch_seq OWNER TO nms; + +-- +-- Name: switchtypes; Type: TABLE; Schema: public; Owner: nms; Tablespace:  +-- + +CREATE TABLE switchtypes ( +    switchtype character varying NOT NULL, +    ports character varying NOT NULL, +    wide_counters boolean DEFAULT false NOT NULL +); + + +ALTER TABLE public.switchtypes OWNER TO nms; + +-- +-- Name: temppoll; Type: TABLE; Schema: public; Owner: nms; Tablespace:  +-- + +CREATE TABLE temppoll ( +    id integer DEFAULT nextval(('stemppoll_sequence'::text)::regclass) NOT NULL, +    "time" timestamp without time zone NOT NULL, +    switch integer NOT NULL, +    temp double precision +); + + +ALTER TABLE public.temppoll OWNER TO nms; + +-- +-- Name: uplinks; Type: TABLE; Schema: public; Owner: nms; Tablespace:  +-- + +CREATE TABLE uplinks ( +    switch integer NOT NULL, +    coreswitch integer NOT NULL, +    blade integer NOT NULL, +    port integer NOT NULL +); + + +ALTER TABLE public.uplinks OWNER TO nms; + +-- +-- Data for Name: ap_poll; Type: TABLE DATA; Schema: public; Owner: nms +-- + +COPY ap_poll (switch, model, last_poll) FROM stdin; +\. + + +-- +-- Data for Name: backup_polls; Type: TABLE DATA; Schema: public; Owner: nms +-- + +COPY backup_polls ("time", switch, port, bytes_in, bytes_out, errors_in, errors_out) FROM stdin; +\. + + +-- +-- Data for Name: cpuloadpoll; Type: TABLE DATA; Schema: public; Owner: nms +-- + +COPY cpuloadpoll (id, "time", switch, entity, value) FROM stdin; +\. + + +-- +-- Name: cpuloadpoll_id_seq; Type: SEQUENCE SET; Schema: public; Owner: nms +-- + +SELECT pg_catalog.setval('cpuloadpoll_id_seq', 1, false); + + +-- +-- Data for Name: dhcp; Type: TABLE DATA; Schema: public; Owner: nms +-- + +COPY dhcp (switch, network, last_ack, owner_color) FROM stdin; +106	151.216.27.64/26	2013-03-31 07:53:24	#000000 +2	151.216.1.64/26	2013-03-31 07:54:48	#000000 +91	151.216.23.128/26	2013-03-31 08:04:58	#000000 +108	151.216.27.192/26	2013-03-31 08:17:17	#000000 +79	151.216.20.128/26	2013-03-31 08:20:27	#000000 +83	151.216.21.128/26	2013-03-31 08:24:38	#000000 +107	151.216.27.128/26	2013-03-31 08:30:13	#000000 +31	151.216.8.128/26	2013-03-31 08:44:47	#000000 +104	151.216.26.192/26	2013-03-31 08:45:11	#000000 +11	151.216.3.128/26	2013-03-31 08:52:07	#000000 +102	151.216.26.64/26	2013-03-31 08:55:46	#000000 +15	151.216.4.128/26	2013-03-31 08:58:05	#000000 +26	151.216.7.64/26	2013-03-31 09:13:42	#000000 +93	151.216.24.0/26	2013-03-31 09:14:03	#000000 +57	151.216.15.0/26	2013-03-31 09:30:18	#000000 +47	151.216.12.128/26	2013-03-31 09:31:12	#000000 +103	151.216.26.128/26	2013-03-31 09:37:39	#000000 +23	151.216.6.128/26	2013-03-31 09:45:17	#000000 +113	151.216.29.0/26	2013-03-31 09:45:35	#000000 +18	151.216.5.64/26	2013-03-31 09:45:49	#000000 +89	151.216.23.0/26	2013-03-31 09:45:57	#000000 +114	151.216.29.64/26	2013-03-31 09:46:29	#000000 +87	151.216.22.128/26	2013-03-31 09:48:38	#000000 +8	151.216.2.192/26	2013-03-31 09:53:10	#000000 +46	151.216.12.64/26	2013-03-31 09:57:09	#000000 +95	151.216.24.128/26	2013-03-31 09:58:08	#000000 +72	151.216.18.192/26	2013-03-31 09:59:29	#000000 +116	151.216.29.192/26	2013-03-31 10:01:14	#000000 +17	151.216.5.0/26	2013-03-31 10:01:27	#000000 +59	151.216.15.128/26	2013-03-31 10:12:07	#000000 +68	151.216.17.192/26	2013-03-31 10:14:20	#000000 +22	151.216.6.64/26	2013-03-31 10:14:22	#000000 +90	151.216.23.64/26	2013-03-31 10:15:18	#000000 +30	151.216.8.64/26	2013-03-31 10:15:46	#000000 +56	151.216.14.192/26	2013-03-31 10:18:37	#000000 +61	151.216.16.0/26	2013-03-31 10:21:12	#000000 +126	151.216.32.64/26	2013-03-31 10:21:49	#000000 +24	151.216.6.192/26	2013-03-31 10:22:31	#000000 +43	151.216.11.128/26	2013-03-31 10:26:03	#000000 +28	151.216.7.192/26	2013-03-31 10:26:04	#000000 +71	151.216.18.128/26	2013-03-31 10:28:44	#000000 +75	151.216.19.128/26	2013-03-31 10:29:05	#000000 +101	151.216.26.0/26	2013-03-31 10:29:46	#000000 +128	151.216.32.192/26	2013-03-31 10:30:46	#000000 +55	151.216.14.128/26	2013-03-31 10:32:26	#000000 +4	151.216.1.192/26	2013-03-31 10:33:55	#000000 +99	151.216.25.128/26	2013-03-31 10:33:56	#000000 +85	151.216.22.0/26	2013-03-31 10:34:46	#000000 +67	151.216.17.128/26	2013-03-31 10:36:17	#000000 +49	151.216.13.0/26	2013-03-31 10:36:21	#000000 +44	151.216.11.192/26	2013-03-31 10:36:34	#000000 +70	151.216.18.64/26	2013-03-31 10:37:05	#000000 +94	151.216.24.64/26	2013-03-31 10:37:17	#000000 +73	151.216.19.0/26	2013-03-31 10:37:28	#000000 +10	151.216.3.64/26	2013-03-31 10:37:36	#000000 +64	151.216.16.192/26	2013-03-31 10:37:39	#000000 +119	151.216.30.128/26	2013-03-31 10:39:58	#000000 +48	151.216.12.192/26	2013-03-31 10:40:55	#000000 +33	151.216.9.0/26	2013-03-31 10:41:16	#000000 +1	151.216.1.0/26	2013-03-31 10:42:04	#000000 +32	151.216.8.192/26	2013-03-31 10:42:50	#000000 +3	151.216.1.128/26	2013-03-31 10:43:20	#000000 +84	151.216.21.192/26	2013-03-31 10:43:29	#000000 +13	151.216.4.0/26	2013-03-31 10:43:35	#000000 +105	151.216.27.0/26	2013-03-31 10:43:50	#000000 +42	151.216.11.64/26	2013-03-31 10:44:06	#000000 +21	151.216.6.0/26	2013-03-31 10:45:30	#000000 +60	151.216.15.192/26	2013-03-31 10:46:00	#000000 +82	151.216.21.64/26	2013-03-31 10:46:49	#000000 +80	151.216.20.192/26	2013-03-31 10:48:02	#000000 +9	151.216.3.0/26	2013-03-31 10:48:12	#000000 +78	151.216.20.64/26	2013-03-31 10:49:10	#000000 +40	151.216.10.192/26	2013-03-31 10:49:12	#000000 +120	151.216.30.192/26	2013-03-31 10:49:56	#000000 +51	151.216.13.128/26	2013-03-31 10:51:12	#000000 +111	151.216.28.128/26	2013-03-31 10:51:49	#000000 +36	151.216.9.192/26	2013-03-31 10:52:01	#000000 +127	151.216.32.128/26	2013-03-31 10:52:05	#000000 +98	151.216.25.64/26	2013-03-31 10:52:09	#000000 +50	151.216.13.64/26	2013-03-31 10:52:31	#000000 +20	151.216.5.192/26	2013-03-31 10:52:47	#000000 +41	151.216.11.0/26	2013-03-31 10:53:03	#000000 +58	151.216.15.64/26	2013-03-31 10:53:06	#000000 +37	151.216.10.0/26	2013-03-31 10:53:13	#000000 +76	151.216.19.192/26	2013-03-31 10:54:00	#000000 +34	151.216.9.64/26	2013-03-31 10:54:04	#000000 +45	151.216.12.0/26	2013-03-31 10:54:13	#000000 +65	151.216.17.0/26	2013-03-31 10:54:45	#000000 +96	151.216.24.192/26	2013-03-31 10:55:15	#000000 +74	151.216.19.64/26	2013-03-31 10:55:25	#000000 +6	151.216.2.64/26	2013-03-31 10:56:28	#000000 +53	151.216.14.0/26	2013-03-31 10:56:42	#000000 +63	151.216.16.128/26	2013-03-31 10:57:06	#000000 +7	151.216.2.128/26	2013-03-31 10:57:08	#000000 +122	151.216.31.64/26	2013-03-31 10:57:10	#000000 +52	151.216.13.192/26	2013-03-31 10:57:23	#000000 +19	151.216.5.128/26	2013-03-31 10:57:31	#000000 +27	151.216.7.128/26	2013-03-31 10:57:52	#000000 +124	151.216.31.192/26	2013-03-31 10:58:10	#000000 +16	151.216.4.192/26	2013-03-31 10:58:22	#000000 +62	151.216.16.64/26	2013-03-31 10:58:38	#000000 +110	151.216.28.64/26	2013-03-31 10:58:42	#000000 +5	151.216.2.0/26	2013-03-31 10:58:43	#000000 +35	151.216.9.128/26	2013-03-31 10:58:43	#000000 +81	151.216.21.0/26	2013-03-31 10:58:43	#000000 +25	151.216.7.0/26	2013-03-31 10:58:51	#000000 +117	151.216.30.0/26	2013-03-31 10:59:19	#000000 +115	151.216.29.128/26	2013-03-31 10:59:53	#000000 +14	151.216.4.64/26	2013-03-31 11:00:05	#000000 +38	151.216.10.64/26	2013-03-31 11:00:19	#000000 +77	151.216.20.0/26	2013-03-31 11:00:36	#000000 +12	151.216.3.192/26	2013-03-31 11:01:02	#000000 +109	151.216.28.0/26	2013-03-31 11:02:23	#000000 +97	151.216.25.0/26	2013-03-31 11:02:25	#000000 +123	151.216.31.128/26	2013-03-31 11:02:43	#000000 +121	151.216.31.0/26	2013-03-31 11:02:52	#000000 +88	151.216.22.192/26	2013-03-31 11:03:11	#000000 +29	151.216.8.0/26	2013-03-31 11:03:45	#000000 +86	151.216.22.64/26	2013-03-31 11:03:50	#000000 +125	151.216.32.0/26	2013-03-31 11:04:08	#000000 +118	151.216.30.64/26	2013-03-31 11:04:37	#000000 +66	151.216.17.64/26	2013-03-31 11:05:14	#000000 +112	151.216.28.192/26	2013-03-31 11:05:34	#000000 +92	151.216.23.192/26	2013-03-31 11:06:12	#000000 +69	151.216.18.0/26	2013-03-31 11:07:12	#000000 +39	151.216.10.128/26	2013-03-31 11:07:35	#000000 +54	151.216.14.64/26	2013-03-31 11:08:33	#000000 +100	151.216.25.192/26	2013-03-31 11:08:35	#000000 +\. + + +-- +-- Data for Name: ipv4; Type: TABLE DATA; Schema: public; Owner: nms +-- + +COPY ipv4 (mac, address, "time", age) FROM stdin; +\. + + +-- +-- Data for Name: ipv6; Type: TABLE DATA; Schema: public; Owner: nms +-- + +COPY ipv6 (mac, address, "time", age, vlan) FROM stdin; +\. + + +-- +-- Data for Name: mbd_log; Type: TABLE DATA; Schema: public; Owner: nms +-- + +COPY mbd_log (ts, game, port, description, active_servers) FROM stdin; +\. + + +-- +-- Data for Name: mldpolls; Type: TABLE DATA; Schema: public; Owner: postgres +-- + +COPY mldpolls ("time", switch, mcast_group, count, raw_portlist) FROM stdin; +\. + + +-- +-- Data for Name: placements; Type: TABLE DATA; Schema: public; Owner: nms +-- + +COPY placements (switch, placement, zorder) FROM stdin; +1	(234,310),(220,226)	0 +2	(234,226),(220,184)	0 +3	(255,310),(241,226)	0 +4	(255,226),(241,170)	0 +5	(277,310),(263,226)	0 +6	(277,226),(263,156)	0 +7	(298,310),(284,226)	0 +8	(298,226),(284,142)	0 +9	(320,310),(306,226)	0 +10	(320,226),(306,142)	0 +11	(351,507),(337,423)	0 +12	(351,423),(337,339)	0 +13	(351,310),(337,226)	0 +14	(351,226),(337,142)	0 +15	(373,507),(359,423)	0 +16	(373,423),(359,339)	0 +17	(373,310),(359,226)	0 +18	(373,226),(359,142)	0 +19	(394,507),(380,423)	0 +20	(394,423),(380,339)	0 +21	(394,310),(380,226)	0 +22	(394,226),(380,142)	0 +23	(416,507),(402,423)	0 +24	(416,423),(402,339)	0 +25	(416,310),(402,226)	0 +26	(416,226),(402,142)	0 +27	(437,507),(423,423)	0 +28	(437,423),(423,339)	0 +29	(437,310),(423,226)	0 +30	(437,226),(423,142)	0 +31	(459,507),(445,423)	0 +32	(459,423),(445,339)	0 +33	(459,310),(445,226)	0 +34	(459,226),(445,142)	0 +35	(480,507),(466,423)	0 +36	(480,423),(466,339)	0 +37	(480,310),(466,226)	0 +38	(480,226),(466,142)	0 +39	(502,507),(488,423)	0 +40	(502,423),(488,339)	0 +41	(502,310),(488,226)	0 +42	(502,226),(488,142)	0 +43	(533,507),(519,423)	0 +44	(533,423),(519,339)	0 +45	(555,507),(541,423)	0 +46	(555,423),(541,339)	0 +47	(576,507),(562,423)	0 +48	(576,423),(562,339)	0 +49	(598,507),(584,423)	0 +50	(598,423),(584,339)	0 +51	(619,507),(605,423)	0 +52	(619,423),(605,339)	0 +53	(641,507),(627,423)	0 +54	(641,423),(627,339)	0 +55	(662,507),(648,423)	0 +56	(662,423),(648,339)	0 +57	(684,507),(670,423)	0 +58	(684,423),(670,339)	0 +59	(715,507),(701,423)	0 +60	(715,423),(701,339)	0 +61	(715,310),(701,226)	0 +62	(715,226),(701,142)	0 +63	(737,507),(723,423)	0 +64	(737,423),(723,339)	0 +65	(737,310),(723,226)	0 +66	(737,226),(723,142)	0 +67	(758,507),(744,423)	0 +68	(758,423),(744,339)	0 +69	(758,310),(744,226)	0 +70	(758,226),(744,142)	0 +71	(780,507),(766,423)	0 +72	(780,423),(766,339)	0 +73	(780,310),(766,226)	0 +74	(780,226),(766,142)	0 +75	(801,507),(787,423)	0 +76	(801,423),(787,339)	0 +77	(801,310),(787,226)	0 +78	(801,226),(787,142)	0 +79	(823,507),(809,423)	0 +80	(823,423),(809,339)	0 +81	(823,310),(809,226)	0 +82	(823,226),(809,142)	0 +83	(844,507),(830,423)	0 +84	(844,423),(830,339)	0 +85	(844,310),(830,226)	0 +86	(844,226),(830,142)	0 +87	(866,507),(852,423)	0 +88	(866,423),(852,339)	0 +89	(866,310),(852,226)	0 +90	(866,226),(852,142)	0 +91	(897,507),(883,423)	0 +92	(897,423),(883,339)	0 +93	(897,310),(883,226)	0 +94	(897,226),(883,142)	0 +95	(919,507),(905,423)	0 +96	(919,423),(905,339)	0 +97	(919,310),(905,226)	0 +98	(919,226),(905,142)	0 +99	(940,507),(926,423)	0 +100	(940,423),(926,339)	0 +101	(940,310),(926,226)	0 +102	(940,226),(926,142)	0 +103	(962,507),(948,423)	0 +104	(962,423),(948,339)	0 +105	(962,310),(948,226)	0 +106	(962,226),(948,142)	0 +107	(983,507),(969,423)	0 +108	(983,423),(969,339)	0 +109	(983,310),(969,226)	0 +110	(983,226),(969,142)	0 +111	(1005,507),(991,423)	0 +112	(1005,423),(991,339)	0 +113	(1005,310),(991,226)	0 +114	(1005,226),(991,142)	0 +115	(1026,507),(1012,423)	0 +116	(1026,423),(1012,339)	0 +117	(1026,310),(1012,226)	0 +118	(1026,226),(1012,142)	0 +119	(1048,507),(1034,423)	0 +120	(1048,423),(1034,339)	0 +121	(1048,310),(1034,226)	0 +122	(1048,226),(1034,142)	0 +123	(1069,507),(1055,423)	0 +124	(1069,423),(1055,339)	0 +125	(1069,310),(1055,226)	0 +126	(1069,226),(1055,142)	0 +127	(1091,493),(1077,423)	0 +128	(1091,423),(1077,339)	0 +130	(1180,530),(1150,500)	1 +131	(1280,330),(1250,300)	1 +134	(830,130),(800,100)	1 +135	(1130,340),(1100,310)	1 +140	(360,340),(330,310)	1 +141	(460,340),(430,310)	1 +142	(730,340),(700,310)	1 +143	(800,340),(770,310)	1 +144	(1000,340),(970,310)	1 +136	(160,340),(130,310)	1 +132	(680,80),(650,50)	1 +133	(680,130),(650,100)	1 +137	(430,600),(400,570)	1 +139	(730,600),(700,570)	1 +138	(630,600),(600,570)	1 +129	(780,600),(750,570)	1 +360	(866,507),(852,423)	0 +359	(844,226),(830,142)	0 +361	(866,423),(852,339)	0 +397	(1069,423),(1055,339)	0 +379	(962,226),(948,142)	0 +373	(940,423),(926,339)	0 +297	(416,423),(402,339)	0 +300	(437,507),(423,423)	0 +321	(576,423),(562,339)	0 +288	(373,507),(359,423)	0 +332	(715,507),(701,423)	0 +325	(619,423),(605,339)	0 +326	(641,507),(627,423)	0 +381	(983,423),(969,339)	0 +335	(715,226),(701,142)	0 +305	(459,423),(445,339)	0 +368	(919,507),(905,423)	0 +296	(416,507),(402,423)	0 +316	(533,507),(519,423)	0 +376	(962,507),(948,423)	0 +357	(844,423),(830,339)	0 +286	(351,310),(337,226)	0 +327	(641,423),(627,339)	0 +280	(298,310),(284,226)	0 +369	(919,423),(905,339)	0 +298	(416,310),(402,226)	0 +307	(459,226),(445,142)	0 +336	(737,507),(723,423)	0 +328	(662,507),(648,423)	0 +399	(1069,226),(1055,142)	0 +378	(962,310),(948,226)	0 +292	(394,507),(380,423)	0 +314	(502,310),(488,226)	0 +333	(715,423),(701,339)	0 +275	(234,226),(220,184)	0 +380	(983,507),(969,423)	0 +363	(866,226),(852,142)	0 +371	(919,226),(905,142)	0 +295	(394,226),(380,142)	0 +322	(598,507),(584,423)	0 +313	(502,423),(488,339)	0 +337	(737,423),(723,339)	0 +329	(662,423),(648,339)	0 +372	(940,507),(926,423)	0 +370	(919,310),(905,226)	0 +334	(715,310),(701,226)	0 +277	(255,226),(241,170)	0 +377	(962,423),(948,339)	0 +382	(983,310),(969,226)	0 +294	(394,310),(380,226)	0 +338	(737,310),(723,226)	0 +331	(684,423),(670,339)	0 +276	(255,310),(241,226)	0 +367	(897,226),(883,142)	0 +365	(897,423),(883,339)	0 +274	(234,310),(220,226)	0 +278	(277,310),(263,226)	0 +323	(598,423),(584,339)	0 +315	(502,226),(488,142)	0 +358	(844,310),(830,226)	0 +383	(983,226),(969,142)	0 +364	(897,507),(883,423)	0 +289	(373,423),(359,339)	0 +374	(940,310),(926,226)	0 +339	(737,226),(723,142)	0 +340	(758,507),(744,423)	0 +320	(576,507),(562,423)	0 +279	(277,226),(263,156)	0 +400	(1091,493),(1077,423)	0 +356	(844,507),(830,423)	0 +285	(351,423),(337,339)	0 +398	(1069,310),(1055,226)	0 +384	(1005,507),(991,423)	0 +302	(437,310),(423,226)	0 +391	(1026,226),(1012,142)	0 +394	(1048,310),(1034,226)	0 +318	(555,507),(541,423)	0 +341	(758,423),(744,339)	0 +319	(555,423),(541,339)	0 +342	(758,310),(744,226)	0 +395	(1048,226),(1034,142)	0 +304	(459,507),(445,423)	0 +401	(1091,423),(1077,339)	0 +343	(758,226),(744,142)	0 +385	(1005,423),(991,339)	0 +312	(502,507),(488,423)	0 +392	(1048,507),(1034,423)	0 +291	(373,226),(359,142)	0 +344	(780,507),(766,423)	0 +396	(1069,507),(1055,423)	0 +345	(780,423),(766,339)	0 +386	(1005,310),(991,226)	0 +306	(459,310),(445,226)	0 +355	(823,226),(809,142)	0 +293	(394,423),(380,339)	0 +346	(780,310),(766,226)	0 +283	(320,226),(306,142)	0 +347	(780,226),(766,142)	0 +387	(1005,226),(991,142)	0 +330	(684,507),(670,423)	0 +290	(373,310),(359,226)	0 +303	(437,226),(423,142)	0 +317	(533,423),(519,339)	0 +348	(801,507),(787,423)	0 +366	(897,310),(883,226)	0 +301	(437,423),(423,339)	0 +362	(866,310),(852,226)	0 +388	(1026,507),(1012,423)	0 +281	(298,226),(284,142)	0 +349	(801,423),(787,339)	0 +393	(1048,423),(1034,339)	0 +350	(801,310),(787,226)	0 +308	(480,507),(466,423)	0 +311	(480,226),(466,142)	0 +351	(801,226),(787,142)	0 +389	(1026,423),(1012,339)	0 +375	(940,226),(926,142)	0 +287	(351,226),(337,142)	0 +310	(480,310),(466,226)	0 +282	(320,310),(306,226)	0 +352	(823,507),(809,423)	0 +390	(1026,310),(1012,226)	0 +353	(823,423),(809,339)	0 +284	(351,507),(337,423)	0 +324	(619,507),(605,423)	0 +354	(823,310),(809,226)	0 +299	(416,226),(402,142)	0 +309	(480,423),(466,339)	0 +402	(460,340),(430,310)	1 +403	(730,340),(700,310)	1 +404	(800,340),(770,310)	1 +405	(360,340),(330,310)	1 +406	(1000,340),(970,310)	1 +407	(1130,310),(1076,296)	0 +408	(1190,310),(1136,296)	0 +409	(1130,290),(1076,276)	0 +410	(1190,290),(1136,276)	0 +411	(1130,270),(1076,256)	0 +412	(1190,270),(1136,256)	0 +413	(1130,250),(1076,236)	0 +414	(1190,250),(1136,236)	0 +415	(1164,230),(1076,216)	0 +416	(1164,210),(1076,196)	0 +417	(1164,190),(1076,176)	0 +\. + + +-- +-- Data for Name: polls; Type: TABLE DATA; Schema: public; Owner: nms +-- + +COPY polls ("time", switch, port, bytes_in, bytes_out, errors_in, errors_out) FROM stdin; +\. + + +-- +-- Name: polls_poll_seq; Type: SEQUENCE SET; Schema: public; Owner: nms +-- + +SELECT pg_catalog.setval('polls_poll_seq', 1, false); + + +-- +-- Data for Name: portnames; Type: TABLE DATA; Schema: public; Owner: nms +-- + +COPY portnames (switchtype, port, description) FROM stdin; +dlink3100	1	Ethernet Interface (port 1) +dlink3100	2	Ethernet Interface (port 2) +dlink3100	3	Ethernet Interface (port 3) +dlink3100	4	Ethernet Interface (port 4) +dlink3100	5	Ethernet Interface (port 5) +dlink3100	6	Ethernet Interface (port 6) +dlink3100	7	Ethernet Interface (port 7) +dlink3100	8	Ethernet Interface (port 8) +dlink3100	9	Ethernet Interface (port 9) +dlink3100	10	Ethernet Interface (port 10) +dlink3100	11	Ethernet Interface (port 11) +dlink3100	12	Ethernet Interface (port 12) +dlink3100	13	Ethernet Interface (port 13) +dlink3100	14	Ethernet Interface (port 14) +dlink3100	15	Ethernet Interface (port 15) +dlink3100	16	Ethernet Interface (port 16) +dlink3100	17	Ethernet Interface (port 17) +dlink3100	18	Ethernet Interface (port 18) +dlink3100	19	Ethernet Interface (port 19) +dlink3100	20	Ethernet Interface (port 20) +dlink3100	21	Ethernet Interface (port 21) +dlink3100	22	Ethernet Interface (port 22) +dlink3100	23	Ethernet Interface (port 23) +dlink3100	24	Ethernet Interface (port 24) +dlink3100	25	Ethernet Interface (port 25) +dlink3100	26	Ethernet Interface (port 26) +dlink3100	27	Ethernet Interface (port 27) +dlink3100	28	Ethernet Interface (port 28) +dlink3100	29	Ethernet Interface (port 29) +dlink3100	30	Ethernet Interface (port 30) +dlink3100	31	Ethernet Interface (port 31) +dlink3100	32	Ethernet Interface (port 32) +dlink3100	33	Ethernet Interface (port 33) +dlink3100	34	Ethernet Interface (port 34) +dlink3100	35	Ethernet Interface (port 35) +dlink3100	36	Ethernet Interface (port 36) +dlink3100	37	Ethernet Interface (port 37) +dlink3100	38	Ethernet Interface (port 38) +dlink3100	39	Ethernet Interface (port 39) +dlink3100	40	Ethernet Interface (port 40) +dlink3100	41	Ethernet Interface (port 41) +dlink3100	42	Ethernet Interface (port 42) +dlink3100	43	Ethernet Interface (port 43) +dlink3100	44	Ethernet Interface (port 44) +dlink3100	45	Ethernet Interface (port 45) +dlink3100	46	Ethernet Interface (port 46) +dlink3100	47	Ethernet Interface (port 47) +dlink3100	48	Ethernet Interface (port 48) +dlink3100	301	Ethernet Interface (port 301) +dlink3100	302	Ethernet Interface (port 302) +dlink3100	303	Ethernet Interface (port 303) +dlink3100	304	Ethernet Interface (port 304) +dlink3100	305	Ethernet Interface (port 305) +dlink3100	306	Ethernet Interface (port 306) +dlink3100	307	Ethernet Interface (port 307) +dlink3100	308	Ethernet Interface (port 308) +dlink3100	309	Ethernet Interface (port 309) +dlink3100	310	Ethernet Interface (port 310) +dlink3100	311	Ethernet Interface (port 311) +dlink3100	312	Ethernet Interface (port 312) +dlink3100	313	Ethernet Interface (port 313) +dlink3100	314	Ethernet Interface (port 314) +dlink3100	315	Ethernet Interface (port 315) +dlink3100	316	Ethernet Interface (port 316) +dlink3100	317	Ethernet Interface (port 317) +dlink3100	318	Ethernet Interface (port 318) +dlink3100	319	Ethernet Interface (port 319) +dlink3100	320	Ethernet Interface (port 320) +dlink3100	321	Ethernet Interface (port 321) +dlink3100	322	Ethernet Interface (port 322) +dlink3100	323	Ethernet Interface (port 323) +dlink3100	324	Ethernet Interface (port 324) +dlink3100	325	Ethernet Interface (port 325) +dlink3100	326	Ethernet Interface (port 326) +dlink3100	327	Ethernet Interface (port 327) +dlink3100	328	Ethernet Interface (port 328) +dlink3100	329	Ethernet Interface (port 329) +dlink3100	330	Ethernet Interface (port 330) +dlink3100	331	Ethernet Interface (port 331) +dlink3100	332	Ethernet Interface (port 332) +dlink3100	9000	Internal Interface (port 9000) +dlink3100	100000	vlan (port 100000) +\. + + +-- +-- Data for Name: squeue; Type: TABLE DATA; Schema: public; Owner: nms +-- + +COPY squeue (id, gid, added, updated, addr, cmd, locked, processed, disabled, priority, sysname, author, result, delay, delaytime) FROM stdin; +\. + + +-- +-- Name: squeue_group_sequence; Type: SEQUENCE SET; Schema: public; Owner: nms +-- + +SELECT pg_catalog.setval('squeue_group_sequence', 71, true); + + +-- +-- Name: squeue_sequence; Type: SEQUENCE SET; Schema: public; Owner: nms +-- + +SELECT pg_catalog.setval('squeue_sequence', 3324, true); + + +-- +-- Name: stemppoll_sequence; Type: SEQUENCE SET; Schema: public; Owner: nms +-- + +SELECT pg_catalog.setval('stemppoll_sequence', 1, false); + + +-- +-- Data for Name: switches; Type: TABLE DATA; Schema: public; Owner: nms +-- + +COPY switches (switch, ip, sysname, switchtype, last_updated, locked, priority, poll_frequency, community) FROM stdin; +320	127.0.0.1	ap-e31-1	ciscoap	2013-03-31 14:03:35.163353+02	f	0	00:05:00	<removed> +380	127.0.0.1	ap-e67-1	ciscoap	2013-03-31 14:03:45.678972+02	f	0	00:05:00	<removed> +301	127.0.0.1	ap-e19-2	ciscoap	2013-03-31 14:04:15.974348+02	f	0	00:05:00	<removed> +89	151.216.23.2	e57-3	dlink3100	2013-03-31 14:09:08.899489+02	f	0	00:01:00	<removed> +32	151.216.8.194	e21-2	dlink3100	2013-03-31 14:09:19.750092+02	f	0	00:01:00	<removed> +407	151.216.50.2	creativiasw01	dlink3100	2013-03-31 14:09:29.799659+02	f	0	00:01:00	<removed> +121	151.216.31.2	e73-3	dlink3100	2013-03-31 14:09:39.03767+02	f	0	00:01:00	<removed> +3	151.216.1.130	e3-3	dlink3100	2013-03-31 14:10:38.32422+02	f	0	00:01:00	<removed> +57	151.216.15.2	e41-1	dlink3100	2013-03-31 14:10:46.324438+02	f	0	00:01:00	<removed> +97	151.216.25.2	e61-3	dlink3100	2013-03-31 14:10:56.366466+02	f	0	00:01:00	<removed> +108	151.216.27.194	e67-2	dlink3100	2013-03-31 14:11:06.409468+02	f	0	00:01:00	<removed> +65	151.216.17.2	e45-3	dlink3100	2013-03-31 14:11:16.450631+02	f	0	00:01:00	<removed> +416	151.216.50.11	creativiasw10	dlink3100	2013-03-31 14:11:29.776178+02	f	0	00:01:00	<removed> +22	151.216.6.66	e15-4	dlink3100	2013-03-31 14:11:40.601614+02	f	0	00:01:00	<removed> +30	151.216.8.66	e19-4	dlink3100	2013-03-31 14:11:49.857971+02	f	0	00:01:00	<removed> +18	151.216.5.66	e13-4	dlink3100	2013-03-31 14:12:00.689688+02	f	0	00:01:00	<removed> +43	151.216.11.130	e27-1	dlink3100	2013-03-31 14:12:10.733619+02	f	0	00:01:00	<removed> +24	151.216.6.194	e17-2	dlink3100	2013-03-31 14:12:19.983821+02	f	0	00:01:00	<removed> +4	151.216.1.194	e3-4	dlink3100	2013-03-31 14:12:30.025734+02	f	0	00:01:00	<removed> +31	151.216.8.130	e21-1	dlink3100	2013-03-31 14:09:05.474089+02	f	0	00:01:00	<removed> +47	151.216.12.130	e31-1	dlink3100	2013-03-31 14:12:40.068048+02	f	0	00:01:00	<removed> +92	151.216.23.194	e59-2	dlink3100	2013-03-31 14:09:15.523555+02	f	0	00:01:00	<removed> +33	151.216.9.2	e21-3	dlink3100	2013-03-31 14:09:25.573946+02	f	0	00:01:00	<removed> +20	151.216.5.194	e15-2	dlink3100	2013-03-31 14:09:35.626024+02	f	0	00:01:00	<removed> +133	151.216.127.5	wtfgw	wtfgw	2013-03-31 14:09:35.670908+02	f	0	00:01:00	<removed> +28	151.216.7.194	e19-2	dlink3100	2013-03-31 14:09:45.955527+02	f	0	00:01:00	<removed> +67	151.216.17.130	e47-1	dlink3100	2013-03-31 14:09:58.029684+02	f	0	00:01:00	<removed> +26	151.216.7.66	e17-4	dlink3100	2013-03-31 14:10:08.127872+02	f	0	00:01:00	<removed> +102	151.216.26.66	e63-4	dlink3100	2013-03-31 14:10:16.136217+02	f	0	00:01:00	<removed> +125	151.216.32.2	e75-3	dlink3100	2013-03-31 14:10:26.181503+02	f	0	00:01:00	<removed> +130	151.216.127.1	telegw	telegw	2013-03-31 14:07:58.60478+02	f	0	00:01:00	<removed> +412	151.216.50.7	creativiasw06	dlink3100	2013-03-31 14:09:09.699614+02	f	0	00:01:00	<removed> +128	151.216.32.194	e77-2	dlink3100	2013-03-31 14:09:27.615732+02	f	0	00:01:00	<removed> +408	151.216.50.3	creativiasw02	dlink3100	2013-03-31 14:09:37.667708+02	f	0	00:01:00	<removed> +417	151.216.50.12	creativiasw11	dlink3100	2013-03-31 14:09:47.935097+02	f	0	00:01:00	<removed> +127	151.216.32.130	e77-1	dlink3100	2013-03-31 14:09:56.039513+02	f	0	00:01:00	<removed> +376	127.0.0.1	ap-e65-1	ciscoap	2013-03-31 14:03:45.695637+02	f	0	00:05:00	<removed> +112	151.216.28.194	e69-2	dlink3100	2013-03-31 14:10:06.089831+02	f	0	00:01:00	<removed> +9	151.216.3.2	e9-3	dlink3100	2013-03-31 14:10:18.178421+02	f	0	00:01:00	<removed> +83	151.216.21.130	e55-1	dlink3100	2013-03-31 14:10:28.282289+02	f	0	00:01:00	<removed> +13	151.216.4.2	e11-3	dlink3100	2013-03-31 14:10:30.307108+02	f	0	00:01:00	<removed> +343	127.0.0.1	ap-e47-4	ciscoap	2013-03-31 14:04:46.367004+02	f	0	00:05:00	<removed> +45	151.216.12.2	e29-1	dlink3100	2013-03-31 14:10:39.315785+02	f	0	00:01:00	<removed> +297	127.0.0.1	ap-e17-2	ciscoap	2013-03-31 14:04:46.750319+02	f	0	00:05:00	<removed> +293	127.0.0.1	ap-e15-2	ciscoap	2013-03-31 14:05:06.492611+02	f	0	00:05:00	<removed> +350	127.0.0.1	ap-e51-3	ciscoap	2013-03-31 14:05:06.525983+02	f	0	00:05:00	<removed> +363	127.0.0.1	ap-e57-4	ciscoap	2013-03-31 14:05:16.625481+02	f	0	00:05:00	<removed> +368	127.0.0.1	ap-e61-1	ciscoap	2013-03-31 14:05:16.700464+02	f	0	00:05:00	<removed> +388	127.0.0.1	ap-e71-1	ciscoap	2013-03-31 14:05:26.787007+02	f	0	00:05:00	<removed> +304	127.0.0.1	ap-e21-1	ciscoap	2013-03-31 14:05:26.853688+02	f	0	00:05:00	<removed> +352	127.0.0.1	ap-e53-1	ciscoap	2013-03-31 14:05:26.887026+02	f	0	00:05:00	<removed> +323	127.0.0.1	ap-e33-2	ciscoap	2013-03-31 14:05:26.912028+02	f	0	00:05:00	<removed> +406	127.0.0.1	ap-distro4	ciscoap	2013-03-31 14:05:27.045455+02	f	0	00:05:00	<removed> +339	127.0.0.1	ap-e45-4	ciscoap	2013-03-31 14:05:27.053748+02	f	0	00:05:00	<removed> +393	127.0.0.1	ap-e73-2	ciscoap	2013-03-31 14:04:26.17466+02	f	0	00:05:00	<removed> +337	127.0.0.1	ap-e45-2	ciscoap	2013-03-31 14:04:26.191324+02	f	0	00:05:00	<removed> +384	127.0.0.1	ap-e69-1	ciscoap	2013-03-31 14:04:26.207988+02	f	0	00:05:00	<removed> +387	127.0.0.1	ap-e69-4	ciscoap	2013-03-31 14:04:26.224645+02	f	0	00:05:00	<removed> +371	127.0.0.1	ap-e61-4	ciscoap	2013-03-31 14:04:36.283297+02	f	0	00:05:00	<removed> +398	127.0.0.1	ap-e75-3	ciscoap	2013-03-31 14:04:46.333668+02	f	0	00:05:00	<removed> +351	127.0.0.1	ap-e51-4	ciscoap	2013-03-31 14:04:46.350332+02	f	0	00:05:00	<removed> +356	127.0.0.1	ap-e55-1	ciscoap	2013-03-31 14:04:46.383667+02	f	0	00:05:00	<removed> +389	127.0.0.1	ap-e71-2	ciscoap	2013-03-31 14:04:46.733636+02	f	0	00:05:00	<removed> +372	127.0.0.1	ap-e63-1	ciscoap	2013-03-31 14:05:06.509265+02	f	0	00:05:00	<removed> +328	127.0.0.1	ap-e39-1	ciscoap	2013-03-31 14:05:16.608766+02	f	0	00:05:00	<removed> +5	151.216.2.2	e5-3	dlink3100	2013-03-31 14:09:17.565638+02	f	0	00:01:00	<removed> +50	151.216.13.66	e33-2	dlink3100	2013-03-31 14:09:18.937921+02	f	0	00:01:00	<removed> +103	151.216.26.130	e65-1	dlink3100	2013-03-31 14:09:28.988094+02	f	0	00:01:00	<removed> +91	151.216.23.130	e59-1	dlink3100	2013-03-31 14:09:39.851074+02	f	0	00:01:00	<removed> +63	151.216.16.130	e45-1	dlink3100	2013-03-31 14:09:49.897376+02	f	0	00:01:00	<removed> +7	151.216.2.130	e7-3	dlink3100	2013-03-31 14:09:59.947741+02	f	0	00:01:00	<removed> +100	151.216.25.194	e63-2	dlink3100	2013-03-31 14:10:10.223204+02	f	0	00:01:00	<removed> +84	151.216.21.194	e55-2	dlink3100	2013-03-31 14:10:19.231795+02	f	0	00:01:00	<removed> +126	151.216.32.66	e75-4	dlink3100	2013-03-31 14:10:29.273823+02	f	0	00:01:00	<removed> +361	127.0.0.1	ap-e57-2	ciscoap	2013-03-31 14:04:16.074284+02	f	0	00:05:00	<removed> +312	127.0.0.1	ap-e25-1	ciscoap	2013-03-31 14:04:26.124587+02	f	0	00:05:00	<removed> +310	127.0.0.1	ap-e23-3	ciscoap	2013-03-31 14:04:26.141221+02	f	0	00:05:00	<removed> +308	127.0.0.1	ap-e23-1	ciscoap	2013-03-31 14:04:26.157994+02	f	0	00:05:00	<removed> +104	151.216.26.194	e65-2	dlink3100	2013-03-31 14:10:09.189552+02	f	0	00:01:00	<removed> +119	151.216.30.130	e73-1	dlink3100	2013-03-31 14:12:40.859661+02	f	0	00:01:00	<removed> +69	151.216.18.2	e47-3	dlink3100	2013-03-31 14:10:20.265181+02	f	0	00:01:00	<removed> +37	151.216.10.2	e23-3	dlink3100	2013-03-31 14:12:40.88249+02	t	0	00:01:00	<removed> +325	127.0.0.1	ap-e35-2	ciscoap	2013-03-31 14:06:47.598526+02	f	0	00:05:00	<removed> +52	151.216.13.194	e35-2	dlink3100	2013-03-31 14:10:36.22414+02	f	0	00:01:00	<removed> +399	127.0.0.1	ap-e75-4	ciscoap	2013-03-31 14:06:54.140511+02	f	0	00:05:00	<removed> +401	127.0.0.1	ap-e77-2	ciscoap	2013-03-31 14:05:06.475953+02	f	0	00:05:00	<removed> +109	151.216.28.2	e67-3	dlink3100	2013-03-31 14:10:40.349205+02	f	0	00:01:00	<removed> +123	151.216.31.130	e75-1	dlink3100	2013-03-31 14:10:49.357742+02	f	0	00:01:00	<removed> +332	127.0.0.1	ap-e43-1	ciscoap	2013-03-31 14:06:54.157133+02	f	0	00:05:00	<removed> +98	151.216.25.66	e61-4	dlink3100	2013-03-31 14:06:56.826042+02	f	0	00:01:00	<removed> +117	151.216.30.2	e71-3	dlink3100	2013-03-31 14:10:59.399785+02	f	0	00:01:00	<removed> +101	151.216.26.2	e63-3	dlink3100	2013-03-31 14:11:09.441726+02	f	0	00:01:00	<removed> +39	151.216.10.130	e25-1	dlink3100	2013-03-31 14:11:20.517295+02	f	0	00:01:00	<removed> +290	127.0.0.1	ap-e13-3	ciscoap	2013-03-31 14:05:16.592114+02	f	0	00:05:00	<removed> +345	127.0.0.1	ap-e49-2	ciscoap	2013-03-31 14:06:57.657385+02	f	0	00:05:00	<removed> +366	127.0.0.1	ap-e59-3	ciscoap	2013-03-31 14:06:57.665697+02	f	0	00:05:00	<removed> +392	127.0.0.1	ap-e73-1	ciscoap	2013-03-31 14:04:15.990948+02	f	0	00:05:00	<removed> +355	127.0.0.1	ap-e53-4	ciscoap	2013-03-31 14:05:16.658807+02	f	0	00:05:00	<removed> +86	151.216.22.66	e55-4	dlink3100	2013-03-31 14:11:30.559419+02	f	0	00:01:00	<removed> +277	127.0.0.1	ap-e3-4	ciscoap	2013-03-31 14:04:16.007613+02	f	0	00:05:00	<removed> +40	151.216.10.194	e25-2	dlink3100	2013-03-31 14:11:39.818373+02	f	0	00:01:00	<removed> +314	127.0.0.1	ap-e25-3	ciscoap	2013-03-31 14:04:16.024289+02	f	0	00:05:00	<removed> +289	127.0.0.1	ap-e13-2	ciscoap	2013-03-31 14:06:57.724049+02	f	0	00:05:00	<removed> +2	151.216.1.66	e1-4	dlink3100	2013-03-31 14:11:50.641091+02	f	0	00:01:00	<removed> +302	127.0.0.1	ap-e19-3	ciscoap	2013-03-31 14:06:57.732372+02	f	0	00:05:00	<removed> +99	151.216.25.130	e63-1	dlink3100	2013-03-31 14:11:59.899883+02	f	0	00:01:00	<removed> +344	127.0.0.1	ap-e49-1	ciscoap	2013-03-31 14:04:16.04092+02	f	0	00:05:00	<removed> +335	127.0.0.1	ap-e43-4	ciscoap	2013-03-31 14:06:57.799008+02	f	0	00:05:00	<removed> +279	127.0.0.1	ap-e5-4	ciscoap	2013-03-31 14:04:16.057621+02	f	0	00:05:00	<removed> +38	151.216.10.66	e23-4	dlink3100	2013-03-31 14:12:09.94159+02	f	0	00:01:00	<removed> +285	127.0.0.1	ap-e11-2	ciscoap	2013-03-31 14:06:57.824055+02	f	0	00:05:00	<removed> +404	127.0.0.1	ap-distro3	ciscoap	2013-03-31 14:06:57.832368+02	f	0	00:05:00	<removed> +21	151.216.6.2	e15-3	dlink3100	2013-03-31 14:12:20.775526+02	f	0	00:01:00	<removed> +131	151.216.127.3	camgw	camgw	2013-03-31 14:08:59.442796+02	f	0	00:01:00	<removed> +415	151.216.50.10	creativiasw09	dlink3100	2013-03-31 14:09:49.089144+02	f	0	00:01:00	<removed> +23	151.216.6.130	e17-1	dlink3100	2013-03-31 14:12:30.817401+02	f	0	00:01:00	<removed> +140	151.216.127.17	distro0	distro0	2013-03-31 14:09:59.139467+02	f	0	00:01:00	<removed> +303	127.0.0.1	ap-e19-4	ciscoap	2013-03-31 14:05:27.020371+02	f	0	00:05:00	<removed> +348	127.0.0.1	ap-e51-1	ciscoap	2013-03-31 14:07:14.399896+02	f	0	00:05:00	<removed> +46	151.216.12.66	e29-2	dlink3100	2013-03-31 14:11:58.658094+02	f	0	00:01:00	<removed> +311	127.0.0.1	ap-e23-4	ciscoap	2013-03-31 14:07:14.433216+02	f	0	00:05:00	<removed> +6	151.216.2.66	e5-4	dlink3100	2013-03-31 14:12:08.075251+02	f	0	00:01:00	<removed> +61	151.216.16.2	e43-3	dlink3100	2013-03-31 14:12:18.115548+02	f	0	00:01:00	<removed> +281	127.0.0.1	ap-e7-4	ciscoap	2013-03-31 14:07:14.449892+02	f	0	00:05:00	<removed> +42	151.216.11.66	e25-4	dlink3100	2013-03-31 14:12:28.78394+02	f	0	00:01:00	<removed> +124	151.216.31.194	e75-2	dlink3100	2013-03-31 14:12:38.82574+02	f	0	00:01:00	<removed> +341	127.0.0.1	ap-e47-2	ciscoap	2013-03-31 14:07:14.49997+02	f	0	00:05:00	<removed> +394	127.0.0.1	ap-e73-3	ciscoap	2013-03-31 14:07:18.250168+02	f	0	00:05:00	<removed> +134	151.216.127.6	logistikkgw	logistikkgw	2013-03-31 14:09:37.70706+02	f	0	00:01:00	<removed> +296	127.0.0.1	ap-e17-1	ciscoap	2013-03-31 14:05:16.642148+02	f	0	00:05:00	<removed> +342	127.0.0.1	ap-e47-3	ciscoap	2013-03-31 14:05:16.683807+02	f	0	00:05:00	<removed> +138	151.216.127.14	sponsorgw	sponsorgw	2013-03-31 14:10:36.296979+02	f	0	00:01:00	<removed> +300	127.0.0.1	ap-e19-1	ciscoap	2013-03-31 14:05:26.753695+02	f	0	00:05:00	<removed> +74	151.216.19.66	e49-4	dlink3100	2013-03-31 14:10:48.366303+02	f	0	00:01:00	<removed> +90	151.216.23.66	e57-4	dlink3100	2013-03-31 14:10:50.391178+02	f	0	00:01:00	<removed> +364	127.0.0.1	ap-e59-1	ciscoap	2013-03-31 14:06:57.699034+02	f	0	00:05:00	<removed> +14	151.216.4.66	e11-4	dlink3100	2013-03-31 14:11:00.431572+02	f	0	00:01:00	<removed> +280	127.0.0.1	ap-e7-3	ciscoap	2013-03-31 14:05:26.803681+02	f	0	00:05:00	<removed> +357	127.0.0.1	ap-e55-2	ciscoap	2013-03-31 14:06:57.757379+02	f	0	00:05:00	<removed> +144	151.216.127.21	distro4	distro4	2013-03-31 14:11:18.492445+02	f	0	00:01:00	<removed> +19	151.216.5.130	e15-1	dlink3100	2013-03-31 14:11:19.483883+02	f	0	00:01:00	<removed> +307	127.0.0.1	ap-e21-4	ciscoap	2013-03-31 14:06:57.790715+02	f	0	00:05:00	<removed> +85	151.216.22.2	e55-3	dlink3100	2013-03-31 14:11:38.576512+02	f	0	00:01:00	<removed> +286	127.0.0.1	ap-e11-3	ciscoap	2013-03-31 14:05:26.837029+02	f	0	00:05:00	<removed> +369	127.0.0.1	ap-e61-2	ciscoap	2013-03-31 14:06:57.857392+02	f	0	00:05:00	<removed> +10	151.216.3.66	e9-4	dlink3100	2013-03-31 14:11:48.616108+02	f	0	00:01:00	<removed> +385	127.0.0.1	ap-e69-2	ciscoap	2013-03-31 14:07:07.916359+02	f	0	00:05:00	<removed> +288	127.0.0.1	ap-e13-1	ciscoap	2013-03-31 14:05:26.945339+02	f	0	00:05:00	<removed> +282	127.0.0.1	ap-e9-3	ciscoap	2013-03-31 14:07:07.924585+02	f	0	00:05:00	<removed> +358	127.0.0.1	ap-e55-3	ciscoap	2013-03-31 14:05:26.953679+02	f	0	00:05:00	<removed> +396	127.0.0.1	ap-e75-1	ciscoap	2013-03-31 14:07:14.333223+02	f	0	00:05:00	<removed> +374	127.0.0.1	ap-e63-3	ciscoap	2013-03-31 14:07:14.349887+02	f	0	00:05:00	<removed> +365	127.0.0.1	ap-e59-2	ciscoap	2013-03-31 14:05:26.978658+02	f	0	00:05:00	<removed> +276	127.0.0.1	ap-e3-3	ciscoap	2013-03-31 14:05:26.987059+02	f	0	00:05:00	<removed> +334	127.0.0.1	ap-e43-3	ciscoap	2013-03-31 14:05:27.012008+02	f	0	00:05:00	<removed> +382	127.0.0.1	ap-e67-3	ciscoap	2013-03-31 14:07:14.466569+02	f	0	00:05:00	<removed> +62	151.216.16.66	e43-4	dlink3100	2013-03-31 14:12:08.699458+02	f	0	00:01:00	<removed> +275	127.0.0.1	ap-e1-4	ciscoap	2013-03-31 14:07:14.483301+02	f	0	00:05:00	<removed> +36	151.216.9.194	e23-2	dlink3100	2013-03-31 14:12:18.742024+02	f	0	00:01:00	<removed> +51	151.216.13.130	e35-1	dlink3100	2013-03-31 14:12:28.217471+02	f	0	00:01:00	<removed> +324	127.0.0.1	ap-e35-1	ciscoap	2013-03-31 14:07:14.516632+02	f	0	00:05:00	<removed> +1	151.216.1.2	e1-3	dlink3100	2013-03-31 14:12:38.299693+02	f	0	00:01:00	<removed> +291	127.0.0.1	ap-e13-4	ciscoap	2013-03-31 14:05:47.253657+02	f	0	00:05:00	<removed> +381	127.0.0.1	ap-e67-2	ciscoap	2013-03-31 14:07:14.533237+02	f	0	00:05:00	<removed> +395	127.0.0.1	ap-e73-4	ciscoap	2013-03-31 14:05:47.261963+02	f	0	00:05:00	<removed> +298	127.0.0.1	ap-e17-3	ciscoap	2013-03-31 14:07:18.24186+02	f	0	00:05:00	<removed> +375	127.0.0.1	ap-e63-4	ciscoap	2013-03-31 14:05:26.770358+02	f	0	00:05:00	<removed> +402	127.0.0.1	ap-distro1	ciscoap	2013-03-31 14:05:47.286984+02	f	0	00:05:00	<removed> +278	127.0.0.1	ap-e5-3	ciscoap	2013-03-31 14:07:18.275213+02	f	0	00:05:00	<removed> +349	127.0.0.1	ap-e51-2	ciscoap	2013-03-31 14:05:26.820365+02	f	0	00:05:00	<removed> +390	127.0.0.1	ap-e71-3	ciscoap	2013-03-31 14:05:26.870368+02	f	0	00:05:00	<removed> +135	151.216.127.9	crewgw	crewgw	2013-03-31 14:09:59.991016+02	f	0	00:01:00	<removed> +88	151.216.22.194	e57-2	dlink3100	2013-03-31 14:10:58.408324+02	f	0	00:01:00	<removed> +378	127.0.0.1	ap-e65-3	ciscoap	2013-03-31 14:05:26.920352+02	f	0	00:05:00	<removed> +64	151.216.16.194	e45-2	dlink3100	2013-03-31 14:11:08.451146+02	f	0	00:01:00	<removed> +141	151.216.127.18	distro1	distro1	2013-03-31 14:11:10.476036+02	f	0	00:01:00	<removed> +397	127.0.0.1	ap-e75-2	ciscoap	2013-03-31 14:06:57.690716+02	f	0	00:05:00	<removed> +142	151.216.127.19	distro2	distro2	2013-03-31 14:11:26.53242+02	f	0	00:01:00	<removed> +336	127.0.0.1	ap-e45-1	ciscoap	2013-03-31 14:05:37.128164+02	f	0	00:05:00	<removed> +370	127.0.0.1	ap-e61-3	ciscoap	2013-03-31 14:05:37.136492+02	f	0	00:05:00	<removed> +340	127.0.0.1	ap-e47-1	ciscoap	2013-03-31 14:06:57.765706+02	f	0	00:05:00	<removed> +137	151.216.127.12	resepsjongw	resepsjongw	2013-03-31 14:11:28.534488+02	f	0	00:01:00	<removed> +71	151.216.18.130	e49-1	dlink3100	2013-03-31 14:11:36.567717+02	f	0	00:01:00	<removed> +319	127.0.0.1	ap-e29-2	ciscoap	2013-03-31 14:07:07.949621+02	f	0	00:05:00	<removed> +82	151.216.21.66	e53-4	dlink3100	2013-03-31 14:11:47.281839+02	f	0	00:01:00	<removed> +403	127.0.0.1	ap-distro2	ciscoap	2013-03-31 14:07:14.316549+02	f	0	00:05:00	<removed> +333	127.0.0.1	ap-e43-2	ciscoap	2013-03-31 14:07:14.366567+02	f	0	00:05:00	<removed> +305	127.0.0.1	ap-e21-2	ciscoap	2013-03-31 14:05:37.161496+02	f	0	00:05:00	<removed> +383	127.0.0.1	ap-e67-4	ciscoap	2013-03-31 14:05:37.169782+02	f	0	00:05:00	<removed> +35	151.216.9.130	e23-1	dlink3100	2013-03-31 14:11:57.324788+02	f	0	00:01:00	<removed> +329	127.0.0.1	ap-e39-2	ciscoap	2013-03-31 14:07:14.383235+02	f	0	00:05:00	<removed> +295	127.0.0.1	ap-e15-4	ciscoap	2013-03-31 14:07:14.416546+02	f	0	00:05:00	<removed> +322	127.0.0.1	ap-e33-1	ciscoap	2013-03-31 14:05:37.194794+02	f	0	00:05:00	<removed> +316	127.0.0.1	ap-e27-1	ciscoap	2013-03-31 14:07:18.075143+02	f	0	00:05:00	<removed> +317	127.0.0.1	ap-e27-2	ciscoap	2013-03-31 14:07:18.083421+02	f	0	00:05:00	<removed> +410	151.216.50.5	creativiasw04	dlink3100	2013-03-31 14:08:38.747626+02	f	0	00:01:00	<removed> +54	151.216.14.66	e37-2	dlink3100	2013-03-31 14:08:48.798532+02	f	0	00:01:00	<removed> +346	127.0.0.1	ap-e49-3	ciscoap	2013-03-31 14:07:18.116747+02	f	0	00:05:00	<removed> +16	151.216.4.194	e13-2	dlink3100	2013-03-31 14:08:59.398994+02	f	0	00:01:00	<removed> +132	151.216.127.4	stageboh	stageboh	2013-03-31 14:11:19.519638+02	f	0	00:01:00	<removed> +353	127.0.0.1	ap-e53-2	ciscoap	2013-03-31 14:07:18.141775+02	f	0	00:05:00	<removed> +122	151.216.31.66	e73-4	dlink3100	2013-03-31 14:12:38.849023+02	t	0	00:01:00	<removed> +338	127.0.0.1	ap-e45-3	ciscoap	2013-03-31 14:07:18.175214+02	f	0	00:05:00	<removed> +327	127.0.0.1	ap-e37-2	ciscoap	2013-03-31 14:07:18.216828+02	f	0	00:05:00	<removed> +309	127.0.0.1	ap-e23-2	ciscoap	2013-03-31 14:07:24.68384+02	f	0	00:05:00	<removed> +330	127.0.0.1	ap-e41-1	ciscoap	2013-03-31 14:07:24.71716+02	f	0	00:05:00	<removed> +299	127.0.0.1	ap-e17-4	ciscoap	2013-03-31 14:07:24.733842+02	f	0	00:05:00	<removed> +379	127.0.0.1	ap-e65-4	ciscoap	2013-03-31 14:07:24.750498+02	f	0	00:05:00	<removed> +8	151.216.2.194	e7-4	dlink3100	2013-03-31 14:07:28.294572+02	f	0	00:01:00	<removed> +70	151.216.18.66	e47-4	dlink3100	2013-03-31 14:06:47.567226+02	f	0	00:01:00	<removed> +377	127.0.0.1	ap-e65-2	ciscoap	2013-03-31 14:07:28.367437+02	f	0	00:05:00	<removed> +60	151.216.15.194	e43-2	dlink3100	2013-03-31 14:06:57.634414+02	f	0	00:01:00	<removed> +292	127.0.0.1	ap-e15-1	ciscoap	2013-03-31 14:07:34.926035+02	f	0	00:05:00	<removed> +114	151.216.29.66	e69-4	dlink3100	2013-03-31 14:07:07.891609+02	f	0	00:01:00	<removed> +347	127.0.0.1	ap-e49-4	ciscoap	2013-03-31 14:07:34.959373+02	f	0	00:05:00	<removed> +116	151.216.29.194	e71-2	dlink3100	2013-03-31 14:07:38.453277+02	f	0	00:01:00	<removed> +411	151.216.50.6	creativiasw05	dlink3100	2013-03-31 14:07:17.968957+02	f	0	00:01:00	<removed> +87	151.216.22.130	e57-1	dlink3100	2013-03-31 14:07:48.503769+02	f	0	00:01:00	<removed> +113	151.216.29.2	e69-3	dlink3100	2013-03-31 14:07:58.545997+02	f	0	00:01:00	<removed> +287	127.0.0.1	ap-e11-4	ciscoap	2013-03-31 14:07:18.016788+02	f	0	00:05:00	<removed> +66	151.216.17.66	e45-4	dlink3100	2013-03-31 14:08:08.60963+02	f	0	00:01:00	<removed> +120	151.216.30.194	e73-2	dlink3100	2013-03-31 14:08:18.656104+02	f	0	00:01:00	<removed> +118	151.216.30.66	e71-4	dlink3100	2013-03-31 14:08:29.247615+02	f	0	00:01:00	<removed> +400	127.0.0.1	ap-e77-1	ciscoap	2013-03-31 14:07:34.859414+02	f	0	00:05:00	<removed> +139	151.216.127.16	eldregw	eldregw	2013-03-31 14:12:28.253362+02	f	0	00:01:00	<removed> +76	151.216.19.194	e51-2	dlink3100	2013-03-31 14:12:38.382364+02	t	0	00:01:00	<removed> +405	127.0.0.1	ap-distro0	ciscoap	2013-03-31 14:07:34.876034+02	f	0	00:05:00	<removed> +359	127.0.0.1	ap-e55-4	ciscoap	2013-03-31 14:07:18.041795+02	f	0	00:05:00	<removed> +373	127.0.0.1	ap-e63-2	ciscoap	2013-03-31 14:07:18.050126+02	f	0	00:05:00	<removed> +354	127.0.0.1	ap-e53-3	ciscoap	2013-03-31 14:07:34.892675+02	f	0	00:05:00	<removed> +386	127.0.0.1	ap-e69-3	ciscoap	2013-03-31 14:07:18.108439+02	f	0	00:05:00	<removed> +326	127.0.0.1	ap-e37-1	ciscoap	2013-03-31 14:07:34.909368+02	f	0	00:05:00	<removed> +284	127.0.0.1	ap-e11-1	ciscoap	2013-03-31 14:07:34.942715+02	f	0	00:05:00	<removed> +391	127.0.0.1	ap-e71-4	ciscoap	2013-03-31 14:07:18.150127+02	f	0	00:05:00	<removed> +362	127.0.0.1	ap-e57-3	ciscoap	2013-03-31 14:07:34.976095+02	f	0	00:05:00	<removed> +318	127.0.0.1	ap-e29-1	ciscoap	2013-03-31 14:07:18.183518+02	f	0	00:05:00	<removed> +110	151.216.28.66	e67-4	dlink3100	2013-03-31 14:07:38.444965+02	f	0	00:01:00	<removed> +274	127.0.0.1	ap-e1-3	ciscoap	2013-03-31 14:07:18.208538+02	f	0	00:05:00	<removed> +53	151.216.14.2	e37-1	dlink3100	2013-03-31 14:07:48.49557+02	f	0	00:01:00	<removed> +107	151.216.27.130	e67-1	dlink3100	2013-03-31 14:07:58.554186+02	f	0	00:01:00	<removed> +315	127.0.0.1	ap-e25-4	ciscoap	2013-03-31 14:07:24.650503+02	f	0	00:05:00	<removed> +360	127.0.0.1	ap-e57-1	ciscoap	2013-03-31 14:07:24.667163+02	f	0	00:05:00	<removed> +78	151.216.20.66	e51-4	dlink3100	2013-03-31 14:08:09.146709+02	f	0	00:01:00	<removed> +414	151.216.50.9	creativiasw08	dlink3100	2013-03-31 14:06:47.558957+02	f	0	00:01:00	<removed> +294	127.0.0.1	ap-e15-3	ciscoap	2013-03-31 14:07:24.700488+02	f	0	00:05:00	<removed> +25	151.216.7.2	e17-3	dlink3100	2013-03-31 14:07:28.311147+02	f	0	00:01:00	<removed> +75	151.216.19.130	e51-1	dlink3100	2013-03-31 14:06:57.617774+02	f	0	00:01:00	<removed> +93	151.216.24.2	e59-3	dlink3100	2013-03-31 14:08:19.189476+02	f	0	00:01:00	<removed> +11	151.216.3.130	e11-1	dlink3100	2013-03-31 14:08:28.698108+02	f	0	00:01:00	<removed> +55	151.216.14.130	e39-1	dlink3100	2013-03-31 14:08:39.297705+02	f	0	00:01:00	<removed> +367	127.0.0.1	ap-e59-4	ciscoap	2013-03-31 14:07:28.334102+02	f	0	00:05:00	<removed> +80	151.216.20.194	e53-2	dlink3100	2013-03-31 14:07:07.875693+02	f	0	00:01:00	<removed> +321	127.0.0.1	ap-e31-2	ciscoap	2013-03-31 14:07:28.342401+02	f	0	00:05:00	<removed> +94	151.216.24.66	e59-4	dlink3100	2013-03-31 14:07:17.985368+02	f	0	00:01:00	<removed> +283	127.0.0.1	ap-e9-4	ciscoap	2013-03-31 14:07:28.375765+02	f	0	00:05:00	<removed> +48	151.216.12.194	e31-2	dlink3100	2013-03-31 14:08:49.348586+02	f	0	00:01:00	<removed> +68	151.216.17.194	e47-2	dlink3100	2013-03-31 14:08:58.847409+02	f	0	00:01:00	<removed> +331	127.0.0.1	ap-e41-2	ciscoap	2013-03-31 14:07:18.008451+02	f	0	00:05:00	<removed> +129	151.216.127.2	nocgw	nocgw	2013-03-31 14:11:36.609335+02	f	0	00:01:00	<removed> +306	127.0.0.1	ap-e21-3	ciscoap	2013-03-31 14:07:28.400753+02	f	0	00:05:00	<removed> +313	127.0.0.1	ap-e25-2	ciscoap	2013-03-31 14:07:28.409069+02	f	0	00:05:00	<removed> +136	151.216.127.11	gamegw	gamegw	2013-03-31 14:06:54.076054+02	f	0	00:01:00	<removed> +81	151.216.21.2	e53-3	dlink3100	2013-03-31 14:07:04.184831+02	f	0	00:01:00	<removed> +105	151.216.27.2	e65-3	dlink3100	2013-03-31 14:07:14.28811+02	f	0	00:01:00	<removed> +56	151.216.14.194	e39-2	dlink3100	2013-03-31 14:07:26.952794+02	f	0	00:01:00	<removed> +72	151.216.18.194	e49-2	dlink3100	2013-03-31 14:07:36.993533+02	f	0	00:01:00	<removed> +27	151.216.7.130	e19-1	dlink3100	2013-03-31 14:07:45.003682+02	f	0	00:01:00	<removed> +17	151.216.5.2	e13-3	dlink3100	2013-03-31 14:07:57.079313+02	f	0	00:01:00	<removed> +59	151.216.15.130	e43-1	dlink3100	2013-03-31 14:08:07.12975+02	f	0	00:01:00	<removed> +79	151.216.20.130	e53-1	dlink3100	2013-03-31 14:08:15.230508+02	f	0	00:01:00	<removed> +12	151.216.3.194	e11-2	dlink3100	2013-03-31 14:08:25.273211+02	f	0	00:01:00	<removed> +413	151.216.50.8	creativiasw07	dlink3100	2013-03-31 14:08:35.321636+02	f	0	00:01:00	<removed> +15	151.216.4.130	e13-1	dlink3100	2013-03-31 14:08:45.372088+02	f	0	00:01:00	<removed> +106	151.216.27.66	e65-4	dlink3100	2013-03-31 14:08:57.465785+02	f	0	00:01:00	<removed> +29	151.216.8.2	e19-3	dlink3100	2013-03-31 14:09:07.516177+02	f	0	00:01:00	<removed> +34	151.216.9.66	e21-4	dlink3100	2013-03-31 14:12:40.090712+02	t	0	00:01:00	<removed> +49	151.216.13.2	e33-1	dlink3100	2013-03-31 14:07:06.867675+02	f	0	00:01:00	<removed> +44	151.216.11.194	e27-2	dlink3100	2013-03-31 14:07:16.909469+02	f	0	00:01:00	<removed> +96	151.216.24.194	e61-2	dlink3100	2013-03-31 14:07:24.56102+02	f	0	00:01:00	<removed> +73	151.216.19.2	e49-3	dlink3100	2013-03-31 14:07:34.777763+02	f	0	00:01:00	<removed> +115	151.216.29.130	e71-1	dlink3100	2013-03-31 14:07:47.037305+02	f	0	00:01:00	<removed> +95	151.216.24.130	e61-1	dlink3100	2013-03-31 14:07:55.137659+02	f	0	00:01:00	<removed> +409	151.216.50.4	creativiasw03	dlink3100	2013-03-31 14:08:05.18812+02	f	0	00:01:00	<removed> +111	151.216.28.130	e69-1	dlink3100	2013-03-31 14:08:17.239454+02	f	0	00:01:00	<removed> +77	151.216.20.2	e51-3	dlink3100	2013-03-31 14:08:27.313458+02	f	0	00:01:00	<removed> +58	151.216.15.66	e41-2	dlink3100	2013-03-31 14:08:37.363767+02	f	0	00:01:00	<removed> +41	151.216.11.2	e25-3	dlink3100	2013-03-31 14:08:47.415311+02	f	0	00:01:00	<removed> +143	151.216.127.20	distro3	distro3	2013-03-31 14:08:55.423637+02	f	0	00:01:00	<removed> +\. + + +-- +-- Name: switches_switch_seq; Type: SEQUENCE SET; Schema: public; Owner: nms +-- + +SELECT pg_catalog.setval('switches_switch_seq', 417, true); + + +-- +-- Data for Name: switchtypes; Type: TABLE DATA; Schema: public; Owner: nms +-- + +COPY switchtypes (switchtype, ports, wide_counters) FROM stdin; +dlink3100	1-44,46-48	t +dlink3100full	1-48	t +ciscoap		f +nocgw	1-114	t +telegw	1-94,99-102	t +camgw	1-52,55	t +stageboh	1-52,55	t +wtfgw	1-52,55	t +logistikkgw	1-52,55	t +crewgw	1-52,55	t +gamegw	1-52,55	t +resepsjongw	10101-10110	t +sponsorgw		t +eldregw	1-5	t +distro0	1-201	t +distro1	1-201	t +distro2	1-201	t +distro3	1-201	t +distro4	1-201	t +\. + + +-- +-- Data for Name: temppoll; Type: TABLE DATA; Schema: public; Owner: nms +-- + +COPY temppoll (id, "time", switch, temp) FROM stdin; +\. + + +-- +-- Data for Name: uplinks; Type: TABLE DATA; Schema: public; Owner: nms +-- + +COPY uplinks (switch, coreswitch, blade, port) FROM stdin; +274	140	6	1 +275	140	6	2 +276	140	6	3 +277	140	6	4 +278	140	6	5 +279	140	6	6 +280	140	6	7 +281	140	6	8 +282	140	6	9 +283	140	6	10 +284	141	6	1 +285	141	6	2 +286	140	6	11 +287	140	6	12 +288	141	6	3 +289	141	6	4 +290	140	6	13 +291	140	6	14 +292	141	6	5 +293	141	6	6 +294	140	6	15 +295	140	6	16 +296	141	6	7 +297	141	6	8 +298	140	6	17 +299	140	6	18 +300	141	6	9 +301	141	6	10 +302	140	6	19 +303	140	6	20 +304	141	6	11 +305	141	6	12 +306	140	6	21 +307	140	6	22 +308	141	6	13 +309	141	6	14 +310	140	6	23 +311	140	6	24 +312	141	6	15 +313	141	6	16 +314	140	6	25 +315	140	6	26 +316	141	6	17 +317	141	6	18 +318	141	6	19 +319	141	6	20 +320	141	6	21 +321	141	6	22 +322	142	6	1 +323	141	6	23 +324	142	6	2 +325	142	6	3 +326	142	6	4 +327	142	6	5 +328	142	6	6 +329	142	6	7 +330	142	6	8 +331	142	6	9 +332	142	6	10 +333	142	6	11 +334	143	6	1 +335	143	6	2 +336	142	6	12 +337	142	6	13 +338	143	6	3 +339	143	6	4 +340	142	6	14 +341	142	6	15 +342	143	6	5 +343	143	6	6 +344	142	6	16 +345	142	6	17 +346	143	6	7 +347	143	6	8 +348	142	6	18 +349	142	6	19 +350	143	6	9 +351	143	6	10 +352	142	6	20 +353	142	6	21 +354	143	6	11 +355	143	6	12 +356	142	6	22 +357	142	6	23 +358	143	6	13 +359	143	6	14 +360	142	6	24 +361	142	6	25 +362	143	6	15 +363	143	6	16 +364	144	6	1 +365	144	6	2 +366	143	6	17 +367	143	6	18 +368	144	6	3 +369	144	6	4 +370	143	6	19 +371	143	6	20 +372	144	6	5 +373	144	6	6 +374	144	6	7 +375	144	6	8 +376	144	6	9 +377	144	6	10 +378	144	6	11 +379	144	6	12 +380	144	6	13 +381	144	6	14 +382	144	6	15 +383	144	6	16 +384	144	6	17 +385	144	6	18 +386	144	6	19 +387	144	6	20 +388	144	6	21 +389	144	6	22 +390	144	6	23 +391	144	6	24 +392	144	6	25 +393	144	6	26 +394	144	6	27 +395	144	6	28 +396	144	6	29 +397	144	6	30 +398	144	6	31 +399	144	6	32 +400	144	6	33 +401	144	6	34 +402	141	6	48 +403	142	6	47 +404	143	6	48 +405	140	6	48 +406	144	6	48 +\. + + +-- +-- Name: cpuloadpoll_pkey; Type: CONSTRAINT; Schema: public; Owner: nms; Tablespace:  +-- + +ALTER TABLE ONLY cpuloadpoll +    ADD CONSTRAINT cpuloadpoll_pkey PRIMARY KEY (id); + + +-- +-- Name: ipv4_pkey; Type: CONSTRAINT; Schema: public; Owner: nms; Tablespace:  +-- + +ALTER TABLE ONLY ipv4 +    ADD CONSTRAINT ipv4_pkey PRIMARY KEY (mac, address, "time"); + + +-- +-- Name: ipv6_pkey; Type: CONSTRAINT; Schema: public; Owner: nms; Tablespace:  +-- + +ALTER TABLE ONLY ipv6 +    ADD CONSTRAINT ipv6_pkey PRIMARY KEY (mac, address, "time"); + + +-- +-- Name: switches_pkey; Type: CONSTRAINT; Schema: public; Owner: nms; Tablespace:  +-- + +ALTER TABLE ONLY switches +    ADD CONSTRAINT switches_pkey PRIMARY KEY (switch); + + +-- +-- Name: switchtypes_pkey; Type: CONSTRAINT; Schema: public; Owner: nms; Tablespace:  +-- + +ALTER TABLE ONLY switchtypes +    ADD CONSTRAINT switchtypes_pkey PRIMARY KEY (switchtype); + + +-- +-- Name: polls_switchporttime; Type: INDEX; Schema: public; Owner: nms; Tablespace:  +-- + +CREATE INDEX polls_switchporttime ON polls USING btree (switch, port, "time"); + + +-- +-- Name: polls_time; Type: INDEX; Schema: public; Owner: nms; Tablespace:  +-- + +CREATE INDEX polls_time ON polls USING btree ("time"); + + +-- +-- Name: switches_ap_poll; Type: INDEX; Schema: public; Owner: nms; Tablespace:  +-- + +CREATE UNIQUE INDEX switches_ap_poll ON ap_poll USING btree (switch); + + +-- +-- Name: switches_dhcp; Type: INDEX; Schema: public; Owner: nms; Tablespace:  +-- + +CREATE UNIQUE INDEX switches_dhcp ON dhcp USING btree (switch); + + +-- +-- Name: switches_placement; Type: INDEX; Schema: public; Owner: nms; Tablespace:  +-- + +CREATE UNIQUE INDEX switches_placement ON placements USING btree (switch); + + +-- +-- Name: switches_switch; Type: INDEX; Schema: public; Owner: nms; Tablespace:  +-- + +CREATE UNIQUE INDEX switches_switch ON switches USING btree (switch); + + +-- +-- Name: temppoll_search; Type: INDEX; Schema: public; Owner: nms; Tablespace:  +-- + +CREATE INDEX temppoll_search ON temppoll USING btree (switch, id); + + +-- +-- Name: time_idx; Type: INDEX; Schema: public; Owner: nms; Tablespace:  +-- + +CREATE INDEX time_idx ON ipv6 USING btree ("time"); + + +-- +-- Name: timev4_idx; Type: INDEX; Schema: public; Owner: nms; Tablespace:  +-- + +CREATE INDEX timev4_idx ON ipv4 USING btree ("time"); + + +-- +-- Name: ap_poll_switch_fkey; Type: FK CONSTRAINT; Schema: public; Owner: nms +-- + +ALTER TABLE ONLY ap_poll +    ADD CONSTRAINT ap_poll_switch_fkey FOREIGN KEY (switch) REFERENCES switches(switch); + + +-- +-- Name: switches_switchtype_fkey; Type: FK CONSTRAINT; Schema: public; Owner: nms +-- + +ALTER TABLE ONLY switches +    ADD CONSTRAINT switches_switchtype_fkey FOREIGN KEY (switchtype) REFERENCES switchtypes(switchtype); + + +-- +-- Name: temppoll_switch_fkey; Type: FK CONSTRAINT; Schema: public; Owner: nms +-- + +ALTER TABLE ONLY temppoll +    ADD CONSTRAINT temppoll_switch_fkey FOREIGN KEY (switch) REFERENCES switches(switch); + + +-- +-- Name: uplinks_coreswitch_fkey; Type: FK CONSTRAINT; Schema: public; Owner: nms +-- + +ALTER TABLE ONLY uplinks +    ADD CONSTRAINT uplinks_coreswitch_fkey FOREIGN KEY (coreswitch) REFERENCES switches(switch); + + +-- +-- Name: uplinks_switch_fkey; Type: FK CONSTRAINT; Schema: public; Owner: nms +-- + +ALTER TABLE ONLY uplinks +    ADD CONSTRAINT uplinks_switch_fkey FOREIGN KEY (switch) REFERENCES switches(switch); + + +-- +-- Name: public; Type: ACL; Schema: -; Owner: postgres +-- + +REVOKE ALL ON SCHEMA public FROM PUBLIC; +REVOKE ALL ON SCHEMA public FROM postgres; +GRANT ALL ON SCHEMA public TO postgres; +GRANT ALL ON SCHEMA public TO PUBLIC; + + +-- +-- Name: ipv4; Type: ACL; Schema: public; Owner: nms +-- + +REVOKE ALL ON TABLE ipv4 FROM PUBLIC; +REVOKE ALL ON TABLE ipv4 FROM nms; +GRANT ALL ON TABLE ipv4 TO nms; + + +-- +-- Name: ipv6; Type: ACL; Schema: public; Owner: nms +-- + +REVOKE ALL ON TABLE ipv6 FROM PUBLIC; +REVOKE ALL ON TABLE ipv6 FROM nms; +GRANT ALL ON TABLE ipv6 TO nms; + + +-- +-- Name: mbd_log; Type: ACL; Schema: public; Owner: nms +-- + +REVOKE ALL ON TABLE mbd_log FROM PUBLIC; +REVOKE ALL ON TABLE mbd_log FROM nms; +GRANT ALL ON TABLE mbd_log TO nms; + + +-- +-- Name: mldpolls; Type: ACL; Schema: public; Owner: postgres +-- + +REVOKE ALL ON TABLE mldpolls FROM PUBLIC; +REVOKE ALL ON TABLE mldpolls FROM postgres; +GRANT ALL ON TABLE mldpolls TO postgres; +GRANT SELECT,INSERT,DELETE,UPDATE ON TABLE mldpolls TO nms; + + +-- +-- PostgreSQL database dump complete +-- + +\connect postgres + +-- +-- PostgreSQL database dump +-- + +SET statement_timeout = 0; +SET client_encoding = 'UTF8'; +SET standard_conforming_strings = on; +SET check_function_bodies = false; +SET client_min_messages = warning; + +-- +-- Name: postgres; Type: COMMENT; Schema: -; Owner: postgres +-- + +COMMENT ON DATABASE postgres IS 'default administrative connection database'; + + +-- +-- Name: plpgsql; Type: EXTENSION; Schema: -; Owner:  +-- + +CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog; + + +-- +-- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner:  +-- + +COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language'; + + +-- +-- Name: public; Type: ACL; Schema: -; Owner: postgres +-- + +REVOKE ALL ON SCHEMA public FROM PUBLIC; +REVOKE ALL ON SCHEMA public FROM postgres; +GRANT ALL ON SCHEMA public TO postgres; +GRANT ALL ON SCHEMA public TO PUBLIC; + + +-- +-- PostgreSQL database dump complete +-- + +\connect template1 + +-- +-- PostgreSQL database dump +-- + +SET statement_timeout = 0; +SET client_encoding = 'UTF8'; +SET standard_conforming_strings = on; +SET check_function_bodies = false; +SET client_min_messages = warning; + +-- +-- Name: template1; Type: COMMENT; Schema: -; Owner: postgres +-- + +COMMENT ON DATABASE template1 IS 'default template for new databases'; + + +-- +-- Name: plpgsql; Type: EXTENSION; Schema: -; Owner:  +-- + +CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog; + + +-- +-- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner:  +-- + +COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language'; + + +-- +-- Name: public; Type: ACL; Schema: -; Owner: postgres +-- + +REVOKE ALL ON SCHEMA public FROM PUBLIC; +REVOKE ALL ON SCHEMA public FROM postgres; +GRANT ALL ON SCHEMA public TO postgres; +GRANT ALL ON SCHEMA public TO PUBLIC; + + +-- +-- PostgreSQL database dump complete +-- + +-- +-- PostgreSQL database cluster dump complete +-- + diff --git a/sql/strip.pl b/sql/strip.pl new file mode 100644 index 0000000..51739a6 --- /dev/null +++ b/sql/strip.pl @@ -0,0 +1,33 @@ +#!/usr/bin/perl +use warnings; +use strict; + +my $ignore = "((([0-9a-f]{2}[:]){5}[0-9a-f]{2})|"; +$ignore .= "([0-9]{4}\-[0-9]{2}\-[0-9]{2} [0-9]{2}\:[0-9]{2}\:[0-9]{2})"; +$ignore .= ").*"; + +my $community = "<removed>"; + +my $skip = 0; + +open (SQL, $ARGV[0]) or die "Unable to open SQL-file"; +while (<SQL>) { +	unless (/^$ignore$/){ +		 +		if (/COPY (mbd_log|squeue|temppoll|ap_poll)/){ +			$skip = 1; +			print; +		} + +		if (/\\\./){ +			$skip = 0; +		} + +		unless ($skip){ +			s/$community/<removed>/g; # community +			s/PASSWORD '.+'/PASSWORD '<removed>'/g; # password for SQL-users +			s/public$/<removed>/; # public-community -- assuming last column +			print; +		} +	} +} diff --git a/stream/encode/kliniskarbeidsflate/reflect-krosus.sh b/stream/encode/kliniskarbeidsflate/reflect-krosus.sh new file mode 100755 index 0000000..a40500c --- /dev/null +++ b/stream/encode/kliniskarbeidsflate/reflect-krosus.sh @@ -0,0 +1,4 @@ +#!/bin/sh +while :; do vlc -vvv udp://@:9017 --network-caching 2000 --no-sout-audio --sout '#std{access=udp,mux=ts,dst=151.216.125.4:4016}' --intf dummy --ttl 60 vlc://quit; +        sleep 5 +done diff --git a/stream/encode/kliniskarbeidsflate/reflect.sh b/stream/encode/kliniskarbeidsflate/reflect.sh new file mode 100755 index 0000000..7419433 --- /dev/null +++ b/stream/encode/kliniskarbeidsflate/reflect.sh @@ -0,0 +1,4 @@ +#!/bin/sh +while :; do vlc -vvv rtsp://151.216.106.2:554/live1.sdp --network-caching 2000 --no-sout-audio --sout '#std{access=udp,mux=ts,dst=127.0.0.1:9017}' --intf dummy --ttl 60 vlc://quit; +        sleep 5 +done diff --git a/stream/encode/kliniskarbeidsflate/transcode-event-sd.sh b/stream/encode/kliniskarbeidsflate/transcode-event-sd.sh new file mode 100755 index 0000000..fb5c055 --- /dev/null +++ b/stream/encode/kliniskarbeidsflate/transcode-event-sd.sh @@ -0,0 +1,7 @@ +#!/bin/sh + +while :; do +cvlc -vv udp://@:4014 --network-caching 2000 --sout-x264-preset fast --sout-x264-tune film --sout-transcode-threads 22 --no-sout-x264-interlaced --sout-x264-keyint 50 --sout-x264-lookahead 100 \ +--sout '#transcode{height=576,vcodec=h264,vb=2000,acodec=mp4a,aenc=fdkaac,ab=128}:std{access=udp,mux=ts,dst=151.216.125.4:4014}' +sleep 1 +done diff --git a/stream/encode/kliniskarbeidsflate/transcode-fugle-flash.sh b/stream/encode/kliniskarbeidsflate/transcode-fugle-flash.sh new file mode 100755 index 0000000..a924de2 --- /dev/null +++ b/stream/encode/kliniskarbeidsflate/transcode-fugle-flash.sh @@ -0,0 +1,7 @@ +#!/bin/sh +while :; do +cvlc -vv --network-caching 3000 --sout-x264-preset fast --sout-transcode-threads 10 --sout-x264-tune film --no-sout-x264-interlaced --sout-x264-lookahead 50 --sout-x264-vbv-maxrate 800 --sout-x264-vbv-bufsize 800 --sout-x264-keyint 50 -v http://stream.tg13.gathering.org:3015 vlc://quit \ +--sout '#transcode{height=480,fps=25,vcodec=h264,vb=800,acodec=aac,ab=128,deinterlace}:std{access=udp,mux=ffmpeg{mux=flv},dst=151.216.125.4:4020}' +        sleep 1 +done + diff --git a/stream/encode/kliniskarbeidsflate/transcode-noc-fisheye-flash.sh b/stream/encode/kliniskarbeidsflate/transcode-noc-fisheye-flash.sh new file mode 100755 index 0000000..3491232 --- /dev/null +++ b/stream/encode/kliniskarbeidsflate/transcode-noc-fisheye-flash.sh @@ -0,0 +1,6 @@ +#!/bin/sh +while :; do +cvlc -vv --network-caching 5000 --sout-x264-preset fast --sout-transcode-threads 16 --sout-x264-tune film --no-sout-x264-interlaced --sout-x264-lookahead 50 --sout-x264-vbv-maxrate 800 --sout-x264-vbv-bufsize 800 --sout-x264-keyint 50 -v http://stream.tg13.gathering.org:3018 vlc://quit \ +--sout '#transcode{width=768,height=768,vcodec=h264,vb=800}:std{access=udp,mux=ts,dst=151.216.125.4:4019}' +        sleep 1 +done diff --git a/stream/encode/kliniskarbeidsflate/transcode-south.sh b/stream/encode/kliniskarbeidsflate/transcode-south.sh new file mode 100755 index 0000000..d5a83e4 --- /dev/null +++ b/stream/encode/kliniskarbeidsflate/transcode-south.sh @@ -0,0 +1,9 @@ +#!/bin/sh +while :; do cvlc -vv udp://@:9017 \ + --sout-ts-shaping=1000 --sout-ts-use-key-frames --sout-ts-dts-delay=500 --sout-transcode-fps 0 --no-sout-transcode-audio-sync --network-caching 2000 \ + --no-sout-x264-interlaced --sout-x264-preset veryfast --sout-x264-tune film \ + --sout-transcode-threads 3 --sout-x264-keyint 25 --no-sout-audio \ + --sout '#duplicate{dst="transcode{vcodec=h264,height=720,vb=3000}:std{access=udp,mux=ts,dst=151.216.125.4:4017}",dst="std{access=udp,mux=ts,dst=151.216.125.4:4016}"}' \ + --intf dummy --ttl 20 vlc://quit; +        sleep 1 +done diff --git a/stream/encode/politietno/foo-withoutreflect.sh b/stream/encode/politietno/foo-withoutreflect.sh new file mode 100755 index 0000000..21bcda6 --- /dev/null +++ b/stream/encode/politietno/foo-withoutreflect.sh @@ -0,0 +1,6 @@ +#!/bin/sh +/home/techserver/vlc/vlc -I dummy -vvvv --decklink-audio-connection embedded --live-caching 3000 --decklink-aspect-ratio 16:9 --decklink-mode hp50 \ + --sout-x264-preset slow --sout-x264-tune film --sout-transcode-threads 23 --no-sout-x264-interlaced \ + --sout-x264-keyint 50 --sout-x264-lookahead 100 --sout-x264-vbv-maxrate 5000 --sout-x264-vbv-bufsize 5000 \ + -v decklink:// vlc://quit \ + --sout '#transcode{vcodec=h264,vb=3000,acodec=mp4a,aenc=fdkaac,ab=256}:std{access=udp,mux=ts,dst=151.216.124.80:9094}' diff --git a/stream/encode/politietno/foo.sh b/stream/encode/politietno/foo.sh new file mode 100755 index 0000000..dfdfc03 --- /dev/null +++ b/stream/encode/politietno/foo.sh @@ -0,0 +1,6 @@ +#!/bin/sh +/home/techserver/vlc/vlc -I dummy -vvvv --decklink-audio-connection embedded --live-caching 3000 --decklink-aspect-ratio 16:9 --decklink-mode hp50 \ + --sout-x264-preset slow --sout-x264-tune film --sout-transcode-threads 23 --no-sout-x264-interlaced \ + --sout-x264-keyint 50 --sout-x264-lookahead 100 --sout-x264-vbv-maxrate 5000 --sout-x264-vbv-bufsize 5000 \ + -v decklink:// vlc://quit \ + --sout '#transcode{vcodec=h264,vb=3000,acodec=mp4a,aenc=fdkaac,ab=256}:std{access=udp,mux=ts,dst=151.216.125.4:4013}' diff --git a/stream/encode/politietno/svineri.sh b/stream/encode/politietno/svineri.sh new file mode 100755 index 0000000..ac09601 --- /dev/null +++ b/stream/encode/politietno/svineri.sh @@ -0,0 +1,24 @@ +~/decklink-sdk/Linux/Samples/bmdtools/bmdcapture $( +        echo '-C 0'                     # Decklink card number +        echo '-m 11'                    # Input format mode (ID 8 = 1080i/25) +        echo '-V 4'                     # Video input (4 = SDI) +        echo '-A 2'                     # Audio input (2 = Embedded) +        echo '-c 2'                     # Number of audio channels +        echo '-M 10'                    # Memory limit, in GB, for the output buffer (it leaks slightly...) +        echo '-F nut -f pipe:1'         # Output format and file name +) | \ +ffmpeg $( +        echo '-y -re -i -'                                      # Input from pipe +        echo '-v verbose'                                       # Verbosity level +#       echo '-filter:v format=yuv420p,yadif=1:0:0'             # Video format conversion and deinterlacing +        echo '-filter:v scale=480x270' +        echo '-c:v libx264'                                     # Video encoder to use +        echo '-tune film -preset slow'                  # Video encoder options +        echo '-x264opts keyint=50:rc-lookahead=0'               # x264-specific options +#       echo '-b:v 1M'                                          # Video bitrate +        echo '-c:a libfaac'                                     # Audio encoder to use +        echo '-b:a 192k'                                        # Audio bitrate +        echo '-threads auto'                                    # Number of threads to use +        echo '-f mpegts udp://151.216.125.4:4013'   # Output format and file name +) + diff --git a/stream/encode/politietno/transcode-duplicate.sh b/stream/encode/politietno/transcode-duplicate.sh new file mode 100755 index 0000000..591e529 --- /dev/null +++ b/stream/encode/politietno/transcode-duplicate.sh @@ -0,0 +1,7 @@ +#!/bin/sh +while :; do +cvlc -vv --decklink-audio-connection embedded --live-caching 2000 --decklink-aspect-ratio 16:9 --decklink-mode hp50 \ + --sout-x264-preset fast --sout-x264-tune film --sout-transcode-threads 24 --no-sout-x264-interlaced --sout-x264-keyint 50 --sout-x264-lookahead 100 --sout-x264-vbv-maxrate 4000 --sout-x264-vbv-bufsize 4000 decklink:// vlc://quit \ + --sout '#duplicate{dst="transcode{vcodec=h264,vb=6000,acodec=mp4a,aenc=fdkaac,ab=256}:std{access=udp,mux=ts,dst=151.216.125.4:4013}",dst="transcode{height=576,vcodec=h264,vb=2000,acodec=mp4a,aenc=fdkaac,ab=128}:std{access=udp,mux=ts,dst=151.216.125.4:4014}"}' +sleep 1 +done diff --git a/stream/encode/politietno/transcode-duplicate2.sh b/stream/encode/politietno/transcode-duplicate2.sh new file mode 100755 index 0000000..6b85d1d --- /dev/null +++ b/stream/encode/politietno/transcode-duplicate2.sh @@ -0,0 +1,10 @@ +#!/bin/sh +# event signal: +# transcode hd and move to reflector +# mirror signal to encoder2 (kliniskarbeidsflate) and transcode sd -> reflector +while :; do +cvlc -vv --decklink-audio-connection embedded --live-caching 2000 --decklink-aspect-ratio 16:9 --decklink-mode hp50 \ + --sout-x264-preset fast --sout-x264-tune film --sout-transcode-threads 22 --no-sout-x264-interlaced --sout-x264-keyint 50 --sout-x264-lookahead 100 decklink:// vlc://quit \ + --sout '#duplicate{dst="transcode{vcodec=h264,vb=6000,acodec=mp4a,aenc=fdkaac,ab=256}:std{access=udp,mux=ts,dst=151.216.125.4:4013}",dst="std{access=udp,mux=ts,dst=151.216.125.9:4014}"}' +sleep 1 +done diff --git a/stream/encode/politietno/transcode.sh b/stream/encode/politietno/transcode.sh new file mode 100755 index 0000000..a4feda9 --- /dev/null +++ b/stream/encode/politietno/transcode.sh @@ -0,0 +1,6 @@ +#!/bin/sh +cvlc -I dummy -vvvv --decklink-audio-connection embedded --live-caching 2000 --decklink-aspect-ratio 16:9 --decklink-mode hp50 \ + --sout-x264-preset slow --sout-x264-tune film --sout-transcode-threads 23 --no-sout-x264-interlaced \ + --sout-x264-keyint 50 --sout-x264-lookahead 100 --sout-x264-vbv-maxrate 6000 --sout-x264-vbv-bufsize 6000 \ + -v decklink:// vlc://quit \ + --sout '#transcode{vcodec=h264,vb=6000,acodec=mp4a,aenc=fdkaac,ab=256}:std{access=udp,mux=ts,dst=151.216.125.4:4013}' diff --git a/stream/encode/politietno/vid.sh b/stream/encode/politietno/vid.sh new file mode 100755 index 0000000..8c5bcba --- /dev/null +++ b/stream/encode/politietno/vid.sh @@ -0,0 +1,7 @@ +#!/bin/sh +# VLC for box connected to broadcast-equipment Blackmagic/Decklink: Audio and Video from SDI Transcodes HD and sends via UDP to reflector - Marius / Tech:Server +while :; do cvlc -vv --no-decklink-tenbits --decklink-audio-connection embedded --live-caching 1800 --decklink-aspect-ratio 16:9 --decklink-mode hp50 \ + --sout-x264-preset medium --sout-x264-tune film --sout-transcode-threads 15 --no-sout-x264-interlaced --sout-x264-keyint 100 --sout-x264-lookahead 50 --sout-x264-vbv-maxrate 7000 --sout-x264-vbv-bufsize 7000 -v decklink:// vlc://quit \ + --sout '#transcode{vcodec=h264,vb=3000,acodec=mp3,ab=256}:std{access=udp,mux=ts,dst=151.216.125.4:4013}' +        sleep 1 +done diff --git a/stream/reflect/count-retrofit.sh b/stream/reflect/count-retrofit.sh new file mode 100755 index 0000000..1ff8c30 --- /dev/null +++ b/stream/reflect/count-retrofit.sh @@ -0,0 +1,22 @@ +#!/bin/bash + +while :; do +	date=$(date +"%Y-%m-%d-%H:%M:%S") +	#( lsof -n | grep vlc ; ssh root@gaffeltruck.tg12.gathering.org 'lsof -n | grep vlc' ) > /var/log/stream-count/$date +	sudo lsof -n | grep vlc > /var/log/stream-count/$date +	for PORT in 3013 3014 3015 3016 3017 3018 3019 5013 5015 5019; do +		for PROTO in IPv4 IPv6; do +			if [ "$PROTO" = "IPv4" ]; then +				GREPFOR='151\.216' +			else +				GREPFOR='2a02:ed02:' +			fi + +			# 151.216.x.x / 2a02:ed02::/32 -> TG13 +			cat /var/log/stream-count/$date | grep EST | egrep $GREPFOR | egrep "(151\.216\..*|2a02:ed02:.*):$PORT->" | cut -d'>' -f2 | sed 's/:[0-9]\+ (ESTABLISHED)//' | sort -u | grep -vEc -e "\[2a02:ed02:|151\.216\." | while read foo; do echo "$date $PORT $PROTO external $foo"; done | tee -a better_datacube.log +			cat /var/log/stream-count/$date | grep EST | egrep $GREPFOR | egrep "(151\.216\..*|2a02:ed02:.*):$PORT->" | cut -d'>' -f2 | sed 's/:[0-9]\+ (ESTABLISHED)//' | sort -u | grep -Ec -e "\[2a02:ed02:|151\.216\." | while read foo; do echo "$date $PORT $PROTO internal $foo"; done | tee -a better_datacube.log +		done +	done +	sleep 60 +done; + diff --git a/stream/reflect/count.sh b/stream/reflect/count.sh new file mode 100755 index 0000000..e1fa38c --- /dev/null +++ b/stream/reflect/count.sh @@ -0,0 +1,22 @@ +#!/bin/bash + +while :; do +	date=$(date +"%Y-%m-%d-%H:%M:%S") +	#( lsof -n | grep vlc ; ssh root@gaffeltruck.tg12.gathering.org 'lsof -n | grep vlc' ) > /var/log/stream-count/$date +	sudo lsof -n | grep vlc > /var/log/stream-count/$date +	for PORT in 3013 3014 3015 3016 3017 3018 3019 5013 5015 5019; do +		for PROTO in IPv4 IPv6; do +			if [ "$PROTO" = "IPv4" ]; then +				GREPFOR='151\.216' +			else +				GREPFOR='2a02:ed02:' +			fi + +			# 151.216.x.x / 2a02:ed02::/32 -> TG13 +			cat /var/log/stream-count/$date | grep EST | egrep $GREPFOR | egrep "(151\.216\..*|2a02:ed02:.*):$PORT->" | cut -d'>' -f2 | sed 's/:[0-9]\+ (ESTABLISHED)//' | sort -u | grep -vEc -e "\[2a02:ed02:|151\.216\." | while read foo; do echo "$date $PORT $PROTO external $foo"; done | tee -a count_datacube.log +			cat /var/log/stream-count/$date | grep EST | egrep $GREPFOR | egrep "(151\.216\..*|2a02:ed02:.*):$PORT->" | cut -d'>' -f2 | sed 's/:[0-9]\+ (ESTABLISHED)//' | sort -u | grep -Ec -e "\[2a02:ed02:|151\.216\." | while read foo; do echo "$date $PORT $PROTO internal $foo"; done | tee -a count_datacube.log +		done +	done +	sleep 60 +done; + diff --git a/stream/reflect/htb.sh b/stream/reflect/htb.sh new file mode 100755 index 0000000..c6107ea --- /dev/null +++ b/stream/reflect/htb.sh @@ -0,0 +1,79 @@ +#!/bin/bash +it () { +    iptables $@ +    ip6tables $@ +} + +setup_htb() { +    FROM=$1 +    TO=$2 +    RATEMBIT=$3 +    FIFOLIMIT=$(( RATEMBIT * 1048576 / 8 ))  # about one second +    echo $FROM..$TO ${RATEMBIT}Mbit fifolimit=$FIFOLIMIT >&2 + +    for i in $( seq $FROM $TO ); do +    	# slots need to be in hex, crazy enough +    	slot=$( printf %x $(( i + 1 )) ) + +    	# no burst! perfectly even sending at the given rate +    	echo class add dev eth0 parent 8000: classid 8000:$slot htb rate ${RATEMBIT}Mbit burst 0 mtu 576 + +    	# every class needs a child qdisc, plug in a plain fifo +    	# 8000kbit = 512 000 +    	echo qdisc add dev eth0 parent 8000:$slot handle $slot: bfifo limit $FIFOLIMIT +    	#echo qdisc add dev eth0 parent 8000:$slot handle $slot: fq_codel limit 1000 +    done +} + +ethtool -K eth0 gso off tso off + +# iptables stuff +it -t mangle -F OUTPUT +it -t mangle -A OUTPUT -p tcp -m multiport ! --sport 3013,3014,3015,3016,3017,3018,5013,5015,5016,5018 -j MARK --set-mark 65000 +it -t mangle -A OUTPUT ! -p tcp -j MARK --set-mark 65000 + +( +  # reset tc +  echo qdisc del dev eth0 root + +  # @Sesse  Rockj: https://www.google.com/search?q=6000+kbit%2Fsec+*+0.5+seconds+in+byte +  # @Sesse  ViD: ogsÃ¥ trenger du flere sett med køer, for 2mbit-strømmer burde shapes annerledes enn 5mbit-strømmer :-P +   +  # root qdisc should be htb +  echo qdisc add dev eth0 root handle 8000: htb r2q 100 +   +  # all non-vlc traffic (fwmark 5) goes into the default class +  echo class add dev eth0 parent 8000: classid 8000:1 htb rate 10Gbit burst 8192 mtu 1514 +  echo filter add dev eth0 parent 8000: handle 65000 pref 10 fw classid 8000:1 +   +  # setup_htb 1 799 6        # Main stream hq 3mbps +  # setup_htb 800 1000 15    # Fuglecam raw 7-8mbps +  # # setup_htb 10000 11999 15  # South raw ?? +  # # setup_htb 12000 13999 1   # South transcoded, 500 kbits +  # # setup_htb 14000 15999 25  # NOC Fisheye  15mbps ish +  # # setup_htb 20000 21999 2   # Flashstrøm 1mbps +   +  # setup_htb 1 4999 10       # Main stream hq 6mbps +  # setup_htb 5000 7999 5    # Main stream sd 2mbit +  # setup_htb 8000 9999 15    # Fuglecam raw 7-8mbps +  # setup_htb 10000 11999 15  # South raw ?? +  # setup_htb 12000 13999 1   # South transcoded, 500 kbits +  # setup_htb 14000 15999 25  # NOC Fisheye  15mbps ish +  # setup_htb 16000 18999 2   # Flashstrøm fugleberget 1mbps +  # setup_htb 19000 21999 2   # Flashstrøm event 1mbps +  # setup_htb 22000 24999 2   # Flashstrøm south 1mbps +  # setup_htb 25000 27999 2   # Flashstrøm noc 1mbps +  setup_htb 1 4999 10       # Main stream hq 6mbps +  setup_htb 5000 5999 5    # Main stream sd 2mbit +  setup_htb 8000 9999 15    # Fuglecam raw 7-8mbps +  setup_htb 10000 11999 15  # South raw ?? +  setup_htb 12000 13999 1   # South transcoded, 500 kbits +  setup_htb 14000 15999 25  # NOC Fisheye  15mbps ish +  setup_htb 16000 18999 2   # Flashstrøm fugleberget 1mbps +  setup_htb 19000 21999 2   # Flashstrøm event 1mbps +  setup_htb 22000 24999 2   # Flashstrøm south 1mbps +  setup_htb 25000 25999 2   # Flashstrøm noc 1mbps +   +  # decide between the classes by mark +  echo filter add dev eth0 parent 8000: handle 2 pref 20 flow map key mark baseclass 8000:2 +) | tc -b diff --git a/stream/reflect/old/reflectsouth.sh b/stream/reflect/old/reflectsouth.sh new file mode 100755 index 0000000..39504e5 --- /dev/null +++ b/stream/reflect/old/reflectsouth.sh @@ -0,0 +1,5 @@ +#!/bin/sh +while :; do +vlc --intf dummy -v http://pannekake.samfundet.no:9094 vlc://quit --sout '#duplicate{dst=std{access=http,mux=ts,dst=:3014},dst=std{access=udp,mux=ts,dst=233.191.12.2:2014}' --intf dummy --ttl 20 +        sleep 1 +done diff --git a/stream/reflect/old/reflectsouth720p.sh b/stream/reflect/old/reflectsouth720p.sh new file mode 100755 index 0000000..355cf8e --- /dev/null +++ b/stream/reflect/old/reflectsouth720p.sh @@ -0,0 +1,6 @@ +#!/bin/sh +while :; do +cvlc --intf dummy -v "#transcode{vcodec=h264,width=320,height=180,acodec=aac,ab=128,vb=500}:rtp{port=4555,sdp=rtsp://151.216.106.2:4555/stream.sdp,mp4aÂ-latm}" +vlc --intf dummy -v http://pannekake.samfundet.no:9093 vlc://quit --sout '#std{access=http,mux=ts,dst=:5014}' --intf dummy --ttl 30 +        sleep 1 +done diff --git a/stream/reflect/reflect-event-lol.sh b/stream/reflect/reflect-event-lol.sh new file mode 100755 index 0000000..74dbea6 --- /dev/null +++ b/stream/reflect/reflect-event-lol.sh @@ -0,0 +1,7 @@ +#!/bin/sh +while :; do +sudo cvlc --intf dummy -v --sout-http-mark-start 0 --sout-http-mark-end 4999 udp://@:4013 vlc://quit --sout \ +'#duplicate{dst=std{access=http,mux=ts,dst=[::]:3013}",dst=std{access=udp,mux=ts,dst=[ff7e:a40:2a02:ed02:ffff::13]:2013},dst=std{access=livehttp{seglen=5,delsegs=true,numsegs=5,index=/srv/stream.tg13.gathering.org/ios/event.m3u8,index-url=http://stream.tg13.gathering.org/ios/event-########.ts},mux=ts{use-key-frames},dst=/srv/stream.tg13.gathering.org/ios/event-########.ts}}}' \ +--intf dummy --ttl 60 +        sleep 1 +done diff --git a/stream/reflect/reflect-event-sd.sh b/stream/reflect/reflect-event-sd.sh new file mode 100755 index 0000000..aa38018 --- /dev/null +++ b/stream/reflect/reflect-event-sd.sh @@ -0,0 +1,5 @@ +#!/bin/sh +while :; do +sudo cvlc --intf dummy -v --sout-http-mark-start 5000 --sout-http-mark-end 7999 udp://@:4014 vlc://quit --sout '#duplicate{dst=std{access=http,mux=ts,dst=[::]:3014},dst=std{access=udp,mux=ts,dst=[ff7e:a40:2a02:ed02:ffff::14]:2014}' --intf dummy --ttl 60 +        sleep 1 +done diff --git a/stream/reflect/reflect-event.sh b/stream/reflect/reflect-event.sh new file mode 100755 index 0000000..3ab8c42 --- /dev/null +++ b/stream/reflect/reflect-event.sh @@ -0,0 +1,7 @@ +#!/bin/sh +while :; do +sudo cvlc --intf dummy -v --sout-http-mark-start 0 --sout-http-mark-end 4999 udp://@:4013 vlc://quit --sout \ +'#duplicate{dst=std{access=http,mux=ts,dst=[::]:3013}",dst=std{access=udp,mux=ts,dst=[ff7e:a40:2a02:ed02:ffff::13]:2013},dst=std{access=livehttp{seglen=5,delsegs=true,numsegs=5,index=/srv/stream.tg13.gathering.org/ios/stream.m3u8,index-url=http://stream.tg13.gathering.org/ios/stream-########.ts},mux=ts{use-key-frames},dst=/srv/stream.tg13.gathering.org/ios/stream-########.ts}}}' \ +--intf dummy --ttl 60 +        sleep 1 +done diff --git a/stream/reflect/reflect-fugle-flash.sh b/stream/reflect/reflect-fugle-flash.sh new file mode 100755 index 0000000..5de38bb --- /dev/null +++ b/stream/reflect/reflect-fugle-flash.sh @@ -0,0 +1,6 @@ +#!/bin/sh +while :; do +sudo cvlc -vv --sout-http-mark-start 16000 --sout-http-mark-end 18999 --network-caching 3000 --sout-x264-preset fast --sout-transcode-threads 10 --sout-x264-tune film --no-sout-x264-interlaced --sout-x264-lookahead 50 --sout-x264-vbv-maxrate 800 --sout-x264-vbv-bufsize 800 --sout-x264-keyint 50 -v udp://@:4020 vlc://quit \ +--sout '#std{access=http{mime=video/x-flv},mux=ffmpeg{mux=flv},dst=[::]:5015/stream.flv}' +        sleep 1 +done diff --git a/stream/reflect/reflect-fuglecam.sh b/stream/reflect/reflect-fuglecam.sh new file mode 100755 index 0000000..c9a8917 --- /dev/null +++ b/stream/reflect/reflect-fuglecam.sh @@ -0,0 +1,5 @@ +#!/bin/bash +while :; do +sudo vlc -vvv --intf dummy -v --sout-http-mark-start 8000 --sout-http-mark-end 9999 udp://@:4015 vlc://quit --sout '#duplicate{dst=std{access=http,mux=ts,dst=[::]:3015},dst=std{access=udp,mux=ts,dst=[ff7e:a40:2a02:ed02:ffff::15]:2015}' --intf dummy --ttl 60 +	sleep 1 +done diff --git a/stream/reflect/reflect-nicfisheye-flash.sh b/stream/reflect/reflect-nicfisheye-flash.sh new file mode 100755 index 0000000..dd4da84 --- /dev/null +++ b/stream/reflect/reflect-nicfisheye-flash.sh @@ -0,0 +1,5 @@ +#!/bin/bash +while :; do +sudo vlc -vvv --intf dummy -v --sout-http-mark-start 25000 --sout-http-mark-end 27999 udp://@:4018 vlc://quit --sout '#duplicate{dst=std{access=http,mux=ts,dst=[::]:3018},dst=std{access=udp,mux=ts,dst=[ff7e:a40:2a02:ed02:ffff::18]:2018}' --intf dummy --ttl 60 +	sleep 1 +done diff --git a/stream/reflect/reflect-noc-transcodes.sh b/stream/reflect/reflect-noc-transcodes.sh new file mode 100755 index 0000000..3a1fe4e --- /dev/null +++ b/stream/reflect/reflect-noc-transcodes.sh @@ -0,0 +1,5 @@ +#!/bin/sh +while :; do +sudo cvlc -vvv --intf dummy -v --sout-http-mark-start 25000 --sout-http-mark-end 27999 udp://@:4019 vlc://quit --sout '#duplicate{dst="std{access=http{mime=video/x-flv},dst=[::]:5019/stream.flv}",dst="std{access=http,mux=ts,dst=[::]:3019}",dst="std{access=udp,mux=ts,dst=[ff7e:a40:2a02:ed02:ffff::19]:2019}"}' --intf dummy --ttl 60 +	sleep 1 +done diff --git a/stream/reflect/reflect-nocfisheye.sh b/stream/reflect/reflect-nocfisheye.sh new file mode 100755 index 0000000..6a003f4 --- /dev/null +++ b/stream/reflect/reflect-nocfisheye.sh @@ -0,0 +1,5 @@ +#!/bin/sh +while :; do +sudo cvlc -vvv --intf dummy -v --sout-http-mark-start 14000 --sout-http-mark-end 15999 --network-caching 2000 rtsp://151.216.124.79/live.sdp vlc://quit --sout '#duplicate{dst=std{access=http,mux=ts,dst=[::]:3018},dst=std{access=udp,mux=ts,dst=[ff7e:a40:2a02:ed02:ffff::18]:2018}' --intf dummy --ttl 60 +	sleep 1 +done diff --git a/stream/reflect/reflect-south-raw.sh b/stream/reflect/reflect-south-raw.sh new file mode 100755 index 0000000..720e94c --- /dev/null +++ b/stream/reflect/reflect-south-raw.sh @@ -0,0 +1,5 @@ +#!/bin/sh +while :; do +sudo cvlc -vvv --intf dummy -v --sout-http-mark-start 10000 --sout-http-mark-end 11999 udp://@151.216.125.4:4016 vlc://quit --sout '#duplicate{dst=std{access=http,mux=ts,dst=[::]:3016},dst=std{access=udp,mux=ts,dst=[ff7e:a40:2a02:ed02:ffff::16]:2016}' --intf dummy --ttl 60 +	sleep 1 +done diff --git a/stream/reflect/reflect-south-transcode.sh b/stream/reflect/reflect-south-transcode.sh new file mode 100755 index 0000000..65798dc --- /dev/null +++ b/stream/reflect/reflect-south-transcode.sh @@ -0,0 +1,5 @@ +#!/bin/sh +while :; do +vlc -vvv --intf dummy -v --sout-http-mark-start 12000 --sout-http-mark-end 13999 udp://@:4017 vlc://quit --sout '#duplicate{dst=std{access=http,mux=ts,dst=[::]:3017},dst=std{access=udp,mux=ts,dst=[ff7e:a40:2a02:ed02:ffff::17]:2017}' --intf dummy --ttl 60 +	sleep 1 +done diff --git a/stream/reflect/transcode-event-flash.sh b/stream/reflect/transcode-event-flash.sh new file mode 100755 index 0000000..34f546f --- /dev/null +++ b/stream/reflect/transcode-event-flash.sh @@ -0,0 +1,6 @@ +#!/bin/sh +while :; do +sudo cvlc -vv --sout-http-mark-start 19000 --sout-http-mark-end 21999 --network-caching 5000 --sout-x264-preset fast --sout-transcode-threads 10 --sout-x264-tune film --no-sout-x264-interlaced --sout-x264-lookahead 50 --sout-x264-vbv-maxrate 800 --sout-x264-vbv-bufsize 800 --sout-x264-keyint 50 -v http://stream.tg13.gathering.org:3013 vlc://quit \ +--sout '#transcode{height=480,fps=25,vcodec=h264,vb=800,acodec=aac,ab=128}:std{access=http{mime=video/x-flv},dst=[::]:5013/stream.flv}' +        sleep 1 +done diff --git a/stream/reflect/transcode-fugle-flash.sh b/stream/reflect/transcode-fugle-flash.sh new file mode 100755 index 0000000..110b8b8 --- /dev/null +++ b/stream/reflect/transcode-fugle-flash.sh @@ -0,0 +1,6 @@ +#!/bin/sh +while :; do +sudo cvlc -vv --sout-http-mark-start 16000 --sout-http-mark-end 18999 --network-caching 3000 --sout-x264-preset fast --sout-transcode-threads 10 --sout-x264-tune film --no-sout-x264-interlaced --sout-x264-lookahead 50 --sout-x264-vbv-maxrate 800 --sout-x264-vbv-bufsize 800 --sout-x264-keyint 50 -v http://stream.tg13.gathering.org:3015 vlc://quit \ +--sout '#transcode{height=480,fps=25,vcodec=h264,vb=800,acodec=aac,ab=128,deinterlace}:std{access=http{mime=video/x-flv},dst=[::]:5015/stream.flv}' +        sleep 1 +done diff --git a/stream/reflect/transcode-nocfisheye-flash.sh b/stream/reflect/transcode-nocfisheye-flash.sh new file mode 100755 index 0000000..19f89ad --- /dev/null +++ b/stream/reflect/transcode-nocfisheye-flash.sh @@ -0,0 +1,6 @@ +#!/bin/sh +while :; do +sudo cvlc -vv --sout-http-mark-start 25000 --sout-http-mark-end 27999 --network-caching 5000 --sout-x264-preset fast --sout-transcode-threads 10 --sout-x264-tune film --no-sout-x264-interlaced --sout-x264-lookahead 50 --sout-x264-vbv-maxrate 800 --sout-x264-vbv-bufsize 800 --sout-x264-keyint 50 -v http://stream.tg13.gathering.org:3018 vlc://quit \ +--sout '#transcode{height=480,fps=25,vcodec=h264,vb=800,acodec=aac,ab=128}:std{access=http{mime=video/x-flv},dst=[::]:5018/stream.flv}' +        sleep 1 +done diff --git a/stream/reflect/transcode-south-flash.sh b/stream/reflect/transcode-south-flash.sh new file mode 100755 index 0000000..6bf2cb8 --- /dev/null +++ b/stream/reflect/transcode-south-flash.sh @@ -0,0 +1,6 @@ +#!/bin/sh +while :; do +sudo cvlc -vv --sout-http-mark-start 22000 --sout-http-mark-end 24999 --network-caching 5000 --sout-x264-preset fast --sout-transcode-threads 10 --sout-x264-tune film --no-sout-x264-interlaced --sout-x264-lookahead 50 --sout-x264-vbv-maxrate 800 --sout-x264-vbv-bufsize 800 --sout-x264-keyint 50 -v http://stream.tg13.gathering.org:3016 vlc://quit \ +--sout '#transcode{height=480,fps=25,vcodec=h264,vb=800,acodec=aac,ab=128}:std{access=http{mime=video/x-flv},dst=[::]:5016/stream.flv}' +        sleep 1 +done diff --git a/stream/reflect/usage.txt b/stream/reflect/usage.txt new file mode 100644 index 0000000..8b90bee --- /dev/null +++ b/stream/reflect/usage.txt @@ -0,0 +1,3 @@ +event-sd -   ./reflect-event-sd.sh +event - ./reflect-event-lol.sh +event-flash - ./transcode-event-flash.sh  diff --git a/stream/transcode/count.sh b/stream/transcode/count.sh new file mode 100755 index 0000000..22f6aa1 --- /dev/null +++ b/stream/transcode/count.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +while :; do +	date=$(date +"%Y-%m-%d-%H:%M:%S") +	( lsof -n | grep vlc ; ssh root@gaffeltruck.tg12.gathering.org 'lsof -n | grep vlc' ) > /var/log/stream-count/$date +	for PORT in 3013 5013 3014 5014 3015; do +		for PROTO in IPv4 IPv6; do	 +			# 176.110.x.x / 2a01:798:76a:125:: -> TG12 +			# 176.31.230.19 / 2001:41d0:2:f700::2 -> OVH box +			cat /var/log/stream-count/$date | grep EST | egrep $PROTO | egrep "(176\.31\.230\.19|2001:41d0:2:f700::.*):$PORT->" | cut -d'>' -f2 | sed 's/:[0-9]\+ (ESTABLISHED)//' | sort -u | grep -vEc 'fisk' | while read foo; do echo "$date $PORT $PROTO foreign $foo"; done | tee -a count_datacube.log +			cat /var/log/stream-count/$date | grep EST | egrep $PROTO | egrep "(176\.110\..*|2a01:798:76a:125::.*):$PORT->" | cut -d'>' -f2 | sed 's/:[0-9]\+ (ESTABLISHED)//' | sort -u | grep -vEc -e "\[2a01:798:76a:|176\.110\." | while read foo; do echo "$date $PORT $PROTO external $foo"; done | tee -a count_datacube.log +			cat /var/log/stream-count/$date | grep EST | egrep $PROTO | egrep "(176\.110\..*|2a01:798:76a:125::.*):$PORT->" | cut -d'>' -f2 | sed 's/:[0-9]\+ (ESTABLISHED)//' | sort -u | grep -Ec -e "\[2a01:798:76a:|176\.110\." | while read foo; do echo "$date $PORT $PROTO internal $foo"; done | tee -a count_datacube.log +		done +	done +	sleep 60 +done; + diff --git a/stream/transcode/flash.sh b/stream/transcode/flash.sh new file mode 100755 index 0000000..3c42a8c --- /dev/null +++ b/stream/transcode/flash.sh @@ -0,0 +1,6 @@ +#!/bin/sh +# udp://@:5013 +while :; do +vlc --intf dummy -vvv http://vivace.tg12.gathering.org:5013/stream.flv vlc://quit --network-caching 2000 --sout-mux-caching 3000 --sout "#std{access=http{mime=video/x-flv},dst=:5013/stream.flv}" +	sleep 1 +done diff --git a/stream/transcode/flashtest.sh b/stream/transcode/flashtest.sh new file mode 100755 index 0000000..83ea48d --- /dev/null +++ b/stream/transcode/flashtest.sh @@ -0,0 +1,5 @@ +#!/bin/sh +while :; do +	vlc --intf dummy -vvv http://stream.tg12.gathering.org:3013 vlc://quit --udp-caching 1000 --sout-x264-tune film --sout-x264-keyint 25 --sout-x264-preset veryfast --sout "#transcode{width=980,height=550,vcodec=h264,vb=1000,acodec=aac,ab=128}:std{access=http{mime=video/x-flv},dst=:5013/stream.flv}" +        sleep 1 +done diff --git a/stream/transcode/ios-sd.sh b/stream/transcode/ios-sd.sh new file mode 100755 index 0000000..28a907a --- /dev/null +++ b/stream/transcode/ios-sd.sh @@ -0,0 +1,7 @@ +#!/bin/sh +while :; do +vlc -I dummy --live-caching 0 http://vivace.tg12.gathering.org:5013/stream.flv --sout-x264-profile baseline --sout-x264-preset veryfast --sout-x264-aud --sout-x264-keyint 30 --sout-x264-ref 1 vlc://quit --sout='#std{access=livehttp{seglen=10,delsegs=true,numsegs=5,index=/srv/stream.tg12.gathering.org/ios/sd.m3u8,index-url=http://stream.tg12.gathering.org/ios/sd-########.ts},mux=ts{use-key-frames},dst=/srv/stream.tg12.gathering.org/ios/sd-########.ts}' +	sleep 2 +done + +# --sout-x264-level 30 diff --git a/stream/transcode/ios-south.sh b/stream/transcode/ios-south.sh new file mode 100755 index 0000000..ac06968 --- /dev/null +++ b/stream/transcode/ios-south.sh @@ -0,0 +1,7 @@ +#!/bin/sh +while :; do +vlc -I dummy --live-caching 0 udp://@:5114 vlc://quit --sout='#std{access=livehttp{seglen=10,delsegs=true,numsegs=5,index=/srv/stream.tg12.gathering.org/ios/south.m3u8,index-url=http://stream.tg12.gathering.org/ios/south-########.ts},mux=ts{use-key-frames},dst=/srv/stream.tg12.gathering.org/ios/south-########.ts}'  +	sleep 2 +done + +# --sout-x264-level 30 diff --git a/stream/vlc-patches/listen_all.git.patch b/stream/vlc-patches/listen_all.git.patch new file mode 100644 index 0000000..41e1c87 --- /dev/null +++ b/stream/vlc-patches/listen_all.git.patch @@ -0,0 +1,28 @@ +diff --git a/src/network/io.c b/src/network/io.c +index 7cc9764..08a0b56 100644 +--- a/src/network/io.c ++++ b/src/network/io.c +@@ -87,14 +87,15 @@ int net_Socket (vlc_object_t *p_this, int family, int socktype, +  +     setsockopt (fd, SOL_SOCKET, SO_REUSEADDR, &(int){ 1 }, sizeof (int)); +  +-#ifdef IPV6_V6ONLY +-    /* +-     * Accepts only IPv6 connections on IPv6 sockets. +-     * If possible, we should open two sockets, but it is not always possible. +-     */ +-    if (family == AF_INET6) +-        setsockopt (fd, IPPROTO_IPV6, IPV6_V6ONLY, &(int){ 1 }, sizeof (int)); +-#endif ++    // sesse fix monday night ++// #ifdef IPV6_V6ONLY ++//     /* ++//      * Accepts only IPv6 connections on IPv6 sockets. ++//      * If possible, we should open two sockets, but it is not always possible. ++//      */ ++//     if (family == AF_INET6) ++//         setsockopt (fd, IPPROTO_IPV6, IPV6_V6ONLY, &(int){ 1 }, sizeof (int)); ++// #endif +  + #if defined (WIN32) + # ifndef IPV6_PROTECTION_LEVEL diff --git a/stream/vlc-patches/vlc-git-sesse.patch b/stream/vlc-patches/vlc-git-sesse.patch new file mode 100644 index 0000000..a38b378 --- /dev/null +++ b/stream/vlc-patches/vlc-git-sesse.patch @@ -0,0 +1,131 @@ +diff --git a/modules/access_output/http.c b/modules/access_output/http.c +index 61095f5..18ffc9a 100644 +--- a/modules/access_output/http.c ++++ b/modules/access_output/http.c +@@ -72,9 +72,17 @@ vlc_module_begin () +                   PASS_TEXT, PASS_LONGTEXT, true ) +     add_string( SOUT_CFG_PREFIX "mime", "", +                 MIME_TEXT, MIME_LONGTEXT, true ) ++    add_integer( SOUT_CFG_PREFIX "mark-start", "", ++                "lol", "Fancy option", -1 ) ++    add_integer( SOUT_CFG_PREFIX "mark-end", "", ++                "rotfl", "Should maybe also be set", -1 ) +     set_callbacks( Open, Close ) + vlc_module_end () +  ++// globals ++extern vlc_mutex_t mark_lock; ++extern int *mark_used; ++extern int mark_start, mark_end; +  + /***************************************************************************** +  * Exported prototypes +@@ -178,6 +186,21 @@ static int Open( vlc_object_t *p_this ) +         return VLC_EGENERIC; +     } +  ++    fprintf(stderr, "tjobing\n"); ++    if (mark_used == NULL) { ++      mark_start = var_InheritInteger( p_access, SOUT_CFG_PREFIX "mark-start"); ++      mark_end = var_InheritInteger( p_access, SOUT_CFG_PREFIX "mark-end"); ++      fprintf(stderr, "jabla: %d -> %d\n", mark_start, mark_end); ++ ++      if (mark_start >= 0 && mark_end > mark_start) { ++        vlc_mutex_init(&mark_lock); ++        mark_used = (int *)malloc((mark_end - mark_start) * sizeof(int)); ++        for (int i = 0; i < mark_end - mark_start; ++i) { ++          mark_used[i] = 0; ++        } ++      } ++    } ++ +     psz_user = var_GetNonEmptyString( p_access, SOUT_CFG_PREFIX "user" ); +     psz_pwd = var_GetNonEmptyString( p_access, SOUT_CFG_PREFIX "pwd" ); +     if( p_access->psz_access && !strcmp( p_access->psz_access, "mmsh" ) ) +diff --git a/src/libvlccore.sym b/src/libvlccore.sym +index 25d83c5..335edda 100644 +--- a/src/libvlccore.sym ++++ b/src/libvlccore.sym +@@ -631,3 +631,7 @@ xml_ReaderDelete + xml_ReaderReset + vlc_keycode2str + vlc_str2keycode ++mark_end ++mark_lock ++mark_start ++mark_used +diff --git a/src/network/httpd.c b/src/network/httpd.c +index f76c47c..d7897bb 100644 +--- a/src/network/httpd.c ++++ b/src/network/httpd.c +@@ -67,6 +67,50 @@ +  + static void httpd_ClientClean( httpd_client_t *cl ); +  ++VLC_API vlc_mutex_t mark_lock; ++VLC_API int *mark_used = NULL; ++VLC_API int mark_start = -1; ++VLC_API int mark_end = -1; ++ ++void mark_socket(int fd) ++{ ++    vlc_mutex_lock(&mark_lock); ++    int best_mark = mark_start; ++    int best_mark_val = mark_used[0]; ++ ++    for (int i = 1; i < mark_end - mark_start; ++i) { ++        if (mark_used[i] < best_mark_val) { ++            best_mark = mark_start + i; ++            best_mark_val = mark_used[i]; ++        } ++    } ++    fprintf( stderr, "PICKED MARK %d WITH OLD USAGE %d\n", best_mark, best_mark_val); ++    if (setsockopt (fd, SOL_SOCKET, SO_MARK, &best_mark, sizeof(best_mark)) == -1) { ++        perror("setsockopt(SO_MARK)"); ++    } else { ++        ++mark_used[best_mark - mark_start]; ++    } ++    vlc_mutex_unlock(&mark_lock); ++} ++ ++void unmark_socket(int fd) ++{ ++    int mark; ++    socklen_t mark_len = sizeof(mark); ++    if (getsockopt (fd, SOL_SOCKET, SO_MARK, &mark, &mark_len) == -1) { ++        perror("getsockopt(SO_MARK)"); ++        return; ++    } ++    if (mark < mark_start || mark >= mark_end) { ++        fprintf("UNKNOWN MARK %d\n", mark); ++    } ++ ++    vlc_mutex_lock(&mark_lock); ++    --mark_used[mark - mark_start]; ++    fprintf(stderr, "UNMARKED MARK %d WITH NEW USAGE %d\n", mark, mark_used[mark - mark_start]); ++    vlc_mutex_unlock(&mark_lock); ++} ++ + /* each host run in his own thread */ + struct httpd_host_t + { +@@ -1295,6 +1339,7 @@ static void httpd_ClientClean( httpd_client_t *cl ) +     { +         if( cl->p_tls != NULL ) +             vlc_tls_SessionDelete( cl->p_tls ); ++        unmark_socket( cl->fd ); +         net_Close( cl->fd ); +         cl->fd = -1; +     } +@@ -2309,6 +2354,11 @@ static void* httpd_HostThread( void *data ) +             setsockopt (fd, SOL_SOCKET, SO_REUSEADDR, +                         &(int){ 1 }, sizeof(int)); +  ++            // find a free mark ++            if (mark_used != NULL) { ++                mark_socket(fd); ++            } ++ +             vlc_tls_t *p_tls; +  +             if( host->p_tls != NULL ) diff --git a/stream/vlc-patches/vlc-mark.patch b/stream/vlc-patches/vlc-mark.patch new file mode 100644 index 0000000..877b78c --- /dev/null +++ b/stream/vlc-patches/vlc-mark.patch @@ -0,0 +1,136 @@ +diff -ur vlc-2.0.5/modules/access_output/http.c vlc-2.0.5.patchde/modules/access_output/http.c +--- vlc-2.0.5/modules/access_output/http.c	2011-12-22 11:38:28.000000000 +0100 ++++ vlc-2.0.5.patchde/modules/access_output/http.c	2013-02-07 01:23:10.966721881 +0100 +@@ -89,9 +89,17 @@ +     add_bool( SOUT_CFG_PREFIX "bonjour", false, +               BONJOUR_TEXT, BONJOUR_LONGTEXT, true); + #endif ++    add_integer( SOUT_CFG_PREFIX "mark-start", "", ++                "lol", "Fancy option", -1 ) ++    add_integer( SOUT_CFG_PREFIX "mark-end", "", ++                "rotfl", "Should maybe also be set", -1 ) +     set_callbacks( Open, Close ) + vlc_module_end () +  ++// globals ++extern vlc_mutex_t mark_lock; ++extern int *mark_used; ++extern int mark_start, mark_end; +  + /***************************************************************************** +  * Exported prototypes +@@ -199,6 +207,21 @@ +         return VLC_EGENERIC; +     } +  ++    fprintf(stderr, "tjobing\n"); ++    if (mark_used == NULL) { ++      mark_start = var_InheritInteger( p_access, SOUT_CFG_PREFIX "mark-start"); ++      mark_end = var_InheritInteger( p_access, SOUT_CFG_PREFIX "mark-end"); ++      fprintf(stderr, "jabla: %d -> %d\n", mark_start, mark_end); ++ ++      if (mark_start >= 0 && mark_end > mark_start) { ++        vlc_mutex_init(&mark_lock); ++        mark_used = (int *)malloc((mark_end - mark_start) * sizeof(int)); ++        for (int i = 0; i < mark_end - mark_start; ++i) { ++          mark_used[i] = 0; ++        } ++      } ++    } ++ +     psz_user = var_GetNonEmptyString( p_access, SOUT_CFG_PREFIX "user" ); +     psz_pwd = var_GetNonEmptyString( p_access, SOUT_CFG_PREFIX "pwd" ); +     if( p_access->psz_access && !strcmp( p_access->psz_access, "mmsh" ) ) +diff -ur vlc-2.0.5/src/libvlccore.sym vlc-2.0.5.patchde/src/libvlccore.sym +--- vlc-2.0.5/src/libvlccore.sym	2012-05-15 14:41:19.000000000 +0200 ++++ vlc-2.0.5.patchde/src/libvlccore.sym	2013-02-07 01:16:16.917330547 +0100 +@@ -673,3 +673,7 @@ + xml_ReaderReset + vlc_keycode2str + vlc_str2keycode ++mark_end ++mark_lock ++mark_start ++mark_used +diff -ur vlc-2.0.5/src/network/httpd.c vlc-2.0.5.patchde/src/network/httpd.c +--- vlc-2.0.5/src/network/httpd.c	2012-09-04 00:14:53.000000000 +0200 ++++ vlc-2.0.5.patchde/src/network/httpd.c	2013-02-07 01:35:50.777081814 +0100 +@@ -69,6 +69,50 @@ +  + static void httpd_ClientClean( httpd_client_t *cl ); +  ++VLC_API vlc_mutex_t mark_lock; ++VLC_API int *mark_used = NULL; ++VLC_API int mark_start = -1; ++VLC_API int mark_end = -1; ++ ++void mark_socket(int fd) ++{                 ++    vlc_mutex_lock(&mark_lock); ++    int best_mark = mark_start; ++    int best_mark_val = mark_used[0]; ++ ++    for (int i = 1; i < mark_end - mark_start; ++i) { ++        if (mark_used[i] < best_mark_val) { ++            best_mark = mark_start + i; ++            best_mark_val = mark_used[i]; ++        } ++    } ++    fprintf( stderr, "PICKED MARK %d WITH OLD USAGE %d\n", best_mark, best_mark_val); ++    if (setsockopt (fd, SOL_SOCKET, SO_MARK, &best_mark, sizeof(best_mark)) == -1) { ++        perror("setsockopt(SO_MARK)"); ++    } else { ++        ++mark_used[best_mark - mark_start]; ++    } ++    vlc_mutex_unlock(&mark_lock); ++} ++ ++void unmark_socket(int fd) ++{     ++    int mark; ++    socklen_t mark_len = sizeof(mark); ++    if (getsockopt (fd, SOL_SOCKET, SO_MARK, &mark, &mark_len) == -1) { ++        perror("getsockopt(SO_MARK)"); ++        return; ++    } ++    if (mark < mark_start || mark >= mark_end) { ++        fprintf("UNKNOWN MARK %d\n", mark); ++    } ++ ++    vlc_mutex_lock(&mark_lock); ++    --mark_used[mark - mark_start]; ++    fprintf(stderr, "UNMARKED MARK %d WITH NEW USAGE %d\n", mark, mark_used[mark - mark_start]); ++    vlc_mutex_unlock(&mark_lock); ++} ++ + /* each host run in his own thread */ + struct httpd_host_t + { +@@ -1412,6 +1456,7 @@ +     { +         if( cl->p_tls != NULL ) +             vlc_tls_ServerSessionDelete( cl->p_tls ); ++        unmark_socket( cl->fd ); +         net_Close( cl->fd ); +         cl->fd = -1; +     } +@@ -2461,6 +2506,11 @@ +             setsockopt (fd, SOL_SOCKET, SO_REUSEADDR, +                         &(int){ 1 }, sizeof(int)); +  ++            // find a free mark ++            if (mark_used != NULL) { ++                mark_socket(fd); ++            } ++ +             vlc_tls_t *p_tls; +  +             if( host->p_tls != NULL ) +@@ -2471,6 +2521,7 @@ +                     case -1: +                         msg_Err( host, "Rejecting TLS connection" ); +                         /* p_tls is destroyed implicitly */ ++			unmark_socket( fd ); +                         net_Close( fd ); +                         fd = -1; +                         p_tls = NULL; diff --git a/switches.txt b/switches.txt new file mode 100644 index 0000000..efd8454 --- /dev/null +++ b/switches.txt @@ -0,0 +1,128 @@ +151.216.1.0 26 e1-3 x.x.x.x +151.216.1.64 26 e1-4 x.x.x.x +151.216.1.128 26 e3-3 x.x.x.x +151.216.1.192 26 e3-4 x.x.x.x +151.216.2.0 26 e5-3 x.x.x.x +151.216.2.64 26 e5-4 x.x.x.x +151.216.2.128 26 e7-3 x.x.x.x +151.216.2.192 26 e7-4 x.x.x.x +151.216.3.0 26 e9-3 x.x.x.x +151.216.3.64 26 e9-4 x.x.x.x +151.216.3.128 26 e11-1 x.x.x.x +151.216.3.192 26 e11-2 x.x.x.x +151.216.4.0 26 e11-3 x.x.x.x +151.216.4.64 26 e11-4 x.x.x.x +151.216.4.128 26 e13-1 x.x.x.x +151.216.4.192 26 e13-2 x.x.x.x +151.216.5.0 26 e13-3 x.x.x.x +151.216.5.64 26 e13-4 x.x.x.x +151.216.5.128 26 e15-1 x.x.x.x +151.216.5.192 26 e15-2 x.x.x.x +151.216.6.0 26 e15-3 x.x.x.x +151.216.6.64 26 e15-4 x.x.x.x +151.216.6.128 26 e17-1 x.x.x.x +151.216.6.192 26 e17-2 x.x.x.x +151.216.7.0 26 e17-3 x.x.x.x +151.216.7.64 26 e17-4 x.x.x.x +151.216.7.128 26 e19-1 x.x.x.x +151.216.7.192 26 e19-2 x.x.x.x +151.216.8.0 26 e19-3 x.x.x.x +151.216.8.64 26 e19-4 x.x.x.x +151.216.8.128 26 e21-1 x.x.x.x +151.216.8.192 26 e21-2 x.x.x.x +151.216.9.0 26 e21-3 x.x.x.x +151.216.9.64 26 e21-4 x.x.x.x +151.216.9.128 26 e23-1 x.x.x.x +151.216.9.192 26 e23-2 x.x.x.x +151.216.10.0 26 e23-3 x.x.x.x +151.216.10.64 26 e23-4 x.x.x.x +151.216.10.128 26 e25-1 x.x.x.x +151.216.10.192 26 e25-2 x.x.x.x +151.216.11.0 26 e25-3 x.x.x.x +151.216.11.64 26 e25-4 x.x.x.x +151.216.11.128 26 e27-1 x.x.x.x +151.216.11.192 26 e27-2 x.x.x.x +151.216.12.0 26 e29-1 x.x.x.x +151.216.12.64 26 e29-2 x.x.x.x +151.216.12.128 26 e31-1 x.x.x.x +151.216.12.192 26 e31-2 x.x.x.x +151.216.13.0 26 e33-1 x.x.x.x +151.216.13.64 26 e33-2 x.x.x.x +151.216.13.128 26 e35-1 x.x.x.x +151.216.13.192 26 e35-2 x.x.x.x +151.216.14.0 26 e37-1 x.x.x.x +151.216.14.64 26 e37-2 x.x.x.x +151.216.14.128 26 e39-1 x.x.x.x +151.216.14.192 26 e39-2 x.x.x.x +151.216.15.0 26 e41-1 x.x.x.x +151.216.15.64 26 e41-2 x.x.x.x +151.216.15.128 26 e43-1 x.x.x.x +151.216.15.192 26 e43-2 x.x.x.x +151.216.16.0 26 e43-3 x.x.x.x +151.216.16.64 26 e43-4 x.x.x.x +151.216.16.128 26 e45-1 x.x.x.x +151.216.16.192 26 e45-2 x.x.x.x +151.216.17.0 26 e45-3 x.x.x.x +151.216.17.64 26 e45-4 x.x.x.x +151.216.17.128 26 e47-1 x.x.x.x +151.216.17.192 26 e47-2 x.x.x.x +151.216.18.0 26 e47-3 x.x.x.x +151.216.18.64 26 e47-4 x.x.x.x +151.216.18.128 26 e49-1 x.x.x.x +151.216.18.192 26 e49-2 x.x.x.x +151.216.19.0 26 e49-3 x.x.x.x +151.216.19.64 26 e49-4 x.x.x.x +151.216.19.128 26 e51-1 x.x.x.x +151.216.19.192 26 e51-2 x.x.x.x +151.216.20.0 26 e51-3 x.x.x.x +151.216.20.64 26 e51-4 x.x.x.x +151.216.20.128 26 e53-1 x.x.x.x +151.216.20.192 26 e53-2 x.x.x.x +151.216.21.0 26 e53-3 x.x.x.x +151.216.21.64 26 e53-4 x.x.x.x +151.216.21.128 26 e55-1 x.x.x.x +151.216.21.192 26 e55-2 x.x.x.x +151.216.22.0 26 e55-3 x.x.x.x +151.216.22.64 26 e55-4 x.x.x.x +151.216.22.128 26 e57-1 x.x.x.x +151.216.22.192 26 e57-2 x.x.x.x +151.216.23.0 26 e57-3 x.x.x.x +151.216.23.64 26 e57-4 x.x.x.x +151.216.23.128 26 e59-1 x.x.x.x +151.216.23.192 26 e59-2 x.x.x.x +151.216.24.0 26 e59-3 x.x.x.x +151.216.24.64 26 e59-4 x.x.x.x +151.216.24.128 26 e61-1 x.x.x.x +151.216.24.192 26 e61-2 x.x.x.x +151.216.25.0 26 e61-3 x.x.x.x +151.216.25.64 26 e61-4 x.x.x.x +151.216.25.128 26 e63-1 x.x.x.x +151.216.25.192 26 e63-2 x.x.x.x +151.216.26.0 26 e63-3 x.x.x.x +151.216.26.64 26 e63-4 x.x.x.x +151.216.26.128 26 e65-1 x.x.x.x +151.216.26.192 26 e65-2 x.x.x.x +151.216.27.0 26 e65-3 x.x.x.x +151.216.27.64 26 e65-4 x.x.x.x +151.216.27.128 26 e67-1 x.x.x.x +151.216.27.192 26 e67-2 x.x.x.x +151.216.28.0 26 e67-3 x.x.x.x +151.216.28.64 26 e67-4 x.x.x.x +151.216.28.128 26 e69-1 x.x.x.x +151.216.28.192 26 e69-2 x.x.x.x +151.216.29.0 26 e69-3 x.x.x.x +151.216.29.64 26 e69-4 x.x.x.x +151.216.29.128 26 e71-1 x.x.x.x +151.216.29.192 26 e71-2 x.x.x.x +151.216.30.0 26 e71-3 x.x.x.x +151.216.30.64 26 e71-4 x.x.x.x +151.216.30.128 26 e73-1 x.x.x.x +151.216.30.192 26 e73-2 x.x.x.x +151.216.31.0 26 e73-3 x.x.x.x +151.216.31.64 26 e73-4 x.x.x.x +151.216.31.128 26 e75-1 x.x.x.x +151.216.31.192 26 e75-2 x.x.x.x +151.216.32.0 26 e75-3 x.x.x.x +151.216.32.64 26 e75-4 x.x.x.x +151.216.32.128 26 e77-1 x.x.x.x +151.216.32.192 26 e77-2 x.x.x.x diff --git a/switches.txt.crew b/switches.txt.crew new file mode 100644 index 0000000..c31afeb --- /dev/null +++ b/switches.txt.crew @@ -0,0 +1,6 @@ +151.216.46.0 25 crew1 x.x.x.x +151.216.46.128 25 crew2 x.x.x.x +151.216.47.0 25 crew3 x.x.x.x +151.216.47.128 25 crew4 x.x.x.x +151.216.48.0 25 crew5 x.x.x.x +151.216.48.128 25 crew6 x.x.x.x diff --git a/tools/README b/tools/README new file mode 100644 index 0000000..2276ebb --- /dev/null +++ b/tools/README @@ -0,0 +1,139 @@ +Outline: +------------------------------------------------------------------ + +  1 Install OS on three boxes +  2 Bootstrap: +     * Install tgmanage on one, the bootstrap (tools, include, netlist.txt) +     * Install dependencies on bootstrap +     * Push SSH key key to the other boxes (init-sshkeys.sh) +     * Update configuration +     * Update netlist.txt +     * Bootstrap the primary and secondary (make-base-requires.sh) +  3 Create new networks/scopes/zones Update during the party using  +    update-baseservice.sh from bootstrap +  4 Apply changes usling tools/apply-baseupdate.sh (reloads bind, restarts dhcpd) +  5 Changes to generated scopes, pools, zones are done on the primary, in the files +  6 If tools need patching, patch on boot and push with update-tools.sh +  7 Before wednesday evening, the infra.tgXX.gathering.org zone should be updated! +  * Only use make-base-requires.sh during bootstrap !!!!!!! :P + +Detailed instructions and description: +================================================================== +  +1: Install Debian +------------------------------------------------------------------ + +The following three hosts/servers are normally used: + * A 'bootstrap' box. This server will be used to configure +   the first TG-servers, and may end up hosting the switch-config and NMS. + * The server to use as Primary DNS and DHCP server + * The server to use as Secondary DNS and SMTP. +Add the three hosts to /etc/hosts, DNS is not available yet... + +2: Perform bootstrapping. +------------------------------------------------------------------ + +Start by placing the 'tgmanage' directory as '/root/tgmanage' on the bootstrap +box.  Change into the 'tgmanage' directory. Next, run +'tools/install-dependencies.sh boot' + + +Edit 'include/config.local.pm' and update for this year's TG.  Use +'tools/create-shellconf.pl' to extract configuration from the perl module to +create/update the 'include/tgmanage.cfg.sh' configuration script. + + +The tools make extensive use of key-based SSH logins, to make this work +seamlessly, run 'tools/init-sshkeys.sh' to create an RSA priv/pub keypair, and +push the pubkey to the Primary and Secondary boxes. + + +The Network-list is _not_ automagically updated. A copy of last year's +netlist.txt should be included in the goodiebag. With that as a base, update +for this year's address plan. Remember that client nets in the hall are +supposed to be pulled from switches.txt ... +The rest of the information needed should be pulled from techwiki.g.o The +format of the file is: one net per line, lines starting with # are skipped, +format of each net-line is: +176.110.124.0 24 noc +# <network adress> <prefixlen> <network-name> + + +Run 'tools/make-base-requires.sh'. This script will log in on the Primary and +Secondary boxes, install dependencies and the BIND/DHCP packages, create all +needed directories, create the initial configuration files. + +A short listing of the tasks of scripts called by make-base-requires: +tools/install-dependencies.sh	Installs needed base software to boot, primary and secondary +tools/make-named.pl		Basic BIND setup (creates named.conf et.al) +tools/make-first-zones.pl	Creates static zone-files (tgname, infra, ipv6zone) +tools/make-reverse4-files.pl	Creates reverse-zones for IPv4 +tools/make-dhcpd.pl		Sets up the base setup for DHCP +NOTE: these scripts are run by tools/make-base-requires.sh, you should not need to +run these individually + +3++: Update during the party using update-baseservice.sh from bootstrap +------------------------------------------------------------------ + +After 'tools/make-base-requires.sh' has been run, further updating should be +managed by the following three files: +tools/update-baseservice.sh	Used to add/update bind and DHCP configuration +tools/apply-baseupdate.sh	Used to reload bind and restart DHCP +tools/update-tools.sh		Used to push changes to the tgmanage toolchain + +This means, after the base setup is completed, updating and managing the +configuration is done by updating netlist.txt and running tools/update-baseservice.sh +from the bootstrap box, or from the NMS box if the toolchain gets moved there during +the party.  + +To create a new DHCP scope, add DNS forward and reverse zone for a new network: + +  * Add the network to netlist.txt +  * Run tools/update-baseservice.sh to generate new .conf and .zone files +  * Run tools/apply-baseupdate.sh to load new configuration + +To do changes to DHCP config after the scope .conf file has been created  +(read: later in the party), log in to the primary/dhcp server, and make  +the changes in the appropriate .conf file .. + +To do DNS changes to the main DNS zone or the infra-zone, make the changes +in the appropriate zone file on the primary DNS server. + +To add DNS records to any other DNS zone (forward or reverse), you have +to use 'nsupdate'. To simplify the process, use tools/generate-dnsrr.pl +Usage on this tool is documented in the "header" of the script... + + +The update prosess is handled by a bunch of "sub-tools", these should typically +not need to be run individually: +tools/make-bind-include.pl	Run via update-baseservice, adds new net's to DNS include +tools/make-dhcpd-include.pl	Run via update-baseservice, adds new net's to DHCP include +tools/make-missing-conf.pl	Run via update-baseservice, adds missing net-conf to BIND/DHCP + + +7: Generation of linknet dns content +------------------------------------------------------------------ + +Format for linknet.txt is documented in make-linknet-hosts.pl + +Generate IPv4 infra hostnames and IP address assignments +by using tools/generate-dnsrr.pl + +> cat linknet.txt | tools/make-linknet-hosts.pl | tools/generate-dnsrr.pl --domain infra.tgXX.gathering.org  +Output from this shuld go in infra.tgXX.gathering.org.zone on primary + +> cat linknet.txt | tools/make-linknet-hosts.pl | tools/generate-dnsrr.pl --domain infra.tgXX.gathering.org -ns -rev +Output from this should go as input to nsupdate, see doc in generate-dnsrr.pl + + +Other stuff.... +------------------------------------------------------------------ +Files that are not used? Need to revisit these files... + +>tools/make-switch-placements.pl + +Updates positions for switches in NMS map (png) + +> tools/make-switches.pl +> tools/fetch-portlist.sh + diff --git a/tools/TODO b/tools/TODO new file mode 100644 index 0000000..70898a3 --- /dev/null +++ b/tools/TODO @@ -0,0 +1,26 @@ +make-first-zones.pl does not add AAAA records for NS'es (pri/sec) +None of the tools add IPv4 reverse for pri/sec +nsupdate log for adding reverse after building base-requires: + +	nsupdate -k Kdhcp_updater.+157+57267.key +	server 176.110.126.2 +	prereq nxdomain 2.126.110.176.in-addr.arpa. +	update add 2.126.110.176.in-addr.arpa. 3600  in ptr abscess.tg12.gathering.org. +	send +	prereq nxdomain 2.125.110.176.in-addr.arpa. +	update add 2.125.110.176.in-addr.arpa. 3600  in ptr acetat.tg12.gathering.org. +	send +	prereq nxdomain 3.125.110.176.in-addr.arpa. +	update add 3.125.110.176.in-addr.arpa. 3600  in ptr abc.tg12.gathering.org. +	send + +Another handy dump, not a TODO-item, just a reminder: + +	prereq nxdomain 3.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.5.2.1.0.a.6.7.0.8.9.7.0.1.0.a.2.ip6.arpa. +	update add 3.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.5.2.1.0.a.6.7.0.8.9.7.0.1.0.a.2.ip6.arpa. 3600 IN PTR abc.tg12.gathering.org. +	send + + +Uhm, our $dhcp_server1 = "176.110.126.2"; <- wtf? + +Opps, forgot to asdd CiscoWLC magic to make-dhcpd.pl includes... diff --git a/tools/apply-baseupdate.sh b/tools/apply-baseupdate.sh new file mode 100755 index 0000000..055320c --- /dev/null +++ b/tools/apply-baseupdate.sh @@ -0,0 +1,14 @@ +#!/bin/bash + +set -e + +source include/tgmanage.cfg.sh +if [ -z ${PRIMARY} ] +then +	echo "Not configured!"; +	exit 1; +fi; + +ssh -l root ${PRIMARY} "/etc/init.d/isc-dhcp-server restart" +ssh -l root ${PRIMARY} "/usr/sbin/rndc reload" +ssh -l root ${SECONDARY} "/usr/sbin/rndc reload" diff --git a/tools/create-shellconf.pl b/tools/create-shellconf.pl new file mode 100755 index 0000000..8e2582d --- /dev/null +++ b/tools/create-shellconf.pl @@ -0,0 +1,51 @@ +#!/usr/bin/perl -I /root/tgmanage +use strict; + +BEGIN { +        require "include/config.pm"; +        eval { +                require "include/config.local.pm"; +        }; +} + +my $bind_base = "/etc/bind/"; +my $dhcpd_base = "/etc/dhcp/"; + +my $shellconf_file = "include/tgmanage.cfg.sh"; + +my $tgname    = $nms::config::tgname; + +my $pri_a     = $nms::config::pri_a; +my $pri_ptr   = $nms::config::pri_ptr; +my $pri_v6    = $nms::config::pri_v6; + +my $sec_a     = $nms::config::sec_a; +my $sec_ptr   = $nms::config::sec_ptr; +my $sec_v6    = $nms::config::sec_v6; + +my $ddns_key  = $nms::config::ddns_key; + +my $base_ipv4net    = $nms::config::base_ipv4net; +my $base_ipv4prefix = $nms::config::base_ipv4prefix; + +my $base_ipv6net    = $nms::config::base_ipv6net; +my $base_ipv6prefix = $nms::config::base_ipv6prefix; + +open CFG, ">" . $shellconf_file or die ($! . " " . $shellconf_file ); + +print CFG "# This file is autogenerated by tools/create-shellconf.pl,\n"; +print CFG "# using data from nms::config.\n"; +print CFG "#\n"; +print CFG "# Do you need new common/configuration variables?\n"; +print CFG "# Add/update include/config.local.pm and tools/create-shellconf.pl\n\n"; +print CFG "PRIMARY=\"$pri_a.$tgname.gathering.org\"\n"; +print CFG "SECONDARY=\"$sec_a.$tgname.gathering.org\"\n"; +print CFG "TGNAME=\"$tgname\"\n\n"; +print CFG "PRI_PTR=\"$pri_ptr\"\n"; +print CFG "SEC_PTR=\"$sec_ptr\"\n\n"; +print CFG "DDNS_KEY=\"$ddns_key\"\n\n"; +print CFG "BASEV4=\"$base_ipv4net\"\n"; +print CFG "PREFIXV4=\"$base_ipv4prefix\"\n"; +print CFG "BASEV6=\"$base_ipv6net\"\n"; +print CFG "PREFIXV6=\"$base_ipv6prefix\"\n"; +close CFG; diff --git a/tools/dhcp6-nets.pl b/tools/dhcp6-nets.pl new file mode 100755 index 0000000..3866ac5 --- /dev/null +++ b/tools/dhcp6-nets.pl @@ -0,0 +1,12 @@ +#!/usr/bin/perl +use strict; +use warnings; + +while(<STDIN>){ +	my ($row, $v6) = split; +	$v6 =~ s/::1/::/; + +	print "subnet6 $v6 {\n"; +	print "\toption domain-name \"$row.tg13.gathering.org\";\n"; +	print "}\n\n"; +} diff --git a/tools/dlink-ng2dns.pl b/tools/dlink-ng2dns.pl new file mode 100755 index 0000000..2b6f965 --- /dev/null +++ b/tools/dlink-ng2dns.pl @@ -0,0 +1,77 @@ +#!/usr/bin/perl +use strict; + +BEGIN { +        require "include/config.pm"; +        eval { +                require "include/config.local.pm"; +        }; +} + +use Net::IP; +use Getopt::Long; + +my ($delete); + +if (@ARGV > 0) { +        GetOptions( +        'del|delete'            => \$delete, +        ) +} + +print "server $nms::config::pri_ptr\n"; + +while (<STDIN>) +{ +	my ( $sysname, $distro, $ponum, $cidr, $ipaddr, $gwaddr, $v6addr, @ports ) = split; +	 +	 +	my $ip = new Net::IP($ipaddr); + +	my $v4gw = new Net::IP($gwaddr); + +	( my $gw6 = $v6addr ) =~ s/\/.*//; +	my $v6gw = new Net::IP($gw6); + +	my $fqdn = $sysname . "." . $nms::config::tgname . ".gathering.org."; +	my $sw_fqdn = $sysname . "-sw." . $fqdn; +	my $text_info = $distro . " - " . join(' + ', @ports) . ", po" . $ponum . ", gwaddr " . $gwaddr; + +	# A-record to the switch +	print "prereq nxdomain " . $sw_fqdn . "\n" unless $delete; +	print "update add " . $sw_fqdn . " \t 3600 IN A \t " . $ipaddr . "\n" unless $delete; +	print "update delete " . $sw_fqdn . " \t IN A\n" if $delete; +	print "send\n"; + +	# PTR to the switch +	print "prereq nxdomain " . $ip->reverse_ip() . "\n" unless $delete; +	print "update add " . $ip->reverse_ip() . " \t 3600 IN PTR \t " . $sw_fqdn . "\n" unless $delete; +	print "update delete " . $ip->reverse_ip() . " \t IN PTR\n" if $delete; +	print "send\n"; + +	# TXT-record with details +	print "update delete " . $sw_fqdn . " IN TXT\n" unless $delete; +	print "update add " . $sw_fqdn . " \t 3600 IN TXT \t \"" . $text_info . "\"\n" unless $delete; +	print "update delete " . $sw_fqdn . " \t IN TXT\n" if $delete; +	print "send\n"; + +	# A and AAAA-record to the gateway/router +	print "prereq nxrrset gw." . $fqdn . " IN A\n" unless $delete; +        print "update add gw." . $fqdn . " \t 3600 IN A \t " . $gwaddr . "\n" unless $delete; +	print "update delete gw." . $fqdn . " \t IN A\n" if $delete; +        print "send\n"; +	print "prereq nxrrset gw." . $fqdn . " IN AAAA\n" unless $delete; +        print "update add gw." . $fqdn . " \t 3600 IN AAAA \t " . $gw6 . "\n" unless $delete; +	print "update delete gw." . $fqdn . " \t IN AAAA\n" if $delete; +        print "send\n"; + +	# PTR to the gateway/router +	print "prereq nxdomain " . $v4gw->reverse_ip() . "\n" unless $delete; +        print "update add " . $v4gw->reverse_ip() . " \t 3600 IN PTR \t gw." . $fqdn . "\n" unless $delete; +	print "update delete " . $v4gw->reverse_ip() . " \t IN PTR\n" if $delete; +        print "send\n"; +	print "prereq nxdomain " . $v6gw->reverse_ip() . "\n" unless $delete; +        print "update add " . $v6gw->reverse_ip() . " \t 3600 IN PTR \t gw." . $fqdn . "\n" unless $delete; +	print "update delete " . $v6gw->reverse_ip() . " \t IN PTR\n" if $delete; +        print "send\n"; +} diff --git a/tools/fetch-debinstall.sh b/tools/fetch-debinstall.sh new file mode 100755 index 0000000..069e39a --- /dev/null +++ b/tools/fetch-debinstall.sh @@ -0,0 +1,17 @@ +#!/bin/bash -xe +INSTALLER_DEST=$1 +DEBINSTROOT=http://ftp.no.debian.org/debian/dists + +mkdir -p ${INSTALLER_DEST}/{squeeze,wheezy}/{amd64,i386} +for DIST in squeeze wheezy +do  +  for ARCH in i386 amd64;  +  do  +    for FILE in initrd.gz linux +    do  +      wget ${DEBINSTROOT}/${DIST}/main/installer-${ARCH}/current/images/netboot/debian-installer/${ARCH}/${FILE} \ +           -O ${INSTALLER_DEST}/${DIST}/${ARCH}/${FILE} +    done +  done +done + diff --git a/tools/fetch-portlist.sh b/tools/fetch-portlist.sh new file mode 100755 index 0000000..94ca41c --- /dev/null +++ b/tools/fetch-portlist.sh @@ -0,0 +1,42 @@ +print_range() { +	FIRST=$1 +	LAST=$2 +	if [ "$1" = "$2" ]; then +		echo $FIRST +	else +		echo $FIRST-$LAST +	fi +} + +walk_ports() { +	IP=$1 +	COMMUNITY=$2 + +	FIRST_PORT= +	LAST_PORT= + +	for PORT in $( snmpwalk -Os -m IF-MIB -v 2c -c $COMMUNITY $IP ifDescr 2>/dev/null | grep -E 'GigE|Ethernet' | cut -d. -f2 | cut -d" " -f1 ); do +		if ! snmpget -m IF-MIB -v 2c -c $COMMUNITY $IP ifHCInOctets.$PORT 2>/dev/null | grep -q 'No Such Instance'; then +			if [ "$LAST_PORT" ] && [ `expr $LAST_PORT + 1` = $PORT ]; then +				LAST_PORT=$PORT +			else +				if [ "$LAST_PORT" ]; then +					print_range $FIRST_PORT $LAST_PORT +				fi +				FIRST_PORT=$PORT +				LAST_PORT=$PORT +			fi +		fi +	done + +	print_range $FIRST_PORT $LAST_PORT +} + +COMMUNITY=$1 +IP=$2 +SYSNAME=$3 +PORTS=$( walk_ports $IP $COMMUNITY | tr "\n" "," | sed 's/,$//' ) + +echo "insert into switchtypes values ('$SYSNAME','$PORTS',true);" +echo "insert into switches values (default,'$IP','$SYSNAME','$SYSNAME',null,default, default, '1 minute', '$COMMUNITY');" + diff --git a/tools/generate-dnsrr.pl b/tools/generate-dnsrr.pl new file mode 100755 index 0000000..789f268 --- /dev/null +++ b/tools/generate-dnsrr.pl @@ -0,0 +1,147 @@ +#!/usr/bin/perl -I /root/tgmanage +# +# USAGE: +#  Generate BIND Zone-file data based on the file hosts-to-add.txt +#  cat hosts-to-add.txt | tools/generate-dnsrr.pl  +# +#  Generate input data for nsupdate, to add FORWARD records based on hosts-to-add.txt +#  cat hosts-to-add.txt | tools/generate-dnsrr.pl --domain foo.tgXX.gathering.org -ns +#   +#  Generate input data for nsupdate, to add REVERSE records based on hosts-to-add.txt +#  cat hosts-to-add.txt | tools/generate-dnsrr.pl --domain foo.tgXX.gathering.org -ns -rev +# +#  Generate input data for nsupdate, to DELETE forward records based on hosts-to-add.txt +#  cat hosts-to-DELETE.txt | tools/generate-dnsrr.pl --domain foo.tgXX.gathering.org -ns -del +#   +#  Generate input data for nsupdate, to DELETE reverse records based on hosts-to-add.txt +#  cat hosts-to-DELETE.txt | tools/generate-dnsrr.pl --domain foo.tgXX.gathering.org -ns -rev -del +#  +#  Command-syntax to send this to nsupdate, running it on the DNS server: +#  cat file.txt | tools/generate-dnsrr.pl --dom foo -ns | ssh $dnsserver "nsupdate -k /etc/bind/Kdhcp_updater.+157+XXXXX" +# +# Format of input: +# hostname  ipv4-adress ipv6-address +#  If any of ipv4-address or ipv6-address are NOT set for the host, specify "nope" +#  Lines starting with # will (should) be skipped (comments) +# +# Example: +# +# host1  192.168.0.1 2001:db8:f00::1 +# host2  nope        2001:db8:f00::2 +# host3  192.168.0.3 nope +# # comment, to be ignored. +# host4  192.168.0.4 + +use strict; +use warnings; +use lib '..'; +BEGIN { +        require "include/config.pm"; +        eval { +                require "include/config.local.pm"; +        }; +} +use Net::IP; +use Getopt::Long; + +my ($delete, $auto, $nsupdate, $reverse, $domain); + +if (@ARGV > 0) { +	GetOptions( +	'del|delete'		=> \$delete, +	'a|auto'		=> \$auto, +	'ns|nsupdate'		=> \$nsupdate, +	'r|reverse'		=> \$reverse, +	'domain=s'		=> \$domain +	) +} + +if ($nsupdate || $reverse){ +	unless (defined($domain)){ +		print "Missing domain.\n"; +		exit 1 unless defined($domain); +	} +} + +$domain = "." . $domain if defined($domain); + +print "server $nms::config::pri_ptr\n" if ($nsupdate || $reverse); + +while (<STDIN>) { +	next if /^(#|\s+$)/;	# skip if comment, or blank line + +	my ($hostname, $ipv4, $ipv6) = split; +	$hostname = lc($hostname); +	 +	unless ($ipv6){ +		if ($auto){ +			# Get IPv6-address based on IPv4-address +		 +			my ($first, $second, $third, $fourth) = split('\.', $ipv4); +			$ipv6 = $nms::config::base_ipv6net . $third . "::" . $fourth; +		} +	} +	 +	if ($reverse){ +		# print ptr +		print_ptr($hostname, $ipv4, $ipv6); +	} else { +		# print forward +		print_fwd($hostname, $ipv4, $ipv6); +	} +} + +sub print_ptr{ +	my ($hostname, $ipv4, $ipv6) = @_; + +	# IPv4 +	unless ( $ipv4 eq "nope" ) { +		my $v4 = new Net::IP($ipv4); +		 +		print "prereq nxdomain " . $v4->reverse_ip() . "\n" unless $delete; +		print "update add " . $v4->reverse_ip() . " 3600 IN PTR " . $hostname . $domain .".\n" unless $delete; +		print "update delete "  . $v4->reverse_ip() . " IN PTR\n" if $delete; +		print "send\n"; +	}	 + +	# IPv6 +	if (( not ($ipv6 eq "nope") ) && ( $ipv6 )) { +		my $v6 = new Net::IP($ipv6); +		 +		print "prereq nxdomain " . $v6->reverse_ip() . "\n" unless $delete; +		print "update add " . $v6->reverse_ip() . " 3600 IN PTR " . $hostname . $domain . ".\n" unless $delete; +		print "update delete " . $v6->reverse_ip() . " IN PTR\n" if $delete; +		print "send\n"; +	} +} + +sub print_fwd{ +	my ($hostname, $ipv4, $ipv6) = @_; +	 +	if ($nsupdate){ + +		unless ( $ipv4 eq "nope" ) { +			# IPv4 +			print "prereq nxrrset " . $hostname . $domain . " IN A\n" unless $delete; +			print "update add " . $hostname . $domain . " 3600 IN A $ipv4\n" unless $delete; +			print "update delete " . $hostname . $domain . " IN A\n" if $delete; +			print "send\n"; +		} +		if (( not ($ipv6 eq "nope") ) && ( $ipv6 )) { +			# IPv6 +			print "prereq nxrrset " . $hostname . $domain . " IN AAAA\n" unless $delete; +                	print "update add " . $hostname . $domain . " 3600 IN AAAA $ipv6\n" unless $delete; +	                print "update delete " . $hostname . $domain . " IN AAAA\n" if $delete; +        	        print "send\n"; +		} +	} else { +		# IPv4 +		unless ( $ipv4 eq "nope" ) { +			printf ("%-24s%s\t%s\t%s\n", $hostname, "IN", "A", $ipv4); +		} +		# IPv6 +		if (( not ($ipv6 eq "nope") ) && ( $ipv6 )) { +			printf ("%-24s%s\t%s\t%s\n", $hostname, "IN", "AAAA", $ipv6) if ($ipv6); +		} +	} +} diff --git a/tools/init-sshkeys.sh b/tools/init-sshkeys.sh new file mode 100755 index 0000000..9427bad --- /dev/null +++ b/tools/init-sshkeys.sh @@ -0,0 +1,14 @@ +#!/bin/bash + +set -e + +source include/tgmanage.cfg.sh +if [ -z ${PRIMARY} ] +then +	echo "Not configured!"; +	exit 1; +fi; + +ssh-keygen -P '' -f ~/.ssh/id_rsa -b 2048 +ssh-copy-id root@${PRIMARY} +ssh-copy-id root@${SECONDARY} diff --git a/tools/install-dependencies.sh b/tools/install-dependencies.sh new file mode 100755 index 0000000..bf68134 --- /dev/null +++ b/tools/install-dependencies.sh @@ -0,0 +1,53 @@ +#!/bin/bash -e + +if [ "$1" != "master" -a "$1" != "slave" -a "$1" != "boot" ]; then +	echo "Run as $0 <boot|master|slave>" +	exit +fi + +# OK, we know the content of $0 is OK. I prefer sane names. +ROLE=$1; + +# Start by installing common packages. Remember to update +# this when a new common dependency is discovered, plx. +apt-get -y install \ +	vim-nox \ +	git \ +	ntp \ +	screen \ +	dnsutils \ +	build-essential \ +	libnet-ip-perl \ +	libnetaddr-ip-perl \ +	libnet-telnet-cisco-perl \ +	libnet-ping-external-perl \ +	perl-modules \ +	libdbi-perl \ +	libdbd-pg-perl \ +	libnet-telnet-perl  + +if [ "${ROLE}" == "boot" ]; then +	# Install-tasks specific for the _bootstrab box_ here +	echo "Installing for bootstrap" +	apt-get -y install \ +		bind9utils +fi + +if [ "${ROLE}" == "master" ]; then +	# Install-tasks specific for the _primary_ here +	echo "Installing for primary/master" +	apt-get -y install \ +		isc-dhcp-server \ +		bind9utils \ +		bind9 +fi + +if [ "${ROLE}" == "slave" ]; then +	# Install-tasks specific for the _secondary_ here +	echo "Installing for secondary/slave" +	apt-get -y install \ +		bind9utils \ +		bind9	 +fi + +echo "Dependency installation for ${ROLE} complete." diff --git a/tools/make-accesspoints.pl b/tools/make-accesspoints.pl new file mode 100755 index 0000000..b84321a --- /dev/null +++ b/tools/make-accesspoints.pl @@ -0,0 +1,24 @@ +#! /usr/bin/perl +use strict; +use warnings; + +while (<>) { +	my @arr = split " "; +	my $ap = 'ap-'.$arr[0]; +	my $core = $arr[1]; +	# Trekk fra 1 +	$core =~ s/^(distro)(\d+)$/$1.($2-1)/e; + +	# Fjerde kabel er aksesspunkt +	my $blade; +	my $port; +	if ($arr[5] =~ /^Gi(\d+)\/(\d+)$/) { +		$blade = $1; +		$port = $2; +	} else { +		die "Unknown port: ".$arr[5]; +	} +	printf "INSERT INTO switches(ip, sysname, switchtype) values(inet '127.0.0.1', '%s', 'ciscoap');\n", $ap; +	printf "INSERT INTO uplinks SELECT (SELECT switch FROM switches WHERE sysname = '%s') AS switch, (SELECT switch FROM switches WHERE sysname = '%s') AS coreswitch, %d AS blade, %d AS port;\n", $ap, $core, $blade, $port; +	printf "INSERT INTO ap_poll(switch) SELECT switch FROM switches WHERE sysname = '%s';\n", $ap; +} diff --git a/tools/make-base-requires.sh b/tools/make-base-requires.sh new file mode 100755 index 0000000..d19ffd9 --- /dev/null +++ b/tools/make-base-requires.sh @@ -0,0 +1,60 @@ +#!/bin/bash + +set -e + +BASE="/etc"; +if [ "$1" != "" ] +then +	BASE=$1 +	echo "Using base path ${BASE}" +fi + +source include/tgmanage.cfg.sh +if [ -z ${PRIMARY} ] +then +	echo "Not configured!"; +	exit 1; +fi; + +tools/update-tools.sh +ssh -l root ${PRIMARY} "~/tgmanage/tools/install-dependencies.sh master" +ssh -l root ${SECONDARY} "~/tgmanage/tools/install-dependencies.sh slave" + +if [ "${BASE}" == "/etc" ]; then +	ssh -l root ${PRIMARY} "cp -pR /etc/bind /etc/bind.dist" +	ssh -l root ${PRIMARY} "cp -pR /etc/dhcp /etc/dhcp.dist" +	ssh -l root ${SECONDARY} "cp -pR /etc/bind /etc/bind.dist" + +	set +e +	ssh -l root ${PRIMARY} "rm /etc/bind/named.conf" +	ssh -l root ${PRIMARY} "rm /etc/dhcp/dhcpd.conf" +	ssh -l root ${SECONDARY} "rm /etc/bind/named.conf" +	set -e +fi + +ssh -l root ${PRIMARY} "mkdir -p ${BASE}/bind/conf-master/" +ssh -l root ${PRIMARY} "mkdir -p ${BASE}/bind/reverse/" +ssh -l root ${PRIMARY} "mkdir -p ${BASE}/bind/dynamic/" +ssh -l root ${PRIMARY} "mkdir -p ${BASE}/dhcp/conf.d/" +ssh -l root ${PRIMARY}   "~/tgmanage/tools/make-named.pl master ${BASE}" +ssh -l root ${PRIMARY}   "~/tgmanage/tools/make-dhcpd.pl ${BASE}" +ssh -l root ${PRIMARY}   "~/tgmanage/tools/make-first-zones.pl ${BASE}" +ssh -l root ${PRIMARY}   "~/tgmanage/tools/make-reverse4-files.pl master ${BASE}" + +ssh -l root ${SECONDARY} "mkdir -p ${BASE}/bind/conf-slave/" +ssh -l root ${SECONDARY} "mkdir -p ${BASE}/bind/slave/" +ssh -l root ${SECONDARY} "~/tgmanage/tools/make-named.pl slave ${BASE}" +ssh -l root ${SECONDARY} "~/tgmanage/tools/make-reverse4-files.pl slave ${BASE}" + +set +e +ssh -l root ${PRIMARY}   "chown -R bind.bind ${BASE}/bind" +ssh -l root ${SECONDARY} "chown -R bind.bind ${BASE}/bind" +set -e + +ssh -l root ${PRIMARY}   "echo THIS COPY OF TGMANAGE IS MANAGED FROM BOOTSTRAP SERVER > ~/tgmanage/NOTICE" +ssh -l root ${SECONDARY} "echo THIS COPY OF TGMANAGE IS MANAGED FROM BOOTSTRAP SERVER > ~/tgmanage/NOTICE" + +# No point in _not_ running update-baseservice at this point.... +tools/update-baseservice.sh ${BASE} + +# all done. diff --git a/tools/make-bind-include.pl b/tools/make-bind-include.pl new file mode 100755 index 0000000..d688dec --- /dev/null +++ b/tools/make-bind-include.pl @@ -0,0 +1,51 @@ +#!/usr/bin/perl -I /root/tgmanage + +# TODO: Port this to the "master|slave base" parameter syntax! + +use strict; + +unless ( (($#ARGV == 0 ) || ( $#ARGV == 1)) +	&& (( $ARGV[0] eq "master" ) || ( $ARGV[0] eq "slave" )) ) +{ +	print STDERR "Invalid usage!\ncat netnames.txt | $0 <master|slave> [basedir]\n"; +	exit 1; +} + +my $role = $ARGV[0]; + +my $base = "/etc"; +$base = $ARGV[1] if $#ARGV == 1; +$base .= "/" if not $base =~ m/\/$/ and not $base eq ""; + +my $bind_base = $base . "bind/"; +my $masterinclude = $bind_base . "named.master-include.conf"; +my $slaveinclude  = $bind_base . "named.slave-include.conf"; + +my $glob; +my @configs; + +if ( $role eq "master" ) +{ +	$glob = $bind_base . "conf-master/*.conf"; +	@configs = glob($glob); + +	open CONF, ">" . $masterinclude or die ( $! . " " . $masterinclude); +	foreach my $config ( @configs ) +	{ +		print CONF "include \"" . $config . "\";\n"; +	} +	close CONF; +} + +if ( $role eq "slave" ) +{ +	$glob = $bind_base . "conf-slave/*.conf"; +	@configs = glob($glob); + +	open CONF, ">" . $slaveinclude or die ( $! . " " . $slaveinclude); +	foreach my $config ( @configs ) +	{ +		print CONF "include \"" . $config . "\";\n"; +	} +	close CONF; +} diff --git a/tools/make-dhcpd-include.pl b/tools/make-dhcpd-include.pl new file mode 100755 index 0000000..ded5551 --- /dev/null +++ b/tools/make-dhcpd-include.pl @@ -0,0 +1,18 @@ +#!/usr/bin/perl -I /root/tgmanage +use strict; +my $base = "/etc"; +$base = $ARGV[0] if $#ARGV > -1; +$base .= "/" if not $base =~ m/\/$/ and not $base eq ""; + +my $dhcpd_base = $base . "dhcp/"; +my $includeconfig = $dhcpd_base . "generated-include.conf"; + +my $glob = $dhcpd_base . "conf.d/*.conf"; +my @configs = glob($glob); + +open CONF, ">" . $includeconfig or die ( $! . " " . $includeconfig); +foreach my $config ( @configs ) +{ +	print CONF "include \"" . $config . "\";\n"; +} +close CONF; diff --git a/tools/make-dhcpd.pl b/tools/make-dhcpd.pl new file mode 100755 index 0000000..2cf388a --- /dev/null +++ b/tools/make-dhcpd.pl @@ -0,0 +1,104 @@ +#!/usr/bin/perl -I /root/tgmanage +use strict; + +use Net::IP; +use Net::IP qw(:PROC); + +BEGIN { +        require "include/config.pm"; +        eval { +                require "include/config.local.pm"; +        }; +} + +my $base = "/etc"; +$base = $ARGV[0] if $#ARGV > -1; +$base .= "/" if not $base =~ m/\/$/ and not $base eq ""; + +my $dhcpd_base = $base . "dhcp/"; +my $dhcpd_conf =  $dhcpd_base . "dhcpd.conf"; +my $dhcp_pxeconf =  $dhcpd_base . "pxe-boot.conf"; +my $dhcp_ciscoapconf =  $dhcpd_base . "ciscowlc.conf"; + +my $tgname    = $nms::config::tgname; +my $pri_ptr   = $nms::config::pri_ptr; +my $pri_net   = $nms::config::pri_net; +my $sec_ptr   = $nms::config::sec_ptr; +my $pxe_server = $nms::config::pxe_server; +my $ddns_key  = $nms::config::ddns_key; +my $ciscowlc_a  = $nms::config::ciscowlc_a; + +my $range = new Net::IP( $pri_net ) or die ("oopxos"); +my $mask = $range->mask();	 +my ($net, undef) = split "/", $pri_net; + + +# Create PXE-boot configuration file for DHCP on master. +if ( not -f $dhcpd_conf ) +{ +		print STDERR "Creating file " . $dhcpd_conf . "\n"; +		open DHCPDFILE, ">" . $dhcpd_conf or die ( $! . " " . $dhcpd_conf); + +		print DHCPDFILE <<"EOF"; +# GENERATED BY make-dhcpd.pl +# +# Central concept: as little config in the main .conf, +# include almost everything from separate files.. +# +# log-facility local7; +option domain-name "$tgname.gathering.org"; +option domain-name-servers $pri_ptr, $sec_ptr; +default-lease-time 3600; +max-lease-time 7200; +authoritative; + +ddns-update-style interim; +key DHCP_UPDATER { +        algorithm HMAC-MD5.SIG-ALG.REG.INT; +        secret $ddns_key; +} + +subnet $net netmask $mask {} + +include "/etc/dhcp/revzones.conf"; +include "/etc/dhcp/generated-include.conf"; +include "/etc/dhcp/pxe-boot.conf"; +include "/etc/dhcp/ciscowlc.conf"; + +EOF +		close DHCPDFILE; +} + +# Create PXE-boot configuration file for DHCP on master. +if ( not -f $dhcp_pxeconf ) +{ +		print STDERR "Creating file " . $dhcp_pxeconf . "\n"; +		open PXEFILE, ">" . $dhcp_pxeconf or die ( $! . " " . $dhcp_pxeconf); + +		print PXEFILE "next-server " . $pxe_server . ";\n"; +		print PXEFILE "filename \"pxelinux.0\";\n"; + +		close PXEFILE; +} + + +# Create PXE-boot configuration file for DHCP on master. +if ( not -f $dhcp_ciscoapconf ) +{ +		print STDERR "Creating file " . $dhcp_ciscoapconf . "\n"; +		open CISCOFILE, ">" . $dhcp_ciscoapconf or die ( $! . " " . $dhcp_pxeconf); + +		print CISCOFILE <<"EOF"; +option space CiscoAP; +option CiscoAP.server-address code 241 = array of ip-address; +set vendor-string = option vendor-class-identifier; + +class "cisco-aps" { +       match if substring (option vendor-class-identifier, 0, 8) = "Cisco AP"; +       vendor-option-space CiscoAP; +       option CiscoAP.server-address $ciscowlc_a; +} +EOF +		close CISCOFILE; +} + diff --git a/tools/make-first-zones.pl b/tools/make-first-zones.pl new file mode 100755 index 0000000..1227129 --- /dev/null +++ b/tools/make-first-zones.pl @@ -0,0 +1,124 @@ +#!/usr/bin/perl -I /root/tgmanage +use strict; + +use Net::IP; + +BEGIN { +        require "include/config.pm"; +        eval { +                require "include/config.local.pm"; +        }; +} + +my $base = "/etc"; +$base = $ARGV[0] if $#ARGV > -1; +$base .= "/" if not $base =~ m/\/$/ and not $base eq ""; + +my $tgname    = $nms::config::tgname; +my $pri_a     = $nms::config::pri_a; +my $pri_ptr   = $nms::config::pri_ptr; +my $pri_v6    = $nms::config::pri_v6; +my $sec_a     = $nms::config::sec_a; +my $sec_ptr   = $nms::config::sec_ptr; +my $sec_v6    = $nms::config::sec_v6; +my $ipv6zone = $nms::config::ipv6zone; + +# FIXME: THIS IS NOT APPRORPIATE! +my $serial = `date +%Y%m%d01`; +chomp $serial; +# FIXME + +my $zonefile; + +$zonefile = $base . "bind/" . $tgname . ".gathering.org.zone"; +if ( not -f  $zonefile ) +{ +	print $zonefile . "\n"; +	open MAINZONE, ">" . $zonefile or die $! . " " . $zonefile; + +	print MAINZONE <<"EOF"; +\$TTL 3600 +@	IN	SOA	$pri_a.$tgname.gathering.org.	abuse.gathering.org. ( +			$serial; serial +			3600 ; refresh  +			1800 ; retry +			608400 ; expire +			3600 ) ; minimum and default TTL + +		IN	NS	ns1.$tgname.gathering.org. +		IN	NS	ns2.$tgname.gathering.org. + +ns1		IN	A	$pri_ptr +ns1		IN	AAAA	$pri_v6 +ns2		IN	A	$sec_ptr +ns2		IN	AAAA	$sec_v6 +$pri_a		IN	A	$pri_ptr +$pri_a		IN	AAAA	$pri_v6 +$sec_a		IN	A	$sec_ptr +$sec_a		IN	AAAA	$sec_v6 + +; Generated by make-all-config.sh on the bootstrapping/nms server. +; Will not be overwritten unless it is missing ;) + +EOF +	close MAINZONE; +} +else { print "Skipped TG-zone, file exists.\n"; } + +$zonefile = $base . "bind/infra." . $tgname . ".gathering.org.zone"; +if ( not -f  $zonefile ) +{ +	print $zonefile . "\n"; +	open MAINZONE, ">" . $zonefile or die $! . " " . $zonefile; + +	print MAINZONE <<"EOF"; +\$TTL 3600 +@	IN	SOA	$pri_a.$tgname.gathering.org.	abuse.gathering.org. ( +			$serial; serial +			3600 ; refresh  +			1800 ; retry +			608400 ; expire +			3600 ) ; minimum and default TTL + +		IN	NS	$pri_a.$tgname.gathering.org. +		IN	NS	$sec_a.$tgname.gathering.org. + +; Generated by make-all-config.sh on the bootstrapping/nms server. +; Will not be overwritten unless it is missing ;) +EOF +	close MAINZONE; +} +else { print "Skipped infra-zone, file exists.\n"; } + +$zonefile = $base . "bind/" . $ipv6zone . ".zone"; +if ( not -f  $zonefile ) +{ +	print $zonefile . "\n"; +	open IPV6ZONE, ">" . $zonefile or die $! . " " . $zonefile; + +	print IPV6ZONE <<"EOF"; +; autogenerated, and updated from dhcpd -- DO NOT TOUCH! +\$TTL 3600 +@       IN      SOA     ns1.$tgname.gathering.org. abuse.gathering.org. ( +			$serial; serial +                        3600 ; refresh +                        1800 ; retry +                        608400 ; expire +                        3600 ) ; minimum and default TTL + +                IN      NS      ns1.$tgname.gathering.org. +                IN      NS      ns2.$tgname.gathering.org. + +; WARNING! Do not edit this file directly! +; on the bootstrapping/nms server! + +EOF +	my $ip_pri = new Net::IP( $pri_v6 ) or die ( "Error, new Net::IP for " . $pri_v6 ); +	my $ip_sec = new Net::IP( $sec_v6 ) or die ( "Error, new Net::IP for " . $sec_v6 ); +	print IPV6ZONE $ip_pri->reverse_ip() . " IN PTR ns1.$tgname.gathering.org.\n"; +	print IPV6ZONE $ip_pri->reverse_ip() . " IN PTR $pri_a.$tgname.gathering.org.\n"; +	print IPV6ZONE $ip_sec->reverse_ip() . " IN PTR ns2.$tgname.gathering.org.\n"; +	print IPV6ZONE $ip_sec->reverse_ip() . " IN PTR $sec_a.$tgname.gathering.org.\n"; +	close IPV6ZONE; +} +else { print "Skipped v6-reverse-zone, file exists.\n"; } diff --git a/tools/make-linknet-hosts.pl b/tools/make-linknet-hosts.pl new file mode 100755 index 0000000..d535832 --- /dev/null +++ b/tools/make-linknet-hosts.pl @@ -0,0 +1,34 @@ +#!/usr/bin/perl +use NetAddr::IP; +use Net::IP; +# +# Input file format: +# +# ipv4-link-network router1 router2 +# +# e.g. +# 151.216.0.2  telegw nocgw +# 151.216.0.4  telegw cam +# 151.216.0.6  nocgw coren +# 151.216.0.8  telegw pressegw +# +# Note: IPv6 linknets use link-local adresses, so they are not included in list. +# +while (<STDIN>) { +        next if /^(#|\s+$)/;    # skip if comment, or blank line +	 +	my ($ipv4_raw, $from, $to) = split; +	my $ipv4; +	 +	# Assumes ipv4 address is the first address in a /31 :-))  +	$ipv4 = NetAddr::IP->new($ipv4_raw."/31") unless $ipv4=~/no/; +	printf STDERR "Missing IPv4 scope for linket %s -> %s\n", $from, $to if not $ipv4; +	next if not $ipv4; + +	 +	# generate-dnsrr.pl format: +	# hostname ipv4 ipv6 (with nope as valid null argument) +	my $ipv4_other =  $ipv4 +1; +	printf("%s-%s %s nope\n", $from, $to, $ipv4->addr);  +	printf("%s-%s %s nope\n", $to, $from, $ipv4_other->addr);  +} diff --git a/tools/make-missing-conf.pl b/tools/make-missing-conf.pl new file mode 100755 index 0000000..f0fb0a0 --- /dev/null +++ b/tools/make-missing-conf.pl @@ -0,0 +1,187 @@ +#!/usr/bin/perl -I /root/tgmanage +use strict; + +BEGIN { +        require "include/config.pm"; +        eval { +                require "include/config.local.pm"; +        }; +} + + +use Net::IP; +use Net::IP qw(:PROC); + +# FIXME: THIS IS NOT APPRORPIATE! +my $serial = `date +%Y%m%d01`; +chomp $serial; +# FIXME + +unless ( (($#ARGV == 0 ) || ( $#ARGV == 1)) +	&& (( $ARGV[0] eq "master" ) || ( $ARGV[0] eq "slave" )) ) +{ +	print STDERR "Invalid usage!\ncat netnames.txt | $0 <master|slave> [basedir]\n"; +	exit 1; +} + +my $role = $ARGV[0]; + +my $base = "/etc"; +$base = $ARGV[1] if $#ARGV == 1; +$base .= "/" if not $base =~ m/\/$/ and not $base eq ""; + + +print STDERR "Role is " . $role . "\n"; +print STDERR "Base dir is " . $base . "\n"; + +my $bind_base =  $base . "bind/"; +my $dhcpd_base = $base . "dhcp/"; + +my $dhcp_dynconf_dir =  $dhcpd_base . "conf.d/"; +my $bind_conf_master = $bind_base . "conf-master/"; +my $bind_conf_slave  = $bind_base . "conf-slave/"; + +my $tgname    = $nms::config::tgname; + +my $pri_a     = $nms::config::pri_a; +my $pri_ptr   = $nms::config::pri_ptr; +my $pri_v6    = $nms::config::pri_v6; + +my $sec_a     = $nms::config::sec_a; +my $sec_ptr   = $nms::config::sec_ptr; +my $sec_v6    = $nms::config::sec_v6; + +my $ext_xfer  = $nms::config::ext_xfer; +my $ext_ns    = $nms::config::ext_ns; + +my $ddns_key  = $nms::config::ddns_key; + +my $base_ipv4net    = $nms::config::base_ipv4net; +my $base_ipv4prefix = $nms::config::base_ipv4prefix; + +my $ddns_to = $nms::config::ddns_to; + +my $base_ipv4 = new Net::IP( $base_ipv4net . "/" . $base_ipv4prefix ); + +$base_ipv4net =~ m/^(\d+)\.(\d+)\.(\d+)\..*/; +my ( $cp_oct, $cs_oct, $ct_oct ) = ( $1, $2, $3 ); + +while ( <STDIN> ) +{ +	next if ( $_ =~ m/^#/); +	my $line = $_; +	chomp $line; +	die ("Invalid format on input") if not $line =~ m/^(\d+)\.(\d+)\.(\d+)\.(\d+)\s+(\d+)\s+([\w|-]+)\s*.*/; +	my ( $p_oct, $s_oct, $t_oct, $f_oct, $size, $name ) = ( $1, $2, $3, $4, $5, $6 ); +	 + +	my $dhconfig = $dhcp_dynconf_dir . $name . ".conf"; +	my $master_config =  $bind_conf_master . $name . ".conf"; +	my $slave_config =  $bind_conf_slave . $name . ".conf"; +	my $zone_file = $bind_base . "dynamic/$name.$tgname.gathering.org.zone"; +	 +	my $net_base = $p_oct . "." .  $s_oct . "." .  $t_oct; +	my $net =  $net_base . "." .  $f_oct; +	my $range = new Net::IP( $net . "/" . $size ) or die ("oopxos"); + +	# Create configuration files for DHCP on master/primary +	if ( ( not -f $dhconfig ) && ( $role eq "master" ) ) +	{ +		print STDERR "Creating file " . $dhconfig . "\n"; +		my $numhosts = $range->size(); +		my $mask = $range->mask();	 +		my $router = $net_base . "." .  ($f_oct+1); +		my $first = $net_base . "." . ( $f_oct + 5 ); + +		my $last = $first; +		if ( $size < 24 ) +		{ +			# Net::IP iteration is crazyslow. So, we stopped using iterations. +			my $last_ip = $range->last_ip(); +			$last_ip =~ m/(\d+)\.(\d+)\.(\d+)\.(\d+)/; +			$last = sprintf("%d.%d.%d.%d", $1, $2, $3, $4-2); +		} +		else { $last = $net_base . "." . ( $f_oct + $numhosts - 2 ); } + +		#print STDERR "Name     : " . $name . "\n"; +		#print STDERR "Net      : " . $net . "\n"; +		#print STDERR "Mask     : " . $mask . "\n"; +		#print STDERR "Router   : " . $router . "\n"; +		#print STDERR "Size     : " . $size . "\n"; +		#print STDERR "Numhosts : " . $numhosts . "\n"; +		#print STDERR "First    : " . $first . "\n"; +		#print STDERR "Last     : " . $last . "\n"; + +		open DFILE, ">" . $dhconfig or die ( $! . " " . $dhconfig); + +		print DFILE "zone $name.$tgname.gathering.org {\n"; +		print DFILE "    primary $ddns_to;\n"; +		print DFILE "    key DHCP_UPDATER;\n"; +		print DFILE "}\n\n"; + +		print DFILE "subnet $net netmask $mask {\n"; +		print DFILE "    authoritative;\n"; +		print DFILE "    option routers $router;\n"; +		print DFILE "    option domain-name \"$name.$tgname.gathering.org\";\n"; +		print DFILE "    ddns-domainname \"$name.$tgname.gathering.org\";\n"; +		print DFILE "    range $first $last;\n"; +		print DFILE "    ignore client-updates;\n"; +		print DFILE "}\n\n"; + +		close DFILE; +	} + +	# Create zone files for bind9 on master/primary +	if ( ( not -f $zone_file ) && ( $role eq "master" ) ) +	{ +		print STDERR "Creating file " . $zone_file . "\n"; +		open ZFILE, ">" . $zone_file or die ( $! . " " . $zone_file); +		print ZFILE << "EOF"; +; Base reverse zones are updated from dhcpd -- DO NOT TOUCH! +\$TTL 3600 +@	IN	SOA	$pri_a.$tgname.gathering.org.	abuse.gathering.org. ( +                        $serial   ; serial +                        3600 ; refresh +                        1800 ; retry +                        608400 ; expire +                        3600 ) ; minimum and default TTL + +		IN	NS	$pri_a.$tgname.gathering.org. +		IN	NS	$sec_a.$tgname.gathering.org. +\$ORIGIN $name.$tgname.gathering.org. +EOF +		close ZFILE; +	} + + +	# Create bind9 configuration files for zones. +	my $bind_file = ""; +	$bind_file = $master_config if ( $role eq "master"); +	$bind_file = $slave_config if ( $role eq "slave"); +	die ("WTF, role does not match 'master' or 'slave'" ) if ( $bind_file eq ""); + +	if ( not -f $bind_file ) +	{ +		print STDERR "Creating file " . $bind_file . "\n"; +		open NFILE, ">" . $bind_file or die ( $! . " " . $bind_file); + +		print NFILE "zone \"$name.$tgname.gathering.org\" {\n"; +		if ( $role eq "master" ) { +			print NFILE "        type master;\n"; +			print NFILE "        notify yes;\n"; +			print NFILE "        allow-update { key DHCP_UPDATER; };\n"; +			print NFILE "        file \"dynamic/$name.$tgname.gathering.org.zone\";\n"; +		} +		else +		{ +			print NFILE "        type slave;\n"; +			print NFILE "        notify no;\n"; +			print NFILE "        masters { bootstrap; };\n"; +			print NFILE "        file \"slave/$name.$tgname.gathering.org.zone\";\n"; +		} +		print NFILE "        allow-transfer { ns-xfr; };\n"; +		print NFILE "};\n"; + +		close NFILE; +	} +} diff --git a/tools/make-named.pl b/tools/make-named.pl new file mode 100755 index 0000000..7e543e1 --- /dev/null +++ b/tools/make-named.pl @@ -0,0 +1,156 @@ +#!/usr/bin/perl -I /root/tgmanage +use strict; + +BEGIN { +        require "include/config.pm"; +        eval { +                require "include/config.local.pm"; +        }; +} + + +use Net::IP; +use Net::IP qw(:PROC); + +unless ( (($#ARGV == 0 ) || ( $#ARGV == 1)) +	&& (( $ARGV[0] eq "master" ) || ( $ARGV[0] eq "slave" )) ) +{ +	print STDERR "Invalid usage!\ncat netnames.txt | $0 <master|slave> [basedir]\n"; +	exit 1; +} + +my $role = $ARGV[0]; + +my $base = "/etc"; +$base = $ARGV[1] if $#ARGV == 1; +$base .= "/" if not $base =~ m/\/$/ and not $base eq ""; + +my $bind_base =  $base . "bind/"; +my $named_file = $bind_base . "named.conf"; + +if ( -f $named_file ) +{ +	print STDERR $named_file . " already exists. Cowardly refusing to continue\n"; +	exit; +} + +my $tgname    = $nms::config::tgname; + +my $pri_a     = $nms::config::pri_a; +my $pri_ptr   = $nms::config::pri_ptr; +my $pri_v6    = $nms::config::pri_v6; + +my $sec_a     = $nms::config::sec_a; +my $sec_ptr   = $nms::config::sec_ptr; +my $sec_v6    = $nms::config::sec_v6; +my $ipv6zone  = $nms::config::ipv6zone; +my $ext_xfer  = $nms::config::ext_xfer; +my $ext_ns    = $nms::config::ext_ns; + +my $ddns_key  = $nms::config::ddns_key; + +my $base_ipv4net    = $nms::config::base_ipv4net; +my $base_ipv4prefix = $nms::config::base_ipv4prefix; + +my $base_ipv6net    = $nms::config::base_ipv6net; +my $base_ipv6prefix = $nms::config::base_ipv6prefix; + +my $noc_nett = $nms::config::noc_nett; + +my $ddns_to = $nms::config::ddns_to; + +my $pxe_server = $nms::config::ddns_to; + +my $run = `date +%Y%m%d-%H%M`; + +open NFILE, ">" . $named_file or die ( $! . " " . $named_file ); + +chomp $run; +print NFILE <<EOF; +// This named.conf was generated by make-named.pl at $run +// The current version of make-named.pl should not overwrite this file. +acl tg-nett  { $base_ipv4net/$base_ipv4prefix; $base_ipv6net:/$base_ipv6prefix; 127.0.0.0/8; ::1; }; +acl ns-xfr   { $ext_ns; $sec_ptr; $sec_v6; $pri_ptr; $pri_v6; $noc_nett; }; +acl ripe-xfr { $ext_ns; $sec_ptr; $sec_v6; $pri_ptr; $pri_v6; $ext_xfer; }; + +options { +        directory "/etc/bind"; +        allow-recursion { tg-nett; }; +        allow-query { any; }; +        allow-transfer { ns-xfr; }; +        recursion yes; +        auth-nxdomain no; +        listen-on-v6 { any; }; +}; + +key DHCP_UPDATER { +        algorithm HMAC-MD5.SIG-ALG.REG.INT; +        secret $ddns_key; +}; +EOF + +if ( $role eq "master" ) +{ +	print NFILE <<EOF; + +zone "$tgname.gathering.org" { +        type master; +        file "$tgname.gathering.org.zone"; +        notify yes; +        allow-transfer { ns-xfr; }; +}; + +zone "infra.$tgname.gathering.org" { +        type master; +        file "infra.$tgname.gathering.org.zone"; +        notify yes; +        allow-transfer { ns-xfr; }; +}; + +zone "$ipv6zone" { +        type master; +        allow-update { key DHCP_UPDATER; }; +        notify yes; +        file "$ipv6zone.zone"; +        allow-transfer { ns-xfr; ripe-xfr; }; +}; + +include "/etc/bind/named.conf.default-zones"; +include "named.reverse4.conf"; +include "named.master-include.conf"; +EOF +} + +if ( $role eq "slave" ) +{ +	print NFILE <<EOF; + +masters bootstrap  { $pri_ptr; }; + +zone "$tgname.gathering.org" { +        type slave; +        file "slave/$tgname.gathering.org"; +        notify no; +	masters { bootstrap; }; +}; + +zone "infra.$tgname.gathering.org" { +        type slave; +        file "slave/infra.$tgname.gathering.org"; +        notify no; +	masters { bootstrap; }; +}; + +zone "$ipv6zone" { +        type slave; +        notify no; +	masters { bootstrap; }; +        file "slave/$ipv6zone:"; +        allow-transfer { ns-xfr; ripe-xfr; }; +}; + +include "named.conf.default-zones"; +include "named.slave-reverse4.conf"; +include "named.slave-include.conf"; +EOF +} diff --git a/tools/make-pxeboot.sh b/tools/make-pxeboot.sh new file mode 100755 index 0000000..0d53e6a --- /dev/null +++ b/tools/make-pxeboot.sh @@ -0,0 +1,26 @@ +#!/bin/bash +# +# TODO: This tool assumes that the bootstrap box +# is used as the PXE server. This should be updated +# to use the configuration information in config.local.pm ... + +apt-get install tftpd-hpa +apt-get install nfs-kernel-server + +cat << END > /etc/default/tftpd-hpa +TFTP_USERNAME="tftp" +TFTP_DIRECTORY="/var/lib/tftpboot" +TFTP_ADDRESS="0.0.0.0:69" +TFTP_OPTIONS="--secure" +END + +/etc/init.d/tftpd-hpa restart + +mkdir -p /var/lib/tftpboot +cp -R pxe/* /var/lib/tftpboot + +tools/fetch-debinstall.sh /var/lib/tftpboot/debian +# tools/fetch-ubuntulive.sh <- this tool does not exist xD +# NOTE! The pxe/ directory contains an 'ubuntu' menu... +# The files required to booting Ubuntu installer or live +# must be fetched manually (for now) diff --git a/tools/make-reverse4-files.pl b/tools/make-reverse4-files.pl new file mode 100755 index 0000000..d20ea37 --- /dev/null +++ b/tools/make-reverse4-files.pl @@ -0,0 +1,164 @@ +#!/usr/bin/perl -I /root/tgmanage +use strict; + +BEGIN { +        require "include/config.pm"; +        eval { +                require "include/config.local.pm"; +        }; +} + + +use Net::IP; +use Net::IP qw(:PROC); + +# FIXME: THIS IS NOT APPRORPIATE! +my $serial = `date +%Y%m%d01`; +chomp $serial; +# FIXME + +unless ( (($#ARGV == 0 ) || ( $#ARGV == 1)) +	&& (( $ARGV[0] eq "master" ) || ( $ARGV[0] eq "slave" )) ) +{ +	print STDERR "Invalid usage!\n$0 <master|slave> [basedir]\n"; +	exit 1; +} + +my $role = $ARGV[0]; + +my $base = "/etc"; +$base = $ARGV[1] if $#ARGV == 1; +$base .= "/" if not $base =~ m/\/$/ and not $base eq ""; + + +my $bind_base =  $base . "bind/"; +my $dhcpd_base = $base . "dhcp/"; + +my $dhcp_revzones_file =  $dhcpd_base . "revzones.conf"; +my $bind_pri_revzones_file = $bind_base . "named.reverse4.conf"; +my $bind_sec_revzones_file = $bind_base . "named.slave-reverse4.conf"; + +my $tgname    = $nms::config::tgname; + +my $pri_a     = $nms::config::pri_a; +my $pri_ptr   = $nms::config::pri_ptr; +my $pri_v6    = $nms::config::pri_v6; + +my $sec_a     = $nms::config::sec_a; +my $sec_ptr   = $nms::config::sec_ptr; +my $sec_v6    = $nms::config::sec_v6; + +my $ext_xfer  = $nms::config::ext_xfer; +my $ext_ns    = $nms::config::ext_ns; + +my $ddns_key  = $nms::config::ddns_key; + +my $base_ipv4net    = $nms::config::base_ipv4net; +my $base_ipv4prefix = $nms::config::base_ipv4prefix; + +my $noc_nett = $nms::config::noc_nett; +my $noc_nett_v6 = $nms::config::noc_nett_v6; + +my $ddns_to = $nms::config::ddns_to; + +my $pxe_server = $nms::config::ddns_to; + +my $base_ipv4 = new Net::IP( $base_ipv4net . "/" . $base_ipv4prefix ); + +$base_ipv4net =~ m/^(\d+)\.(\d+)\.(\d+)\..*/; +my ( $p_oct, $s_oct, $t_oct ) = ( $1, $2, $3 ); + +$pri_ptr =~ m/^(\d+)\.(\d+)\.(\d+)\.(\d+).*/; +my ( $pp_oct, $ps_oct, $pt_oct, $pf_oct) = ( $1, $2, $3, $4 ); +$sec_ptr =~ m/^(\d+)\.(\d+)\.(\d+)\.(\d+).*/; +my ( $sp_oct, $ss_oct, $st_oct, $sf_oct) = ( $1, $2, $3, $4 ); + +if ( $role eq "master" ) +{ +	open DFILE, ">" . $dhcp_revzones_file or die $!; +	open NFILE, ">" . $bind_pri_revzones_file or die $!; +} +elsif ( $role eq "slave" ) +{ +	open SFILE, ">" . $bind_sec_revzones_file or die $!; +} +else +{ +	die ("WTF, role is neither 'master' or 'slave'"); +} + +while (1) +{ + +	my $block =  $p_oct . "." . $s_oct . "." . $t_oct . ".0/24"; +	my $current = new Net::IP( $block ) or die ("new Net::IP failed for " . $block); + +	my $rev_zone = $t_oct . "." .  $s_oct . "." . $p_oct . ".in-addr.arpa"; + +	if ( $role eq "master" ) +	{ +		# Generating IPv4-related reverse-stuff for +		# both bind9 and dhcp on master. + +		print DFILE "zone " . $rev_zone . " { primary " . $ddns_to . "; key DHCP_UPDATER; }\n"; + +		print NFILE "zone \"". $rev_zone ."\"	{\n"; +		print NFILE "    type master;\n"; +		print NFILE "    allow-update { key DHCP_UPDATER; };\n"; +		print NFILE "    notify yes;\n"; +		print NFILE "    allow-transfer { $sec_ptr; $ext_xfer; $noc_nett; $noc_nett_v6; };\n"; +		print NFILE "    file \"reverse/". $rev_zone .".zone\";\n"; +		print NFILE "};\n\n"; + +		my $zfilename = $bind_base . "reverse/" . $rev_zone . ".zone"; +		open ZFILE, ">", $zfilename; + +		print ZFILE "; " . $zfilename . "\n"; +		print ZFILE <<"EOF"; +; Base reverse zones are updated from dhcpd -- DO NOT TOUCH! +\$TTL 3600 +@	IN	SOA	ns1.$tgname.gathering.org.	abuse.gathering.org. ( +                        $serial   ; serial +                        3600 ; refresh +                        1800 ; retry +                        608400 ; expire +                        3600 ) ; minimum and default TTL + +		IN	NS	ns1.$tgname.gathering.org. +		IN	NS	ns2.$tgname.gathering.org. + +\$ORIGIN $rev_zone. +EOF +		if ( ($pt_oct == $t_oct) && ($ps_oct == $s_oct) ) +		{ +			print ZFILE $pf_oct . "		IN	PTR	ns1.$tgname.gathering.org.\n"; +		} +		if ( ($st_oct == $t_oct) && ($ss_oct == $s_oct) ) +		{ +			print ZFILE $sf_oct . "		IN	PTR	ns2.$tgname.gathering.org.\n"; +		} +	} +	else +	{ +		# AKA "if not master", as in "is slave". +		# A lot less work: update the named.slave-reverse4.conf file.. +		print SFILE "zone \"". $rev_zone ."\"	{\n"; +		print SFILE "    type slave;\n"; +		print SFILE "    notify no;\n"; +		print SFILE "    file \"slave/". $rev_zone .".cache\";\n"; +		print SFILE "    masters { bootstrap; };\n"; +		print SFILE "    allow-transfer { $ext_xfer; $noc_nett; $noc_nett_v6; };\n"; +		print SFILE "};\n\n"; +	} + +	if ( $current->last_int() == $base_ipv4->last_int() ) +	{ +		print STDERR "Reached last IP network. Finished\n"; +		last; +	} +	$t_oct++; +} +# Close all files, even those that have never been opened ;) +close DFILE; +close NFILE; +close SFILE; diff --git a/tools/make-switch-placements.pl b/tools/make-switch-placements.pl new file mode 100755 index 0000000..58538e2 --- /dev/null +++ b/tools/make-switch-placements.pl @@ -0,0 +1,88 @@ +#! /usr/bin/perl +use strict; +use warnings; + +my $switchtype = "dlink3100"; + +print "begin;\n"; +print "delete from placements where switch in (select switch from switches where switchtype = '$switchtype');\n"; + +my %ip; +my $i = 1; +while (<STDIN>) { +	chomp; +	my @info = split(/ /); + +	if (scalar @info < 5) { +		die "Unknown line: $_"; +	} +	my ($x, $y, $xx, $yy); + +	my $name = $info[0]; +	if ($name =~ /^e\d+-\d+$/) { +		$name =~ /e(\d+)-(\d+)/; +		my ($e, $s) = ($1, $2); + +		$x = int(220 + (($e-1)/2) * 21.5); +		$y = undef; + +		$x += 10 if ($e >= 11); +		$x += 10 if ($e >= 27); +		$x += 10 if ($e >= 43); +		$x += 10 if ($e >= 59); + +		if ($s > 2) { +			$y = 310 - 84 * ($s-2); +		} else { +			$y = 507 - 84 * ($s); +		} + +		$xx = $x + 14; +		$yy = $y + 84; + +		# Justeringer +		$y += 42 if $name eq "e1-4"; +		$y += 28 if $name eq "e3-4"; +		$y += 14 if $name eq "e5-4"; + +		$yy -= 14 if $name eq "e77-1"; +		$yy -= 28 if $name eq "e79-1"; +		$yy -= 42 if $name eq "e81-1"; +		$yy -= 56 if $name eq "e83-1"; +	} elsif ($name =~ /^creative(\d+)$/) { +		my $s = $1; +		if ($s < 3) { +			if ($s == 1) { +				$x = 1190; +				$y = 278; +			} else { +				$x = 1180; +				$y = 230; +			} +			$xx = $x+35; +			$yy = $y+19; +			$yy += 6; +		} else { +			$x = 1056; +			$y = 296 - 22 * ($s-3); +			if ($s <= 4) { +				$xx = $x+100; +			} elsif ($s <= 7) { +				$xx = $x+70; +			} elsif ($s <= 8) { +				$xx = $x+55; +			} else { +				$xx = $x+35; +			} +			$yy = $y+19; +			$yy -= 5 if $s == 3; +		} +	} else { +		die "Unknown switch: $name"; +	} + +	print "insert into placements select switch, box '(($x,$y),($xx,$yy))' from switches where sysname = '$name';\n"; +	$i++; +} + +print "end;\n"; diff --git a/tools/make-switches.pl b/tools/make-switches.pl new file mode 100755 index 0000000..a2f5d22 --- /dev/null +++ b/tools/make-switches.pl @@ -0,0 +1,33 @@ +#! /usr/bin/perl +use strict; +use warnings; + +my $switchtype = "dlink3100"; + +print "begin;\n"; +print "delete from temppoll;\n"; +print "delete from dhcp;\n"; +print "delete from switches where switchtype = '$switchtype';\n"; +#print "SELECT pg_catalog.setval('switches_switch_seq', 1, false);\n"; +print "SELECT pg_catalog.setval('polls_poll_seq', 1, false);\n"; + +my %ip; +my $i = 1; +while (<STDIN>) { +	chomp; +	my @info = split(/ /); + +	if (scalar @info < 5) { +		die "Unknown line: $_"; +	} + +	my $name = $info[0]; +	my $range = $info[3]; +	my $ip = $info[4]; + +	print "insert into switches (ip, sysname, switchtype) values ('$ip', '$name', '$switchtype');\n"; +	print "insert into dhcp select switch, '$range' from switches where sysname = '$name';\n"; +} +close HOSTS; + +print "end;\n"; diff --git a/tools/update-baseservice.sh b/tools/update-baseservice.sh new file mode 100755 index 0000000..5908941 --- /dev/null +++ b/tools/update-baseservice.sh @@ -0,0 +1,29 @@ +#!/bin/bash + +set -e + +BASE=""; +if [ -n $1 ] +then +	BASE=$1 +	echo "Using base path ${BASE}" +fi + +source include/tgmanage.cfg.sh +if [ -z ${PRIMARY} ] +then +	echo "Not configured!"; +	exit 1; +fi; + +cat netlist.txt | ssh -l root ${PRIMARY} "~/tgmanage/tools/make-missing-conf.pl master ${BASE}" +ssh -l root ${PRIMARY} "~/tgmanage/tools/make-dhcpd-include.pl ${BASE}" +ssh -l root ${PRIMARY} "~/tgmanage/tools/make-bind-include.pl master ${BASE}" + +set +e +ssh -l root ${PRIMARY} "chown bind.bind /etc/bind/dynamic/*.zone"; +set -e + +cat netlist.txt | ssh -l root ${SECONDARY} "~/tgmanage/tools/make-missing-conf.pl slave ${BASE}" +ssh -l root ${SECONDARY} "~/tgmanage/tools/make-bind-include.pl slave ${BASE}" + diff --git a/tools/update-tools.sh b/tools/update-tools.sh new file mode 100755 index 0000000..99f712a --- /dev/null +++ b/tools/update-tools.sh @@ -0,0 +1,21 @@ +#!/bin/bash + +set -e + +source include/tgmanage.cfg.sh +if [ -z ${PRIMARY} ] +then +	echo "Not configured!"; +	exit 1; +fi; + +ssh -l root ${PRIMARY} "mkdir -p ~/tgmanage" +ssh -l root ${SECONDARY} "mkdir -p ~/tgmanage" + +scp -r netlist.txt root@${PRIMARY}:tgmanage/ +scp -r tools root@${PRIMARY}:tgmanage/ +scp -r tools root@${SECONDARY}:tgmanage/ +scp -r include root@${PRIMARY}:tgmanage/ +scp -r include root@${SECONDARY}:tgmanage/ +scp -r clients root@${PRIMARY}:tgmanage/ +scp -r clients root@${SECONDARY}:tgmanage/ diff --git a/web/etc/apache2/nms-public.tg13.gathering.org b/web/etc/apache2/nms-public.tg13.gathering.org new file mode 100644 index 0000000..2c6115a --- /dev/null +++ b/web/etc/apache2/nms-public.tg13.gathering.org @@ -0,0 +1,11 @@ +<VirtualHost *:80> +        ServerAdmin drift@gathering.org +        ServerName nms-public.tg13.gathering.org + +	DocumentRoot /srv/www/nms-public.tg13.gathering.org +	AddHandler cgi-script .cgi .sh .pl .py +	 +        LogLevel warn +        ErrorLog /var/log/apache2/error-nms-public.tg13.gathering.org.log +        CustomLog /var/log/apache2/access-nms-public.tg13.gathering.org.log combined +</VirtualHost> diff --git a/web/etc/apache2/nms.tg13.gathering.org b/web/etc/apache2/nms.tg13.gathering.org new file mode 100644 index 0000000..cb81598 --- /dev/null +++ b/web/etc/apache2/nms.tg13.gathering.org @@ -0,0 +1,39 @@ +<VirtualHost *:80> +        ServerAdmin drift@gathering.org +        ServerName nms.tg13.gathering.org +        ServerAlias flexus.tg13.gathering.org + +        DocumentRoot /root/tgmanage/web/nms.gathering.org +        <Directory "/root/tgmanage/web/nms.gathering.org"> +                AllowOverride None +                Options Indexes FollowSymLinks ExecCGI MultiViews +                Order allow,deny +		Satisfy any +                Allow from ::1 +                Allow from 127.0.0.1 +		Allow from 151.216.125.0/24 +		Allow from 151.216.124.0/24 +		Allow from 2a02:ed02:124::/64 +		Allow from 2a02:ed02:125::/64 + +                AddHandler cgi-script .cgi .sh .pl .py +                AddDefaultCharset UTF-8 + +                AuthUserFile /root/tgmanage/web/.htpasswd +                AuthGroupFile /dev/null +                AuthName "Tech:Server Secret Volcano Lair" +                AuthType Basic + +                require valid-user +        </Directory> + +        ErrorLog /var/log/apache2/error-nms.tg13.gathering.org.log + +        # Possible values include: debug, info, notice, warn, error, crit, +        # alert, emerg. +        LogLevel warn + +        CustomLog /var/log/apache2/access-nms.tg13.gathering.org.log combined +        ServerSignature On + +</VirtualHost> diff --git a/web/etc/apache2/stream.tg13.gathering.org b/web/etc/apache2/stream.tg13.gathering.org new file mode 100644 index 0000000..b184b1c --- /dev/null +++ b/web/etc/apache2/stream.tg13.gathering.org @@ -0,0 +1,25 @@ + <VirtualHost *:80> +        ServerAdmin drift@gathering.org +        ServerName stream.tg13.gathering.org +        ServerAlias krosus.tg13.gathering.org + +        DocumentRoot /srv/stream.tg13.gathering.org +        <Directory "/srv/stream.tg13.gathering.org/"> +                AllowOverride None +                Options Indexes FollowSymLinks ExecCGI MultiViews +                Order allow,deny +                Allow from all +                AddHandler cgi-script .cgi .sh .pl .py +                AddDefaultCharset UTF-8 + +        </Directory> + +        ErrorLog /var/log/apache2/error-stream.tg13.gathering.org.log + +        # Possible values include: debug, info, notice, warn, error, crit, +        # alert, emerg. +        LogLevel info + +        CustomLog /var/log/apache2/access-stream.tg13.gathering.org.log combined +        ServerSignature On +</VirtualHost> diff --git a/web/etc/apache2/tech.tg13.gathering.org b/web/etc/apache2/tech.tg13.gathering.org new file mode 100644 index 0000000..7ab303b --- /dev/null +++ b/web/etc/apache2/tech.tg13.gathering.org @@ -0,0 +1,12 @@ +<VirtualHost *:80> +        ServerAdmin drift@gathering.org +        ServerName tech.tg13.gathering.org + +	DocumentRoot /srv/www/tech.tg13.gathering.org +	 +        LogLevel warn +        ErrorLog /var/log/apache2/error-tech.tg13.gathering.org.log +        CustomLog /var/log/apache2/access-tech.tg13.gathering.org.log combined + +        AddHandler cgi-script .pl +</VirtualHost> diff --git a/web/etc/cron/update-public-nms b/web/etc/cron/update-public-nms new file mode 100644 index 0000000..3018042 --- /dev/null +++ b/web/etc/cron/update-public-nms @@ -0,0 +1,3 @@ +# Update public nms + +* * * * * root /root/tgmanage/clients/update-public-nms.sh diff --git a/web/nms-public.gathering.org/dhcp.html b/web/nms-public.gathering.org/dhcp.html new file mode 100644 index 0000000..332ea0a --- /dev/null +++ b/web/nms-public.gathering.org/dhcp.html @@ -0,0 +1,10 @@ +<html> +<head> +<title>NMS Public - DHCP KART - The Gathering 2013</title> +<meta http-equiv="refresh" content="5;URL='/dhcp.html'"> +</head> +<body> +<img src="nettkart-dhcp.png" alt="DHCP KART" /> +<p>Sist oppdatert: Sun, 31 Mar 2013 16:03:02 +0200 +</body> +</html> diff --git a/web/nms-public.gathering.org/dhcpkart.html b/web/nms-public.gathering.org/dhcpkart.html new file mode 100644 index 0000000..77f7ad5 --- /dev/null +++ b/web/nms-public.gathering.org/dhcpkart.html @@ -0,0 +1,10 @@ +<html> +  <head> +    <title>DHCP-kart</title> +    <meta http-equiv="refresh" content="60"> +  </head> +  <body> + +    <p><img src="nettkart-dhcp.png"  /></p> +  </body> +</html> diff --git a/web/nms-public.gathering.org/index.html b/web/nms-public.gathering.org/index.html new file mode 100644 index 0000000..1917fd3 --- /dev/null +++ b/web/nms-public.gathering.org/index.html @@ -0,0 +1,15 @@ +<html> +<head> +<title>NMS Public - The Gathering 2013</title> +</head> + +<body> + +<h1>NMS Public - The Gathering 2013</h1> + +<h2><a href="dhcp.html">DHCP-kart</a></h2> +<h2><a href="trafikk.html">Trafikk-kart</a></h2> + +</body> +</html> + diff --git a/web/nms-public.gathering.org/led.pl b/web/nms-public.gathering.org/led.pl new file mode 100644 index 0000000..12b540b --- /dev/null +++ b/web/nms-public.gathering.org/led.pl @@ -0,0 +1,128 @@ +e1-3 on +e1-4 on +e3-3 on +e3-4 on +e5-3 on +e5-4 on +e7-3 on +e7-4 on +e9-3 on +e9-4 on +e11-1 on +e11-2 on +e11-3 on +e11-4 on +e13-1 on +e13-2 on +e13-3 on +e13-4 on +e15-1 on +e15-2 on +e15-3 on +e15-4 on +e17-1 on +e17-2 on +e17-3 on +e17-4 on +e19-1 on +e19-2 on +e19-3 on +e19-4 on +e21-1 on +e21-2 on +e21-3 on +e21-4 on +e23-1 on +e23-2 on +e23-3 on +e23-4 on +e25-1 on +e25-2 on +e25-3 on +e25-4 on +e27-1 on +e27-2 on +e29-1 on +e29-2 on +e31-1 on +e31-2 on +e33-1 on +e33-2 on +e35-1 on +e35-2 on +e37-1 on +e37-2 on +e39-1 on +e39-2 on +e41-1 on +e41-2 on +e43-1 on +e43-2 on +e43-3 on +e43-4 on +e45-1 on +e45-2 on +e45-3 on +e45-4 on +e47-1 on +e47-2 on +e47-3 on +e47-4 on +e49-1 on +e49-2 on +e49-3 on +e49-4 on +e51-1 on +e51-2 on +e51-3 on +e51-4 on +e53-1 on +e53-2 on +e53-3 on +e53-4 on +e55-1 on +e55-2 on +e55-3 on +e55-4 on +e57-1 on +e57-2 on +e57-3 on +e57-4 on +e59-1 on +e59-2 on +e59-3 on +e59-4 on +e61-1 on +e61-2 on +e61-3 on +e61-4 on +e63-1 on +e63-2 on +e63-3 on +e63-4 on +e65-1 on +e65-2 on +e65-3 on +e65-4 on +e67-1 on +e67-2 on +e67-3 on +e67-4 on +e69-1 on +e69-2 on +e69-3 on +e69-4 on +e71-1 on +e71-2 on +e71-3 on +e71-4 on +e73-1 on +e73-2 on +e73-3 on +e73-4 on +e75-1 on +e75-2 on +e75-3 on +e75-4 on +e77-1 on +e77-2 on diff --git a/web/nms-public.gathering.org/led.txt b/web/nms-public.gathering.org/led.txt new file mode 100644 index 0000000..42a189c --- /dev/null +++ b/web/nms-public.gathering.org/led.txt @@ -0,0 +1,256 @@ +e65-4 off +ap-e47-2 off +ap-e15-1 off +e11-4 off +e69-1 off +ap-e13-4 off +ap-e11-3 off +e23-2 off +e41-2 off +e65-1 off +ap-e25-1 off +e21-3 off +e3-3 off +e45-1 off +ap-e59-4 off +ap-e17-3 off +ap-e69-3 off +e45-2 off +e25-2 off +ap-e61-3 off +e55-1 off +ap-e49-2 off +e5-3 off +ap-e59-2 off +e15-3 off +ap-e49-1 off +e67-4 off +e21-1 off +ap-e13-3 off +ap-e59-1 off +e27-1 off +ap-e43-4 off +ap-e37-1 off +e7-3 off +ap-e77-1 off +ap-e43-3 off +ap-e65-4 off +ap-e23-2 off +ap-e5-4 off +e1-3 off +e63-4 off +ap-e19-3 off +ap-e39-1 off +e53-2 off +e13-1 off +ap-e13-1 off +ap-e63-1 off +ap-e55-3 off +e65-2 off +ap-e73-2 off +ap-e71-4 off +ap-e77-2 off +ap-e63-4 off +e25-3 off +ap-e49-4 off +ap-e43-1 off +e63-2 off +e19-2 off +e61-4 off +ap-e53-4 off +e55-4 off +ap-e69-4 off +ap-e41-2 off +e9-4 off +e43-4 off +ap-e47-4 off +ap-e15-4 off +ap-e17-1 off +ap-e19-4 off +ap-e37-2 off +ap-e67-1 off +e19-1 off +ap-e23-1 off +ap-e29-2 off +e49-4 off +ap-e7-3 off +ap-e65-3 off +e13-3 off +e57-3 off +ap-e25-3 off +e23-3 off +e37-2 off +ap-e1-3 off +ap-e75-2 off +e47-4 off +e21-4 off +e33-1 off +ap-e69-2 off +ap-e17-2 off +ap-e73-3 off +ap-e71-3 off +ap-e25-4 off +ap-e45-3 off +e69-2 off +e13-2 off +e51-1 off +ap-e7-4 off +ap-e9-3 off +e19-4 off +e17-4 off +e61-2 off +e57-2 off +ap-e63-3 off +ap-e45-2 off +e67-1 off +ap-e27-1 off +e51-2 off +e49-2 off +ap-e19-1 off +ap-e47-1 off +e59-3 off +ap-e25-2 off +ap-e65-2 off +e21-2 off +e59-4 off +e39-2 off +ap-e3-4 off +e19-3 off +ap-e29-1 off +e13-4 off +ap-e35-1 off +ap-e75-3 off +e35-1 off +ap-e13-2 off +ap-e57-3 off +ap-e73-4 off +e71-2 off +ap-e71-1 off +ap-e75-1 off +e71-1 off +ap-e41-1 off +ap-e57-4 off +e23-1 off +e77-1 off +e69-3 off +e29-1 off +ap-e49-3 off +ap-e45-1 off +e59-1 off +e73-3 off +e53-1 off +ap-e33-2 off +ap-e47-3 off +e17-1 off +e31-1 off +e55-3 off +e17-3 off +ap-e19-2 off +ap-e61-1 off +ap-e63-2 off +ap-e21-3 off +e75-1 off +ap-e61-2 off +ap-e55-1 off +ap-e33-1 off +e53-4 off +e3-4 off +ap-e9-4 off +ap-e31-1 off +e65-3 off +e75-4 off +ap-e15-2 off +ap-e35-2 off +e51-4 off +ap-e55-4 off +e51-3 off +ap-e21-1 off +e39-1 off +e63-1 off +ap-e57-1 off +ap-e11-1 off +e43-2 off +e75-3 off +e47-1 off +e25-4 off +e71-4 off +e47-2 off +e43-3 off +ap-e15-3 off +ap-e3-3 off +ap-e75-4 off +ap-e43-2 off +e15-2 off +ap-e67-3 off +ap-e59-3 off +e27-2 off +e11-1 off +ap-e23-3 off +ap-e11-2 off +ap-e51-2 off +e55-2 off +ap-e27-2 off +ap-e53-2 off +ap-e11-4 off +e69-4 off +e33-2 off +ap-e57-2 off +e11-3 off +e57-1 off +e37-1 off +e11-2 off +e53-3 off +e67-2 off +ap-e53-3 off +e67-3 off +ap-e71-2 off +e57-4 off +e73-4 off +e73-1 off +ap-e67-2 off +e61-3 off +e29-2 off +ap-e67-4 off +e15-1 off +ap-e53-1 off +ap-e55-2 off +ap-e5-3 off +ap-e51-1 off +ap-e61-4 off +ap-e45-4 off +e35-2 off +e61-1 off +e49-1 off +e43-1 off +ap-e69-1 off +ap-e39-2 off +e45-3 off +e23-4 off +e73-2 off +ap-e23-4 off +ap-e31-2 off +e71-3 off +e15-4 off +e17-2 off +e45-4 off +e47-3 off +ap-e73-1 off +e49-3 off +e63-3 off +ap-e21-2 off +ap-e51-4 off +e7-4 off +e41-1 off +ap-e17-4 off +e1-4 off +e5-4 off +ap-e1-4 off +e59-2 off +ap-e51-3 off +ap-e21-4 off +e25-1 off +e75-2 off +e77-2 off +e31-2 off +e9-3 off +ap-e65-1 off diff --git a/web/nms-public.gathering.org/nettkart-dhcp.png b/web/nms-public.gathering.org/nettkart-dhcp.png Binary files differnew file mode 100644 index 0000000..d9232de --- /dev/null +++ b/web/nms-public.gathering.org/nettkart-dhcp.png diff --git a/web/nms-public.gathering.org/nettkart-trafikk.html b/web/nms-public.gathering.org/nettkart-trafikk.html new file mode 100644 index 0000000..5675473 --- /dev/null +++ b/web/nms-public.gathering.org/nettkart-trafikk.html @@ -0,0 +1,10 @@ +<html> +  <head> +    <title>nettkart</title> +    <meta http-equiv="refresh" content="60"> +  </head> +  <body> + +    <p><img src="nettkart-trafikk.png"  /></p> +  </body> +</html> diff --git a/web/nms-public.gathering.org/nettkart-trafikk.png b/web/nms-public.gathering.org/nettkart-trafikk.png Binary files differnew file mode 100644 index 0000000..79661fc --- /dev/null +++ b/web/nms-public.gathering.org/nettkart-trafikk.png diff --git a/web/nms-public.gathering.org/trafikk.html b/web/nms-public.gathering.org/trafikk.html new file mode 100644 index 0000000..ee417a8 --- /dev/null +++ b/web/nms-public.gathering.org/trafikk.html @@ -0,0 +1,10 @@ +<html> +<head> +<title>NMS Public - TRAFIKK KART - The Gathering 2013</title> +<meta http-equiv="refresh" content="60;URL='/trafikk.html'"> +</head> +<body> +<img src="nettkart-trafikk.png" alt="TRAFIKK KART" /> +<p>Sist oppdatert: Sun, 31 Mar 2013 16:03:02 +0200 +</body> +</html> diff --git a/web/nms.gathering.org/apkart.pl b/web/nms.gathering.org/apkart.pl new file mode 100755 index 0000000..a89cb68 --- /dev/null +++ b/web/nms.gathering.org/apkart.pl @@ -0,0 +1,89 @@ +#! /usr/bin/perl +use CGI qw(fatalsToBrowser); +use GD; +use DBI; +use lib '../../include'; +use nms; +use strict; +use warnings; +my $cgi = CGI->new; + +#my $greentimeout = 7200; +my $greentimeout = 15*60; +my $maxtimeout = $greentimeout*9; + +my $dbh = nms::db_connect(); + +GD::Image->trueColor(1); + +my $img = GD::Image->new('bg07.png'); + +my $blk = $img->colorResolve(0, 0, 0); +my $red = $img->colorResolve(255, 0, 0); +my $grn = $img->colorResolve(0, 255, 0); +my $blu = $img->colorResolve(0, 0, 255); + +# Her ska' det bættre skrivas STORT jah! +my $title = new GD::Image(75,15); +$img->alphaBlending(1); +$title->alphaBlending(1); +my $titlebg = $title->colorResolve(255, 255, 255); +$title->fill(0,0,$titlebg); +$title->transparent($titlebg); +$title->string(gdGiantFont,7,0,"APEKART",$title->colorResolve(255, 0, 0)); +$img->copyResampled($title, 500, 0, 0, 0, 400, 100, 75, 15); +$img->copyResampled($title, 500, 550, 0, 0, 400, 100, 75, 15); + +$img->string(gdMediumBoldFont,0,0,"Access points",$blk); +$img->string(gdSmallFont,0,20,"Shows if a Cisco access point is plugged into the port",$blk); + +my %palette = ( 'notpolled' => $blu, 'missing' => $red, 'present' => $grn ); + +my @states = qw(present missing notpolled); + +for my $i (0..$#states) { +	my $y = 60 + 20 * (4 - $i); +	$img->filledRectangle(20, $y, 30, $y + 10, $palette{$states[$i]}); +	$img->rectangle(20, $y, 30, $y + 10, $blk); +	$img->stringFT($blk, "/usr/share/fonts/truetype/msttcorefonts/Arial.ttf", 10, 0, 40, $y + 10, $states[$i]); +} + +my $q = $dbh->prepare("select switch,sysname,model,last_poll < now() - '30 seconds'::interval as notpolled,placement from switches natural join placements natural join ap_poll order by zorder"); +$q->execute(); +while (my $ref = $q->fetchrow_hashref()) { +	my $sysname = $ref->{'sysname'}; +	my $model = $ref->{'model'}; +	my $state; +	if ($ref->{'notpolled'}) { +		$state = 'notpolled'; +	} elsif ($model =~ /^cisco AIR-/) { +		$state = 'present'; +	} else { +		$state = 'missing'; +		$sysname .= " $model"; +	} +	my $clr = $palette{$state}; +	 +	$ref->{'placement'} =~ /\((\d+),(\d+)\),\((\d+),(\d+)\)/; +	$img->filledRectangle($3,$4,$1,$2,$clr); +	$img->rectangle($3,$4,$1,$2,$blk); + +	my ($x2, $y2, $x1, $y1) = ($1, $2, $3, $4); +	my $max_textlen = ($x2-$x1) > ($y2-$y1) ? $x2-$x1 : $y2-$y1; +	while (length($sysname) * 6 > $max_textlen) { +		# Try to abbreviate sysname if it is too long for the box +		$sysname =~ s/^(.*)[a-z]~?([0-9]+)$/$1~$2/ or last; +	} +	if (($x2-$x1) > ($y2-$y1)) { +		$img->string(gdSmallFont,$x1+2,$y1,$sysname,$blk); +	} else { +		$img->stringUp(gdSmallFont,$x1,$y2-3,$sysname,$blk); +	} +} +$dbh->disconnect; + +if (!defined($ARGV[0])) { +	print $cgi->header(-type=>'image/png', +			   -refresh=>'10; ' . CGI::url()); +} +print $img->png; diff --git a/web/nms.gathering.org/bg07.png b/web/nms.gathering.org/bg07.png Binary files differnew file mode 100644 index 0000000..ec54ad3 --- /dev/null +++ b/web/nms.gathering.org/bg07.png diff --git a/web/nms.gathering.org/dhcpkart.pl b/web/nms.gathering.org/dhcpkart.pl new file mode 100755 index 0000000..2af4272 --- /dev/null +++ b/web/nms.gathering.org/dhcpkart.pl @@ -0,0 +1,94 @@ +#! /usr/bin/perl +use CGI qw(fatalsToBrowser); +use GD; +use DBI; +use lib '../../include'; +use nms; +my $cgi = CGI->new; + +#my $greentimeout = 7200; +my $greentimeout = 15*60; +my $maxtimeout = $greentimeout*9; + +my $dbh = nms::db_connect(); + +GD::Image->trueColor(1); +my $map = 'bg07.png'; +die "$map does not exist" unless -e $map; +$img = GD::Image->new($map); + +my $blk = $img->colorResolve(0, 0, 0); + +$img->string(gdMediumBoldFont,0,0,"DHCP-lease status",$blk); +$img->string(gdSmallFont,0,20,"Last received DHCP-request",$blk); + +# first  1/5: green (<30 min) +# middle 3/5: yellow -> red (30 min - 6 hours) +# last   1/5: blue (>6 hours) +my $grn = $img->colorResolve(0, 255, 0); +my $blu = $img->colorResolve(0, 0, 255); + +my $l1 = 42 + (236 - 42)/5; +my $l2 = 236 - (236 - 42)/5; + +$img->filledRectangle(32, 42, 53, $l1, $grn); +$img->string(gdSmallFont,56,$l1-8,($greentimeout/60)." min",$blk); + +$img->filledRectangle(32, $l2, 53, 237, $blu); +$img->string(gdSmallFont,56,$l2-5,($maxtimeout/60)." min",$blk); + +for my $y ($l1..$l2) { +	my $i = 1.0 - ($y - $l1) / ($l2 - $l1); +	my $clr = get_color($i); + +	$img->filledRectangle(32,$y,53,$y+1,$clr); +} + +my $q = $dbh->prepare('select switch,sysname,placement,EXTRACT(EPOCH FROM now() - last_ack) as age from switches natural join placements natural join dhcp order by sysname'); +$q->execute(); +while (my $ref = $q->fetchrow_hashref()) { +	my $age = $ref->{'age'}; +	if (!defined($age) || $age > $maxtimeout) { +		$clr = $img->colorResolve(0, 0, 255); +	} elsif ($age < $greentimeout) { +		$clr = $img->colorResolve(0, 255, 0); +	} else { +		# 30 minutes = 0.0 +		# 6 hours = 1.0 +	 +		my $intensity = log($age / $greentimeout) / log($maxtimeout/$greentimeout); +		$clr = get_color(1.0 - $intensity); +	} +	 +	my $sysname = $ref->{'sysname'}; +	if ($sysname !~ m/d0/i) { # don't draw distro-switches +		$ref->{'placement'} =~ /\((\d+),(\d+)\),\((\d+),(\d+)\)/; +		$img->filledRectangle($3,$4,$1,$2,$clr); +		$img->rectangle($3,$4,$1,$2,$blk); + +		my ($x2, $y2, $x1, $y1) = ($1, $2, $3, $4); +		my $max_textlen = ($x2-$x1) > ($y2-$y1) ? $x2-$x1 : $y2-$y1; +		while (length($sysname) * 6 > $max_textlen) { +			# Try to abbreviate sysname if it is too long for the box +			$sysname =~ s/^(.*)[a-z]~?([0-9]+)$/$1~$2/ or last; +		} +		if (($x2-$x1) > ($y2-$y1)) { +			$img->string(gdSmallFont,$x1+2,$y1,$sysname,$blk); +		} else { +			$img->stringUp(gdSmallFont,$x1,$y2-3,$sysname,$blk); +		} +	} +} +$dbh->disconnect; + +if (!defined($ARGV[0])) { +	print $cgi->header(-type=>'image/png', +			   -refresh=>'10; ' . CGI::url()); +} +print $img->png; + +sub get_color { +	my $intensity = shift; +	my $gamma = 1.0/1.90; +	return $img->colorResolve(255.0, 255.0 * ($intensity ** $gamma), 0); +} diff --git a/web/nms.gathering.org/index.html b/web/nms.gathering.org/index.html new file mode 100644 index 0000000..2857377 --- /dev/null +++ b/web/nms.gathering.org/index.html @@ -0,0 +1,92 @@ +<html> +  <head> +    <title>snmp</title> +  </head> +  <body> +    <p>tg light & magic. :-)</p> + +    <ul> +      <li><a href="dhcpkart.pl">DHCP-kart</a> +        <br /><i>Oversikt over DHCP-lease etter switch</i> +      </li> + +      <br /> + +      <li><a href="nettkart-text.pl">Nettkart</a> +        <br /><i>Trafikkoversikt</i> +      </li> + +      <br /> + +      <li><a href="nettkart-telnet.pl">Nettkart</a> +        <br /><i>Trafikkoversikt /m telnetlink</i> +      </li> + +      <br /> +<!--  Kun moderat nyttig nÃ¥r vi har disablet alle webinterfacene... +      <li><a href="nettkart-web.pl">Nettkart</a> +        <br /><i>Trafikkoversikt /m weblink</i> +      </li> + +      <br /> +--> +      <li><a href="portkart.pl">Nettkart, per port</a> +        <br /><i>Trafikkoversikt per port</i> +      </li> + +      <br /> +       +      <li><a href="uplinkkart.pl">Uplink-kart</a> +        <br /><i>Hvilke switcher har ikke to uplinker</i> +      </li> + +      <br /> + +      <li><a href="uplinktrafikkart.pl">Uplink-trafikkart</a> +        <br /><i>Hvem burde hatt mer enn to uplinker</i> +      </li> + +      <br /> + +      <li><a href="stromkart.pl">Strømkart</a> +        <br /><i>Hvilke switcher har færre enn fem tilkoblede klienter</i> +      </li> + +      <br /> + +      <li><a href="apkart.pl">Aksesspunkt-kart</a> +        <br /><i>Hvilke aksesspunkter er plugget i</i> +      </li> + +      <br /> + +      <!--<li><a href="overlay.pl">Overlay-nettkart</a> +        <br /><i>Teh magic 3D!</i> +      </li>  + +      <br /> --> + +      <li><a href="smanagement.pl">Kommander switcher</a> +        <br /><i>Konfigurer switchene</i> +      </li> + +      <br /> + +      <li><a href="sshow.pl">Utførte og køede kommandoer</a> +        <br /><i>Se og hÃ¥ndter kommandoer som er utført og fortsatt i køen</i> +      </li> + +      <br /> + +      <!--<li><a href="stempmap.pl">Temperaturkart</a> +        <br /><i>Temperaturkart for switchene</i> +      </li> + +      <br /> --> + +      <li><a href="mbd-status.pl">MBD-status</a> +        <br /><i>Hva spiller folk mest?</i> +      </li> +    </ul> +  </body> +</html> diff --git a/web/nms.gathering.org/led.pl b/web/nms.gathering.org/led.pl new file mode 100755 index 0000000..a05041d --- /dev/null +++ b/web/nms.gathering.org/led.pl @@ -0,0 +1,20 @@ +#! /usr/bin/perl +use CGI; +use GD; +use DBI; +use lib '../../include'; +use nms; +my $cgi = CGI->new; + +my $dbh = nms::db_connect(); + +print $cgi->header(-type=>'text/plain', -expires=>'now'); + +my $q = $dbh->prepare('select * from ( SELECT switch,sysname,sum(bytes_in) AS bytes_in,sum(bytes_out) AS bytes_out from switches natural left join get_current_datarate() group by switch,sysname) t1 natural join placements order by zorder;'); +$q->execute(); +while (my $ref = $q->fetchrow_hashref()) { +	my $sysname = $ref->{'sysname'}; +	next unless $sysname =~ /e\d+-\d+/; +	printf "%s %s\n", $sysname, (defined($ref->{'bytes_in'}) ? 'on' : 'off'); +} +$dbh->disconnect; diff --git a/web/nms.gathering.org/mbd-status.pl b/web/nms.gathering.org/mbd-status.pl new file mode 100755 index 0000000..d37781f --- /dev/null +++ b/web/nms.gathering.org/mbd-status.pl @@ -0,0 +1,44 @@ +#! /usr/bin/perl +use CGI; +use DBI; +use lib '../../include'; +use nms; +my $cgi = CGI->new; + +my $dbh = nms::db_connect(); +print $cgi->header(-type=>'text/html; charset=utf-8', -refresh=>'10; ' . CGI::url()); + +print <<"EOF"; +<html> +  <head> +    <title>MBD status</title> +  </head> +  <body> +    <h1>MBD status</h1> + +    <p>Spill søkt etter siste 15 minutter:</p> + +    <table> +      <tr> +        <th>Beskrivelse</th> +	<th>Aktive servere</th> +      </tr> +EOF + +my $q = $dbh->prepare('select description,sum(active_servers) as active_servers from (select distinct on (game,port) * from mbd_log where ts >= now() - \'10 minutes\'::interval order by game,port,ts desc ) t1 group by description order by sum(active_servers) desc, description;'); +$q->execute(); +while (my $ref = $q->fetchrow_hashref()) { +	print <<"EOF"; +      <tr> +        <td>$ref->{'description'}</td> +	<td>$ref->{'active_servers'}</td> +      </tr> +EOF +} +$dbh->disconnect; + +print <<"EOF"; +    </table> +  </body> +</html> +EOF diff --git a/web/nms.gathering.org/mygraph.pl b/web/nms.gathering.org/mygraph.pl new file mode 100755 index 0000000..64104aa --- /dev/null +++ b/web/nms.gathering.org/mygraph.pl @@ -0,0 +1,179 @@ +#! /usr/bin/perl -T +use strict; +use warnings; +use GD; +use POSIX; +use Time::Zone; + +sub blendpx { +	my ($gd, $x, $y, $r, $g, $b, $frac) = @_; +	my ($ro, $go, $bo) = $gd->rgb($gd->getPixel($x, $y)); + +	# workaround for icky 256-color graphs +	# $frac = int($frac * 32) / 32; + +	my $rn = $ro * (1.0 - $frac) + $r * $frac; +	my $gn = $go * (1.0 - $frac) + $g * $frac; +	my $bn = $bo * (1.0 - $frac) + $b * $frac; + +	$gd->setPixel($x, $y, $gd->colorResolve($rn, $gn, $bn)); +} + +# Standard implementation of Wu's antialiased line algorithm. +sub wuline { +	my ($gd, $x1, $y1, $x2, $y2, $r, $g, $b, $a) = @_; +	$x1 = POSIX::floor($x1); +	$x2 = POSIX::floor($x2); +	$y1 = POSIX::floor($y1); +	$y2 = POSIX::floor($y2); + +	if (abs($x2 - $x1) > abs($y2 - $y1)) { +		# x-directional +		if ($y2 < $y1) { +			($x2, $y2, $x1, $y1) = ($x1, $y1, $x2, $y2); +		} + +		my $y = POSIX::floor($y1); +		my $frac = $y1 - $y; +		my $dx = ($x2 > $x1) ? 1 : -1; +		my $dy = ($y2 - $y1) / abs($x2 - $x1); + +		for (my $x = $x1; $x != $x2 + $dx; $x += $dx) { +			blendpx($gd, $x, $y, $r, $g, $b, $a * (1.0 - $frac)); +			blendpx($gd, $x, $y + 1, $r, $g, $b, $a * $frac); +			$frac += $dy; +			if ($frac > 1) { +				$frac -= 1; +				++$y; +			} +		} +	} else { +		# y-directional +		if ($x2 < $x1) { +			($x2, $y2, $x1, $y1) = ($x1, $y1, $x2, $y2); +		} +		my $x = POSIX::floor($x1); +		my $frac = $x1 - $x; +		my $dy = ($y2 > $y1) ? 1 : -1; +		my $dx = ($x2 - $x1) / abs($y2 - $y1); + +		for (my $y = $y1; $y != $y2 + $dy; $y += $dy) { +			blendpx($gd, $x, $y, $r, $g, $b, $a * (1.0 - $frac)); +			blendpx($gd, $x + 1, $y, $r, $g, $b, $a * $frac); +			$frac += $dx; +			if ($frac > 1) { +				$frac -= 1; +				++$x; +			} +		} +	} +} + +sub makegraph { +	my $xoffset = 70; +	my ($width, $height, $min_x, $max_x, $min_y, $max_y, $tickgran) = @_; + +	# Create our base graph +	my $graph = new GD::Image($width, $height, 1); +	my $white = $graph->colorAllocate(255, 255, 255); +	my $gray = $graph->colorAllocate(230, 230, 255); +	my $black = $graph->colorAllocate(0, 0, 0); + +#	$graph->fill(0, 0, $white); +	$graph->filledRectangle(0, 0, $width, $height, $white); # seems to work better + +	$::xs = ($width - ($xoffset+2)) / ($max_x - $min_x); +	$::ys = ($height - 33) / ($min_y - $max_y); +	 +	# Hour marks +	for my $i ($xoffset+1..$width-2) { +		if (((($i-($xoffset+1)) / $::xs + $min_x) / 3600) % 2 == 1) { +			$graph->line($i, 0, $i, $height - 1, $gray); +		} +	} + +	# Hour text +	for my $i (0..23) { +		my @bounds = GD::Image::stringFT(undef, $black, "/usr/share/fonts/truetype/msttcorefonts/Arial.ttf", 10, 0, 0, 0, $i); +		my $w = $bounds[2] - $bounds[0]; + +		# Determine where the center of this will be +		my $starthour = POSIX::fmod(($min_x + Time::Zone::tz_local_offset()) / 3600, 24); +		my $diff = POSIX::fmod($i - $starthour + 24, 24); + +		my $center = ($diff * 3600 + 1800) * $::xs; + +		next if ($center - $w / 2 < 1 || $center + $w / 2 > $width - ($xoffset+2)); +		$graph->stringFT($black, "/usr/share/fonts/truetype/msttcorefonts/Arial.ttf", 10, 0, $xoffset + $center - $w / 2, $height - 6, $i); +	} + +	# +	# Y lines; we want max 11 of them (zero-line, plus five on each side, or +	# whatever) but we don't want the ticks to be on minimum 50 (or +	# whatever $tickgran is set to). However, if there would be +	# really really few lines, go down an order of magnitude and try +	# again. +	#  +	my $ytick; +	do { +		$ytick = ($max_y - $min_y) / 11; +		$ytick = POSIX::ceil($ytick / $tickgran) * $tickgran; +		$tickgran *= 0.1;  +	} while (($max_y - $min_y) / $ytick < 4); + +	for my $i (-11..11) { +		my $y = ($i * $ytick - $max_y) * $::ys + 10; +		next if ($y < 2 || $y > $height - 18); + +		if ($i == 0) { +			wuline($graph, $xoffset, $y, $width - 1, $y, 0, 0, 0, 1.0); +			wuline($graph, $xoffset, $y + 1, $width - 1, $y + 1, 0, 0, 0, 1.0); +		} else { +			wuline($graph, $xoffset, $y, $width - 1, $y, 0, 0, 0, 0.2); +		} + +		# text +		my $traf = 8 * ($i * $ytick); +		my $text; +		if ($traf >= 500_000_000) { +			$text = (sprintf "%.1f Gbit", ($traf/1_000_000_000)); +		} elsif ($traf >= 500_000) { +			$text = (sprintf "%.1f Mbit", ($traf/1_000_000)); +		} else { +			$text = (sprintf "%.1f kbit", ($traf/1_000)); +		} +		 +		my @bounds = GD::Image::stringFT(undef, $black, "/usr/share/fonts/truetype/msttcorefonts/Arial.ttf", 10, 0, 0, 0, $text); +		my $w = $bounds[2] - $bounds[0]; +		my $h = $bounds[1] - $bounds[5]; + +		next if ($y - $h/2 < 2 || $y + $h/2 > $height - 12); +		$graph->stringFT($black, "/usr/share/fonts/truetype/msttcorefonts/Arial.ttf", 10, 0, ($xoffset - 4) - $w, $y + $h/2, $text); +	} + +	# Nice border(TM) +	$graph->rectangle($xoffset, 0, $width - 1, $height - 1, $black); + +	return $graph; +} + +sub plotseries { +	my ($graph, $xvals, $yvals, $r, $g, $b, $min_x, $max_y) = @_; +	my $xoffset = 70; + +	my @xvals = @{$xvals}; +	my @yvals = @{$yvals}; + +	my $x = $xvals[0]; +	my $y = $yvals[0]; +	for my $i (1..$#xvals) { +		next if ($::xs * ($xvals[$i] - $x) < 2 && $::ys * ($yvals[$i] - $y) > -2);  + +		wuline($graph, ($x-$min_x) * $::xs + $xoffset + 1, ($y-$max_y) * $::ys + 10, +				($xvals[$i]-$min_x) * $::xs + $xoffset + 1, ($yvals[$i]-$max_y) * $::ys + 10, $r, $g, $b, 1.0); +		$x = $xvals[$i]; +		$y = $yvals[$i]; +	} +} + +1; diff --git a/web/nms.gathering.org/nettkart-continuous.html b/web/nms.gathering.org/nettkart-continuous.html new file mode 100644 index 0000000..e51eea0 --- /dev/null +++ b/web/nms.gathering.org/nettkart-continuous.html @@ -0,0 +1,31 @@ +<html> +  <body> +    <div id="d"></div> +    <script type="text/javascript"> +    <!-- +       var existing_img = null; + +       function load_new() { +           var i = document.createElement('img'); +	   i.onload = function() { loaded(i); }; +           i.style.display = 'none'; +           i.src = '/nettkart.pl?random=' + (new Date()).getTime(); +           document.getElementById('d').appendChild(i); +       } + +       function loaded(i) { +           i.style.display = ''; + +           if (existing_img) { +               existing_img.parentElement.removeChild(existing_img); +           } +           existing_img = i; +        +           setTimeout(function() { load_new(); }, 10000); +       } +        +       load_new(); +    --> +    </script> +  </body> +</html> diff --git a/web/nms.gathering.org/nettkart-telnet.pl b/web/nms.gathering.org/nettkart-telnet.pl new file mode 100755 index 0000000..57cac19 --- /dev/null +++ b/web/nms.gathering.org/nettkart-telnet.pl @@ -0,0 +1,47 @@ +#! /usr/bin/perl +use CGI; +use DBI; +use lib '../../include'; +use nms; +my $cgi = CGI->new; + +my $dbh = nms::db_connect(); +print $cgi->header(-type=>'text/html; charset=utf-8', -refresh=>'45; ' . CGI::url()); + +print <<"EOF"; +<html> +  <head> +    <title>nettkart - telnet</title> +  </head> +  <body> +    <map name="switches"> +EOF + +my $q = $dbh->prepare("select * from switches natural join placements where ip <> inet '127.0.0.1'"); +$q->execute(); +while (my $ref = $q->fetchrow_hashref()) { +	$ref->{'placement'} =~ /\((\d+),(\d+)\),\((\d+),(\d+)\)/; +	 +	my $traffic = 4.0 * $ref->{'bytes_in'} + $ref->{'bytes_out'};  # average and convert to bits (should be about the same in practice) +	my $ttext; +	if ($traffic >= 1_000_000_000) { +		$ttext = sprintf "%.2f Gbit/port/sec", $traffic/1_000_000_000; +	} elsif ($traffic => 1_000_000) { +		$ttext = sprintf "%.2f Mbit/port/sec", $traffic/1_000_000; +	} else { +		$ttext = sprintf "%.2f kbit/port/sec", $traffic/1_000; +	} + +	printf "      <area shape=\"rect\" coords=\"%u,%u,%u,%u\" target=\"blank\" href=\"telnet://$ref->{'ip'}\" alt=\"%s (%s)\" onmouseover=\"window.status='%s (%s)'; return true\" onmouseout=\"window.status=''\" />\n", +		$3, $4, $1, $2, $ref->{'switch'}, $ref->{'sysname'}, +		$ttext, $ref->{'sysname'}, $ttext; +} +$dbh->disconnect; + +print <<"EOF"; +    </map> + +    <p><img src="nettkart.pl" usemap="#switches" /></p> +  </body> +</html> +EOF diff --git a/web/nms.gathering.org/nettkart-text.pl b/web/nms.gathering.org/nettkart-text.pl new file mode 100755 index 0000000..d3f4be7 --- /dev/null +++ b/web/nms.gathering.org/nettkart-text.pl @@ -0,0 +1,47 @@ +#! /usr/bin/perl +use CGI; +use DBI; +use lib '../../include'; +use nms; +my $cgi = CGI->new; + +my $dbh = nms::db_connect(); +print $cgi->header(-type=>'text/html; charset=utf-8', -refresh=>'10; ' . CGI::url()); + +print <<"EOF"; +<html> +  <head> +    <title>nettkart</title> +  </head> +  <body> +    <map name="switches"> +EOF + +my $q = $dbh->prepare("select * from switches natural join placements where ip <> inet '127.0.0.1'"); +$q->execute(); +while (my $ref = $q->fetchrow_hashref()) { +	$ref->{'placement'} =~ /\((\d+),(\d+)\),\((\d+),(\d+)\)/; +	 +	my $traffic = 4.0 * $ref->{'bytes_in'} + $ref->{'bytes_out'};  # average and convert to bits (should be about the same in practice) +	my $ttext; +	if ($traffic >= 1_000_000_000) { +		$ttext = sprintf "%.2f Gbit/port/sec", $traffic/1_000_000_000; +	} elsif ($traffic => 1_000_000) { +		$ttext = sprintf "%.2f Mbit/port/sec", $traffic/1_000_000; +	} else { +		$ttext = sprintf "%.2f kbit/port/sec", $traffic/1_000; +	} + +	printf "      <area shape=\"rect\" coords=\"%u,%u,%u,%u\" href=\"showswitch.pl?id=%u\" alt=\"%s (%s)\" onmouseover=\"window.status='%s (%s)'; return true\" onmouseout=\"window.status=''\" />\n", +		$3, $4, $1, $2, $ref->{'switch'}, $ref->{'sysname'}, +		$ttext, $ref->{'sysname'}, $ttext; +} +$dbh->disconnect; + +print <<"EOF"; +    </map> + +    <p><img src="nettkart.pl" usemap="#switches" /></p> +  </body> +</html> +EOF diff --git a/web/nms.gathering.org/nettkart-web.pl b/web/nms.gathering.org/nettkart-web.pl new file mode 100755 index 0000000..ce76c35 --- /dev/null +++ b/web/nms.gathering.org/nettkart-web.pl @@ -0,0 +1,47 @@ +#! /usr/bin/perl +use CGI; +use DBI; +use lib '../../include'; +use nms; +my $cgi = CGI->new; + +my $dbh = nms::db_connect(); +print $cgi->header(-type=>'text/html; charset=utf-8', -refresh=>'45; ' . CGI::url()); + +print <<"EOF"; +<html> +  <head> +    <title>nettkart - web</title> +  </head> +  <body> +    <map name="switches"> +EOF + +my $q = $dbh->prepare("select * from switches natural join placements where ip <> inet '127.0.0.1'"); +$q->execute(); +while (my $ref = $q->fetchrow_hashref()) { +	$ref->{'placement'} =~ /\((\d+),(\d+)\),\((\d+),(\d+)\)/; +	 +	my $traffic = 4.0 * $ref->{'bytes_in'} + $ref->{'bytes_out'};  # average and convert to bits (should be about the same in practice) +	my $ttext; +	if ($traffic >= 1_000_000_000) { +		$ttext = sprintf "%.2f Gbit/port/sec", $traffic/1_000_000_000; +	} elsif ($traffic => 1_000_000) { +		$ttext = sprintf "%.2f Mbit/port/sec", $traffic/1_000_000; +	} else { +		$ttext = sprintf "%.2f kbit/port/sec", $traffic/1_000; +	} + +	printf "      <area shape=\"rect\" coords=\"%u,%u,%u,%u\" href=\"http://$ref->{'ip'}\" alt=\"%s (%s)\" onmouseover=\"window.status='%s (%s)'; return true\" onmouseout=\"window.status=''\" />\n", +		$3, $4, $1, $2, $ref->{'switch'}, $ref->{'sysname'}, +		$ttext, $ref->{'sysname'}, $ttext; +} +$dbh->disconnect; + +print <<"EOF"; +    </map> + +    <p><img src="nettkart.pl" usemap="#switches" /></p> +  </body> +</html> +EOF diff --git a/web/nms.gathering.org/nettkart.pl b/web/nms.gathering.org/nettkart.pl new file mode 100755 index 0000000..b9517f8 --- /dev/null +++ b/web/nms.gathering.org/nettkart.pl @@ -0,0 +1,142 @@ +#! /usr/bin/perl +use CGI; +use GD; +use Image::Magick; +use DBI; +use lib '../../include'; +use nms; +my $cgi = CGI->new; + +# Sekrit night-mode +my $night = defined($cgi->param('night')); + +my $dbh = nms::db_connect(); + +GD::Image->trueColor(1); +my ($img, $text_img); + +my $img = GD::Image->new('bg07.png'); +if ($night) { +	my ($width, $height) = ($img->width, $img->height);  + +	$img = GD::Image->new($width, $height, 1); +	$img->alphaBlending(0); +	$img->saveAlpha(1); +	my $blank = $img->colorAllocateAlpha(0, 0, 0, 127); +	$img->filledRectangle(0, 0, $img->width - 1, $img->height - 1, $blank); + +	$text_img = GD::Image->new($width, $height, 1); +	$text_img->alphaBlending(0); +	$text_img->saveAlpha(1); +	my $blank = $text_img->colorAllocateAlpha(0, 0, 0, 127); +	$text_img->filledRectangle(0, 0, $text_img->width - 1, $text_img->height - 1, $blank); +} else { +	$img = GD::Image->new('bg07.png'); +	$text_img = $img; +} + +my $blk = $img->colorResolve(0, 0, 0); + +for my $y (42..236) { +	my $i = 4.0 * ($y - 236.0) / (42.0 - 237.0); +	my $clr = get_color($i); +	 +	$img->filledRectangle(12, $y, 33, $y+1, $clr); +	$text_img->filledRectangle(12, $y, 33, $y+1, $clr); +} + +$text_img->rectangle(12,42,33,236,$blk); + +my $tclr = $night ? $text_img->colorResolve(255, 255, 255) : $blk; +$text_img->stringFT($tclr, "/usr/share/fonts/truetype/msttcorefonts/Arial.ttf", 10, 0, 40, 47 + (236-42)*0.0/4.0, "100 Gbit/sec"); +$text_img->stringFT($tclr, "/usr/share/fonts/truetype/msttcorefonts/Arial.ttf", 10, 0, 40, 47 + (236-42)*1.0/4.0, "10 Gbit/sec"); +$text_img->stringFT($tclr, "/usr/share/fonts/truetype/msttcorefonts/Arial.ttf", 10, 0, 40, 47 + (236-42)*2.0/4.0, "1 Gbit/sec"); +$text_img->stringFT($tclr, "/usr/share/fonts/truetype/msttcorefonts/Arial.ttf", 10, 0, 40, 47 + (236-42)*3.0/4.0, "100 Mbit/sec"); +$text_img->stringFT($tclr, "/usr/share/fonts/truetype/msttcorefonts/Arial.ttf", 10, 0, 40, 47 + (236-42)*4.0/4.0, "10 Mbit/sec"); +$text_img->stringFT($tclr, "/usr/share/fonts/truetype/msttcorefonts/Arial.ttf", 10, 0, 1000, 700, "NMS (C) 2005-2012 Tech:Server"); + +my $q = $dbh->prepare("select * from ( SELECT switch,sysname,sum(bytes_in) AS bytes_in,sum(bytes_out) AS bytes_out from switches natural left join get_current_datarate() where ip <> inet '127.0.0.1' group by switch,sysname) t1 natural join placements order by zorder;"); +$q->execute(); +while (my $ref = $q->fetchrow_hashref()) { + +	# for now: +	# 10Mbit/switch = green +	# 100Mbit/switch = yellow +	# 1Gbit/switch = red +	# 10Gbit/switch = white +	 +	my $clr; + +	if (defined($ref->{'bytes_in'})) { +		my $intensity = 0.0; +		my $traffic = 4.0 * ($ref->{'bytes_in'} + $ref->{'bytes_out'});  # average and convert to bits (should be about the same in practice) + +		my $max = 100_000_000_000.0;   # 100Gbit +		my $min =      10_000_000.0;   # 10Mbit +		if ($traffic >= $min) { +			$intensity = log($traffic / $min) / log(10); +			$intensity = 4.0 if ($intensity > 4.0); +		} +		$clr = get_color($intensity); +	} else { +		$clr = $img->colorResolve(0, 0, 255); +	} +	 +	my $sysname = $ref->{'sysname'}; +	$sysname =~ s/-sekrit//; +	 +	$ref->{'placement'} =~ /\((\d+),(\d+)\),\((\d+),(\d+)\)/; +	$img->filledRectangle($3,$4,$1,$2,$clr); +	$text_img->filledRectangle($3,$4,$1,$2,$clr); + +	$img->rectangle($3,$4,$1,$2,$blk); +	$text_img->rectangle($3,$4,$1,$2,$blk); +	my ($x2, $y2, $x1, $y1) = ($1, $2, $3, $4); +	my $max_textlen = ($x2-$x1) > ($y2-$y1) ? $x2-$x1 : $y2-$y1; +	while (length($sysname) * 6 > $max_textlen) { +		# Try to abbreviate sysname if it is too long for the box +		$sysname =~ s/^(.*)[a-z]~?([0-9]+)$/$1~$2/ or last; +	} +	if (($x2-$x1) > ($y2-$y1)) { +		$text_img->string(gdSmallFont,$x1+2,$y1,$sysname,$blk); +	} else { +		$text_img->stringUp(gdSmallFont,$x1,$y2-3,$sysname,$blk); +	} +} +$dbh->disconnect; + +print $cgi->header(-type=>'image/png', -expires=>'now'); +if ($night) { +	my $magick = Image::Magick->new; +	$magick->BlobToImage($img->png); +	$magick->Blur(sigma=>10.0, channel=>'All'); +	$magick->Gamma(gamma=>1.90); + +	my $m2 = Image::Magick->new; +	$m2->Read('bg07.png'); +	$m2->Negate(); +	$m2->Composite(image=>$magick, compose=>'Atop'); + +	my $m3 = Image::Magick->new; +	$m3->BlobToImage($text_img->png); +	$m2->Composite(image=>$m3, compose=>'Atop'); +	 +	$img = $m2->ImageToBlob(); +	print $img; +} else {	 +	print $img->png; +} + +sub get_color { +	my $intensity = shift; +	my $gamma = 1.0/1.90; +	if ($intensity > 3.0) { +		return $img->colorResolve(255.0 * ((4.0 - $intensity) ** $gamma), 255.0 * ((4.0 - $intensity) ** $gamma), 255.0 * ((4.0 - $intensity) ** $gamma)); +	} elsif ($intensity > 2.0) { +		return $img->colorResolve(255.0, 255.0 * (($intensity - 2.0) ** $gamma), 255.0 * (($intensity - 2.0) ** $gamma)); +	} elsif ($intensity > 1.0) { +		return $img->colorResolve(255.0, 255.0 * ((2.0 - $intensity) ** $gamma), 0); +	} else { +		return $img->colorResolve(255.0 * ($intensity ** $gamma), 255, 0); +	} +} diff --git a/web/nms.gathering.org/portkart.pl b/web/nms.gathering.org/portkart.pl new file mode 100755 index 0000000..1269173 --- /dev/null +++ b/web/nms.gathering.org/portkart.pl @@ -0,0 +1,82 @@ +#! /usr/bin/perl +use CGI; +use GD; +use DBI; +use lib '../../include'; +use nms; +my $cgi = CGI->new; + +my $dbh = nms::db_connect(); + +GD::Image->trueColor(1); +$img = GD::Image->new('bg07.png'); + +my $blk = $img->colorResolve(0, 0, 0); + +for my $y (42..236) { +	my $i = 3.0 * ($y - 236.0) / (42.0 - 237.0); +	my $clr = get_color($i); +	 +	$img->filledRectangle(12,$y,33,$y+1,$clr); +} + +$img->stringFT($blk, "/usr/share/fonts/truetype/msttcorefonts/Arial.ttf", 10, 0, 40, 47 + (236-42)*0.0/3.0, "1 Gbit/sec"); +$img->stringFT($blk, "/usr/share/fonts/truetype/msttcorefonts/Arial.ttf", 10, 0, 40, 47 + (236-42)*1.0/3.0, "100 Mbit/sec"); +$img->stringFT($blk, "/usr/share/fonts/truetype/msttcorefonts/Arial.ttf", 10, 0, 40, 47 + (236-42)*2.0/3.0, "10 Mbit/sec"); +$img->stringFT($blk, "/usr/share/fonts/truetype/msttcorefonts/Arial.ttf", 10, 0, 40, 47 + (236-42)*3.0/3.0, "1 Mbit/sec"); +$img->stringFT($blk, "/usr/share/fonts/truetype/msttcorefonts/Arial.ttf", 10, 0, 1000, 620, "NMS (C) 2005-2007 Tech:Server"); + +my $q = $dbh->prepare('select switch,port,bytes_in,bytes_out,placement,switchtype from switches natural join placements natural join get_datarate() where switchtype like \'%3100%\''); +$q->execute(); +while (my $ref = $q->fetchrow_hashref()) { + +	# for now: +	# 100kbit/port = all green +	# 1gbit/port = all red +	 +	my $clr; + +	if (defined($ref->{'bytes_in'})) { +		my $intensity = 0.0; +		my $traffic = 4.0 * ($ref->{'bytes_in'} + $ref->{'bytes_out'});  # average and convert to bits (should be about the same in practice) + +		my $max = 100_000_000_000.0;   # 1Gbit +		my $min =       1_000_000.0;   # 1Mbit +		if ($traffic >= $min) { +			$intensity = log($traffic / $min) / log(10); +			$intensity = 4.0 if ($intensity > 4.0); +		} +		$clr = get_color($intensity); +	} else { +		$clr = $img->colorResolve(0, 0, 255); +	} +	 +	$ref->{'placement'} =~ /\((\d+),(\d+)\),\((\d+),(\d+)\)/; +	my $npo = 48; +	my $f = ($ref->{'port'} - 1) % 2; +	my $po = ($ref->{'port'} - 1 - $f)/2; +	my $h = 2*($2-$4)/$npo; +	my $w = ($1-$3)/2; +	 +	$img->filledRectangle($3+$w*$f,$4+$po*$h,$3+$w+$w*$f,$4+$h*($po+1),$clr); +#	$img->rectangle($3+$w*$f,$4+$po*$h,$3+$w+$w*$f,$4+$h*($po+1),$blk); +	$img->rectangle($3,$4,$1,$2,$blk); +} +$dbh->disconnect; + +print $cgi->header(-type=>'image/png'); +print $img->png; + +sub get_color { +	my $intensity = shift; +	my $gamma = 1.0/1.90; +	if ($intensity > 3.0) { +		return $img->colorResolve(255.0 * ((4.0 - $intensity) ** $gamma), 255.0 * ((4.0 - $intensity) ** $gamma), 255.0 * ((4.0 - $intensity) ** $gamma)); +	} elsif ($intensity > 2.0) { +		return $img->colorResolve(255.0, 255.0 * (($intensity - 2.0) ** $gamma), 255.0 * (($intensity - 2.0) ** $gamma)); +	} elsif ($intensity > 1.0) { +		return $img->colorResolve(255.0, 255.0 * ((2.0 - $intensity) ** $gamma), 0); +	} else { +		return $img->colorResolve(255.0 * ($intensity ** $gamma), 255, 0); +	} +} diff --git a/web/nms.gathering.org/showswitch.pl b/web/nms.gathering.org/showswitch.pl new file mode 100755 index 0000000..5ed0029 --- /dev/null +++ b/web/nms.gathering.org/showswitch.pl @@ -0,0 +1,221 @@ +#! /usr/bin/perl +use CGI; +use DBI; +use Time::HiRes; +use POSIX ":sys_wait_h"; +use strict; +use warnings; +use lib '../../include'; +use nms; +my $cgi = CGI->new; +my $switch = $cgi->param('id'); +my $width = $cgi->param('width'); +my $height = $cgi->param('height'); +my @pids = (); +my $resthtml = ""; + +$width = 500 unless (defined($width)); +$height = 250 unless (defined($height)); + +require './mygraph.pl'; + +my $start = [Time::HiRes::gettimeofday]; +my $dbh = nms::db_connect(); + +# Fetch the name +my $ref = $dbh->selectrow_hashref('SELECT sysname FROM switches WHERE switch=?', undef, $switch); + +print $cgi->header(-type=>'text/html; charset=utf-8'); +print <<"EOF"; +<html> +  <head> +    <title>snmp</title> +  </head> +  <body> +    <h1>Switch $switch ($ref->{'sysname'})</h1> +EOF + +my $q = $dbh->prepare('select port,coalesce(description, \'Port \' || port) as description,extract(epoch from time) as time,bytes_in,bytes_out from switches natural left join portnames natural join polls where time between now() - \'1 day\'::interval and now() and switch=? order by switch,port,time;') or die $dbh->errstr; +$q->execute($switch) or die $dbh->errstr; + +my (@totx, @toty1, @toty2) = (); + +my (@x, @y1, @y2) = (); +my $last_port = -1; +my $portname = ""; +my $min_x = time; +my $max_x = time - 86400; +my ($min_y, $max_y, $prev_time, $prev_in, $prev_out); +my ($if,$of,$ifv,$ofv); +my $idx; +my ($min_ty,$max_ty) = (0, 10_000_000/8); + +$prev_time = -1; +my $last_totx; +while (my $ref = $q->fetchrow_hashref()) { +	my $time = $ref->{'time'}; +	my $in = $ref->{'bytes_in'}; +	my $out = $ref->{'bytes_out'}; +	next if ($time == $prev_time); + +	if ($ref->{'port'} != $last_port) { +		if ($last_port != -1) { +			my $filename = "$switch-$last_port-$width-$height.png"; + +			# reap children +			waitpid(-1, WNOHANG); + +			my $pid = fork(); +			if ($pid == 0) { +# write out the graph +				my $graph = makegraph($width, $height, $min_x, $max_x, $min_y, $max_y, 5); +				plotseries($graph, \@x, \@y1, 255, 0, 0, $min_x, $max_y); +				plotseries($graph, \@x, \@y2, 0, 0, 255, $min_x, $max_y); + +				open GRAPH, ">img/$filename" +					or die "img/$filename: $!"; +				print GRAPH $graph->png; +				close GRAPH; +				exit; +			} + +			push @pids, $pid; + +			$resthtml .= "<div style=\"float: left;\"><h2>$portname</h2>\n"; +			$resthtml .= "<p><img src=\"img/$filename\" width=\"$width\" height=\"$height\" /></p></div>\n"; +		} +	 +		# Reset all the variables +		@x = (); +		@y1 = (); +		@y2 = (); +		($min_y,$max_y) = (0, 10_000_000/8); +		$prev_time = $ref->{'time'}; +		$prev_in = $ref->{'bytes_in'}; +		$prev_out = $ref->{'bytes_out'}; +		$last_port = $ref->{'port'}; +		$portname = $ref->{'description'}; +		($if,$of,$ifv,$ofv) = (0,0,0,0); +		($prev_time,$prev_in,$prev_out) = ($time,$in,$out); +		$idx = 0; +		$last_totx = undef; +		next; +	} + +	# Assume overflow (unless the switch has been down for >10 minutes) +	my ($calc_in, $calc_out) = ($in, $out); +	if ($in < $prev_in || $out < $prev_out) { +		if ($prev_in < 4294967296 && $prev_out < 4294967296) { +			# ick, heuristics +			if ($prev_time - $time > 600 || ($in + 4294967296 - $prev_in) > 2147483648 || ($out + 4294967296 - $prev_out) > 2147483648) { +				($prev_time,$prev_in,$prev_out) = ($time,$in,$out); +				next; +			} + +			$calc_in += 4294967296 if ($in < $prev_in); +			$calc_out += 4294967296 if ($out < $prev_out); +		} else { +			$prev_in = 0; +			$prev_out = 0; +		} +	} + +	# Remove dupes +	if ($in == $prev_in && $out == $prev_out) { +		($prev_time,$prev_in,$prev_out) = ($time,$in,$out); +		next; +	} + +	# Find the current flow +	my $if = ($calc_in - $prev_in) / ($time - $prev_time); +	my $of = ($calc_out - $prev_out) / ($time - $prev_time); + +	# Summarize (we don't care about the summed variance for now)	 +        $min_x = $time if (!defined($min_x) || $time < $min_x); +        $max_x = $time if (!defined($max_x) || $time > $max_x); +	$min_y = $if if (!defined($min_y) || $if < $min_y); +	$min_y = $of if ($of < $min_y); +	$max_y = $if if (!defined($max_y) || $if > $max_y); +	$max_y = $of if ($of > $max_y); + +	my $pt = 0.5 * ($time + $prev_time); + +	push @x, $pt; +	push @y1, $if; +	push @y2, $of; + +	while ($idx < $#totx && $pt > $totx[$idx]) { +		++$idx; +	} +	if ($idx >= $#totx) { +		push @totx, $pt; +		push @toty1, $if; +		push @toty2, $of; +		++$idx; + +		$min_ty = $if if (!defined($min_ty) || $if < $min_ty); +		$min_ty = $of if ($of < $min_ty); +		$max_ty = $if if (!defined($max_ty) || $if > $max_ty); +		$max_ty = $of if ($of > $max_ty); +	} else { +		if (!defined($last_totx) || $last_totx != $idx) { +			$toty1[$idx] += $if; +			$toty2[$idx] += $of; +		} +		$last_totx = $idx; + +		$min_ty = $toty1[$idx] if (!defined($min_ty) || $toty1[$idx] < $min_ty); +		$min_ty = $toty2[$idx] if ($toty2[$idx] < $min_ty); +		$max_ty = $toty1[$idx] if (!defined($max_ty) || $toty1[$idx] > $max_ty); +		$max_ty = $toty2[$idx] if ($toty2[$idx] > $max_ty); +	} +	 +	($prev_time,$prev_in,$prev_out) = ($time,$in,$out); +} +$dbh->disconnect; + +# last graph +my $filename = "$switch-$last_port-$width-$height.png"; + +my $pid = fork(); +if ($pid == 0) { +	my $graph = makegraph($width, $height, $min_x, $max_x, $min_y, $max_y, 5); +	plotseries($graph, \@x, \@y1, 255, 0, 0, $min_x, $max_y); +	plotseries($graph, \@x, \@y2, 0, 0, 255, $min_x, $max_y); + +	open GRAPH, ">img/$filename" +	or die "img/$filename: $!"; +	print GRAPH $graph->png; +	close GRAPH; +	exit; +} + +push @pids, $pid; + +$resthtml .= "<div style=\"float: left;\"><h2>$portname</h2>\n"; +$resthtml .= "<p><img src=\"img/$filename\" width=\"$width\" height=\"$height\" /></p></div>\n"; +		 +# total graph +my $graph = makegraph($width, $height, $min_x, $max_x, $min_ty, $max_ty, 5); +plotseries($graph, \@totx, \@toty1, 255, 0, 0, $min_x, $max_ty); +plotseries($graph, \@totx, \@toty2, 0, 0, 255, $min_x, $max_ty); + +$filename = "$switch-$width-$height.png"; +open GRAPH, ">img/$filename" or die "img/$filename: $!"; +print GRAPH $graph->png; +close GRAPH; + + +# Wait for all the other graphs to be done +while (waitpid(-1, 0) != -1) { +	1; +} + +print $resthtml; + +print "<div style=\"float: left;\"><h2>Total</h2>\n"; +print "<p><img src=\"img/$filename\" width=\"$width\" height=\"$height\" /></p></div>\n"; + +my $elapsed = Time::HiRes::tv_interval($start);  +printf "<p style=\"clear: both;\">Page and all graphs generated in %.2f seconds.</p>\n", $elapsed; +print "</body>\n</html>\n"; diff --git a/web/nms.gathering.org/slide.html b/web/nms.gathering.org/slide.html new file mode 100644 index 0000000..046020d --- /dev/null +++ b/web/nms.gathering.org/slide.html @@ -0,0 +1,38 @@ +<!doctype html> +<html> +    <body> +	<iframe id="tgview" style="border: 0; width: 1536px; height: 864px"></iframe> + +        <script> +            (function() { +                var urls = [ +                    'http://onlineclock.net/', +                    'http://nms.tg13.gathering.org/dhcpkart.pl', +                    'http://nms.tg13.gathering.org/nettkart-text.pl', +                    'http://nms.tg13.gathering.org/nettkart-text.pl', +                    'http://nms.tg13.gathering.org/uplinkkart.pl', +                    'http://nms.tg13.gathering.org/uplinktrafikkart.pl', +                    'http://nms.tg13.gathering.org/apkart.pl', +                    'http://stats.tg13.gathering.org/' +                    ]; + +                var view = document.getElementById('tgview'); +                var fload = function( frame, url ) { +                        frame.src = url; +                }; + +                var i = 0; +                (function rotation() { +                    //if ( i != l-1 ) {  +                    if ( i != urls.length-1 ) {  +                        i++ +                    } else { +                        i = 0; +                    } +                    fload( view, urls[i] ); +                    setTimeout( arguments.callee, 10000 ); +                })(); +            })(); +        </script> +    </body> +</html> diff --git a/web/nms.gathering.org/smanagement.pl b/web/nms.gathering.org/smanagement.pl new file mode 100755 index 0000000..c01c52d --- /dev/null +++ b/web/nms.gathering.org/smanagement.pl @@ -0,0 +1,239 @@ +#!/usr/bin/perl +use warnings; +use strict; +use CGI; +use DBI; +use Data::Dumper; +use Switch; +use lib '../../include'; +use nms; + +# Grab from .htaccess-authentication +my $user = $ENV{'REMOTE_USER'}; + +my $dbh = nms::db_connect(); +$dbh->{AutoCommit} = 0; + +# Ugly casting, found no other way +my $sinsert = $dbh->prepare(	"INSERT INTO squeue  +				(gid, added, priority, addr, sysname, cmd, author) +				VALUES(?::text::int, timeofday()::timestamptz, ?::text::int, ?::text::inet, ?, ?, ?)") +	or die "Could not prepare sinsert"; +my $sgetip = $dbh->prepare("SELECT ip FROM switches WHERE sysname = ?") +	or die "Could not prepare sgetip"; +my $sgid = $dbh->prepare("SELECT nextval('squeue_group_sequence') as gid"); +my $all_switches = $dbh->prepare("SELECT sysname FROM switches ORDER BY sysname"); + +sub parse_range($) { +	my $switches = $_; +	my @range; + +	my @rangecomma = split(/\s*,\s*/, $switches); +	foreach (@rangecomma) { +		my ($first, $last) = $_ =~ /(e\d+\-(?:sw)?[123456])\s*\-\s*(e\d+\-(?:sw)?[123456])?/; +		if (!defined($first) && $_ =~ /e\d+\-(sw)?[123456]/) { +			$first = $_; +		} +		if (!defined($first)) { +			print "<font color=\"red\">Parse error in: $_</font><br>\n"; +			next; +		} +		my ($rowstart, $placestart) = $first =~ /e(\d+)\-(?:sw)?([123456])/; +		if (!defined($rowstart) || !defined($placestart)) { +			print "<font color=\"red\">Parse error in: $_</font><br>\n"; +			next; +		} +		my ($rowend, $placeend); +		if (!defined($last)) { +			$rowend = $rowstart; +			$placeend = $placestart; +		} +		else { +			($rowend, $placeend) = $last =~ /e(\d+)\-(?:sw)?([123456])/; +		} +		if (!defined($rowend) || !defined($placeend)) { +			print "<font color=\"red\">Parse error in: $_</font><br>\n"; +			next; +		} +		#print "e $rowstart - $placestart to e $rowend - $placeend <br>\n"; +		for (my $i = $rowstart; $i <= $rowend; $i++) { +			my $dostart; +			if ($rowstart != $i) { +				$dostart = 1; +			} +			else { +				$dostart = $placestart; +			} +			for (my $j = $dostart; $j <= 6; $j++) { +				last if ($i == $rowend && $j > $placeend); +				push(@range, "e$i-$j"); +			} +		} +	} +#	foreach (@range) { +#		print ":: $_<br>\n"; +#	} +	return @range; +} + +sub get_addr_from_switchnum($) { +	my ($sysname) = @_; + +	$sgetip->execute($sysname); +	if ($sgetip->rows() < 1) { +		print "Could not get the ip for: ".$sysname; +		return undef; +	} +	my $row = $sgetip->fetchrow_hashref(); +	return $row->{'ip'}; +} + +my $cgi = new CGI; + +print $cgi->header(-type=>'text/html; charset=utf-8'); + +print << "EOF"; +<html> +  <head> +    <title>Switch managment</title> +  </head> +  <body> +  <p>Du er logget inn som: $user</p> +    <form method="POST" action="smanagement.pl"> +    <table> +      <tr> +        <td>Alle switchene</td> +        <td><input type="radio" name="rangetype" value="all" /></td> +	<td></td> +	<td></td> +      </tr> +      <tr> +        <td>Switch</td> +        <td><input type="radio" checked name="rangetype" value="switch" /></td> +        <td><input type="text" name="range" /></td> +        <td>e1-2, e3-3 - e10-2</td> +      </tr> +      <tr> +        <td>Regexp</td> +        <td><input type="radio" name="rangetype" value="regexp" /></td> +        <td><input type="text" name="regexp" /></td> +        <td>Regulært uttrykk</td> +      </tr> +      <tr> +        <td>Rad</td> +        <td><input type="radio" name="rangetype" value="row" /></td> +        <td><input type="text" name="range" /></td> +        <td>1,3-5 (Disabled)</td> +      </tr> +       <tr> +        <td><hr /></td> +        <td><hr /></td> +        <td><hr /></td> +        <td><hr /></td> +      </tr> +      <tr> +	<td>Prioritet</td> +	<td></td> +	<td> +	  <select name="priority"> +	    <option value="1">1 (lavest)</option> +	    <option value="2">2</option> +	    <option selected value="3">3</option> +	    <option value="4">4</option> +	    <option value="5">5 (høyest)</option> +	  </select> +	</td> +      </tr> +      <tr> +        <td>Kommando(er):</td> +        <td></td> +	<td><textarea name="cmd" cols="80" rows="24"></textarea></td> +	<td>En kommando per linje. Linjer som begynner med ! sørger for at nms ikke venter pÃ¥ normal prompt, men fyrer av gÃ¥rde neste linje umiddelbart. Kjekt for kommandoer av typen "!save\\nY"</td> +      </td> +      <tr> +        <td><hr /></td> +        <td><hr /></td> +        <td><hr /></td> +        <td><hr /></td> +      </tr> +    </table> +    <input type="submit" value="Execute!" /><br /> +    </form> +EOF + +print "<br />\n"; + +my @switches = (); +switch ($cgi->param('rangetype')) { +	case 'all' { +		print "Sender `".$cgi->param('cmd')."` til alle switchene<br />"; +		@switches = (); +		$all_switches->execute(); +		while (my $ref = $all_switches->fetchrow_hashref) { +			push @switches, $ref->{'sysname'}; +		} +	} +	case 'switch' { +#		print "Sender `".$cgi->param('cmd')."` til switchene `" +#		      .$cgi->param('range')."`.<br />"; +		$_ = $cgi->param('range'); +		@switches = parse_range($_); +	} +	case 'regexp' { +		@switches = (); +		$all_switches->execute(); +		while (my $ref = $all_switches->fetchrow_hashref) { +			push @switches, $ref->{'sysname'} if $ref->{'sysname'} =~ $cgi->param('regexp'); +		} +	} +	case 'row' { +#		print "Sender `".$cgi->param('cmd')."` til radene `" +#		      .$cgi->param('range')."`.<br />"; +#		print "This function does not work yet."; +#		$_ = $cgi->param('range'); +#		@switches = &parse_row_range($_); +#		@switches = (); +		print "<font color=\"red\">SlÃ¥tt av!</font>\n"; +	} +} + +my $gid; +if (@switches > 0) { +	$sgid->execute(); +	my $row = $sgid->fetchrow_hashref(); +	$gid = $row->{gid}; +} + +my $pri = $cgi->param('priority'); + +print "<pre>\n"; +foreach my $switch (@switches) { +	my $addr = get_addr_from_switchnum($switch); +	if (!defined($addr)) { +		next; +	} +	my $cmd = $cgi->param('cmd'); +	print "$switch got addr $addr <br>\n"; +	print "Queuing commands for $switch:\n"; +	my $result = $sinsert->execute($gid, $pri, $addr, $switch, $cmd, $user); +	if (!$result) { +		print "\t<font color=\"red\">" +		       ."Could not execute query." +		       ."</font>\n"; +		print "\t".$dbh->errstr."\n"; +	} +	else { +		print "\tQueued: $cmd\n"; +	} +	print "\n"; +} +$dbh->commit; +if (defined($gid)) { +	print "<a href=\"sshow.pl?action=showgid&gid=".$gid."\">Vis resultat</a>\n"; +} +print "</pre>\n"; + +print << "EOF"; +  </body> +</html> +EOF diff --git a/web/nms.gathering.org/ssendfile.pl b/web/nms.gathering.org/ssendfile.pl new file mode 100755 index 0000000..ec2ebb8 --- /dev/null +++ b/web/nms.gathering.org/ssendfile.pl @@ -0,0 +1,48 @@ +#!/usr/bin/perl +use warnings; +use strict; +use lib '../../include'; +use POSIX; + +my $delaytime = 30; +my $poll_frequency = 60; + +sub mylog { +	my $msg = shift; +	my $time = POSIX::ctime(time); +	$time =~ s/\n.*$//; +	printf STDERR "[%s] %s\n", $time, $msg; +} + +if ($#ARGV != 1) { +	die("Error in arguments passed\n". +	       "./ssendfile.pl addr configfile\n"); +} + +my $conn = nms::switch_connect($ARGV[0]); +if (!defined($conn)) { +	die("Could not connect to switch.\n"); +} + +open(CONFIG, $ARGV[1]); +while (<CONFIG>) { +	my $cmd = $_; +	$cmd =~ s/[\r\n]+//g; +	print "Executing: `$cmd`\n"; +#	if ($cmd =~ /ip ifconfig swif0 (\d{1-3}\.\d{1-3}\.\d{1-3}\.\d{1-3})/) { +#		print "New ip: $1\n"; +#		$conn->cmd(	String => $cmd, +#				Timeout => 3); +#		$conn = nms::switch_connect($1); +#		if (!defined($conn)) { +#			die "Could not connect to new ip: $1\n"; +#		} +#	} +#	else { +		my @data = nms::switch_exec($cmd, $conn); +		foreach my $line (@data) { +			$line =~ s/[\r\n]+//g; +			print "$line\n"; +		} +#	} +} diff --git a/web/nms.gathering.org/sshow.pl b/web/nms.gathering.org/sshow.pl new file mode 100755 index 0000000..f406b69 --- /dev/null +++ b/web/nms.gathering.org/sshow.pl @@ -0,0 +1,257 @@ +#!/usr/bin/perl +use lib '../../include'; +use nms; + +use warnings; +use strict; +use Switch; +use CGI; +use DBI; + +# Grab from .htaccess-authentication +my $user = $ENV{'REMOTE_USER'}; + +my $dbh = nms::db_connect(); +$dbh->{AutoCommit} = 0; + +my $sgetdone = $dbh->prepare( +"SELECT *  +FROM  squeue  +WHERE processed = 't'  +ORDER BY updated DESC, sysname +LIMIT ?::text::int") +	or die "Could not prepare sgetdone"; + +my $sgetdonegid = $dbh->prepare( +"SELECT *  +FROM  squeue  +WHERE processed = 't' AND gid = ?::text::int  +ORDER BY updated DESC, sysname") +	or die "Could not prepare sgetdonegid"; + +my $slistdonegid = $dbh->prepare( +"SELECT DISTINCT gid, cmd, author, added +FROM squeue +WHERE processed = 't' +ORDER BY gid") +	or die "Could not prepare slistdonegid"; + +my $slistprocgid = $dbh->prepare( +"SELECT DISTINCT gid, cmd, author, added +FROM squeue +WHERE processed = 'f' +ORDER BY gid") +	or die "Could not prepare slistdonegid"; + +my $sgetgid = $dbh->prepare( +"SELECT * +FROM squeue +WHERE gid = ?") +	or die "Could not prepare sgetgid"; + +my $sgetprocessing = $dbh->prepare( +"SELECT * +FROM  squeue +WHERE processed = 'f' +ORDER BY updated DESC, gid, sysname") +	or die "Could not prepare sgetdone"; + +my $sgetnoconnect = $dbh->prepare( +"SELECT * +FROM squeue +WHERE result = 'Could not connect to switch, delaying...'") +	or die "Could not prepare sgetnoconnect"; + +my $sdisablegid = $dbh->prepare(" +UPDATE squeue SET disabled = 't' +WHERE gid = ?::text::int") +	or die "Could not prepare sdisablegid"; +my $senablegid = $dbh->prepare(" +UPDATE squeue SET disabled = 'f' +WHERE gid = ?::text::int") +	or die "Could not prepare sdisablegid"; + + +my $cgi = new CGI; + +print $cgi->header(-type=>'text/html; charset=utf-8'); + +print << "EOF"; +<html> +  <head> +    <title>Switch managment</title> +  </head> +  <body> +  <p>Du er logget inn som: $user</p> +    <form method="POST" action="sshow.pl"> +    <p> +      Vis <input type="text" name="count" size="4" value="10" /> siste<br /> +      Vis: <select name="action" /> +       <option value="listgid">Grupper</option> +       <option value="done">Ferdige</option> +       <option value="processing">I kø</option> +      </select> +      <input type="submit" value="Vis" /><br /> +    </p> +    </form> +    <br /> +EOF + +my $limit = $cgi->param('count'); +if (!defined($limit)) { +	$limit = 10; +} +my $action = $cgi->param('action'); +if (!defined($action)) { +	$action = 'listgid'; +} + +if (defined($cgi->param('agid'))) { +	my $gid = $cgi->param('gid'); +	if (!defined($gid)) { +		print "<font color=\"red\">Du har ikke valgt en gid Ã¥ slette.</font>\n"; +		print "<p>gid: ".$cgi->param('gid')." har blitt disablet.\n"; +	} +	else { +		$senablegid->execute($gid); +		print "<p>gid: ".$cgi->param('gid')." har blitt enablet.\n"; +	} +	$dbh->commit(); +} + +if ($action eq 'noconnect') { +	print "<h3>Kunne ikke koble til disse switchene:</h3>\n"; +	$sgetnoconnect->execute(); +	print "<pre>\n"; +	while ((my $row = $sgetnoconnect->fetchrow_hashref())) { +		print "$row->{'sysname'} : $row->{'cmd'} : Added: $row->{'added'} : Updated: $row->{'updated'}\n"; +	} +	print "</pre>\n"; +} + +if ($action eq 'listgid') { +	print "<pre>\n"; +	print "<a href=\"sshow.pl?action=noconnect\" />Kunne ikke koble til</a>\n\n\n"; +	print "<b>Ferdige:</b>\n"; +	$slistdonegid->execute(); +	my ($gid, $author); +	$gid = -1; +	while ((my $row = $slistdonegid->fetchrow_hashref())) { +		$author = $row->{author}; +		if ($gid != $row->{gid}) { +			$gid = $row->{gid}; +			print "GID: <a href=\"sshow.pl?action=showgid&gid=$gid\">$gid</a>\n"; +			print "Author: $author\n"; +			print "Added: ".$row->{added}."\n"; +		} +		my $cmd = $row->{cmd}; +		print "\t$cmd\n"; +	} +	print "\n\n"; +	print "<b>I kø:</b>\n"; +	$slistprocgid->execute(); +	$gid = -1; +	while ((my $row = $slistprocgid->fetchrow_hashref())) { +		$author = $row->{author}; +		if ($gid != $row->{gid}) { +			$gid = $row->{gid}; +			print "GID: <a href=\"sshow.pl?action=showgid&gid=$gid\">$gid</a>\n"; +			print "Author: $author\n"; +			print "Added: ".$row->{added}."\n"; +		} +		my $cmd = $row->{cmd}; +		print "\t$cmd\n"; +	} +	$dbh->commit(); +	print "</pre>\n"; +} + +if ($action eq 'showgid') { +	print "<pre>\n"; +	$sgetgid->execute($cgi->param('gid')); +	my $row = $sgetgid->fetchrow_hashref(); +	print "GID: ".$row->{gid}."\n"; +	print "Author: ".$row->{author}."\n"; +	do { +		print "    <b>Name: ".$row->{sysname}." Addr: ".$row->{addr}."</b>\n"; +		print "    `<b>".$row->{cmd}."`</b>\n"; +		print "    <i>Added: ".$row->{added}." executed ".$row->{updated}."</i>\n"; +		my $data = $row->{result}; +		if (!defined($data)) { +			$data = "Not executed yet!"; +		} +		my @lines = split(/[\n\r]+/, $data); +		foreach my $line (@lines) { +			print "\t$line\n"; +		} +	} while (($row = $sgetgid->fetchrow_hashref())); +	print "</pre>\n"; +} + +if ($action eq 'done') { +	print "<h3>Done</h3>\n"; +	print "<pre>\n"; + +	my $squery; +	if (defined($cgi->param('gid'))) { +		my $gid = $cgi->param('gid'); +		$sgetdonegid->execute($gid); +		$squery = $sgetdonegid; +	} +	else { +		$sgetdone->execute($limit); +		$squery = $sgetdone; +	} +	my $sysname = ''; +	while (my $row = $squery->fetchrow_hashref()) { +		if ($sysname ne $row->{'sysname'}) { +			$sysname = $row->{'sysname'}; +			print "$sysname (".$row->{addr}."):\n"; +		} +		print "   Author: ".$row->{author}."\n"; +		print "   Cmd: ".$row->{cmd}."\n"; +		print "   Added: ".$row->{added}." Updated: ".$row->{updated}."\n"; +		print "   gID: ".$row->{gid}."\n"; +		my @result = split(/[\n\r]+/, $row->{result}); +		foreach (@result) { +			print "\t".$_."\n"; +		} +		print "\n"; +	} +	$dbh->commit(); +	print "</pre>\n"; +} +elsif ($action eq 'processing') { +	print "<h3>Processing</h3>\n"; +	print "<pre>\n"; +	$sgetprocessing->execute(); +	while (my $row = $sgetprocessing->fetchrow_hashref()) { +		my $sysname = $row->{'sysname'}; +		print "$sysname (".$row->{addr}."):\n"; +		print "   Author: ".$row->{author}."\n"; +		print "   Cmd: ".$row->{cmd}."\n"; +		my $updated; +		if (defined($row->{updated})) { $updated = $row->{updated}; } +		else { $updated = 'never'; } +		print "   Added: ".$row->{added}." Updated: ".$updated."\n"; +		print "   Disabled: ".$row->{disabled}."\n"; +		print "   Locked: ".$row->{locked}."\n"; +		print "   gID: ".$row->{gid}; +		print "   <form action=\"sshow.pl\" methos=\"POST\">"; +		print "<input type=\"hidden\" name=\"gid\" value=\"".$row->{gid}."\">"; +		print "<input type=\"hidden\" name=\"action\" value=\"processing\">"; +		if ($row->{disabled} == 0) { +			print "<input type=\"submit\" name=\"agid\" value=\"Disable\">\n"; +		} +		else { +			print "<input type=\"submit\" name=\"agid\" value=\"Enable\">\n"; +		} +	} +	$dbh->commit(); +	print "</pre>\n"; +} + +print << "EOF"; +  </body> +</html> +EOF diff --git a/web/nms.gathering.org/stromkart.pl b/web/nms.gathering.org/stromkart.pl new file mode 100755 index 0000000..0aef634 --- /dev/null +++ b/web/nms.gathering.org/stromkart.pl @@ -0,0 +1,69 @@ +#! /usr/bin/perl +use CGI qw(fatalsToBrowser); +use GD; +use DBI; +use lib '../../include'; +use nms; +use strict; +use warnings; +my $cgi = CGI->new; + +#my $greentimeout = 7200; +my $greentimeout = 15*60; +my $maxtimeout = $greentimeout*9; + +my $dbh = nms::db_connect(); + +GD::Image->trueColor(1); +my $img = GD::Image->new('bg07.png'); + +my $blk = $img->colorResolve(0, 0, 0); + +$img->string(gdMediumBoldFont,0,0,"Switch uplink status",$blk); +$img->string(gdSmallFont,0,20,"Number of ports with activity",$blk); + +my $red = $img->colorResolve(255, 0, 0); +my $yel = $img->colorResolve(255, 255, 0); +my $grn = $img->colorResolve(0, 255, 0); +my $wht = $img->colorResolve(255, 255, 255); +my $gry = $img->colorResolve(127, 127, 127); + +my $q = $dbh->prepare('select switch,sysname,(select placement from placements where placements.switch=switches.switch) as placement,count((bytes_in > 0 and bytes_out > 0) or null) as active_ports,(max(last_poll_time) >= current_timestamp - interval \'2 minutes\') as fresh from switches natural left join get_current_datarate() natural join placements where switchtype like \'dlink3100%\' group by switch,sysname'); +$q->execute(); +while (my $ref = $q->fetchrow_hashref()) { +	my $ports = $ref->{'active_ports'}; +	my $sysname = $ref->{'sysname'}; +	my $clr; +	if ($ports < 5) { +		$clr = $red; +	} else { +		if (!$ref->{'fresh'}) { +			$clr = $yel; +		} else { +			$clr = $grn; +		} +	} +	 +	$ref->{'placement'} =~ /\((\d+),(\d+)\),\((\d+),(\d+)\)/; +	$img->filledRectangle($3,$4,$1,$2,$clr); +	$img->rectangle($3,$4,$1,$2,$blk); + +	my ($x2, $y2, $x1, $y1) = ($1, $2, $3, $4); +	my $max_textlen = ($x2-$x1) > ($y2-$y1) ? $x2-$x1 : $y2-$y1; +	while (length($sysname) * 6 > $max_textlen) { +		# Try to abbreviate sysname if it is too long for the box +		$sysname =~ s/^(.*)[a-z]~?([0-9]+)$/$1~$2/ or last; +	} +	if (($x2-$x1) > ($y2-$y1)) { +		$img->string(gdSmallFont,$x1+2,$y1,$sysname,$blk); +	} else { +		$img->stringUp(gdSmallFont,$x1,$y2-3,$sysname,$blk); +	} +} +$dbh->disconnect; + +if (!defined($ARGV[0])) { +	print $cgi->header(-type=>'image/png', +			   -refresh=>'10; ' . CGI::url()); +} +print $img->png; diff --git a/web/nms.gathering.org/uplinkkart-text.pl b/web/nms.gathering.org/uplinkkart-text.pl new file mode 100755 index 0000000..de91e92 --- /dev/null +++ b/web/nms.gathering.org/uplinkkart-text.pl @@ -0,0 +1,38 @@ +#! /usr/bin/perl +use CGI; +use DBI; +use lib '../../include'; +use nms; +my $cgi = CGI->new; + +my $dbh = nms::db_connect(); +print $cgi->header(-type=>'text/html; charset=utf-8', -refresh=>'10; ' . CGI::url()); + +print <<"EOF"; +<html> +  <head> +    <title>Uplinkkart</title> +  </head> +  <body> +    <map name="switches"> +EOF + +my $q = $dbh->prepare("SELECT * FROM switches NATURAL JOIN placements WHERE switchtype = 'dlink3100'"); +$q->execute(); +while (my $ref = $q->fetchrow_hashref()) { +	$ref->{'placement'} =~ /\((\d+),(\d+)\),\((\d+),(\d+)\)/; +	 +	my $ttext = 'FIXME: Put something here'; +	printf "      <area shape=\"rect\" coords=\"%u,%u,%u,%u\" href=\"switchdiag.pl?id=%u\" alt=\"%s (%s)\" onmouseover=\"window.status='%s (%s)'; return true\" onmouseout=\"window.status=''\" />\n", +		$3, $4, $1, $2, $ref->{'switch'}, $ref->{'sysname'}, +		$ttext, $ref->{'sysname'}, $ttext; +} +$dbh->disconnect; + +print <<"EOF"; +    </map> + +    <p><img src="uplinkkart.pl" usemap="#switches" /></p> +  </body> +</html> +EOF diff --git a/web/nms.gathering.org/uplinkkart.pl b/web/nms.gathering.org/uplinkkart.pl new file mode 100755 index 0000000..32581a6 --- /dev/null +++ b/web/nms.gathering.org/uplinkkart.pl @@ -0,0 +1,70 @@ +#! /usr/bin/perl +use CGI qw(fatalsToBrowser); +use GD; +use DBI; +use lib '../../include'; +use nms; +use strict; +use warnings; +my $cgi = CGI->new; + +#my $greentimeout = 7200; +my $greentimeout = 15*60; +my $maxtimeout = $greentimeout*9; + +my $dbh = nms::db_connect(); + +GD::Image->trueColor(1); +my $img = GD::Image->new('bg07.png'); + +my $blk = $img->colorResolve(0, 0, 0); + +$img->string(gdMediumBoldFont,0,0,"Switch uplink status",$blk); +$img->string(gdSmallFont,0,20,"Number of ports with activity",$blk); + +my $red = $img->colorResolve(255, 0, 0); +my $yel = $img->colorResolve(255, 255, 0); +my $grn = $img->colorResolve(0, 255, 0); +my $blu = $img->colorResolve(0, 0, 255); +my $wht = $img->colorResolve(255, 255, 255); +my $gry = $img->colorResolve(127, 127, 127); + +my @palette = ( $blu, $red, $yel, $grn, $wht ); + +for my $ports (0..4) { +	my $y = 60 + 20 * (4 - $ports); +	$img->filledRectangle(20, $y, 30, $y + 10, $palette[$ports]); +	$img->rectangle(20, $y, 30, $y + 10, $blk); +	$img->stringFT($blk, "/usr/share/fonts/truetype/msttcorefonts/Arial.ttf", 10, 0, 40, $y + 10, $ports); +} + +my $q = $dbh->prepare('select switch,sysname,(select placement from placements where placements.switch=switches.switch) as placement,count((bytes_in > 0 and bytes_out > 0) or null) as active_ports from switches natural left join get_current_datarate() natural join placements where port between 45 and 48 and switchtype like \'dlink3100%\' group by switch,sysname'); +$q->execute(); +while (my $ref = $q->fetchrow_hashref()) { +	my $ports = $ref->{'active_ports'}; +	my $sysname = $ref->{'sysname'}; +	my $clr = $palette[$ports]; +	 +	$ref->{'placement'} =~ /\((\d+),(\d+)\),\((\d+),(\d+)\)/; +	$img->filledRectangle($3,$4,$1,$2,$clr); +	$img->rectangle($3,$4,$1,$2,$blk); + +	my ($x2, $y2, $x1, $y1) = ($1, $2, $3, $4); +	my $max_textlen = ($x2-$x1) > ($y2-$y1) ? $x2-$x1 : $y2-$y1; +	while (length($sysname) * 6 > $max_textlen) { +		# Try to abbreviate sysname if it is too long for the box +		$sysname =~ s/^(.*)[a-z]~?([0-9]+)$/$1~$2/ or last; +	} +	if (($x2-$x1) > ($y2-$y1)) { +		$img->string(gdSmallFont,$x1+2,$y1,$sysname,$blk); +	} else { +		$img->stringUp(gdSmallFont,$x1,$y2-3,$sysname,$blk); +	} +} +$dbh->disconnect; + +if (!defined($ARGV[0])) { +	print $cgi->header(-type=>'image/png', +			   -refresh=>'10; ' . CGI::url()); +} +print $img->png; diff --git a/web/nms.gathering.org/uplinktrafikkart.pl b/web/nms.gathering.org/uplinktrafikkart.pl new file mode 100755 index 0000000..32869b3 --- /dev/null +++ b/web/nms.gathering.org/uplinktrafikkart.pl @@ -0,0 +1,90 @@ +#! /usr/bin/perl +use CGI qw(fatalsToBrowser); +use GD; +use DBI; +use lib '../../include'; +use nms; +use strict; +use warnings; +my $cgi = CGI->new; + +#my $greentimeout = 7200; +my $greentimeout = 15*60; +my $maxtimeout = $greentimeout*9; + +my $dbh = nms::db_connect(); + +GD::Image->trueColor(1); +my $img = GD::Image->new('bg07.png'); + +my $blk = $img->colorResolve(0, 0, 0); + +for my $y (42..236) { +	my $i = 2.0 * ($y - 236.0) / (42.0 - 237.0); +	my $clr = get_color($i); +	 +	$img->filledRectangle(12, $y, 33, $y+1, $clr); +} + +$img->string(gdMediumBoldFont,0,0,"Switch uplink traffic",$blk); +$img->string(gdSmallFont,0,20,"max of bytes in/out",$blk); + +my $red = $img->colorResolve(255, 0, 0); +my $yel = $img->colorResolve(255, 255, 0); +my $grn = $img->colorResolve(0, 255, 0); +my $wht = $img->colorResolve(255, 255, 255); + +$img->rectangle(12,42,33,236,$blk); + +$img->stringFT($blk, "/usr/share/fonts/truetype/msttcorefonts/Arial.ttf", 10, 0, 40, 47 + (236-42)*0.0/2.0, "4 Gbit/sec"); +$img->stringFT($blk, "/usr/share/fonts/truetype/msttcorefonts/Arial.ttf", 10, 0, 40, 47 + (236-42)*1.0/2.0, "2 Gbit/sec"); +$img->stringFT($blk, "/usr/share/fonts/truetype/msttcorefonts/Arial.ttf", 10, 0, 40, 47 + (236-42)*2.0/2.0, "1 Gbit/sec"); +$img->stringFT($blk, "/usr/share/fonts/truetype/msttcorefonts/Arial.ttf", 10, 0, 1000, 700, "NMS (C) 2005-2012 Tech:Server"); + +my $q = $dbh->prepare('select switch,sysname,(select placement from placements where placements.switch=switches.switch) as placement,greatest(sum(bytes_in),sum(bytes_out)) as traffic from switches natural left join get_current_datarate() natural join placements where port between 45 and 48 and switchtype like \'dlink3100%\' group by switch,sysname'); +$q->execute(); +while (my $ref = $q->fetchrow_hashref()) { +	my $traffic = $ref->{'traffic'} * 8.0;  # convert to bits +	my $sysname = $ref->{'sysname'}; + +	my $max = 4_000_000_000.0;   # 2Gbit +	my $min = 1_000_000_000.0;   # 1Gbit +	$traffic = $max if ($traffic > $max); +	$traffic = $min if ($traffic < $min); +	my $intensity = log($traffic / $min) / log(2); +	my $clr = get_color($intensity); +	 +	$ref->{'placement'} =~ /\((\d+),(\d+)\),\((\d+),(\d+)\)/; +	$img->filledRectangle($3,$4,$1,$2,$clr); +	$img->rectangle($3,$4,$1,$2,$blk); + +	my ($x2, $y2, $x1, $y1) = ($1, $2, $3, $4); +	my $max_textlen = ($x2-$x1) > ($y2-$y1) ? $x2-$x1 : $y2-$y1; +	while (length($sysname) * 6 > $max_textlen) { +		# Try to abbreviate sysname if it is too long for the box +		$sysname =~ s/^(.*)[a-z]~?([0-9]+)$/$1~$2/ or last; +	} +	if (($x2-$x1) > ($y2-$y1)) { +		$img->string(gdSmallFont,$x1+2,$y1,$sysname,$blk); +	} else { +		$img->stringUp(gdSmallFont,$x1,$y2-3,$sysname,$blk); +	} +} +$dbh->disconnect; + +if (!defined($ARGV[0])) { +	print $cgi->header(-type=>'image/png', +			   -refresh=>'10; ' . CGI::url()); +} +print $img->png; + +sub get_color { +	my $intensity = shift; +	my $gamma = 1.0/1.90; +	if ($intensity > 1.0) { +		$intensity -= 1.0; +		return $img->colorResolve(255.0, 255.0 * ($intensity ** $gamma), 255.0 * ($intensity ** $gamma)); +	} else { +		return $img->colorResolve(255.0 * ($intensity ** $gamma), 255.0 * (1.0 - ($intensity ** $gamma)), 0); +	} +} diff --git a/web/stream.tg13.gathering.org/fix_count.pl b/web/stream.tg13.gathering.org/fix_count.pl new file mode 100755 index 0000000..aaaf42e --- /dev/null +++ b/web/stream.tg13.gathering.org/fix_count.pl @@ -0,0 +1,31 @@ +#! /usr/bin/perl + +my $lines = {}; + +open LOG, "<", "/home/techserver/count_datacube.log" +	or die "count_datacube.log: $!"; + +while (<LOG>) { +	chomp; +	my ($date, $port, $proto, $audience, $count) = split /\s+/; +	my $key = $port . ' ' . $proto . ' ' . $audience; +	$lines->{$date}{$key} = $count; +} + +close LOG; + +my $last_date = undef; +for my $date (sort keys %$lines) { +	for my $key (keys %{$lines->{$date}}) { +		if (defined($last_date) && !exists($lines->{$last_date}{$key})) { +			$lines->{$last_date}{$key} = $lines->{$date}{$key}; +		} +	} +	$last_date = $date; +} + +for my $date (sort keys %$lines) { +	for my $key (sort keys %{$lines->{$date}}) { +		print "$date $key " . $lines->{$date}{$key} . "\n"; +	} +} diff --git a/web/stream.tg13.gathering.org/img/cam-map.png b/web/stream.tg13.gathering.org/img/cam-map.png Binary files differnew file mode 100644 index 0000000..759641a --- /dev/null +++ b/web/stream.tg13.gathering.org/img/cam-map.png diff --git a/web/stream.tg13.gathering.org/img/icon_1.png b/web/stream.tg13.gathering.org/img/icon_1.png Binary files differnew file mode 100644 index 0000000..6d6e67e --- /dev/null +++ b/web/stream.tg13.gathering.org/img/icon_1.png diff --git a/web/stream.tg13.gathering.org/img/icon_2.png b/web/stream.tg13.gathering.org/img/icon_2.png Binary files differnew file mode 100644 index 0000000..599d5f6 --- /dev/null +++ b/web/stream.tg13.gathering.org/img/icon_2.png diff --git a/web/stream.tg13.gathering.org/img/icon_3.png b/web/stream.tg13.gathering.org/img/icon_3.png Binary files differnew file mode 100644 index 0000000..4d1de76 --- /dev/null +++ b/web/stream.tg13.gathering.org/img/icon_3.png diff --git a/web/stream.tg13.gathering.org/img/icon_camera.png b/web/stream.tg13.gathering.org/img/icon_camera.png Binary files differnew file mode 100644 index 0000000..e1bf2c3 --- /dev/null +++ b/web/stream.tg13.gathering.org/img/icon_camera.png diff --git a/web/stream.tg13.gathering.org/img/icon_event.png b/web/stream.tg13.gathering.org/img/icon_event.png Binary files differnew file mode 100644 index 0000000..9ce6df4 --- /dev/null +++ b/web/stream.tg13.gathering.org/img/icon_event.png diff --git a/web/stream.tg13.gathering.org/img/icon_hd.png b/web/stream.tg13.gathering.org/img/icon_hd.png Binary files differnew file mode 100644 index 0000000..d9086bc --- /dev/null +++ b/web/stream.tg13.gathering.org/img/icon_hd.png diff --git a/web/stream.tg13.gathering.org/img/icon_sd.png b/web/stream.tg13.gathering.org/img/icon_sd.png Binary files differnew file mode 100644 index 0000000..3bddbe9 --- /dev/null +++ b/web/stream.tg13.gathering.org/img/icon_sd.png diff --git a/web/stream.tg13.gathering.org/index-bak.pl b/web/stream.tg13.gathering.org/index-bak.pl new file mode 100755 index 0000000..3e31107 --- /dev/null +++ b/web/stream.tg13.gathering.org/index-bak.pl @@ -0,0 +1,67 @@ +#!/usr/bin/perl -I /srv/streamlib +use warnings; +use strict; +use CGI; +use Geo::IP; +use NetAddr::IP; +use Net::IP; +# apt-get install libnet-ip-perl libnetaddr-ip-perl  +use HTML::Template; +use stream; +use stream::config; + +my $client = CGI->new; + +my $v4net = $stream::config::v4net; +my $v6net = $stream::config::v6net; +my $tg = $stream::config::tg; +my $tg_full = $stream::config::tg_full; +my %streams = %stream::config::streams; + +my $force_unicast = $client->param('forceunicast'); + +my $location = undef; + +print $client->header(); + +my $clip = $client->remote_addr(); +my $template = HTML::Template->new(filename => 'index.tmpl'); +my $is_local = &is_ip_local($clip, $v4net, $v6net); + +my @streams = &html_local_test(); +$template->param(TG => $tg); +$template->param(TG_FULL => $tg_full); +$template->param(STREAMS => \@streams); +print $template->output(); + + +sub html_local_test() { +	my @s = (); +	foreach my $name (sort { $streams{$a}->{priority} <=> $streams{$b}->{priority} } keys %streams) { +		my $title_link = "http://stream.tg$tg.gathering.org/stream.pl?delivery=%s&stream=${name}&interlaced=%s"; +		my $multicast_link = $streams{$name}->{has_multicast} ? "multicast" : "unicast"; +		$multicast_link = "unicast" if ($force_unicast == 1 || not $is_local); + +		if ($streams{$name}->{external}) { +			 $title_link = $streams{$name}->{url}; +		} else { +			$title_link = sprintf($title_link, $multicast_link, $streams{$name}->{interlaced}); +		} +		my %hash = ( +			'title_link' => $title_link, +			'title' => $streams{$name}->{title}, +			'source' => $streams{$name}->{source}, +			'delivery' => $multicast_link +		); +		if ($multicast_link eq "multicast") { +			$hash{'is_multicast'} .= 1;  +			my $unicast_link = $title_link; +			$unicast_link=~s/multicast/unicast/g; +			$hash{'unicast_link'} .= $unicast_link; +		} +		$hash{'description'} .= $streams{$name}->{description} if exists($streams{$name}->{description}); +		push(@s, \%hash); + +	} +	return @s; +} diff --git a/web/stream.tg13.gathering.org/index-bak.tmpl b/web/stream.tg13.gathering.org/index-bak.tmpl new file mode 100644 index 0000000..c0aa95d --- /dev/null +++ b/web/stream.tg13.gathering.org/index-bak.tmpl @@ -0,0 +1,31 @@ +<html> +<head> +	<title>The Gathering <TMPL_VAR NAME=TG_FULL></title> +	<link rel="stylesheet" type="text/css" media="screen" href="superawesomeness.css">  +	<link href='http://fonts.googleapis.com/css?family=Open+Sans&subset=latin,latin-ext' rel='stylesheet' type='text/css'> +</head> +<body> +	<div id="spaceship"></div> +	<div id="innhold"> +		<h1>The Gathering <TMPL_VAR NAME=TG_FULL></h1> +		<ul> +		<TMPL_LOOP NAME="STREAMS">  +			<li><a href="<TMPL_VAR NAME=TITLE_LINK>"><TMPL_VAR NAME=TITLE ></a> +			<p> +			Source: <TMPL_VAR NAME=SOURCE > +			<br/>Delivery: <TMPL_VAR NAME=delivery> <TMPL_IF NAME=IS_MULTICAST>(<a href='<TMPL_VAR NAME=UNICAST_LINK>'>problems? try unicast vlc link here</a>)</TMPL_IF> +			<TMPL_IF NAME="DESCRIPTION"><br /><TMPL_VAR NAME=DESCRIPTION></TMPL_IF></li> +		 </TMPL_LOOP> +		</ul> +	</div> +	<footer> +	<p>Problems with the non game streams? The easiest way to get hold of us is on IRC (EFNet); +  one of ViD, Rockj and Sesse should be available if there's too much traffic +  on #tg to be heard.</p> +	<p><a href="http://stream.tg<TMPL_VAR NAME="TG">.gathering.org">http://stream.tg<TMPL_VAR NAME="TG">.gathering.org</a></p> + +	</footer> +</body> +</html> + + diff --git a/web/stream.tg13.gathering.org/index.pl b/web/stream.tg13.gathering.org/index.pl new file mode 100755 index 0000000..e5f103c --- /dev/null +++ b/web/stream.tg13.gathering.org/index.pl @@ -0,0 +1,72 @@ +#!/usr/bin/perl -I /srv/streamlib +use warnings; +use strict; +use CGI; +use Geo::IP; +use NetAddr::IP; +use Net::IP; +# apt-get install libnet-ip-perl libnetaddr-ip-perl  +use HTML::Template; +use stream; +use stream::config; + +my $client = CGI->new; + +my $v4net = $stream::config::v4net; +my $v6net = $stream::config::v6net; +my $tg = $stream::config::tg; +my $tg_full = $stream::config::tg_full; +my %streams = %stream::config::streams; + +my $force_unicast = $client->param('forceunicast'); +my $no_header = $client->param('noheader'); + +my $location = undef; + +print $client->header(); + +my $clip = $client->remote_addr(); +my $template = HTML::Template->new(filename => 'index.tmpl'); +my $is_local = &is_ip_local($clip, $v4net, $v6net); + +my @streams = &html_local_test(); +$template->param(TG => $tg); +$template->param(TG_FULL => $tg_full); +$template->param(STREAMS => \@streams); +$template->param(NOHEADER => $no_header); +print $template->output(); + + +sub html_local_test() { +	my @s = (); +	foreach my $name (sort { $streams{$a}->{priority} <=> $streams{$b}->{priority} } keys %streams) { +		my $title_link = "http://stream.tg$tg.gathering.org/stream.pl?delivery=%s&stream=${name}&interlaced=%s"; +		my $multicast_link = $streams{$name}->{has_multicast} ? "multicast" : "unicast"; +		$multicast_link = "unicast" if ($force_unicast == 1 || not $is_local); + +		if ($streams{$name}->{external}) { +			 $title_link = $streams{$name}->{url}; +		} else { +			$title_link = sprintf($title_link, $multicast_link, $streams{$name}->{interlaced}); +		} +		my %hash = ( +			'title_link' => $title_link, +			'title' => $streams{$name}->{title}, +			'source' => $streams{$name}->{source}, +			'quality' => $streams{$name}->{quality}, +			'location' => $streams{$name}->{location}, +			'type' => $streams{$name}->{type}, +			'delivery' => $multicast_link, +		); +		if ($multicast_link eq "multicast") { +			$hash{'is_multicast'} .= 1;  +			my $unicast_link = $title_link; +			$unicast_link=~s/multicast/unicast/g; +			$hash{'unicast_link'} .= $unicast_link; +		} +		$hash{'description'} .= $streams{$name}->{description} if exists($streams{$name}->{description}); +		push(@s, \%hash); + +	} +	return @s; +} diff --git a/web/stream.tg13.gathering.org/index.tmpl b/web/stream.tg13.gathering.org/index.tmpl new file mode 100644 index 0000000..a565f0e --- /dev/null +++ b/web/stream.tg13.gathering.org/index.tmpl @@ -0,0 +1,35 @@ +<html> +<head> +	<title>The Gathering <TMPL_VAR NAME=TG_FULL> Streams</title> +	<link rel="stylesheet" type="text/css" href="singularity.css" media="all"> +</head> +<body> +	<div id="innhold"> +		<TMPL_UNLESS NAME=NOHEADER> +			<h1>The Gathering <TMPL_VAR NAME=TG_FULL> Streams</h1> +		</TMPL_UNLESS> +		 +		<TMPL_LOOP NAME="STREAMS"> +			<div class="stream-link"> +				<div class="stream-icon"><img src="img/icon_<TMPL_VAR NAME=QUALITY>.png" /> <img src="img/icon_<TMPL_VAR NAME=TYPE>.png" /> <TMPL_IF NAME=LOCATION><img src="img/icon_<TMPL_VAR NAME=LOCATION>.png"></TMPL_IF></div> +				<div class="stream-link-content"> +					<a href="<TMPL_VAR NAME=TITLE_LINK>"><TMPL_VAR NAME=TITLE></a><br> +					Source: <TMPL_VAR NAME=SOURCE><br> +					Delivery: <TMPL_VAR NAME=delivery> <TMPL_IF NAME=IS_MULTICAST>(<a href='<TMPL_VAR NAME=UNICAST_LINK>'>problems? try unicast vlc link here</a>)</TMPL_IF> +					 +				</div> +			</div> +		</TMPL_LOOP> +		<div id="map"> +			<img src="img/cam-map.png"> +		</div> + +	</div> + +	<p>Problems with the non game streams? The easiest way to get hold of us is on IRC (EFNet); one of ViD, Rockj and Sesse should be available if there's too much traffic on #tg to be heard.</p> +	<p><a href="http://stream.tg<TMPL_VAR NAME="TG">.gathering.org">http://stream.tg<TMPL_VAR NAME="TG">.gathering.org</a></p> + +</body> +</html> + + diff --git a/web/stream.tg13.gathering.org/ios/PLACEHOLDER b/web/stream.tg13.gathering.org/ios/PLACEHOLDER new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/web/stream.tg13.gathering.org/ios/PLACEHOLDER diff --git a/web/stream.tg13.gathering.org/ios/event.m3u8 b/web/stream.tg13.gathering.org/ios/event.m3u8 new file mode 100644 index 0000000..11152d3 --- /dev/null +++ b/web/stream.tg13.gathering.org/ios/event.m3u8 @@ -0,0 +1,16 @@ +#EXTM3U +#EXT-X-TARGETDURATION:5 +#EXT-X-VERSION:3 +#EXT-X-ALLOW-CACHE:NO +#EXT-X-MEDIA-SEQUENCE:27432 +#EXTINF:4.97, +http://stream.tg13.gathering.org/ios/event-00027432.ts +#EXTINF:4.04, +http://stream.tg13.gathering.org/ios/event-00027433.ts +#EXTINF:3.99, +http://stream.tg13.gathering.org/ios/event-00027434.ts +#EXTINF:3.97, +http://stream.tg13.gathering.org/ios/event-00027435.ts +#EXTINF:3.74, +http://stream.tg13.gathering.org/ios/event-00027436.ts +#EXT-X-ENDLIST diff --git a/web/stream.tg13.gathering.org/ios/stream.m3u8 b/web/stream.tg13.gathering.org/ios/stream.m3u8 new file mode 100644 index 0000000..d3d46a6 --- /dev/null +++ b/web/stream.tg13.gathering.org/ios/stream.m3u8 @@ -0,0 +1,8 @@ +#EXTM3U +#EXT-X-TARGETDURATION:5 +#EXT-X-VERSION:3 +#EXT-X-ALLOW-CACHE:NO +#EXT-X-MEDIA-SEQUENCE:1 +#EXTINF:3.84, +http://stream.tg13.gathering.org/ios/stream-00000001.ts +#EXT-X-ENDLIST diff --git a/web/stream.tg13.gathering.org/singularity.css b/web/stream.tg13.gathering.org/singularity.css new file mode 100644 index 0000000..05e1518 --- /dev/null +++ b/web/stream.tg13.gathering.org/singularity.css @@ -0,0 +1,1960 @@ +•/* http://meyerweb.com/eric/tools/css/reset/  +   v2.0 | 20110126 +   License: none (public domain) +*/ + +html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, embed, figure, figcaption, footer, header, hgroup, menu, nav, output, ruby, section, summary, time, mark, audio, video { +	margin: 0; +	padding: 0; +	border: 0; +	font-size: 100%; +	font: inherit; +	vertical-align: baseline; +} +/* HTML5 display-role reset for older browsers */ +article, aside, details, figcaption, figure,  +footer, header, hgroup, menu, nav, section { +	display: block; +} +body { +	line-height: 1.5; +} +ol, ul { +	list-style: none; +} +blockquote, q { +	quotes: none; +} +blockquote:before, blockquote:after, +q:before, q:after { +	content: ''; +	content: none; +} +table { +	border-collapse: collapse; +	border-spacing: 0; +} + +/* @override http://www.gathering.org/tg12/files/content/design/css/typography.css */ + +/* Generic +------------------------------------------------------ */ +html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, embed, figure, figcaption, footer, header, hgroup, menu, nav, output, ruby, section, summary, time, mark, audio, video { +    font-family: Arial, Sans-Serif; +    font-weight: 400; +} +body { +    font-size: 15px; +    line-height: 20px; +    color: #777; +} +/* Headings +------------------------------------------------------ */ +h1, h2, h3, h4, h5, h6     { font-weight: bold; color: #404040; } +h1 { font-size: 45px; line-height: 50px; margin-bottom: 15px; } +h2 { font-size: 25px; line-height: 31px; margin-bottom: 12px;} +h3 { font-size: 20px; line-height: 26px; } +h4 { font-size: 16px; line-height: 22px; } +h5 { font-size: 15px; line-height: 20px; }  +h6 { font-size: 12px; line-height: 17px; }  + +/* Text 'n stuff +------------------------------------------------------ */ +p 				{ margin: 0 0 20px 0; } +.page p {  +    margin: 0 0 0.8em 0 !important;  +}  +blockquote 		{  +    margin: 20px;  +    padding: 0 0 0 40px;  +    color: #555;  +    font-style: italic;  +    color: #888;  +    position: relative; +} +blockquote p::before { +    position: absolute; +    top: 50px; +    margin-left: -60px; +    content: "\201D"; +    font-size: 150px; +    font-style: normal; +    color: #00aaad; +} +blockquote p { +    display: block; +    margin-left: 40px !important; +} +blockquote small::before { +    content: "\2013"; +    margin: 5px; +} +blockquote small { +    font-size: 13px; +    margin-left: -55px; +} +strong { font-weight: bold; } + +ul {  +    margin: 0 0 20px 10px;  +    list-style-type: none;  +    position: relative; +} +ul.submenu ul { +	margin-bottom: 0px; +} +ul li:before {  +    content: "\2022";  +    position: absolute; +    left: -17px; +    width: 15px; +    text-align: right; +    color: #00aaad; +    font-size: 13px; +    line-height: 21px; +} +i, em { font-style: italic; } + +ol {  +    margin: 0 0 20px 15px;  +    list-style-type: none; +    position: relative; +    counter-reset: section; +} +ol > li { +    counter-increment: section; +} +ol > li:before { +    content: counter(section); +    position: absolute; +    left: -30px; +    width: 23px; +    text-align: right; +    color: #00aaad; +    font-size: 12px; +    line-height: 22px; +} +dl dt			{ font-weight: bold; } +dd				{ margin: 0 0 0 20px; } + +a 				{ color: #00aaad; text-decoration: none; } +a:hover 		{ color: #c3027b; } +code, pre { +    padding: 0 3px 2px; +    font-family: Menlo, Monaco, "Courier New", monospace; +    font-size: 12px; +    color: #8F8F8F; +    -webkit-border-radius: 3px; +    -moz-border-radius: 3px; +    border-radius: 3px; +    background-color: #F8F8F8; +    border: 1px solid #C0C4C5; +} +code { +    padding: 3px 4px; +    color: #00aaad; +} +pre { +    display: block; +    padding: 8.5px; +    margin: 0 0 9px; +    line-height: 18px; +    white-space: pre; +    white-space: pre-wrap; +    word-break: break-all; +} +table { +    margin-bottom: 20px; +} +th, td { +    padding: 4px 5px; +} +td, th { +    border-left: 1px solid #E2E2E2; +} +tr td:first-child, tr th:first-child { +    border: none; +} +tr td { +    text-align: right; +} +th { +    font-weight: bold; +    vertical-align: bottom; +} +th, td { +    min-width: 100px; +} +th p, td p { +    margin: 0; +} +tbody tr:nth-child(even) td, thead tr th { +    background-color: #F2F2F2; +} +hr { +    margin-top: 0.5em; +    margin-bottom: 0.5em; +    border: 0; +    color: #D5D5D5; +    background-color: #D5D5D5; +    height: 1px; +} +.visible-phone { +    display: none; +} +.title-container h2 { +    font-family: Tahoma, Geneva, sans-serif; +    font-size: 26px; +    margin-bottom: 5px; +    line-height: normal; +} +h2.size13 { font-size: 13px; }  +h2.size14 { font-size: 14px; }  +h2.size15 { font-size: 15px; }  +h2.size16 { font-size: 16px; }  +h2.size17 { font-size: 17px; }  +h2.size18 { font-size: 18px; }  +h2.size19 { font-size: 19px; }  +h2.size20 { font-size: 20px; }  +h2.size21 { font-size: 21px; }  +h2.size22 { font-size: 22px; }  +h2.size23 { font-size: 23px; }  +h2.size24 { font-size: 24px; }  +h2.size25 { font-size: 25px; }  +h2.size26 { font-size: 26px; }  +h2.size27 { font-size: 27px; }  +h2.size28 { font-size: 28px; }  +h2.size29 { font-size: 29px; }  +h2.size30 { font-size: 30px; }  +h2.size31 { font-size: 31px; }  +h2.size32 { font-size: 32px; }  +h2.size33 { font-size: 33px; }  +h2.size34 { font-size: 34px; }  +h2.size35 { font-size: 35px; }  +h2.size36 { font-size: 36px; }  +h2.size37 { font-size: 37px; }  +h2.size38 { font-size: 38px; }  +h2.size39 { font-size: 39px; }  +h2.size40 { font-size: 40px; }  +h2.size41 { font-size: 41px; }  +h2.size42 { font-size: 42px; }  +h2.size43 { font-size: 43px; }  +h2.size44 { font-size: 44px; }  +h2.size45 { font-size: 45px; }  +h2.size46 { font-size: 46px; }  +h2.size47 { font-size: 47px; }  +h2.size48 { font-size: 48px; }  +h2.size49 { font-size: 49px; }  +h2.size50 { font-size: 50px; }  +h2.size51 { font-size: 51px; }  +h2.size52 { font-size: 52px; }  +h2.size53 { font-size: 53px; }  +h2.size54 { font-size: 54px; }  +h2.size55 { font-size: 55px; }  +h2.size56 { font-size: 56px; }  +h2.size57 { font-size: 57px; }  +h2.size58 { font-size: 58px; }  +h2.size59 { font-size: 59px; }  +h2.size60 { font-size: 60px; }  +h2.size61 { font-size: 61px; }  +h2.size62 { font-size: 62px; }  +h2.size63 { font-size: 63px; }  +h2.size64 { font-size: 64px; }  +h2.size65 { font-size: 65px; }  +h2.size66 { font-size: 66px; }  +h2.size67 { font-size: 67px; }  +h2.size68 { font-size: 68px; }  +h2.size69 { font-size: 69px; }  +h2.size70 { font-size: 70px; }  +h2.size71 { font-size: 71px; }  +h2.size72 { font-size: 72px; }  +h2.size73 { font-size: 73px; }  +h2.size74 { font-size: 74px; }  +h2.size75 { font-size: 75px; }  +h2.size76 { font-size: 76px; }  +h2.size77 { font-size: 77px; }  +h2.size78 { font-size: 78px; }  +h2.size79 { font-size: 79px; }  +h2.size80 { font-size: 80px; }  +h2.size81 { font-size: 81px; }  +h2.size82 { font-size: 82px; }  +h2.size83 { font-size: 83px; }  +h2.size84 { font-size: 84px; }  +h2.size85 { font-size: 85px; }  +h2.size86 { font-size: 86px; }  +h2.size87 { font-size: 87px; }  +h2.size88 { font-size: 88px; }  +h2.size89 { font-size: 89px; }  +h2.size90 { font-size: 90px; }  +h2.size91 { font-size: 91px; }  +h2.size92 { font-size: 92px; }  +h2.size93 { font-size: 93px; }  +h2.size94 { font-size: 94px; }  +h2.size95 { font-size: 95px; }  +h2.size96 { font-size: 96px; }  +h2.size97 { font-size: 97px; }  +h2.size98 { font-size: 98px; }  +h2.size99 { font-size: 99px; } +h2.size100 { font-size: 100px; } + +.cite:before { +    content: "\201C"; +} +.cite:after { +    content: "\201D"; +} +.cite > .cite:before { +    content: "\2018"; +} +.cite > .cite:after { +    content: "\2019"; +} +.bullet:before { +    content: "\2022"; +} +.dash:after { +    content: "\2013"; +} +.hellip:after { +    content: "\2026"; +} +.cite:lang(no):before { +    content: "\00AB"; +} +.cite:lang(no):after { +    content: "\00BB"; +} +/* Meta thingy +------------------------------------------------------ */ +.breadcrumbs span.delimiter:before { +    content: "\25BA";  +    margin-right: 8px;  +    font-size: 8px;  +    position: relative;  +    top: -2px; +    margin: 0 5px 0 3px;  +    color: #00aaad; +} +.breadcrumbs { +    font-size: 12px; +    margin-bottom: 10px; +} +.summary, +.summary p { +	font-size: 16px; +	line-height: 22px; +    font-weight: 600 !important; +	margin-bottom: 10px; +} +.metainfo       { margin: 10px 0; } +.byline, .meta 		{  +    color: #888;  +    display: block;  +    font-size: 12px;  +    margin-bottom: 0.8em;  +} +.byline span.delimiter:before { +    content: "\2022";  +    margin-right: 8px;  +    font-size: 8px;  +    position: relative;  +    top: -2px; +    margin: 0 5px 0 5px;  +    color: #00aaad; +} +.phototext { +    margin-top: 5px; +    line-height: 18px; +} +.photoline 		{  +    margin-top: 5px; +    font-style: italic;  +    font-size: 12px;  +    float: right; +} +.page h1        { margin-top: 10px; } +.vignette       {  +    background-color: #6e6e6e; +    margin-top: 5px; +    margin-bottom: 5px; +    height: 8px; +    position: relative; +} +.vignette span { +	line-height: 19px; +} +div.page .vignette { +    margin-bottom: 10px; +} +div.page .span11 img { +    max-width: 488px; +    height: auto; +} +.vignette > span { +    text-transform: lowercase; +    color: #6e6e6e; +    display: block; +    margin-left: 15px; +    background-color: white; +    position: absolute; +    top: -6px; +    font-size: 12px; +    padding: 0 3px 0 3px; +    font-weight: 500; +} +div.news33.category-news:nth-child(3n) { +	clear: left; +} +div.portal > h1 { +	font-size: 20px; +	padding: 0 10px; +	color: white; +} +h1.portal-creative { +	background-color: #ec008c; +} +h1.portal-game { +	background-color: #fba51e; +} +h1.portal-entertainmentlectures { +	background-color: #819700; +} +div.portal > div.row { +	margin-bottom: 40px; +} +div.category-news h2 a { +	color: black; +} +/* + * CSS for The Gathering 2013. + * Copyright KANDU and contributors + */ + +/* HTML & BODY +------------------------------------------------------ */ +body { +    background: url('/tg13/files/content/design/images/background.jpg') no-repeat; +    background-position: top center; +} + +html, body { +    height:100%; +} +body.iframe { +    background-image: none; +    height: auto; +} + +/* Generic styles +------------------------------------------------------ */ +  +.hidden { display: none; } +menu { margin: 0; padding: 0; } + +/* Containers and rows +------------------------------------------------------ */ +.container { +    width: 1320px; +    margin: 0 auto; +    zoom: 1; +} + +.content { +    width: 840px; +} + +.container:before, +.container:after { +    zoom: 1; +} +.container:before,  +.container:after, +.content:before,  +.content:after, +.row:before, +.row:after { +    display: table; +    line-height: 0; +    content: ""; +} +.container:after, +.row:after { +    clear: both; +} +.row { +    margin-left: -40px; +} + +/* Main structure +------------------------------------------------------ */ +header, header > div.container { +} +header { +    margin-bottom: 40px; +} +header > div.container { +} +header > div.container .inner { +    float: left; +    width: 830px; +} +footer a, footer, footer p, footer h4 {  +    color: #2d4f9e; +} +footer a:hover { +    color: #fff; +} +header a { +    color: #c3027b; +} +header a:hover { +    color: #860050; +} +header > div.container .logo { +    float: left; +    width: 250px; +} +header .left, header .left > div { +    float: right; +} +header .right { +    margin-left: 10px; +    float: right; +    width: 180px; +} +header .when { +    background-color: #5a0037; +    padding: 10px; +    color: white; +    border-bottom-right-radius: 6px; +    border-bottom-left-radius: 6px; +    font-size: 11px; +    line-height: 12px; +    width: 110px; +    text-align: center; +} +header .when-phone .when { +    width: 120px; +} +header .when-phone { +	float: right; +} +header .language { +    margin-top: 10px; +    line-height: 25px; +    font-weight: 300; +    margin-right: 10px; +    padding-right: 10px; +    border-right: 1px solid white; +    font-size: 12px; +} +header ul.promo-menu { +    padding-top: 40px; +    margin: 0 0 0 15px; +} +header ul.promo-menu a { +    font-weight: bold; +    font-size: 13px; +} +header ul li:before {  +    margin-top: 2px; +    content: "\25A0";  +    position: absolute; +    left: -15px; +    width: 10px; +    text-align: right; +    color: #860050; +    font-size: 18px; +    line-height: 13px; +} +header .language a { +    color: white; +} +header .language a:hover { +    color: #2d4f9e; +} +footer { +    margin-top: 80px; +	background-color: #abdcff; +    background-image: url('/tg13/files/content/design/images/footerbg.jpg'); +    background-repeat: no-repeat; +    background-position: center bottom; +} +footer > div.container { +    padding: 0px 0px 150px 0px; +} +.footer-about { +    margin-bottom: 40px; +    height: 100px; +    position: relative; +} +.footer-about > span { +    position: absolute !important; +    bottom: 0; left: 0; +} +footer > div.container > div.row { +    margin-top: 80px; +} +footer ul { +    margin: 0; +} +footer h4 { +   margin-bottom: 20px; +} +footer div.full-span2 > iframe { +   margin: 20px 0px; +} +footer a { +    line-height: 25px; +} +footer ul li::before { +    content: ""; +} +footer div.row { +    margin-left: -20px; +} +footer div.row div.row { +    margin-left: -40px; +} +.footnote p { +    font-size: 13px; +} +.full-span9 { width: 1360px; } +.full-span8 { width: 1280px; } +.full-span7 { width: 1115px; } +.full-span6 { width: 950px; } +.full-span5 { width: 785px; } +.full-span4 { width: 620px; } +.full-span3 { width: 455px; } +.full-span2 { width: 290px; } +.full-span1 { width: 125px; } +.content, .sidebar { +    float: left;     +} +.content { +    margin: 0 40px 0 40px; +} +.sidebar { +    width: 200px; +} +.sidebar.sponsor img { +    width: 200px; +} +.sidebar.sponsor img, +.sidebar.sponsor > div.vignette { +	margin-bottom: 20px; +} +.sidebar.sponsor img { +	filter: grayscale(100%); +	-webkit-filter: grayscale(100%); -moz-filter: grayscale(100%); +	-ms-filter: grayscale(100%); -o-filter: grayscale(100%); +	filter: url(/tg13/files/content/design/css/filters.svg#grayscale); +	filter: gray; +	-webkit-filter: grayscale(1);  +} +.sidebar.sponsor img:hover { +	filter: none; +	-webkit-filter: grayscale(0%); -moz-filter: grayscale(0%); +	-ms-filter: grayscale(0%); -o-filter: grayscale(0%); +} +.fb-comments, .fb-comments *, .fb_iframe_widget, .fb_iframe_widget * {width: 100% !important;} +.span4 iframe { +    width: 100%; +} +div.comments_header { +	padding:8px; +	background-color: #b1b1b1; +	color: white; +	border-radius: 5px;  +    -moz-border-radius: 5px;  +    -webkit-border-radius: 5px;	 +	margin-bottom: 10px; +	margin-top: 10px; +} +div.comments_header > div { +	float: left; +	margin-right: 8px; +	content:url('/tg13/files/content/design/images/info.png'); +} +div.comments_header h4 { +	line-height: 34px; +	color: white; +} +div.comments_header p { +	clear: both; +	margin: 8px 0 0 0 !important; +	font-size: 12px; +	line-height: 15px; +} +.media-page { +	margin-left: 40px; +} +.videoWrapper, #mediaspace { +	position: relative; +	padding-bottom: 56.25%; /* 16:9 */ +	padding-top: 25px; +	height: 0; +	margin-bottom: 0.8em; +} +.videoWrapper iframe, #mediaspace embed { +	position: absolute; +	top: 0; +	left: 0; +	width: 100%; +	height: 100%; +} +.stream-icon { +	float: left; +	margin-right: 10px; +} +.stream-link { margin-bottom: 8px;} +#galleria { +	width: 840px; +} + +/* Menu & Sidebar +------------------------------------------------------ */ + +menu { +    list-style: none; +} +menu a { +    color: #777; +} +menu a:hover, li[class^="menu-"] a:hover { +    color: black; +} +li.menu-creative a, li.menu-creative span, li.menu-creative + menu.sub-menu a, li.menu-creative + menu.submenu span { +    color: #ec008c; +} +li.menu-game a, li.menu-game span, li.menu-game + menu.sub-menu a, li.menu-game + menu.submenu span { +    color: #fba51e; +} +li.menu-tickets a, li.menu-tickets span, li.menu-tickets + menu.sub-menu a, li.menu-tickets + menu.submenu span { +    color: #00aaad; +} +li.menu-guide a, li.menu-guide span, li.menu-guide + menu.sub-menu a, li.menu-guide + menu.submenu span { +    color: #034ea2; +} +li.menu-entertainment-lectures a, li.menu-entertainment-lectures span, li.menu-entertainment-lectures + menu.sub-menu a, li.menu-entertainment-lectures + menu.submenu span { +    color: #819700; +} +menu.top-menu > li { +    margin-bottom: 10px; +} + +div.top-menu-text > span { +    color: #7595af; +    font-size: 23px; +    font-weight: bold; +    display: table-row; +    line-height: 23px; +} +div.top-menu-text > span.help-text { +    font-weight: normal; +    font-size: 14px; +    display: table-row; +    color: #a3a3a3; +    line-height: 15px; +} +div.top-menu-text { +    height: 38px; +    padding: 6px 0 6px 0; +    margin: 0 0 0 56px; +} +div.top-menu-icon { +    width: 50px; +    height: 50px; +    float: left; +    background-color: #bfd4e5; +    border-radius: 5px;  +    -moz-border-radius: 5px;  +    -webkit-border-radius: 5px; +} +menu.top-menu a:hover div.top-menu-text > span, +menu.top-menu a:hover div.top-menu-text > span.help-text { +    color: #27448b; +} +menu.top-menu a:hover div.top-menu-icon { +    background-color: #3d6db3; +} +div.top-menu-icon.icon-schedule { +    background-image: url('/tg13/files/content/design/images/schedule.png'); +} +div.top-menu-icon.icon-tgtv { +    background-image: url('/tg13/files/content/design/images/tgtv.png'); +} +div.top-menu-icon.icon-tng { +    background-image: url('/tg13/files/content/design/images/tng.png'); +} +div.top-menu-icon.icon-forum { +    background-image: url('/tg13/files/content/design/images/forum.png'); +} +div.top-menu-icon.icon-compo { +    background-image: url('/tg13/files/content/design/images/compo.png'); +} +div.top-menu-icon.icon-news { +    background-image: url('/tg13/files/content/design/images/news.png'); +} +menu.section-menu { +    margin-top: 40px; +    margin-left: 15px; +} +menu.section-menu li { +    margin-bottom: 15px; +} +menu.sub-menu { +    margin-bottom: 20px; +    margin-left: 15px; +} +span.menu-expand { +    display: block; +    float: left; +    margin-left: -15px; +    cursor: pointer; +} + +/* Graphical Elements +------------------------------------------------------ */ +/* Language +------------------------------------------------------ */ +/* Search +------------------------------------------------------ */ +.search input { +    vertical-align: top; +    line-height: 1; +} +.search input[type="search"] { +    -webkit-appearance: none; +    box-sizing:content-box; +    padding: 0; +    padding-left: 3px; +    margin: 0; +    margin-top: 10px; +    border: none; +    color: #9dbfd9; +    height: 25px; +    width: 200px; +    font-size: 12px; +    font-style: italic; +    border-radius: 3px; +    line-height: 15px; +} +.search input:focus { +    -webkit-box-shadow: none; +    -moz-box-shadow: none; +    box-shadow: none; +    outline: 0; +} +input[type=search]::-webkit-search-decoration { +  -webkit-appearance:none; +} +input::-webkit-input-placeholder,  +isindex::-webkit-input-placeholder,  +textarea::-webkit-input-placeholder, +input::-moz-placeholder, +textarea::-moz-placeholder { +    font-style: italic; +    color: silver; +} +/* News +------------------------------------------------------ */ +.news       { position: relative; } + +.news100, .clearer, .span19 { width: 840px; } +.span18                     { width: 796px; } +.span17                     { width: 752px; } +.span16                     { width: 708px; } +.span15                     { width: 664px; } +.news75, .span14            { width: 620px; } +.span13                     { width: 576px; } +.news66, .span-two-third    { width: 547px; } +.span12                     { width: 532px; } +.span11                     { width: 488px; } +.span10                     { width: 444px; } +.news50, .span9             { width: 400px; } +.span8                      { width: 356px; } +.span7                      { width: 312px; } +.span6                      { width: 268px; } +.news33, .span-one-third    { width: 253px; } +.span5                      { width: 224px; } +.news25, .span4             { width: 180px; } +.span3                      { width: 136px; } +.span2                      { width: 92px; } +.span1                      { width: 48px; } +.clearer                    { clear: both;  margin: 0px 0px 0px 40px !important; } + +div[class^="news"] > span, +div[class^="full-span"] > span, +div[class^="span"] > span { +    position: relative; +    display: block; +} +div[class^="news"] p, +div[class^="full-span"] p, +div[class^="span"] p { +    margin: 0; +} +.article { +    float: left; +    margin: 0px 0px 40px 40px; +} +.article a, +.article a:hover { +    text-decoration: none; +    color: #777; +} + +.news_img_100 { +    width:  100%; +    margin: 20px 0 10px 0; +} +img.news_img_right { +    width: 50%; +    float: right; +    margin: 0 0 20px 40px; +} +.span2.social-news div { +    margin-bottom: 10px; +} +.icon-more > a { +    float: right; +    font-size: 13px; +    margin-right: 21px; +} +.icon-more { +    position: relative; +} +.icon-more > a::after { +    margin-top: 2px; +    padding-left: 3px; +    padding-top: 2px; +    padding-bottom: 1px; +    margin-left: 5px; +    position: absolute; +    content: "\25BA"; +    color: white; +    background-color: black; +    -webkit-border-radius: 8px; +    -moz-border-radius: 8px; +    border-radius: 8px; +    width: 13px; +    height: 13px; +    font-size: 11px; +    line-height: 11px; +} + +/* Page +------------------------------------------------------ */ +.page { +    float: left; +    margin: 0px 0px 40px 40px; +} +.page .page { +    margin-left: 0px; +} +.page .page.news33 { +	margin-left: 40px; +} +div.news-portal-header { +	width: 840px; +	margin-left: 40px !important; +} +div[class^="full-span"], +.page div[class^="news"], +.page div[class^="span"]{  +    float: left; +    margin-left: 40px; +} +.page h3 a, +.page li a { +    border: none; +} +.page-right { +    float: right; +    clear: right; +    margin-bottom: 40px; +    margin-left: 40px; +} +.page-right a { +    border: none; +} +.page-sidebar { +    margin-left: 40px; +} +.page-right h3, +.page-sidebar h3 { +    border-bottom: solid 4px #c0c4c5; +    position: relative; +    margin: 0 0 10px 0; +} +.page-sidebar .meta { +    text-transform: uppercase; +    font-size: 10px; +} +.page-sidebar { +    position: relative; +} +.related-news { +    margin-bottom: 8px; +} +.img-container { +    margin-bottom: -5px; +} +.img-container a { +    display:block; +} +/* Article skins +------------------------------------------------------ */ +div.article.skin-important { +    background-color: black; +    color: white; +} +div.article.skin-important { +    padding-bottom: 40px; +} +div.article.skin-important > div[class^="news"] > span.content-container, +div.article.skin-important > div[class^="news"] > span.title-container { +    margin-left: 40px; +    margin-right: 40px; +} +div.article.skin-important > div[class^="news"] > span.title-container { +    padding-top: 40px; +} +div.article.skin-important p, +div.article.skin-important h2, +div.article.skin-important a, +div.article.skin-important a:hover, +div.article.skin-important a:visited { +    color: white; +} +div.article.skin-game .vignette,  +div.article.skin-creative .vignette, +div.article.skin-entertainment .vignette { +    background-color: #000; +    margin: 5px 0 5px 0; +    height: 8px; +    position: relative; +} +div.article.skin-game .vignette span,                                                                                                                                          +div.article.skin-creative .vignette span, +div.article.skin-entertainment .vignette span { +    text-transform: lowercase; +    color: #000; +    display: block; +    margin-left: 15px; +    background-color: white; +    position: absolute; +    top: -6px; +    font-size: 12px; +    padding: 0 3px 0 3px; +    font-weight: 500; +} +div.article.skin-game .vignette, +div.vignette.category-game { +    background-color: #fba51e; +} +div.article.skin-creative .vignette, +div.vignette.category-creative { +    background-color: #ec008c; +} +div.article.skin-entertainment .vignette, +div.vignette.category-entertainmentlectures { +    background-color: #819700; +} +div.article.skin-game .vignette span, +div.vignette.category-game span{ +    color: #fba51e; +} +div.article.skin-creative .vignette span, +div.vignette.category-creative span{ +    color: #ec008c; +} +div.article.skin-entertainment .vignette span, +div.vignette.category-entertainmentlectures span{ +    color: #819700; +} +div.article.skin-info { +    background-color: #E6E7E8; +    padding-bottom: 40px; +} +div.article.skin-info > div[class^="news"] > span.content-container, +div.article.skin-info > div[class^="news"] > span.title-container { +    margin-left: 40px; +    margin-right: 40px; +} +div.article.skin-info > div[class^="news"] > span.title-container { +    padding-top: 40px; +} +div.article.skin-important > div[class^="news"] > span.img-container, +div.article.skin-info > div[class^="news"] > span.img-container { +    margin-bottom: -25px; +} + +/* Modal +------------------------------------------------------ */ +.modal-backdrop { +	position: fixed; +	top: 0; +	right: 0; +	bottom: 0; +	left: 0; +	z-index: 1040; +	background-color: #000000; +} +.modal-backdrop.fade { +	opacity: 0; +} +.modal-backdrop { +	opacity: 0.8; +	filter: alpha(opacity=80); +} +.modal-c { +	width: 800px; +} +.modal { +	position: absolute; +	top: 206px; +	z-index: 1050; +	width: 800px; +	margin: 0 auto; +	background-color: #ffffff; +	-webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); +	-moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); +	box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); +	-webkit-background-clip: padding-box; +	-moz-background-clip: padding-box; +	background-clip: padding-box; +} +.modal-body { +	padding: 20px; +	padding-top: 10px; +} +.modal-body .modal-form { +	margin-bottom: 0; +} +.right { +	float: right; +} + +/* Video +----------------------------------------------------- */ + +.video h2 {  +    margin-top: 10px;  +    margin-bottom: 5px;  +}  +.tags span {  +    margin-left: 5px;  +    padding: 3px 4px;  +    border: 1px solid #DDD;  +    -webkit-border-radius: 3px;  +    -moz-border-radius: 3px;  +    border-radius: 3px;  +}  +.tags span:hover {  +    background-color: whiteSmoke;   +}  +.tags span:hover a {  +    color: black;  +}  +.tags span a {  +    color: #07A430;  +    border-bottom: none !important;  +}  +.tags span a:hover {  +    border-bottom: none !important;  +} +.tags { +	margin-bottom: 20px; +} + +/* Buttons +----------------------------------------------------- */ +.btn.stage,  +.btn.stage.active, +.btn.stage:hover, +.btn.game,  +.btn.game.active, +.btn.game:hover, +.btn.creative,  +.btn.creative.active, +.btn.creative:hover, +.btn.auditorium,  +.btn.auditorium.active, +.btn.auditorium:hover { +	text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); +	color: white; +} +.btn.stage { +	background-color: #ff7800; +	background-image: -moz-linear-gradient(top, #ff7800, #db4d00); +	background-image: -ms-linear-gradient(top, #ff7800, #db4d00); +	background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ff7800), to(#db4d00)); +	background-image: -webkit-linear-gradient(top, #ff7800, #db4d00); +	background-image: -o-linear-gradient(top, #ff7800, #db4d00); +	background-image: linear-gradient(top, #ff7800, #db4d00); +	background-repeat: repeat-x; +	filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff7800', endColorstr='#db4d00', GradientType=0); +	border-color: #db4d00 #db4d00 #ca4900; +	border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); +	filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); +} +.btn.stage:hover, +.btn.stage:active, +.btn.stage.active, +.btn.stage.disabled, +.btn.stage[disabled] { +	background-color: #db4d00; +} +.btn.stage:active, .btn.stage.active { +	background-color: #e65a99 \9; +} +.btn.game { +	background-color: #49afcd; +	background-image: -moz-linear-gradient(top, #009cff, #0078c4); +	background-image: -ms-linear-gradient(top, #009cff, #0078c4); +	background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#009cff), to(#0078c4)); +	background-image: -webkit-linear-gradient(top, #009cff, #0078c4); +	background-image: -o-linear-gradient(top, #009cff, #0078c4); +	background-image: linear-gradient(top, #009cff, #0078c4); +	background-repeat: repeat-x; +	filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#009cff', endColorstr='#0078c4', GradientType=0); +	border-color: #0078c4 #0078c4 #0062a0; +	border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); +	filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); +} +.btn.game:hover, +.btn.game:active, +.btn.game.active, +.btn.game.disabled, +.btn.game[disabled] { +	background-color: #0078c4; +} +.btn.game:active, .btn.game.active { +	background-color: #0089e0 \9; +} +.btn.auditorium { +	background-color: #49afcd; +	background-image: -moz-linear-gradient(top, #f33183, #dc0c64); +	background-image: -ms-linear-gradient(top, #f33183, #dc0c64); +	background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f33183), to(#dc0c64)); +	background-image: -webkit-linear-gradient(top, #f33183, #dc0c64); +	background-image: -o-linear-gradient(top, #f33183, #dc0c64); +	background-image: linear-gradient(top, #f33183, #dc0c64); +	background-repeat: repeat-x; +	filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f33183', endColorstr='#dc0c64', GradientType=0); +	border-color: #dc0c64 #dc0c64 #bb004f; +	border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); +	filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); +} +.btn.auditorium:hover, +.btn.auditorium:active, +.btn.auditorium.active, +.btn.auditorium.disabled, +.btn.auditorium[disabled] { +	background-color: #dc0c64; +} +.btn.auditorium:active, .btn.auditorium.active { +	background-color: #e81f74 \9; +} +.btn.creative { +	background-color: #009997; +	background-image: -moz-linear-gradient(top, #009997, #007170); +	background-image: -ms-linear-gradient(top, #009997, #007170); +	background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#009997), to(#007170)); +	background-image: -webkit-linear-gradient(top, #009997, #007170); +	background-image: -o-linear-gradient(top, #009997, #007170); +	background-image: linear-gradient(top, #009997, #007170); +	background-repeat: repeat-x; +	filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#009997', endColorstr='#007170', GradientType=0); +	border-color: #007170 #007170 #004e4d; +	border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); +	filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); +} +.btn.creative:hover, +.btn.creative:active, +.btn.creative.active, +.btn.creative.disabled, +.btn.creative[disabled] { +	background-color: #007170; +} +.btn.creative:active, .btn.creative.active { +	background-color: #007f7d \9; +} +.btn { +	display: inline-block; +	padding: 4px 10px 4px; +	font-size: 13px; +	line-height: 18px; +	color: #333; +	text-align: center; +	text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); +	background-color: #FAFAFA; +	background-image: -webkit-gradient(linear, 0 0, 0 100%, from(white), color-stop(25%, white), to(#E6E6E6)); +	background-image: -webkit-linear-gradient(white, white 25%, #E6E6E6); +	background-image: -moz-linear-gradient(top, white, white 25%, #E6E6E6); +	background-image: -ms-linear-gradient(white, white 25%, #E6E6E6); +	background-image: -o-linear-gradient(white, white 25%, #E6E6E6); +	background-image: linear-gradient(white, white 25%, #E6E6E6); +	background-repeat: no-repeat; +	filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0); +	border: 1px solid #CCC; +	border-bottom-color: #BBB; +	-webkit-border-radius: 4px; +	-moz-border-radius: 4px; +	border-radius: 4px; +	-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); +	-moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); +	box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); +	cursor: pointer; +} +.btn:first-child { +	*margin-left: 0; +} +.btn:hover { +	color: #333333; +	text-decoration: none; +	background-color: #e6e6e6; +	background-position: 0 -15px; +	-webkit-transition: background-position 0.1s linear; +	-moz-transition: background-position 0.1s linear; +	-ms-transition: background-position 0.1s linear; +	-o-transition: background-position 0.1s linear; +	transition: background-position 0.1s linear; +} +.btn:focus { +	outline: thin dotted; +	outline: 5px auto -webkit-focus-ring-color; +	outline-offset: -2px; +} +.btn.active, .btn:active { +	background-image: none; +	-webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); +	-moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); +	box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); +	background-color: #e6e6e6; +	background-color: #d9d9d9 \9; +	color: rgba(0, 0, 0, 0.5); +	outline: 0; +} +.btn-group { +	position: relative; +	*zoom: 1; +	*margin-left: .3em; +} +.btn-group:before, .btn-group:after { +	display: table; +	content: ""; +} +.btn-group:after { +	clear: both; +} +.btn-group:first-child { +	*margin-left: 0; +} +.btn-group + .btn-group { +	margin-left: 5px; +} +.btn-group .btn { +	position: relative; +	float: left; +	margin-left: -1px; +	-webkit-border-radius: 0; +	-moz-border-radius: 0; +	border-radius: 0; +} +.btn-group .btn:first-child { +	margin-left: 0; +	-webkit-border-top-left-radius: 4px; +	-moz-border-radius-topleft: 4px; +	border-top-left-radius: 4px; +	-webkit-border-bottom-left-radius: 4px; +	-moz-border-radius-bottomleft: 4px; +	border-bottom-left-radius: 4px; +} +.btn-group .btn:last-child, .btn-group .dropdown-toggle { +	-webkit-border-top-right-radius: 4px; +	-moz-border-radius-topright: 4px; +	border-top-right-radius: 4px; +	-webkit-border-bottom-right-radius: 4px; +	-moz-border-radius-bottomright: 4px; +	border-bottom-right-radius: 4px; +} +.btn-group .btn.large:first-child { +	margin-left: 0; +	-webkit-border-top-left-radius: 6px; +	-moz-border-radius-topleft: 6px; +	border-top-left-radius: 6px; +	-webkit-border-bottom-left-radius: 6px; +	-moz-border-radius-bottomleft: 6px; +	border-bottom-left-radius: 6px; +} +.btn-group .btn.large:last-child, .btn-group .large.dropdown-toggle { +	-webkit-border-top-right-radius: 6px; +	-moz-border-radius-topright: 6px; +	border-top-right-radius: 6px; +	-webkit-border-bottom-right-radius: 6px; +	-moz-border-radius-bottomright: 6px; +	border-bottom-right-radius: 6px; +} +.btn-group .btn:hover, +.btn-group .btn:focus, +.btn-group .btn:active, +.btn-group .btn.active { +	z-index: 2; +} +.page a.btn, +.page a.btn::hover { +	border-bottom: 1px solid #CCC; +} + +/* Schedule +------------------------------------------------------ */ +a.stage { +	color: white; +    background-color: #819700; +} +a.game { +	color: white; +    background-color: #fba51e; +} +a.auditorium { +	color: black; +    background-color: #d8e600; +} +a.creative { +	color: white; +    background-color: #ec008c; +} +a.agora { +	color: white; +    background-color: #2e4f9e; +} +a.remove-filter { +	color: white; +	background-color: #CCC; +} +.filterLink { +	padding: 3px 6px; +	margin-right: 5px; +	line-height: 28px; +} +.calendar .stage { +    color: #819700; +	font-size: 25px; +} +.calendar .game { +    color: #fba51e; +	font-size: 25px; +} +.calendar .auditorium { +    color: #d8e600; +	font-size: 25px; +} +.calendar .creative { +    color: #ec008c; +	font-size: 25px; +} +.calendar .agora { +    color: #2e4f9e; +	font-size: 25px; +} +.calendar tr td { +	text-align: left; +} +.calendar td, .calendar td { +	min-width: 0; +} +.calendar tbody tr:nth-child(even) td { +    background-color: transparent; +} +.calendar tbody tr.odd td { +	background-color: #F2F2F2; +} +/* Responsive +------------------------------------------------------ */ +@media (max-width: 1320px) { +	footer { +		width: 1320px; +	} +} +@media (max-width: 1094px) { +	div.news-portal-header { +		width: 630px; +		margin-left: 30px !important; +	} +	.news100, .clearer, .span19 { width: 630px; } +	.span18                     { width: 597px; } +	.span17                     { width: 564px; } +	.span16                     { width: 531px; } +	.span15                     { width: 498px; } +	.news75, .span14            { width: 465px; } +	.span13                     { width: 432px; } +	.news66, .span-two-third    { width: 410px; } +	.span12                     { width: 399px; } +	.span11                     { width: 366px; } +	.span10                     { width: 333px; } +	.news50, .span9             { width: 300px; } +	.span8                      { width: 267px; } +	.span7                      { width: 234px; } +	.span6                      { width: 201px; } +	.news33, .span-one-third    { width: 190px; } +	.span5                      { width: 168px; } +	.news25, .span4             { width: 135px; } +	.span3                      { width: 102px; } +	.span2                      { width: 69px; } +	.span1                      { width: 36px; } +	.clearer                    { margin: 0px 0px 0px 30px !important; } +    .full-span9                 { width: 1094px; } +    .full-span8                 { width: 1034x; } +        .full-span7                 { width: 901px; } +        .full-span6                 { width: 768px; } +        .full-span5                 { width: 635px; } +        .full-span4                 { width: 502px; } +        .full-span3                 { width: 369px; } +        .full-span2                 { width: 236px; } +        .full-span1                 { width: 103px; } +        .img-container.news100 img { width: 630px; height: auto; } +        .img-container.news75 img { width: 465px; height: auto; } +        .img-container.news66 img { width: 410px; height: auto; } +        .img-container.news50 img { width: 300px; height: auto; } +        .img-container.news33 img { width: 190px; height: auto; } +        .img-container.news25 img { width: 135px; height: auto; } +        .title-container h2 { +            margin-bottom: 4px; +            font-size: 19px; +        } +	h2.size13 { font-size: 9px; }  +	h2.size14 { font-size: 10px; }  +	h2.size15 { font-size: 11px; }  +	h2.size16 { font-size: 12px; }  +	h2.size17 { font-size: 12px; }  +	h2.size18 { font-size: 13px; }  +	h2.size19 { font-size: 14px; }  +	h2.size20 { font-size: 15px; }  +	h2.size21 { font-size: 15px; }  +	h2.size22 { font-size: 16px; }  +	h2.size23 { font-size: 17px; }  +	h2.size24 { font-size: 18px; }  +	h2.size25 { font-size: 18px; }  +	h2.size26 { font-size: 19px; }  +	h2.size27 { font-size: 20px; }  +	h2.size28 { font-size: 21px; }  +	h2.size29 { font-size: 21px; }  +	h2.size30 { font-size: 22px; }  +	h2.size31 { font-size: 23px; }  +	h2.size32 { font-size: 24px; }  +	h2.size33 { font-size: 24px; }  +	h2.size34 { font-size: 25px; }  +	h2.size35 { font-size: 26px; }  +	h2.size36 { font-size: 27px; }  +	h2.size37 { font-size: 27px; }  +	h2.size38 { font-size: 28px; }  +	h2.size39 { font-size: 29px; }  +	h2.size40 { font-size: 30px; }  +	h2.size41 { font-size: 30px; }  +	h2.size42 { font-size: 31px; }  +	h2.size43 { font-size: 32px; }  +	h2.size44 { font-size: 33px; }  +	h2.size45 { font-size: 33px; }  +	h2.size46 { font-size: 34px; }  +	h2.size47 { font-size: 35px; }  +	h2.size48 { font-size: 36px; }  +	h2.size49 { font-size: 36px; }  +	h2.size50 { font-size: 37px; }  +	h2.size51 { font-size: 38px; }  +	h2.size52 { font-size: 39px; }  +	h2.size53 { font-size: 39px; }  +	h2.size54 { font-size: 40px; }  +	h2.size55 { font-size: 41px; }  +	h2.size56 { font-size: 42px; }  +	h2.size57 { font-size: 42px; }  +	h2.size58 { font-size: 43px; }  +	h2.size59 { font-size: 44px; }  +	h2.size60 { font-size: 45px; }  +	h2.size61 { font-size: 45px; }  +	h2.size62 { font-size: 46px; }  +	h2.size63 { font-size: 47px; }  +	h2.size64 { font-size: 48px; }  +	h2.size65 { font-size: 48px; }  +	h2.size66 { font-size: 49px; }  +	h2.size67 { font-size: 50px; }  +	h2.size68 { font-size: 51px; }  +	h2.size69 { font-size: 51px; }  +	h2.size70 { font-size: 52px; }  +	h2.size71 { font-size: 53px; }  +	h2.size72 { font-size: 54px; }  +	h2.size73 { font-size: 54px; }  +	h2.size74 { font-size: 55px; }  +	h2.size75 { font-size: 56px; }  +	h2.size76 { font-size: 57px; }  +	h2.size77 { font-size: 57px; }  +	h2.size78 { font-size: 58px; }  +	h2.size79 { font-size: 59px; }  +	h2.size80 { font-size: 60px; }  +	h2.size81 { font-size: 60px; }  +	h2.size82 { font-size: 61px; }  +	h2.size83 { font-size: 62px; }  +	h2.size84 { font-size: 63px; }  +	h2.size85 { font-size: 63px; }  +	h2.size86 { font-size: 64px; }  +	h2.size87 { font-size: 65px; }  +	h2.size88 { font-size: 66px; }  +	h2.size89 { font-size: 66px; }  +	h2.size90 { font-size: 67px; }  +	h2.size91 { font-size: 68px; }  +	h2.size92 { font-size: 69px; }  +	h2.size93 { font-size: 69px; }  +	h2.size94 { font-size: 70px; }  +	h2.size95 { font-size: 71px; }  +	h2.size96 { font-size: 72px; }  +	h2.size97 { font-size: 72px; }  +	h2.size98 { font-size: 73px; }  +	h2.size99 { font-size: 74px; } +        h2.size100 { font-size: 75px; }  +        .content-container p {  +            font-size: 12px !important; +            line-height: 14px !important; +            font-weight: 300; +        }  +	.article, .page, .page-right { +	    margin: 0px 0px 30px 30px; +	} +	.page div[class^="news"], +        div[class^="full-span"], +	.page div[class^="span"]{  +	    margin-left: 30px; +	} +	.content {  +	    width: 630px; +	    margin: 0 30px 0 30px; +	} +	.row {  +	    margin-left: -30px; +	} +	footer div.row { +	    margin-left: -15px; +	} +	.container, footer {  +	    width: 1094px; +	} +        .sidebar { +            width: 202px; +        } +        .img-container { +            margin-bottom: 4px; +        } +        div[class^="news"] p, +        div[class^="full-span"] p, +        div[class^="span"] p { +            line-height: 18px; +        } +        div.article.skin-important { +            padding-bottom: 30px; +        } +        div.article.skin-important > div[class^="news"] > span.content-container, +        div.article.skin-important > div[class^="news"] > span.title-*, +        div.article.skin-info > div[class^="news"] > span.content-container, +        div.article.skin-info > div[class^="news"] > span.title-container { +            margin-left: 30px; +            margin-right: 30px; +        } +        div.article.skin-important > div[class^="news"] > span.title-container, +        div.article.skin-info > div[class^="news"] > span.title-container { +            padding-top: 30px; +        } +        .row.news .page img { +            width: 100%; +        } +        header > div.container .inner { +            width: 640px; +        } +        div.page .span11 img { +            max-width: 366px; +            height: auto; +        } +        footer div.row div.row { +            margin-left: -30px; +        } +	div.content > div.row > div.page > img { +		width: 630px; +		height: auto; +	} +	div.content > div.row.news > iframe.full { +		width: 630px; +		margin-left: 30px; +	} +	#galleria { +		width: 630px; +	} +	.media-page { +		margin-left: 30px; +	} +} +@media (max-width: 767px) { +	.media-page { +		margin-left: 0px; +	} +	div.page.news33.category-news { +		margin-bottom: 40px; +	} +	div.news-portal-header { +		width: 100%; +		margin-left: 0px !important; +	} +        .img-container.news100 img, +        .img-container.news75 img, +        .img-container.news66 img, +        .img-container.news50 img, +        .img-container.news33 img, +        .img-container.news25 img, +        div.page .span11 img { +            width: 100%;  +            height: auto;  +        } +        .img-container { width: 100%; } +        .img-container a { display:block; width: 100%; } +	div[class^="news"], +	div[class^="span"], +        div[class^="full-span"], +        .page div[class^="news"], +        .page div[class^="span"], +	.clearer, .content, .container, .sidebar, .page, header > div.container .inner, footer {  +	    width: auto; +	    float: none; +	    clear: both; +	} +        .content { +            margin: 0px 20px 20px 20px; +        } +        div.article.skin-important { +            padding-bottom: 20px; +        } +        div.article { +            width: 100% !important; +            margin-left: 0; +        } +        .row.news { +            margin-left: 0; +        } +        div.article.skin-important > div[class^="news"] > span.content-container, +        div.article.skin-important > div[class^="news"] > span.title-container, +        div.article.skin-info > div[class^="news"] > span.content-container, +        div.article.skin-info > div[class^="news"] > span.title-container { +            width: auto; +            margin-left: 10px; +            margin-right: 10px; +        } +        div.article.skin-important > div[class^="news"] > span.title-container, +        div.article.skin-info > div[class^="news"] > span.title-container { +            padding-top: 20px; +        } +	.content > div[class^="news"], +	div[class^="span"] { +            margin: 0 0 0 20px; +        } +        h2[class^="size"] { +            font-size: 15px; +        } +	.sidebar { +	    margin: 0 20px 20px 20px; +	} +        header, footer { +	    padding: 0 20px 20px 20px; +        } +	.sidebar.sponsor a { +	    margin: 0 10px 10px 0; +	    float: left; +	} +	.sidebar.sponsor div.vignette { +	    clear: both; +	} +        .footnote > div { +	    width: auto; +	    display: block; +	    text-align: center; +	} +	footer div[class^="full-span"] { +	    margin-bottom: 20px; +	} +	.social-news > div { +	    float: left; +	    margin-right: 20px; +	} +	menu.top-menu { +	    height: 100px; +	} +	menu.top-menu li { +	    width: 45%; +	    float: left; +	    background-color: #bfd4e5; +	    border-radius: 5px; +	    -moz-border-radius: 5px; +	    -webkit-border-radius: 5px; +	} +	menu.top-menu li > a { +	    color: white; +	} +	menu.top-menu .top-menu-text { +	    text-align: center; +	    margin: 0; +	} +	menu.top-menu .top-menu-text > span:first-child { +	    display: block; +	    font-size: 15px; +	    line-height: 38px; +	} +	menu.top-menu > li:nth-child(odd) { +	    margin-right: 10%; +	} +	div.top-menu-icon { +	    display: none; +	} +	.hidden-phone { +	    display: none; +	} +	.visible-phone { +	    display: block; +	} +        menu.section-menu { +            margin: 20px 0px 0px; +            padding: 60px 10px 10px; +            background-color: #555; +            border-radius: 5px; +            color: white; +        } +        menu.section-menu li { +            padding: 6px; +            border-radius: 5px; +        } +        menu.section-menu a, menu.section-menu a:hover { +            color: white; +        } +        div.top-menu-text > span.help-text { +            display: none; +        } +        th, td { +            min-width: 0px; +        } +        .section-menu-button { +            float: right; +            margin-bottom: 15px; +        } +        .section-menu-button a { +            width: 70px; +            height: 50px; +            line-height: 50px; +            display: block; +            text-align: center; +            border-radius: 5px; +            background-color: #555; +            color: white; +        } +        .section-menu-button a:hover, menu.section-menu li:hover  { +            background-color: #6f6f6f; +        } +        h1 { font-size: 25px; line-height: 30px; margin-bottom: 10px; } +        h2 { font-size: 20px; line-height: 25px; margin-bottom: 8px;} +        h3 { font-size: 15px; line-height: 20px; } +        h4 { font-size: 12px; line-height: 17px; } +        h5 { font-size: 12px; line-height: 17px; }  +        h6 { font-size: 12px; line-height: 17px; }  +        .row.news .page { +            margin: 0px; +        } +        header { +            margin-bottom: 0px; +        } +        menu.top-menu a:hover div.top-menu-text > span, menu.top-menu a:hover div.top-menu-text > span.help-text, div.top-menu-text > span { +            color: white; +        } +        div.logo { +            width: 132px; +        } +        div.logo img { +            height: 100px; +        } +        div.inner div.when { +            display: none; +        } +        div.inner div.right { +            float: left; +        } +        footer > div.container > div.row { +            margin-top: 30px; +        } +        div[class^="full-span"] { +            margin: 0px 0px 0px 15px; +        } +        footer .search input[type="search"]{ +            width: 100%; +        } +        footer .language { +            text-align: center; +        } +        footer > div.container { +            padding: 0px 0px 90px 0px; +        } +        header ul.promo-menu { +            padding-top: 20px; +        } +        footer div.row div.row { +            margin-left: -20px; +        } +	div.content > div.row > div.page > img { +		width: 100%; +		height: auto; +	} +	div.content > div.row.news > iframe.full { +		width: 100%; +		margin-left: 0px; +	} +	#galleria { +		width: 100%; +	} +	div.calendar table, +	div.calendar table thead, +	div.calendar table tbody, +	div.calendar table th, +	div.calendar table td, +	div.calendar table tr { +		display: block; +	} +	div.calendar table thead tr { +		position: absolute; +		top: -9999px; +		left: -9999px; +	} +	div.calendar table td { +		border: none; +		border-bottom: 1px solid #CCC; +		position: relative; +		padding-left: 20%; +		white-space: normal; +		text-align: left; +	} +	div.calendar table td:before { +		position: absolute; +		top: 6px; +		left: 6px; +		width: 45%; +		padding-right: 10px; +		white-space: nowrap; +		text-align:left; +		font-weight: bold; +		content: attr(data-title); +	} +	.filterLink { +		clear: right; +		display: block; +		text-align: center; +	} +	li.menu-creative a, li.menu-creative span, li.menu-creative + menu.sub-menu a, li.menu-creative + menu.submenu span, +	li.menu-game a, li.menu-game span, li.menu-game + menu.sub-menu a, li.menu-game + menu.submenu span, +	li.menu-tickets a, li.menu-tickets span, li.menu-tickets + menu.sub-menu a, li.menu-tickets + menu.submenu span, +	li.menu-guide a, li.menu-guide span, li.menu-guide + menu.sub-menu a, li.menu-guide + menu.submenu span, +	li.menu-entertainment-lectures a, li.menu-entertainment-lectures span, li.menu-entertainment-lectures + menu.sub-menu a, li.menu-entertainment-lectures + menu.submenu span { +	    color: white; +	} +} diff --git a/web/stream.tg13.gathering.org/singularity.png b/web/stream.tg13.gathering.org/singularity.png Binary files differnew file mode 100644 index 0000000..3a13cdf --- /dev/null +++ b/web/stream.tg13.gathering.org/singularity.png diff --git a/web/stream.tg13.gathering.org/stream.pl b/web/stream.tg13.gathering.org/stream.pl new file mode 100755 index 0000000..8ccf05c --- /dev/null +++ b/web/stream.tg13.gathering.org/stream.pl @@ -0,0 +1,87 @@ +#!/usr/bin/perl -I /srv/streamlib + +use warnings; +use strict; + +use stream; +use stream::config; +use CGI; +my $client = CGI->new; + +my $stream = $client->param('stream'); +my $interlaced = $client->param('interlaced'); +my $delivery = $client->param('delivery'); + +my $v4net = $stream::config::v4net; +my $v6net = $stream::config::v6net; +my $multicast_ip = $stream::config::multicast; +my $tg = $stream::config::tg; +my $base_url = $stream::config::vlc_base_host; +my %streams = %stream::config::streams; + + + +#default +if (not defined $delivery) { +	$delivery = "multicast"; +} + +if((not defined $stream) or (not defined $delivery)) { +	print $client->header(); +	die "No stream and/or delivery method, robots unhappy :/\n"; +} + +my $url = ""; +my $port_del = ""; +my $port_str = ""; +my $extinf = ""; +my $flash_appendix = ""; + +my $clip = $client->remote_addr(); + +if (exists($streams{$stream})) { +	my $is_multicast = 0; +	# add force is_ip_local in check?  +	$is_multicast = 1	if (exists($streams{$stream}->{has_multicast}) && $delivery eq "multicast"); + +	if ($is_multicast) { +		$port_del = 20; +		$extinf .= "Multicasted"; +		$url = $streams{$stream}->{multicast_ip}; +	} else { +		$port_del = 30; +		$extinf .= "Unicasted"; +		$url = $base_url; +		 +		if ($streams{$stream}->{is_flash}) { +			$port_del = 50; +			$flash_appendix = "/stream.flv"; +		} +	} + +	$port_del = $streams{$stream}->{preport} if (defined($streams{$stream}->{preport})); +	$port_str = $streams{$stream}->{port}; +	$extinf .= " $streams{$stream}->{title}"; +		  +} else { +	 &error("No stream and/or delivery method, robots unhappy :-/"); +} + +#print out new file +print $client->header(-type => "application/vlc", +			"-Content-disposition" => "attachment; filename=tg-".$delivery."-".$stream.".vlc" +); + +print "#EXTM3U\n"; +print "#EXTINF:-1,TG$tg $extinf\n"; +if(defined $interlaced && $interlaced == 1) { +	print "#EXTVLCOPT:deinterlace=1\n"; +	print "#EXTVLCOPT:deinterlace-mode=linear\n"; +} +print "$url:$port_del$port_str$flash_appendix\n"; + +sub error($) { +	my $message = shift; +	print $client->header(); +	die($message."\n"); +} diff --git a/web/stream.tg13.gathering.org/streamstats-fast.pl b/web/stream.tg13.gathering.org/streamstats-fast.pl new file mode 100755 index 0000000..f4caa24 --- /dev/null +++ b/web/stream.tg13.gathering.org/streamstats-fast.pl @@ -0,0 +1,15 @@ +#! /usr/bin/perl +use strict; +use warnings; +use POSIX; +use CGI qw(fatalsToBrowser); +	 +my $port_spec = CGI::param('port'); +my $proto_spec = CGI::param('proto'); +my $audience_spec = CGI::param('audience'); + +print CGI::header(-type=>'image/png'); + +# I'm sure this is really safe +system("/srv/stream.tg13.gathering.org/fix_count.pl | /srv/stream.tg13.gathering.org/streamstats - $port_spec $proto_spec $audience_spec"); +#system("/srv/stream.tg13.gathering.org/streamstats", "/home/techserver/cleaned_datacube.log", $port_spec, $proto_spec, $audience_spec); diff --git a/web/stream.tg13.gathering.org/streamstats.cpp b/web/stream.tg13.gathering.org/streamstats.cpp new file mode 100644 index 0000000..e81419f --- /dev/null +++ b/web/stream.tg13.gathering.org/streamstats.cpp @@ -0,0 +1,217 @@ +#include <stdio.h> +#include <string.h> +#include <map> +#include <set> +#include <string> +#include <vector> +#include <stdlib.h> + +using namespace std; + +map<string, string> port_desc = { +	{ "3013", "main (3013)" }, +	{ "3014", "main-sd (3014)" }, +	{ "3015", "webcam (3015)" }, +	{ "3016", "webcam-south (3016)" }, +	{ "3017", "webcam-south-transcode (3017)" }, +	{ "3018", "webcam-fisheye (3018)" }, +	{ "5013", "main-transcode (5013)" }, +	{ "5015", "webcam-transcode (5015)" }, +}; + +struct Spec { +	set<string> incl; +	bool compare; +}; + +Spec parse_spec(const string &spec) +{ +	Spec ret; +	ret.compare = false; + +	if (spec == "compare") { +		ret.compare = true; +		return ret; +	} +	if (spec == "dontcare") { +		return ret; +	} + +	const char *ptr = spec.c_str(); +	if (strncmp(ptr, "compare:", 8) == 0) { +		ptr += 8; +		ret.compare = true; +	} + +	for ( ;; ) { +		const char *end = strchr(ptr, ','); +		if (end == NULL) { +			ret.incl.insert(ptr); +			break; +		} else { +			ret.incl.insert(string(ptr, end)); +			ptr = end + 1; +		} +	} + +	return ret; +} + +bool filter(const string &entry, const Spec &spec) +{ +	if (spec.incl.empty()) { +		return false; +	} +	return spec.incl.count(entry) == 0; +} + +vector<string> get_stream_id(const string& port, const string &proto, const string &audience, +                             const Spec& port_spec, const Spec &proto_spec, const Spec &audience_spec) +{ +	vector<string> keys; +	if (port_spec.compare) { +		if (port_desc.count(port)) { +			keys.push_back(port_desc[port]); +		} else { +			char buf[256]; +			sprintf(buf, "___%s___", port.c_str()); +			keys.push_back(buf); +		} +	} +	if (proto_spec.compare) { +		keys.push_back(proto); +	} +	if (audience_spec.compare) { +		keys.push_back(audience); +	} +	return keys; +} + +string get_stream_desc(const vector<string> &stream_id) +{ +	string ret; +	for (int i = 0; i < stream_id.size(); ++i) { +		if (i != 0) { +			ret += ","; +		} +		ret += stream_id[i]; +	} +	return ret; +} + +int main(int argc, char **argv) +{ +	Spec port_spec = parse_spec(argv[2]); +	Spec proto_spec = parse_spec(argv[3]); +	Spec audience_spec = parse_spec(argv[4]); +		 +	map<string, map<vector<string>, int> > lines; +	map<vector<string>, int> stream_ids; +	vector<string> stream_descs; + +	// Parse the log. +	FILE *fp; +	if (strcmp(argv[1], "-") == 0) { +		fp = stdin; +	} else { +		fp = fopen(argv[1], "r"); +	} +	while (!feof(fp)) { +		char buf[1024]; +		fgets(buf, 1024, fp); + +		if (buf == NULL) { +			break; +		} +		char *ptr = strchr(buf, '\n'); +		if (ptr != NULL) { +			*ptr = 0; +		} + +		char *date = strtok(buf, " "); +		char *port = strtok(NULL, " "); +		char *proto = strtok(NULL, " "); +		char *audience = strtok(NULL, " "); +		char *count = strtok(NULL, " "); +	 +		if (date == NULL || port == NULL || proto == NULL || audience == NULL || count == NULL) { +			continue; +		}	 + +		if (filter(port, port_spec)) { +			continue; +		} +		if (filter(proto, proto_spec)) { +			continue; +		} +		if (filter(audience, audience_spec)) { +			continue; +		} + +		vector<string> stream_id = get_stream_id(port, proto, audience, port_spec, proto_spec, audience_spec); +		if (stream_ids.count(stream_id) == 0) { +			int stream_id_num = stream_ids.size(); +			stream_ids.insert(make_pair(stream_id, stream_id_num)); +			stream_descs.push_back(get_stream_desc(stream_id)); +		} +		lines[date][stream_id] += atoi(count); +	} +	fclose(fp); + +	// Output. +	char *data_file = tempnam(NULL, "data"); +	FILE *datafp = fopen(data_file, "w"); +	if (datafp == NULL) { +		perror(data_file); +		exit(1); +	} + +	vector<int> cols(stream_ids.size()); +	for (auto& it : lines) { +		const string& date = it.first; +	 +		for (const auto& it2 : stream_ids) { +			const vector<string>& stream_id = it2.first; +			int stream_id_num = it2.second; + +			cols[stream_id_num] = it.second[stream_id];  // note: might zero-initialize +		} +		fprintf(datafp, "%s", date.c_str()); +		for (int i = 0; i < cols.size(); ++i) { +			fprintf(datafp, " %d", cols[i]); +		} +		fprintf(datafp, "\n"); +	} +	fclose(datafp); + +	// Make gnuplot script. +	char *plot_file = tempnam(NULL, "plot"); +	FILE *plotfp = fopen(plot_file, "w"); +	if (plotfp == NULL) { +		perror(plot_file); +		exit(1); +	} + +	fprintf(plotfp, "set terminal png\n"); +	fprintf(plotfp, "set xdata time\n"); +	fprintf(plotfp, "set timefmt \"20%%y-%%m-%%d-%%H:%%M:%%S\"\n"); +	fprintf(plotfp, "set xtics axis \"2000-00-00-01:00:00\"\n"); +	fprintf(plotfp, "set format x \"%%H\"\n"); + +	fprintf(plotfp, "plot"); +	for (int i = 0; i < cols.size(); ++i) { +		if (i == 0) { +			fprintf(plotfp, " "); +		} else { +			fprintf(plotfp, ","); +		} +		fprintf(plotfp, "\"%s\" using 1:%d title \"%s\" with lines", data_file, i + 2, stream_descs[i].c_str()); +	} +	fprintf(plotfp, "\n"); + +	fclose(plotfp); + +	char buf[1024]; +	sprintf(buf, "gnuplot < %s", plot_file); +	system(buf); +} diff --git a/web/stream.tg13.gathering.org/streamstats.html b/web/stream.tg13.gathering.org/streamstats.html new file mode 100644 index 0000000..5d6adc7 --- /dev/null +++ b/web/stream.tg13.gathering.org/streamstats.html @@ -0,0 +1,81 @@ +<html> +  <head> +    <script> +      function construct_url(name, choices) { +        // port +        var url = name + '='; +        if (document.getElementById('split_' + name).checked) { +          url += 'compare:'; +        } +        var choices_so_far = 0; +        for (var i = 0; i < choices.length; ++i) { +          var check = document.getElementById(name + '_' + choices[i]); +          if (!check.checked) { +            continue; +          } +          if (choices_so_far++ != 0) { +            url += ','; +          } +          url += choices[i]; +        } +        return url; +      } + +      function update() { +        var url = 'http://stream.tg13.gathering.org/streamstats-fast.pl?'; +        url += construct_url('port', [ 3013, 3014, 3015, 3016, 3017, 3018, 5013, 5015 ]); +        url += '&' + construct_url('proto', [ 'IPv4', 'IPv6' ]); +        url += '&' + construct_url('audience', [ 'internal', 'external' ]); +         +        document.getElementById('graph').src = url; +      } +    </script> +  </head> +  <body> +    <table> +      <tr> +        <th>Ports:</th> +        <td> +          <label><input type="checkbox" id="port_3013" checked="checked" onchange="update();" /> 3013 (Main)</label><br /> +          <label><input type="checkbox" id="port_3014" checked="checked" onchange="update();" /> 3014 (Main SD)</label><br /> +          <label><input type="checkbox" id="port_3015" checked="checked" onchange="update();" /> 3015 (Webcam)</label><br /> +          <label><input type="checkbox" id="port_3016" checked="checked" onchange="update();" /> 3016 (Webcam south)</label><br /> +          <label><input type="checkbox" id="port_3017" checked="checked" onchange="update();" /> 3017 (Webcam south transcode)</label><br /> +          <label><input type="checkbox" id="port_3018" checked="checked" onchange="update();" /> 3018 (Fisheye)</label><br /> +          <label><input type="checkbox" id="port_5013" checked="checked" onchange="update();" /> 5013 (Main LQ/Flash)</label><br /> +          <label><input type="checkbox" id="port_5015" checked="checked" onchange="update();" /> 5015 (Webcam LQ/Flash)</label> +        </td> +        <td> +          <label><input type="checkbox" id="split_port" onchange="update();" /> Split</label> +        </td> +      </tr> +      <tr> +        <th>Protocol:</th> +        <td> +          <label><input type="checkbox" id="proto_IPv4" checked="checked" onchange="update();" /> IPv4</label><br /> +          <label><input type="checkbox" id="proto_IPv6" checked="checked" onchange="update();" /> IPv6</label><br /> +        </td> +        <td> +          <label><input type="checkbox" id="split_proto" onchange="update();" /> Split</label> +        </td> +      </tr> +      <tr> +        <th>Audience:</th> +        <td> +          <label><input type="checkbox" id="audience_internal" checked="checked" onchange="update();" /> Internal</label><br /> +          <label><input type="checkbox" id="audience_external" checked="checked" onchange="update();" /> External</label><br /> +        </td> +        <td> +          <label><input type="checkbox" id="split_audience" onchange="update();" /> Split</label> +        </td> +      </tr> +      <tr> +        <td colspan="3"> +          <input type="button" value="Update display" onclick="update();" /> +        </td> +      </tr> +    </table> +    <p><img src="" id="graph" /></p> +    <script>update();</script> +  </body> +</html> diff --git a/web/stream.tg13.gathering.org/streamstats.pl b/web/stream.tg13.gathering.org/streamstats.pl new file mode 100755 index 0000000..e4c20f9 --- /dev/null +++ b/web/stream.tg13.gathering.org/streamstats.pl @@ -0,0 +1,116 @@ +#! /usr/bin/perl +use strict; +use warnings; +use POSIX; +use CGI qw(fatalsToBrowser); +	 +my %port_spec = prepare_spec(CGI::param('port')); +my %proto_spec = prepare_spec(CGI::param('proto')); +my %audience_spec = prepare_spec(CGI::param('audience')); + +#open LOG, "<", "/home/techserver/count_datacube.log" +open LOG, "-|", "/home/techserver/fix_count.pl" +#open LOG, "<", "/home/techserver/cleaned_datacube.log" +	or die "count_datacube.log: $!"; + +our %desc = ( +	3013 => 'main (3013)', +	3014 => 'main-sd (3014)', +	3015 => 'webcam (3015)', +	3016 => 'webcam-south (3016)', +	3017 => 'webcam-south-transcode (3017)', +	3018 => 'webcam-fisheye (3018)', +	5013 => 'main-transcode (5013)', +	5015 => 'webcam-transcode (5015)', +); + +my $lines = {}; +my %streams = (); + +while (<LOG>) { +	chomp; +	my ($date, $port, $proto, $audience, $count) = split /\s+/; +	next if (filter($port, $proto, $audience)); +	my $stream_id = get_stream_id($port, $proto, $audience); +	$streams{$stream_id} = 1; +	$lines->{$date}{$stream_id} += $count; +} + +close LOG; + +print CGI::header(-type=>'image/png'); + +my $tmpfile = POSIX::tmpnam(); +open GRAPH, ">", $tmpfile +	or die "$tmpfile: $!"; +for my $date (sort keys %$lines) { +	my @cols = (); +	for my $stream (keys %streams) { +		push @cols, ($lines->{$date}{$stream} // "0"); +	} +	print GRAPH "$date ", join(' ', @cols), "\n"; +} +close GRAPH; + +my $tmpfile2 = POSIX::tmpnam(); +open GNUPLOT, ">", $tmpfile2 +	or die "$tmpfile2: $!"; +print GNUPLOT "set terminal png\n"; +print GNUPLOT "set xdata time\n"; +print GNUPLOT "set timefmt \"20%y-%m-%d-%H:%M:%S\"\n"; +print GNUPLOT "set xtics axis \"2000-00-00-01:00:00\"\n"; +print GNUPLOT "set format x \"%H\"\n"; + +my @plots = (); +my $idx = 2; +for my $stream (keys %streams) { +	push @plots, "\"$tmpfile\" using 1:$idx title \"$stream\" with lines"; +	++$idx; +} +print GNUPLOT "plot ", join(', ', @plots); + +# \"$tmpfile\" using 0:2 with lines, \"$tmpfile\" using 0:3 with lines\n"; +close GNUPLOT; + +system("gnuplot < $tmpfile2"); + +sub prepare_spec { +	my $spec = shift; +	return () if ($spec eq 'compare' || $spec eq 'dontcare'); +	$spec =~ s/^compare://; + +	my %ret = (); +	for my $s (split /,/, $spec) { +		$ret{$s} = 1; +	} +	return %ret; +} + +sub filter { +	my ($port, $proto, $audience) = @_; +	return 1 if (filter_list(\%port_spec, $port)); +	return 1 if (filter_list(\%proto_spec, $proto)); +	return 1 if (filter_list(\%audience_spec, $audience)); +	return 0; +} + +sub filter_list { +	my ($spec, $candidate) = @_; +	return 0 if ((scalar keys %$spec) == 0); +	return !exists($spec->{$candidate}); +}	 + +sub get_stream_id { +	my ($port, $proto, $audience) = @_; +	my @keys = (); +	if (CGI::param('port') =~ /^compare/) { +		if (exists($desc{$port})) { +			push @keys, $desc{$port}; +		} else { +			push @keys, "___" . $port . "___"; +		} +	} +	push @keys, $proto if (CGI::param('proto') =~ /^compare/); +	push @keys, $audience if (CGI::param('audience') =~ /^compare/); +	return join(',', @keys); +} diff --git a/web/stream.tg13.gathering.org/superawesomeness.css b/web/stream.tg13.gathering.org/superawesomeness.css new file mode 100644 index 0000000..b8c5545 --- /dev/null +++ b/web/stream.tg13.gathering.org/superawesomeness.css @@ -0,0 +1,24 @@ +* { font-family: 'Open Sans', sans-serif;  + +} + +body { +	background:  #fff; color: #000; opacity: 1;  +} + +#spaceship { background: url('singularity.png'); width: 237px; height: 200px;position:absolute; top: 0; right: 0;z-index: -1} + +@media screen and (max-width: 1145px) { /* Min iPad size*/ +	#spaceship { +		background: #fff; +	} +} + + +/* #innhold { position: absolute; left:0px ; top: 50px; margin: 0 50px 0 50px;  z-index: 9;  width: 520px; }*/ +#innhold { width: 480px; } +footer { clear: both; width:480px; } +a { color: #000; } +h4 { margin: 0;  margin-top: 35px;} +p { margin: 0; padding: 0; } +li { margin-bottom: 14px; } diff --git a/web/stream.tg13.gathering.org/test.pl b/web/stream.tg13.gathering.org/test.pl new file mode 100755 index 0000000..3b440d5 --- /dev/null +++ b/web/stream.tg13.gathering.org/test.pl @@ -0,0 +1,70 @@ +#!/usr/bin/perl -I /srv/streamlib +use warnings; +use strict; +use CGI; +use Geo::IP; +use NetAddr::IP; +use Net::IP; +# apt-get install libnet-ip-perl libnetaddr-ip-perl  +use HTML::Template; +use stream; +use stream::config; + +my $client = CGI->new; + +my $v4net = $stream::config::v4net; +my $v6net = $stream::config::v6net; +my $tg = $stream::config::tg; +my $tg_full = $stream::config::tg_full; +my %streams = %stream::config::streams; + +my $force_unicast = $client->param('forceunicast'); + +my $location = undef; + +print $client->header(); + +my $clip = $client->remote_addr(); +my $template = HTML::Template->new(filename => 'test.tmpl'); +my $is_local = &is_ip_local($clip, $v4net, $v6net); + +my @streams = &html_local_test(); +$template->param(TG => $tg); +$template->param(TG_FULL => $tg_full); +$template->param(STREAMS => \@streams); +print $template->output(); + + +sub html_local_test() { +	my @s = (); +	foreach my $name (sort { $streams{$a}->{priority} <=> $streams{$b}->{priority} } keys %streams) { +		my $title_link = "http://stream.tg$tg.gathering.org/stream.pl?delivery=%s&stream=${name}&interlaced=%s"; +		my $multicast_link = $streams{$name}->{has_multicast} ? "multicast" : "unicast"; +		$multicast_link = "unicast" if ($force_unicast == 1 || not $is_local); + +		if ($streams{$name}->{external}) { +			 $title_link = $streams{$name}->{url}; +		} else { +			$title_link = sprintf($title_link, $multicast_link, $streams{$name}->{interlaced}); +		} +		my %hash = ( +			'title_link' => $title_link, +			'title' => $streams{$name}->{title}, +			'source' => $streams{$name}->{source}, +			'quality' => $streams{$name}->{quality}, +			'location' => $streams{$name}->{location}, +			'type' => $streams{$name}->{type}, +			'delivery' => $multicast_link, +		); +		if ($multicast_link eq "multicast") { +			$hash{'is_multicast'} .= 1;  +			my $unicast_link = $title_link; +			$unicast_link=~s/multicast/unicast/g; +			$hash{'unicast_link'} .= $unicast_link; +		} +		$hash{'description'} .= $streams{$name}->{description} if exists($streams{$name}->{description}); +		push(@s, \%hash); + +	} +	return @s; +} diff --git a/web/stream.tg13.gathering.org/test.tmpl b/web/stream.tg13.gathering.org/test.tmpl new file mode 100644 index 0000000..ea0eaca --- /dev/null +++ b/web/stream.tg13.gathering.org/test.tmpl @@ -0,0 +1,31 @@ +<html> +<head> +	<title>The Gathering <TMPL_VAR NAME=TG_FULL> Streams</title> +	<link rel="stylesheet" type="text/css" href="singularity.css" media="all"> +</head> +<body> +	<div id="innhold"> +		<h1>The Gathering <TMPL_VAR NAME=TG_FULL> Streams</h1> +		<TMPL_LOOP NAME="STREAMS"> +			<div class="stream-link"> +				<div class="stream-icon"><img src="img/icon_<TMPL_VAR NAME=QUALITY>.png" /> <img src="img/icon_<TMPL_VAR NAME=TYPE>.png" /> <TMPL_IF NAME=LOCATION><img src="img/icon_<TMPL_VAR NAME=LOCATION>.png"></TMPL_IF></div> +				<div class="stream-link-content"> +					<a href="<TMPL_VAR NAME=TITLE_LINK>"><TMPL_VAR NAME=TITLE></a><br> +					Source: <TMPL_VAR NAME=SOURCE><br> +					Delivery: <TMPL_VAR NAME=delivery> <TMPL_IF NAME=IS_MULTICAST>(<a href='<TMPL_VAR NAME=UNICAST_LINK>'>problems? try unicast vlc link here</a>)</TMPL_IF> +				</div> +			</div> +		</TMPL_LOOP> +		<div id="map"> +			<img src="img/cam-map.png"> +		</div> + +	</div> + +	<p>Problems with the non game streams? The easiest way to get hold of us is on IRC (EFNet); one of ViD, Rockj and Sesse should be available if there's too much traffic on #tg to be heard.</p> +	<p><a href="http://stream.tg<TMPL_VAR NAME="TG">.gathering.org">http://stream.tg<TMPL_VAR NAME="TG">.gathering.org</a></p> + +</body> +</html> + + diff --git a/web/streamlib/stream.pm b/web/streamlib/stream.pm new file mode 100644 index 0000000..c28136e --- /dev/null +++ b/web/streamlib/stream.pm @@ -0,0 +1,36 @@ +package stream; +use strict; +use warnings; + +BEGIN { +	use Exporter(); + +        our ($VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS); + +        @ISA         = qw(Exporter); +	$VERSION     = 1.00; +	@EXPORT      = qw(&is_ip_local); +	 +} + +sub is_ip_local($$$) { +	my $clip = shift; +	my $v4net = shift; +	my $v6net = shift; +	return 0 unless defined($clip); +	 +	my $is_local = 0; +	if ($clip =~ m/\:/){ +		if (NetAddr::IP->new($clip)->within($v6net)){ +			$is_local = 1; +		} +	} else { +		if (NetAddr::IP->new($clip)->within($v4net)){ +			$is_local = 1; +		} +	} +	return $is_local; +} + + +1; diff --git a/web/streamlib/stream/config.pm b/web/streamlib/stream/config.pm new file mode 100644 index 0000000..7c488b6 --- /dev/null +++ b/web/streamlib/stream/config.pm @@ -0,0 +1,160 @@ +package stream::config;  +use strict; +use warnings; +use NetAddr::IP; + +our $v4net = NetAddr::IP->new("151.216.0.0/17"); +our $v6net = NetAddr::IP->new("2a02:ed02::/32"); +our $multicast = "udp://\@233.191.12.1"; +our $vlc_base_host = "http://stream.tg13.gathering.org"; +our $tg = 13; +our $tg_full = 2013; + + +# priority = sorting order in streaming list +# port , "post port number" +# has_external , shows on OVH/.fr reflector if set +# external , replaces static url link  +# source , video source pew pew +# title , title doh \:D/ +our %streams =  ( +# Deaktivert 31.mars kl 05.30 iush +#		'event-ios' => { +#			'type' => 'event', +#			'quality' => 'hd', +#			'priority' => 26, +#			'external' => 1, +#			'url' => "$vlc_base_host/ios/event.m3u8", +#			'source' => 'Event', +#			'title' => 'Event HD Stream for iOS devices (Apple)', +#		}, +#		'event-hd' => { +#			'type' => 'event', +#			'quality' => 'hd', +#			'priority' => 20, +#			'port' => 13, +#			'interlaced' => 0, +#			'has_multicast' => 1, +#			'multicast_ip' => 'udp://@[ff7e:a40:2a02:ed02:ffff::13]', +#			'source' => 'Event', +#			'title' => 'Event HD (720p50)' +#		}, +#		'event-sd' => { +#			'type' => 'event', +#			'quality' => 'sd', +#			'priority' => 24, +#			'port' => 14, +#			'interlaced' => 0, +#			'has_multicast' => 1, +#			'multicast_ip' => 'udp://@[ff7e:a40:2a02:ed02:ffff::14]', +#			'source' => 'Event', +#			'title' => 'Event SD (576p) (2mbps)' +#		}, +#		'event-flash' => { +#			'type' => 'event', +#			'quality' => 'sd', +#			'priority' => 25, +#			'interlaced' => 0, +#			'external' => 1, +#			'url' => 'http://www.gathering.org/tg13/no/live-tv/', +#			'source' => 'Event', +#			'title' => 'Event SD (gathering.org flash player)', +#		}, +# + + +		'south-raw' => {  +			'type' => 'camera', +			'location' => 3, +			'quality' => 'hd', +			'priority' => 40, +			'port' => 16, +			'interlaced' => 1, +			'has_multicast' => 0, +#			'multicast_ip' => "udp://@[ff7e:a40:2a02:ed02:ffff::16]", +			'source' => 'Tech', +			'title' => 'Webcam South (HD) (1080i25)', +		}, + +		'south-transcode' => { +			'type' => 'camera', +			'location' => 3, +			'quality' => 'hd', +			'priority' => 50, +			'port' => 17, +			'interlaced' => 0, +			'has_multicast' => 1, +			'multicast_ip' => "udp://@[ff7e:a40:2a02:ed02:ffff::17]", +			'source' => 'Tech', +			'title' => 'Webcam South (HD) (720p50)', +		}, + + +		'fuglecam' => {  +			'type' => 'camera', +			'location' => 2, +			'quality' => 'hd', +			'priority' => 118, +			'port' => 15, +			'interlaced' => 1, +			'has_multicast' => 1, +			'multicast_ip' => "udp://\@[ff7e:a40:2a02:ed02:ffff::15]", +			'source' => 'Tech', +			'title' => 'Webcam Fugleberget (HD) (1080i50)', +		}, + +	 + +		'fuglecam-flv-sd' => { +			'location' => 2, +			'type' => 'camera', +			'quality' => 'sd', +			'priority' => 121, +			'interlaced' => 1, +			'external' => 1, +			'url' => 'http://www.gathering.org/tg13/no/webcam/', +			'title' => 'Webcam Fugleberget (SD) (gathering.org flash player)', +		}, + +		'noc-fisheye' => { +			'type' => 'camera', +			'location' => 1, +			'quality' => 'hd', +			'priority' => 130, +			'port' => 18, +			'has_multicast' => 1, +			'interlaced' => 0, +			'multicast_ip' => "udp://@[ff7e:a40:2a02:ed02:ffff::18]:2018", +			'source' => "Tech", +			'title' => "Webcam NOC Fisheye (HD)" +		}, +		'noc-fisheye-transcode' => { +			'type' => 'camera', +			'location' => 1, +			'quality' => 'hd', +			'priority' => 131, +			'port' => 19, +			'has_multicast' => 1, +			'interlaced' => 0, +			'multicast_ip' => "udp://@[ff7e:a40:2a02:ed02:ffff::19]:2019", +			'source' => "Tech", +			'title' => "Webcam NOC Fisheye (HD transcoded)" +		}, + + +		'south-still' => { +			'location' => 3, +			'type' => 'camera', +			'quality' => 'hd', +			'priority' => 110, +			'external' => 1, +			'url' => 'http://stillcam.tg13.gathering.org/', +			'title' => 'Webcam South (Image)', +			'source' => 'Tech' +		}, + + +			); + + +1; diff --git a/web/tech.gathering.org/event-720p.mp4.pl b/web/tech.gathering.org/event-720p.mp4.pl new file mode 100755 index 0000000..631e40d --- /dev/null +++ b/web/tech.gathering.org/event-720p.mp4.pl @@ -0,0 +1,11 @@ +#!/usr/bin/env +use strict; +use warnings; +use Capture::Tiny ':all'; + +$! = 1; +print "Content-Type: video/mp4\n\n"; + +my ($stdout, $stderr) = tee { +	system('wget', '-qO-', 'http://stream.tg13.gathering.org:3013'); +}; diff --git a/web/tech.gathering.org/index.html b/web/tech.gathering.org/index.html new file mode 100644 index 0000000..9a5b0ad --- /dev/null +++ b/web/tech.gathering.org/index.html @@ -0,0 +1,20 @@ +<html> +<head> +<title>Tech resources - The Gathering 2013</title> +<link rel="stylesheet" type="text/css" href="/styles.css" media="all"> +</head> +<body> + +<h1>Tech resources - The Gathering 2013</h1> + +<img id="logo" src="logo.png" alt="The Gathering 2013" /> + +<h2><a href="http://stats.tg13.gathering.org">stats.tg13.gathering.org (weathermap)</a></h2> +<h2><a href="http://nms-public.tg13.gathering.org">nms-public.tg13.gathering.org</a></h2> +<h2><a href="http://stream.tg13.gathering.org">stream.tg13.gathering.org</a></h2> + +<h2><a href="http://techserver.gathering.org/ircrules">IRC rules for #tg@EFnet</a></h2> + +<p>Enjoy :-)</p> +</body> +</html> diff --git a/web/tech.gathering.org/logo.png b/web/tech.gathering.org/logo.png Binary files differnew file mode 100644 index 0000000..3a13cdf --- /dev/null +++ b/web/tech.gathering.org/logo.png diff --git a/web/tech.gathering.org/styles.css b/web/tech.gathering.org/styles.css new file mode 100644 index 0000000..e690989 --- /dev/null +++ b/web/tech.gathering.org/styles.css @@ -0,0 +1,24 @@ +* { font-family: 'Open Sans', sans-serif; + +} + +body { +	background:  #fff; color: #000; opacity: 1; +} + +#logo { background: url('logo.png'); width: 237px; height: 200px;position:absolute; top: 0; right: 0;z-index: -1} + +@media screen and (max-width: 1145px) { /* Min iPad size*/ +	#spaceship { +		background: #fff; +	} +} + +/* #innhold { position: absolute; left:0px ; top: 50px; margin: 0 50px 0 50px;  z-index: 9;  width: 520px; }*/ +#innhold { width: 480px; } +footer { clear: both; width:480px; } +a { color: #000; } +h4 { margin: 0;  margin-top: 35px;} +p { margin: 0; padding: 0; } +li { margin-bottom: 14px; } +  | 
