[Gd-chatter] r11637 - in trunk/libraries: layer packetizer protocols
hannes at gwydiondylan.org
hannes at gwydiondylan.org
Fri Jan 18 14:55:11 CET 2008
Author: hannes
Date: Fri Jan 18 14:55:10 2008
New Revision: 11637
Modified:
trunk/libraries/layer/dhcp.dylan
trunk/libraries/packetizer/protocol-definer-macro.dylan
trunk/libraries/protocols/protocols-library.dylan
Log:
Job: 7299
dhcp does work again...
Modified: trunk/libraries/layer/dhcp.dylan
==============================================================================
--- trunk/libraries/layer/dhcp.dylan (original)
+++ trunk/libraries/layer/dhcp.dylan Fri Jan 18 14:55:10 2008
@@ -9,6 +9,10 @@
node :: <dhcp-client>,
frame :: <dhcp-message>)
let message-type-frame = find-option(frame, <dhcp-message-type-option>);
+ //format-out("Received dhcp message %= %= %=\n",
+ // node.state,
+ // frame.operation,
+ // message-type-frame.message-type);
if (instance?(node.state, <selecting>))
if (frame.operation == #"bootreply")
if (message-type-frame.message-type == #"dhcpoffer")
@@ -49,7 +53,8 @@
transaction-id: state.xid,
client-hardware-address: $hardware-address,
dhcp-options: list(make(<dhcp-message-type-option>,
- message-type: #"dhcpdiscover")));
+ message-type: #"dhcpdiscover"),
+ make(<dhcp-end-option>)));
send(state.send-socket, $broadcast-address, packet);
end;
@@ -70,12 +75,14 @@
new-state :: <requesting>) => ()
// if (matches-requirements?(state.offer))
let server-option = find-option(state.offer, <dhcp-server-identifier-option>);
+ //XXX: somehow the #"dhcprequest" doesn't work here :/
let options = list(make(<dhcp-message-type-option>,
- message-type: #"dhcprequest"),
+ message-type: 3), //#"dhcprequest"),
make(<dhcp-requested-ip-address-option>,
requested-ip: state.offer.your-ip-address),
make(<dhcp-server-identifier-option>,
- selected-server: server-option.selected-server));
+ selected-server: server-option.selected-server),
+ make(<dhcp-end-option>));
let packet = make(<dhcp-message>,
transaction-id: state.xid,
client-hardware-address: $hardware-address,
@@ -86,7 +93,7 @@
define method main()
- let eth = build-ethernet-layer("Intel", promiscuous?: #t);
+ let eth = build-ethernet-layer("eth0", promiscuous?: #t);
let ip-layer = build-ip-layer(eth);
let udp = make(<udp-layer>, ip-layer: ip-layer);
let socket = create-socket(udp, 67, client-port: 68);
Modified: trunk/libraries/packetizer/protocol-definer-macro.dylan
==============================================================================
--- trunk/libraries/packetizer/protocol-definer-macro.dylan (original)
+++ trunk/libraries/packetizer/protocol-definer-macro.dylan Fri Jan 18 14:55:10 2008
@@ -32,8 +32,10 @@
end;
-define inline function filter-enums!(key/value-pairs :: <collection>,
- fields :: <collection>)
+define inline function filter-enums
+ (key/value-pairs :: <collection>, fields :: <collection>)
+ => (args :: <collection>)
+ let args = copy-sequence(key/value-pairs);
for (ele in fields)
if (instance?(ele, <enum-field>))
let (key, pos)
@@ -45,10 +47,13 @@
end;
end;
if (key & instance?(key, <symbol>))
- key/value-pairs[pos] := enum-field-symbol-to-int(ele, key);
+ //format-out("changed %= from %= to %=\n", ele.field-name, key, enum-field-symbol-to-int(ele, key));
+ args[pos] := enum-field-symbol-to-int(ele, key);
end;
end;
end;
+ //format-out("returning from filter-enum1\n");
+ args;
end;
@@ -114,9 +119,10 @@
static-end(last("$" ## ?name ## "-fields"));
end;
end;
- define method make (class == ?name, #rest rest, #key, #all-keys) => (res :: ?name)
- filter-enums!(rest, "$" ## ?name ## "-fields");
- let frame = apply(make, decoded-class(?name), rest);
+ define method make (class == ?name,
+ #rest rest, #key, #all-keys) => (res :: ?name)
+ let args = filter-enums(rest, "$" ## ?name ## "-fields");
+ let frame = apply(make, decoded-class(?name), args);
for (field in fields(frame))
if (field.getter(frame) = #f)
field.setter(field.init-value, frame);
Modified: trunk/libraries/protocols/protocols-library.dylan
==============================================================================
--- trunk/libraries/protocols/protocols-library.dylan (original)
+++ trunk/libraries/protocols/protocols-library.dylan Fri Jan 18 14:55:10 2008
@@ -319,6 +319,7 @@
<dhcp-server-identifier-option>,
<dhcp-subnet-mask>,
<dhcp-router-option>,
+ <dhcp-end-option>,
subnet-mask,
addresses,
message-type,
More information about the chatter
mailing list