[chatter] r11799 - in trunk/libraries: gui-sniffer network/ip-stack/layers/media-access/ethernet network/ip-stack/layers/network/arp

hannes at mccarthy.opendylan.org hannes at mccarthy.opendylan.org
Fri May 9 00:49:50 CEST 2008


Author: hannes
Date: Fri May  9 00:49:48 2008
New Revision: 11799

Modified:
   trunk/libraries/gui-sniffer/gui-sniffer.dylan
   trunk/libraries/gui-sniffer/layer-commands.dylan
   trunk/libraries/gui-sniffer/module.dylan
   trunk/libraries/network/ip-stack/layers/media-access/ethernet/ethernet.dylan
   trunk/libraries/network/ip-stack/layers/network/arp/arp.dylan
Log:
Job: 7299
some more bugfixes for ARP, but it does not yet receive packets


Modified: trunk/libraries/gui-sniffer/gui-sniffer.dylan
==============================================================================
--- trunk/libraries/gui-sniffer/gui-sniffer.dylan	(original)
+++ trunk/libraries/gui-sniffer/gui-sniffer.dylan	Fri May  9 00:49:48 2008
@@ -401,7 +401,7 @@
   start-dialog(make(<about-box>))
 end;
 
-define variable *debugging?* = #t;
+define variable *debugging?* = #f;
 
 define method safe(func :: <function>)
   method(#rest args)

Modified: trunk/libraries/gui-sniffer/layer-commands.dylan
==============================================================================
--- trunk/libraries/gui-sniffer/layer-commands.dylan	(original)
+++ trunk/libraries/gui-sniffer/layer-commands.dylan	Fri May  9 00:49:48 2008
@@ -181,6 +181,51 @@
   set-property-value(layer, #"administrative-state", #"down");
 end;
 
+define class <resolve-arp-command> (<basic-command>)
+  constant slot %layer :: <layer>, required-init-keyword: layer:;
+  constant slot %ip :: <ipv4-address>, required-init-keyword: ip:;
+end;
+
+define command-line resolve-arp => <resolve-arp-command>
+  (summary: "Resolve ARP.",
+   documentation: "Resolve IP address.")
+  argument layer :: <layer> = "Layer";
+  argument ip :: <ipv4-address> = "IP";
+end;
+
+define method do-execute-command (context :: <nnv-context>,
+				  command :: <resolve-arp-command>)
+  let layer = command.%layer;
+  let out = context.context-server.server-output-stream;
+  arp-resolve(layer, command.%ip,
+	      method(x)
+		  format(out,
+			 "ARP: IP %= is at %=\n",
+			 command.%ip, x);
+	      end);
+end;
+
+/*
+define class <advertise-arp-command> (<basic-command>)
+  constant slot %layer :: <layer>, required-init-keyword: layer:;
+  constant slot %ip :: <ipv4-address>, required-init-keyword: ip:;
+  constant slot %mac :: <mac-address>, required-init-keyword: mac:;
+end;
+
+define command-line advertise-arp => <advertise-arp-command>
+  (summary: "Advertise given ARP entry.",
+   documentation: "Advertise MAC address on the specific layer with the specified IP address.")
+  argument layer :: <layer> = "Layer";
+  argument ip :: <ipv4-address> = "IP";
+  argument mac :: <mac-address> = "MAC";
+end;
+
+define method do-execute-command (context :: <nnv-context>, command :: <down-command>)
+  let layer = command.%layer;
+  layer.
+end;
+*/
+ 
 define command-group layer
     (summary: "Layer commands",
      documentation: "The set of commands for managing the layers.")
@@ -193,5 +238,6 @@
   command create;
   command up;
   command down;
+  command resolve-arp;
 end command-group;
 

Modified: trunk/libraries/gui-sniffer/module.dylan
==============================================================================
--- trunk/libraries/gui-sniffer/module.dylan	(original)
+++ trunk/libraries/gui-sniffer/module.dylan	Fri May  9 00:49:48 2008
@@ -36,6 +36,8 @@
   use commands;
   use command-lines;
   use format;
+  use arp, import: { arp-resolve };
+  use ipv4, import: { <ipv4-address> };
 
   export $layer-command-group;
 end;

Modified: trunk/libraries/network/ip-stack/layers/media-access/ethernet/ethernet.dylan
==============================================================================
--- trunk/libraries/network/ip-stack/layers/media-access/ethernet/ethernet.dylan	(original)
+++ trunk/libraries/network/ip-stack/layers/media-access/ethernet/ethernet.dylan	Fri May  9 00:49:48 2008
@@ -53,6 +53,10 @@
   send(socket, frame);
 end;
 
+define method send (socket :: <ethernet-socket>, data)
+  push-data-aux(socket.completer.the-input, socket.completer, data)
+end;
+
 define method check-upper-layer? (lower :: <ethernet-layer>, upper :: <layer>) => (allowed? :: <boolean>);
   #t;
 end;

Modified: trunk/libraries/network/ip-stack/layers/network/arp/arp.dylan
==============================================================================
--- trunk/libraries/network/ip-stack/layers/network/arp/arp.dylan	(original)
+++ trunk/libraries/network/ip-stack/layers/network/arp/arp.dylan	Fri May  9 00:49:48 2008
@@ -9,7 +9,6 @@
   slot send-socket :: <socket>;
 end;
 
-
 define layer arp (<layer>)
   system property running-state :: <symbol> = #"down";
   slot arp-flow-node :: <arp-handler> = make(<arp-handler>);
@@ -27,7 +26,11 @@
 define method register-lower-layer (upper :: <arp-layer>, lower :: <layer>)
   let socket = create-socket(lower, filter-string: "arp");
   upper.arp-flow-node.send-socket := socket;
-  connect(socket, upper.arp-flow-node);
+  connect(socket.socket-output, upper.arp-flow-node.the-input);
+  upper.arp-flow-node.arp-table[ipv4-address("23.23.23.23")]
+    := make(<advertised-arp-entry>,
+	    mac-address: lower. at mac-address,
+	    ip-address: ipv4-address("23.23.23.23"));
   upper. at running-state := #"up";
 end;
 
@@ -68,6 +71,7 @@
                                source-ip-address: from-ip,
                                target-ip-address: destination,
                                target-mac-address: mac-address("00:00:00:00:00:00"));
+	format-out
         sendto(arp-handler.send-socket, $broadcast-ethernet-address, arp-request);
         let outstanding-request = make(<outstanding-arp-request>,
                                        handler: arp-handler,
@@ -146,6 +150,7 @@
 define method push-data-aux (input :: <push-input>,
                              node :: <arp-handler>,
                              frame :: <container-frame>)
+  format-out("received arp frame %=\n", frame);
   if (frame.operation = #"arp-request"
       & frame.target-mac-address = mac-address("00:00:00:00:00:00"))
     let arp-entry = element(node.arp-table, frame.target-ip-address, default: #f);
@@ -214,3 +219,5 @@
     sendto(arp-handler.send-socket, $broadcast-ethernet-address, arp-frame);
   end;
 end;
+
+


More information about the chatter mailing list