[Gd-chatter] r11080 - trunk/libraries/network/koala/sources/examples/buddha

hannes at gwydiondylan.org hannes at gwydiondylan.org
Wed Dec 20 03:33:26 CET 2006


Author: hannes
Date: Wed Dec 20 03:33:22 2006
New Revision: 11080

Modified:
   trunk/libraries/network/koala/sources/examples/buddha/buddha.dylan
   trunk/libraries/network/koala/sources/examples/buddha/config.dylan
   trunk/libraries/network/koala/sources/examples/buddha/ipv6.dylan
   trunk/libraries/network/koala/sources/examples/buddha/subnet.dylan
   trunk/libraries/network/koala/sources/examples/buddha/zone.dylan
Log:
Bug: 7257
*add dhcp? option to add subnet
*print tinydns file more correct (v6-address & NS for reverse SOA)
*generate dhcp-start more safe (doesn't work with /31 and /32...) (/31 is not used, /32 doesn't work on other places with buddha)

Modified: trunk/libraries/network/koala/sources/examples/buddha/buddha.dylan
==============================================================================
--- trunk/libraries/network/koala/sources/examples/buddha/buddha.dylan	(original)
+++ trunk/libraries/network/koala/sources/examples/buddha/buddha.dylan	Wed Dec 20 03:33:22 2006
@@ -322,6 +322,18 @@
                 do(add-form(real-type,
                             #f,
                             parent-object,
+                            xml: if (real-type = <subnet>)
+                                   with-xml()   
+                                     div { text("enable dhcp"),   
+                                           input(type => "checkbox",   
+                                                 name => "dhcp?",   
+                                                 value => "dhcp?",
+                                                 checked => "checked")   
+                                        }   
+                                  end  
+                                else   
+                                  #f   
+                                end, 
                             fill-from-request: errors))
               }
             end);

Modified: trunk/libraries/network/koala/sources/examples/buddha/config.dylan
==============================================================================
--- trunk/libraries/network/koala/sources/examples/buddha/config.dylan	(original)
+++ trunk/libraries/network/koala/sources/examples/buddha/config.dylan	Wed Dec 20 03:33:22 2006
@@ -180,6 +180,7 @@
 define method check (subnet :: <ipv4-subnet>, #next next-method, #key test-result = 0)
  => (res :: <boolean>)
   next-method();
+  subnet.dhcp? := if (get-query-value("dhcp?")) #t else #f end;
   if (subnet.dhcp-start > subnet.dhcp-end)
     signal(make(<web-error>,
                 error: "DHCP start greater than DHCP end"));

Modified: trunk/libraries/network/koala/sources/examples/buddha/ipv6.dylan
==============================================================================
--- trunk/libraries/network/koala/sources/examples/buddha/ipv6.dylan	(original)
+++ trunk/libraries/network/koala/sources/examples/buddha/ipv6.dylan	Wed Dec 20 03:33:22 2006
@@ -72,9 +72,13 @@
 end;
 
 define method as-dns-string (ip :: <ipv6-address>) => (res)
-  let res = as(<string>, ip);
-  if (res ~= "no v6 address assigned")
-    apply(concatenate, split(res, ':'));
+  format-out("ip %=\n", ip.data);
+  if (ip ~= $bottom-v6-address)
+    let strings = make(<list>);
+    for (i from 0 below 16)
+      strings := add!(strings, integer-to-string(ip.data[i], base: 16, size: 2));
+    end;
+    reduce1(concatenate, reverse(strings));
   end;
 end;
 define method as (class == <string>, ip :: <ipv6-address>) => (res :: <string>)

Modified: trunk/libraries/network/koala/sources/examples/buddha/subnet.dylan
==============================================================================
--- trunk/libraries/network/koala/sources/examples/buddha/subnet.dylan	(original)
+++ trunk/libraries/network/koala/sources/examples/buddha/subnet.dylan	Wed Dec 20 03:33:22 2006
@@ -45,11 +45,20 @@
 end;
 
 define web-class <ipv4-subnet> (<subnet>, <ipv4-network>)
-  data dhcp-start :: <ipv4-address>, base-network-address(object.cidr) + 21;
+  data dhcp-start :: <ipv4-address>, get-reasonable-dhcp-start(object);
   data dhcp-end :: <ipv4-address>, broadcast-address(object.cidr) - 1;
   data dhcp-router :: <ipv4-address>, base-network-address(object.cidr) + 1;
 end;
 
+define function get-reasonable-dhcp-start (object :: <ipv4-subnet>)
+  if (object.cidr.cidr-netmask < 26)  
+    base-network-address(object.cidr) + 21;
+  elseif (object.cidr.cidr-netmask < 30)
+    base-network-address(object.cidr) + 3;
+  elseif (object.cidr.cidr-netmask = 30)
+    base-network-address(object.cidr) + 1;
+  end;
+end;
 define method storage (class == <ipv4-subnet>) => (res)
   choose(rcurry(instance?, <ipv4-subnet>), storage(<subnet>));
 end;

Modified: trunk/libraries/network/koala/sources/examples/buddha/zone.dylan
==============================================================================
--- trunk/libraries/network/koala/sources/examples/buddha/zone.dylan	(original)
+++ trunk/libraries/network/koala/sources/examples/buddha/zone.dylan	Wed Dec 20 03:33:22 2006
@@ -147,6 +147,9 @@
   do(method(x)
        format(stream, "Z%s:%s.:%s.\n",
               x, print-zone.nameservers[0].ns-name, print-zone.hostmaster);
+       do(method(y)
+            format(stream, "&%s::%s.\n", x, y.ns-name)
+          end, print-zone.nameservers);
      end, apply(concatenate, map(get-reverse-cidrs, storage(<network>))));
   //nameserver
   do(method(x)



More information about the chatter mailing list