[Gd-chatter] r11391 - trunk/libraries/interfaces
andreas at gwydiondylan.org
andreas at gwydiondylan.org
Wed Jun 6 01:23:38 CEST 2007
Author: andreas
Date: Wed Jun 6 01:23:37 2007
New Revision: 11391
Modified:
trunk/libraries/interfaces/interfaces.dylan
trunk/libraries/interfaces/module.dylan
Log:
Job: 7299
add find-all-devices method
Modified: trunk/libraries/interfaces/interfaces.dylan
==============================================================================
--- trunk/libraries/interfaces/interfaces.dylan (original)
+++ trunk/libraries/interfaces/interfaces.dylan Wed Jun 6 01:23:37 2007
@@ -45,6 +45,10 @@
end if;
end method initialize;
+define method int-close (int :: <interface>)
+ close(int.unix-file-descriptor);
+end;
+
define method up (interface :: <interface>)
=> ()
with-stack-structure (ifreq :: <ifreq*>)
@@ -64,6 +68,25 @@
end with-stack-structure;
end method;
+define method find-all-devices () => (res :: <collection>)
+ let packet-socket = socket($PF-PACKET, $SOCK-RAW, htons($ETH-P-ALL));
+ let res = make(<stretchy-vector>);
+ with-stack-structure (ifreq :: <ifreq*>)
+ for (i from 0 below 256)
+ ifreq.ifr-ifindex := i;
+ if (ioctl(packet-socket, $SIOCGIFNAME, ifreq) >= 0)
+ add!(res, ifreq.ifr-name);
+ end;
+ end;
+ end;
+ close(packet-socket);
+ res;
+end;
+
+define method device-name (a :: <string>) => (res :: <string>)
+ a;
+end;
+
define method receive (interface :: <interface>)
=> (buffer)
let buffer = make(<buffer>, size: $ethernet-buffer-size);
@@ -105,6 +128,7 @@
define class <ethernet-interface> (<filter>)
slot unix-interface :: <interface>;
slot interface-name :: <string>, required-init-keyword: name:;
+ slot running? :: <boolean> = #t;
end;
define method initialize (node :: <ethernet-interface>,
@@ -120,9 +144,10 @@
end;
define method toplevel (node :: <ethernet-interface>)
- while(#t)
+ while(node.running?)
let packet = receive(node.unix-interface);
let frame = parse-frame(<ethernet-frame>, packet);
push-data(node.the-output, frame);
end while;
+ int-close(node.unix-interface);
end;
Modified: trunk/libraries/interfaces/module.dylan
==============================================================================
--- trunk/libraries/interfaces/module.dylan (original)
+++ trunk/libraries/interfaces/module.dylan Wed Jun 6 01:23:37 2007
@@ -20,5 +20,6 @@
use packetizer, import: { parse-frame, assemble-frame, packet };
use ethernet, import: { <ethernet-frame> };
- export <ethernet-interface>, interface-name;
+ export <ethernet-interface>, interface-name, find-all-devices, device-name,
+ running?, running?-setter;
end module interfaces;
More information about the chatter
mailing list