[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