Skip to content

Commit

Permalink
use byte-storage-address instead of buffer-offset; remove the 20 diff…
Browse files Browse the repository at this point in the history
…erent versions in the codebase
  • Loading branch information
hannesm committed Dec 20, 2013
1 parent a90a98d commit 1cdcf02
Show file tree
Hide file tree
Showing 10 changed files with 16 additions and 68 deletions.
2 changes: 1 addition & 1 deletion network-flow/network-flow.dylan
Original file line number Diff line number Diff line change
Expand Up @@ -278,7 +278,7 @@ define method push-data-aux (input :: <push-input>,
frame :: <frame>)
block()
push-data(node.the-output, frame);
exception (e :: <malformed-packet-error>)
exception (e :: <malformed-data-error>)
unless (node.pcap-writer)
node.pcap-writer := make(<pcap-file-writer>, stream: node.file-stream);
end;
Expand Down
4 changes: 2 additions & 2 deletions network-interfaces/pcap-unix.dylan
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ license: see license.txt in this distribution
define method find-all-devices () => (res :: <collection>)
let res = make(<stretchy-vector>);
let errbuf = make(<byte-vector>);
let (errorcode, devices) = pcap-find-all-devices(buffer-offset(errbuf, 0));
let (errorcode, devices) = pcap-find-all-devices(byte-storage-address(errbuf));
for (device = devices then device.next,
while: device ~= null-pointer(<pcap-if*>))
add!(res, make(<device>, name: as(<byte-string>, device.name)))
Expand All @@ -23,7 +23,7 @@ define method initialize
$ethernet-buffer-size,
if (interface.promiscuous?) 1 else 0 end,
$timeout,
buffer-offset(errbuf, 0));
byte-storage-address(errbuf));
if (res ~= null-pointer(<C-void*>))
interface.pcap-t := res;
end;
Expand Down
6 changes: 3 additions & 3 deletions network-interfaces/pcap-win32.dylan
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ license: see license.txt in this distribution
define method find-all-devices () => (res :: <collection>)
let res = make(<stretchy-vector>);
let errbuf = make(<byte-vector>);
let (errorcode, devices) = pcap-find-all-devices(buffer-offset(errbuf, 0));
let (errorcode, devices) = pcap-find-all-devices(byte-storage-address(errbuf));
for (device = devices then device.next, while: device ~= null-pointer(<pcap-if*>))
let cidrs = make(<stretchy-vector>);
for (ele = device.addresses then ele.next, while: ele ~= null-pointer(<pcap-addr*>))
Expand Down Expand Up @@ -65,7 +65,7 @@ define method initialize
$ethernet-buffer-size,
if (interface.promiscuous?) 1 else 0 end,
$timeout,
buffer-offset(errbuf, 0));
byte-storage-address(errbuf));
if (res ~= null-pointer(<C-void*>))
interface.pcap-t := res;
// format-out("Opened Interface %s\n", name);
Expand All @@ -75,7 +75,7 @@ define method initialize
//open-interface(interface.interface-name);

// format-out("trying pcap-find-alldevices\n");
let (errorcode, devices) = pcap-find-all-devices(buffer-offset(errbuf, 0));
let (errorcode, devices) = pcap-find-all-devices(byte-storage-address(errbuf));
// format-out("errcode %=\n", errorcode);
for (device = devices then device.next, while: device ~= null-pointer(<pcap-if*>))
// format-out("device %s %s\n", device.name, device.description);
Expand Down
16 changes: 1 addition & 15 deletions network-interfaces/pcap.dylan
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,6 @@ copyright: 2005-2011 Andreas Bogk and Hannes Mehnert. All rights reserved.
license: see license.txt in this distribution

/*
define simple-C-mapped-subtype <C-buffer-offset> (<C-char*>)
export-map <machine-word>, export-function: identity;
end;
*/
define method pcap-receive-callback
(interface, packet :: <pcap-packet-header*>, bytes)
let real-interface = import-c-dylan-object(interface);
Expand Down Expand Up @@ -120,15 +115,6 @@ define C-function pcap-find-all-devices
c-name: "pcap_findalldevs";
end;

define function buffer-offset
(the-buffer :: <byte-vector>, data-offset :: <integer>)
=> (result-offset :: <machine-word>)
u%+(data-offset,
primitive-wrap-machine-word
(primitive-repeated-slot-as-raw
(the-buffer, primitive-repeated-slot-offset(the-buffer))))
end function;

define C-function pcap-inject
parameter pcap-t :: <C-void*>;
parameter buffer :: <C-buffer-offset>;
Expand All @@ -147,7 +133,7 @@ define method push-data-aux (input :: <push-input>,
node :: <ethernet-interface>,
frame :: <frame>)
let buffer = as(<byte-vector>, assemble-frame(frame).packet);
pcap-inject(node.pcap-t, buffer-offset(buffer, 0), buffer.size);
pcap-inject(node.pcap-t, byte-storage-address(buffer), buffer.size);
end;

