git-svn-id: https://spexeah.com:8443/svn/Asuro@692 6dbc8c32-bb84-406f-8558-d1cf31a0ab0c
This commit is contained in:
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -116,6 +116,7 @@ type
|
||||
|
||||
const
|
||||
BROADCAST_MAC : Array[0..5] of uint8 = ($FF, $FF, $FF, $FF, $FF, $FF);
|
||||
NULL_MAC : Array[0..5] of uint8 = ($00, $00, $00, $00, $00, $00);
|
||||
|
||||
implementation
|
||||
|
||||
|
||||
@@ -3,10 +3,12 @@ unit netutils;
|
||||
interface
|
||||
|
||||
uses
|
||||
tracer, util, nettypes, console, lmemorymanager;
|
||||
tracer, util, nettypes, console, lmemorymanager, lists, strings;
|
||||
|
||||
procedure copyMAC(src : puint8; dst : puint8);
|
||||
procedure copyIPv4(src : puint8; dst : puint8);
|
||||
function stringToMAC(str : pchar) : puint8;
|
||||
function stringToIPv4(str : pchar) : puint8;
|
||||
procedure writeMACAddress(mac : puint8; WND : HWND);
|
||||
procedure writeIPv4Address(ip : puint8; WND : HWND);
|
||||
function MACEqual(mac1 : puint8; mac2 : puint8) : boolean;
|
||||
@@ -16,6 +18,36 @@ procedure freePacketContext(p_context : PPacketContext);
|
||||
|
||||
implementation
|
||||
|
||||
function stringToMAC(str : pchar) : puint8;
|
||||
var
|
||||
Mac_Delim : PLinkedListBase;
|
||||
i : uint32;
|
||||
|
||||
begin
|
||||
stringToMac:= puint8(kalloc(6));
|
||||
Mac_Delim:= STRLL_FromString(str, ':');
|
||||
if STRLL_Size(Mac_Delim) >= 6 then begin
|
||||
for i:=0 to 5 do begin
|
||||
stringToMAC[i]:= stringToInt(STRLL_Get(Mac_Delim, i));
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
function stringToIPv4(str : pchar) : puint8;
|
||||
var
|
||||
IP_Delim : PLinkedListBase;
|
||||
i : uint32;
|
||||
|
||||
begin
|
||||
stringToIPv4:= puint8(kalloc(6));
|
||||
IP_Delim:= STRLL_FromString(str, '.');
|
||||
if STRLL_Size(IP_Delim) >= 4 then begin
|
||||
for i:=0 to 3 do begin
|
||||
stringToIPv4[i]:= stringToInt(STRLL_Get(IP_Delim, i));
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
function IPEqual(ip1 : puint8; ip2 : puint8) : boolean;
|
||||
var
|
||||
i : uint8;
|
||||
|
||||
@@ -16,6 +16,9 @@ procedure register;
|
||||
|
||||
implementation
|
||||
|
||||
uses
|
||||
arp;
|
||||
|
||||
var
|
||||
Registered : Boolean = false;
|
||||
EthTypes : Array[0..65535] of TRecvCallback;
|
||||
@@ -59,28 +62,17 @@ var
|
||||
begin
|
||||
push_trace('eth2.recv');
|
||||
writeToLogLn(' L2: eth2.recv');
|
||||
//console.outputln('net.eth2', 'RECV.');
|
||||
buf:= puint8(p_data);
|
||||
|
||||
Header:= PEthernetHeader(buf);
|
||||
|
||||
//console.output('net.eth2', 'DEST: ');
|
||||
//writeMACAddress(@Header^.dst[0]);
|
||||
//console.output('net.eth2', 'SRC: ');
|
||||
//writeMACAddress(@Header^.src[0]);
|
||||
|
||||
proto_type:= Header^.EthTypeHi SHL 8;
|
||||
proto_type:= proto_type + Header^.EthTypeLo;
|
||||
//console.output('net.eth2', 'PROTO: ');
|
||||
//console.writehexln(proto_type);
|
||||
|
||||
buf:= buf + 14;
|
||||
|
||||
copyMAC(@Header^.src[0], @p_context^.MAC.Source[0]);
|
||||
copyMAC(@Header^.dst[0], @p_context^.MAC.Destination[0]);
|
||||
|
||||
if MACEqual(@Header^.dst[0], @Header^.src[0]) or MACEqual(@Header^.dst[0], @BROADCAST_MAC[0]) then begin
|
||||
//console.outputln('net.eth2', 'MAC HIT');
|
||||
if EthTypes[proto_type] <> nil then begin
|
||||
EthTypes[proto_type](void(buf), p_len - 14, p_context);
|
||||
end;
|
||||
|
||||
@@ -17,8 +17,9 @@ type
|
||||
end;
|
||||
|
||||
procedure register;
|
||||
function IPv4ToMAC(ip : puint8) : puint8;
|
||||
function MACToIIPv4(mac : puint8) : puint8;
|
||||
function IPv4ToMAC(ip : puint8) : puint8;
|
||||
function MACToIIPv4(mac : puint8) : puint8;
|
||||
procedure send(hType : uint16; pType : uint16; op : uint16; p_context : PPacketContext);
|
||||
|
||||
implementation
|
||||
|
||||
@@ -97,6 +98,9 @@ begin
|
||||
copyIPv4(@p_context^.IP.Source[0], @hdr^.Source_Protocol[0]);
|
||||
copyMAC(@p_context^.MAC.Destination[0], @hdr^.Destination_Hardware[0]);
|
||||
copyIPv4(@p_context^.IP.Destination[0], @hdr^.Destination_Protocol[0]);
|
||||
if MACEqual(@p_context^.MAC.Destination[0], @NULL_MAC[0]) then begin
|
||||
CopyMAC(@BROADCAST_MAC[0], @p_context^.MAC.Destination[0]);
|
||||
end;
|
||||
eth2.send(buf, sizeof(TARPHeader), p_context);
|
||||
end;
|
||||
kfree(buf);
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user