define method toplevel (interface :: <ethernet-interface>)
Expand Down
14 changes: 2 additions & 12 deletions network-interfaces/raw-interface.dylan
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ define method receive (interface :: <interface>)
let fd = interface.unix-file-descriptor;
let read-bytes =
interruptible-system-call(unix-recv-buffer-from(fd,
buffer-offset(buffer, 0),
byte-storage-address(buffer),
$ethernet-buffer-size,
0,
sockaddr,
Expand All @@ -118,21 +118,11 @@ end method receive;

define method send (interface :: <interface>, buffer :: <buffer>)
unix-send-buffer(interface.unix-file-descriptor,
buffer-offset(buffer, 0),
byte-storage-address(buffer),
buffer.size,
0);
end method send;

define function buffer-offset
(the-buffer :: <buffer>, data-offset :: <integer>)
=> (result-offset :: <machine-word>)
u%+(data-offset,
primitive-wrap-machine-word
(primitive-repeated-slot-as-raw
(the-buffer, primitive-repeated-slot-offset(the-buffer))))
end function;


define class <ethernet-interface> (<filter>)
slot unix-interface :: <interface>;
slot interface-name :: <string>, required-init-keyword: name:;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ define method push-data-aux (input :: <push-input>,
frame :: <ethernet-frame>)
let buffer = as(<byte-vector>, assemble-frame(frame).packet);
unix-send-buffer(node.unix-file-descriptor,
buffer-offset(buffer, 0),
byte-storage-address(buffer),
buffer.size,
0);
end;
Expand Down Expand Up @@ -172,7 +172,7 @@ define method receive (interface :: <packet-flow-node>)
let fd = interface.unix-file-descriptor;
let read-bytes =
interruptible-system-call(unix-recv-buffer-from(fd,
buffer-offset(buffer, 0),
byte-storage-address(buffer),
$ethernet-buffer-size,
0,
sockaddr,
Expand All @@ -190,16 +190,6 @@ define method receive (interface :: <packet-flow-node>)
unix-receive();
end method receive;

define function buffer-offset
(the-buffer :: <buffer>, data-offset :: <integer>)
=> (result-offset :: <machine-word>)
u%+(data-offset,
primitive-wrap-machine-word
(primitive-repeated-slot-as-raw
(the-buffer, primitive-repeated-slot-offset(the-buffer))))
end function;


begin
register-startup-function(start-packet);
end;
end;
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ define method push-data-aux (input :: <push-input>,
node :: <pcap-flow-node>,
frame :: <frame>)
let buffer = as(<byte-vector>, assemble-frame!(frame).packet);
pcap-inject(node.pcap-t, buffer-offset(buffer, 0), buffer.size);
pcap-inject(node.pcap-t, byte-storage-address(buffer), buffer.size);
end;

define function run-interface (layer :: <pcap-layer>)
Expand Down Expand Up @@ -170,15 +170,6 @@ define C-function pcap-free-all-devices
c-name: "pcap_freealldevs";
end;

define function buffer-offset
(the-buffer :: <byte-vector>, data-offset :: <integer>)
=> (result-offset :: <machine-word>)
u%+(data-offset,
primitive-wrap-machine-word
(primitive-repeated-slot-as-raw
(the-buffer, primitive-repeated-slot-offset(the-buffer))))
end function;

define C-function pcap-inject
parameter pcap-t :: <C-void*>;
parameter buffer :: <C-buffer-offset>;
Expand Down
2 changes: 1 addition & 1 deletion socket-flow/socket-flow-unix.dylan
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ define method flow-socket-receive (flow-socket :: <flow-socket>)
let fd = flow-socket.unix-file-descriptor;
let read-bytes =
interruptible-system-call(unix-recv-buffer-from(fd,
buffer-offset(buffer, 0),
byte-storage-address(buffer),
512,
0,
sockaddr,
Expand Down
2 changes: 1 addition & 1 deletion socket-flow/socket-flow-win32.dylan
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ define method flow-socket-receive (flow-socket :: <flow-socket>)
let fd = flow-socket.unix-file-descriptor;
let read-bytes =
win32-recv-buffer-from(fd,
buffer-offset(buffer, 0),
byte-storage-address(buffer),
512,
0,
sockaddr,
Expand Down
11 changes: 1 addition & 10 deletions socket-flow/socket-flow.dylan
Original file line number Diff line number Diff line change
Expand Up @@ -25,23 +25,14 @@ define method push-data-aux
sockaddr.sin-addr-value := node.reply-addr;
let data = as(<byte-vector>, assemble-frame(payload).packet);
msendto(node.unix-file-descriptor,
buffer-offset(data, 0),
byte-storage-address(data),
data.size,
0,
sockaddr,
size-of(<sockaddr-in>));
end;
end;

define function buffer-offset
(the-buffer :: <buffer>, data-offset :: <integer>)
=> (result-offset :: <machine-word>)
u%+(data-offset,
primitive-wrap-machine-word
(primitive-repeated-slot-as-raw
(the-buffer, primitive-repeated-slot-offset(the-buffer))))
end function;

define method toplevel (s :: <flow-socket>)
while (s.running?)
let packet = flow-socket-receive(s);
Expand Down

0 comments on commit 1cdcf02

Please sign in to comment.