git-svn-id: https://spexeah.com:8443/svn/Asuro@682 6dbc8c32-bb84-406f-8558-d1cf31a0ab0c
This commit is contained in:
parent
b050773dda
commit
b03ae36a9a
BIN
bin/kernel.bin
BIN
bin/kernel.bin
Binary file not shown.
Binary file not shown.
BIN
lib/arp.ppu
BIN
lib/arp.ppu
Binary file not shown.
BIN
lib/asuro.ppu
BIN
lib/asuro.ppu
Binary file not shown.
BIN
lib/eth2.ppu
BIN
lib/eth2.ppu
Binary file not shown.
BIN
lib/ipv4.ppu
BIN
lib/ipv4.ppu
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
lib/libpsystem.a
BIN
lib/libpsystem.a
Binary file not shown.
BIN
lib/net.ppu
BIN
lib/net.ppu
Binary file not shown.
BIN
lib/shell.ppu
BIN
lib/shell.ppu
Binary file not shown.
BIN
lib/terminal.ppu
BIN
lib/terminal.ppu
Binary file not shown.
@ -3,12 +3,14 @@ unit eth2;
|
|||||||
interface
|
interface
|
||||||
|
|
||||||
uses
|
uses
|
||||||
|
lmemorymanager, util,
|
||||||
tracer,
|
tracer,
|
||||||
nettypes, netutils,
|
nettypes, netutils,
|
||||||
net,
|
net,
|
||||||
netlog,
|
netlog,
|
||||||
console;
|
console;
|
||||||
|
|
||||||
|
procedure send(p_data : void; p_len : uint16; p_context : PPacketContext);
|
||||||
procedure registerType(eType : uint16; RecvCB : TRecvCallback);
|
procedure registerType(eType : uint16; RecvCB : TRecvCallback);
|
||||||
procedure register;
|
procedure register;
|
||||||
|
|
||||||
@ -27,6 +29,27 @@ begin
|
|||||||
pop_trace;
|
pop_trace;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure send(p_data : void; p_len : uint16; p_context : PPacketContext);
|
||||||
|
var
|
||||||
|
buffer : void;
|
||||||
|
hdr : TEthernetHeader;
|
||||||
|
|
||||||
|
begin
|
||||||
|
push_trace('eth2.send');
|
||||||
|
writeToLogLn(' L2: eth2.send');
|
||||||
|
if p_context <> nil then begin
|
||||||
|
buffer:= kalloc(p_len + sizeof(TEthernetHeader));
|
||||||
|
copyMAC(@p_context^.MAC.Source[0], @hdr.src[0]);
|
||||||
|
copyMAC(@p_context^.MAC.Destination[0], @hdr.dst[0]);
|
||||||
|
hdr.EthTypeHi:= 0;
|
||||||
|
hdr.EthTypeLo:= 1;
|
||||||
|
memcpy(uint32(@hdr), uint32(buffer), sizeof(TEthernetHeader));
|
||||||
|
memcpy(uint32(p_data), uint32(buffer+sizeof(TEthernetHeader)), p_len);
|
||||||
|
net.send(buffer, p_len + sizeof(TEthernetHeader));
|
||||||
|
kfree(buffer);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure recv(p_data : void; p_len : uint16; p_context : PPacketContext);
|
procedure recv(p_data : void; p_len : uint16; p_context : PPacketContext);
|
||||||
var
|
var
|
||||||
Header : PEthernetHeader;
|
Header : PEthernetHeader;
|
||||||
|
@ -3,11 +3,11 @@ unit arp;
|
|||||||
interface
|
interface
|
||||||
|
|
||||||
uses
|
uses
|
||||||
tracer,
|
tracer, lmemorymanager,
|
||||||
util, lists, console,
|
util, lists, console,
|
||||||
net, nettypes, netutils,
|
net, nettypes, netutils,
|
||||||
netlog,
|
netlog,
|
||||||
eth2;
|
eth2, ipv4;
|
||||||
|
|
||||||
type
|
type
|
||||||
PARPCacheRecord = ^TARPCacheRecord;
|
PARPCacheRecord = ^TARPCacheRecord;
|
||||||
@ -62,15 +62,57 @@ begin
|
|||||||
pop_trace;
|
pop_trace;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure send(hType : uint16; pType : uint16; op : uint16; p_context : PPacketContext);
|
||||||
|
var
|
||||||
|
buf : void;
|
||||||
|
hdr : PARPHeader;
|
||||||
|
hSize, pSize : uint8;
|
||||||
|
|
||||||
|
begin
|
||||||
|
push_trace('arp.send');
|
||||||
|
writeToLogLn(' L3: arp.send');
|
||||||
|
if p_context <> nil then begin
|
||||||
|
buf:= kalloc(sizeof(TARPHeader));
|
||||||
|
hdr:= PARPHeader(buf);
|
||||||
|
case hType of
|
||||||
|
$1 : hSize:= 6;
|
||||||
|
else hSize:= 0;
|
||||||
|
end;
|
||||||
|
case pType of
|
||||||
|
$8000 : pSize:= 4;
|
||||||
|
else pSize:= 0;
|
||||||
|
end;
|
||||||
|
if (hSize > 0) and (pSize > 0) then begin
|
||||||
|
hdr^.Hardware_Type_Hi:= hType SHR 8;
|
||||||
|
hdr^.Hardware_Type_Lo:= hType AND $FF;
|
||||||
|
hdr^.Protocol_Type_Hi:= pType SHR 8;
|
||||||
|
hdr^.Protocol_Type_Lo:= pType AND $FF;
|
||||||
|
hdr^.Hardware_Address_Length:= hSize;
|
||||||
|
hdr^.Protocol_Address_Length:= pSize;
|
||||||
|
hdr^.Operation_Hi:= op SHR 8;
|
||||||
|
hdr^.Operation_Lo:= op AND $FF;
|
||||||
|
copyMAC(@p_context^.MAC.Source[0], @hdr^.Source_Hardware[0]);
|
||||||
|
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]);
|
||||||
|
eth2.send(buf, sizeof(TARPHeader), p_context);
|
||||||
|
end;
|
||||||
|
kfree(buf);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure recv(p_data : void; p_len : uint16; p_context : PPacketContext);
|
procedure recv(p_data : void; p_len : uint16; p_context : PPacketContext);
|
||||||
var
|
var
|
||||||
Header : PARPHeader;
|
Header : PARPHeader;
|
||||||
AHeader : TARPAbstractHeader;
|
AHeader : TARPAbstractHeader;
|
||||||
CacheElement : PARPCacheRecord;
|
CacheElement : PARPCacheRecord;
|
||||||
|
Merge : boolean;
|
||||||
|
context : PPacketContext;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
push_trace('arp.recv');
|
push_trace('arp.recv');
|
||||||
writeToLogLn(' L3: arp.recv');
|
writeToLogLn(' L3: arp.recv');
|
||||||
|
|
||||||
{ Get our converted Header }
|
{ Get our converted Header }
|
||||||
Header:= PARPHeader(p_data);
|
Header:= PARPHeader(p_data);
|
||||||
AHeader.Hardware_Type:= (Header^.Hardware_Type_Hi SHL 8) + Header^.Hardware_Type_Lo;
|
AHeader.Hardware_Type:= (Header^.Hardware_Type_Hi SHL 8) + Header^.Hardware_Type_Lo;
|
||||||
@ -82,9 +124,31 @@ begin
|
|||||||
copyIPv4(@Header^.Source_Protocol[0], @AHeader.Source_Protocol[0]);
|
copyIPv4(@Header^.Source_Protocol[0], @AHeader.Source_Protocol[0]);
|
||||||
copyMAC(@Header^.Destination_Hardware[0], @AHeader.Destination_Hardware[0]);
|
copyMAC(@Header^.Destination_Hardware[0], @AHeader.Destination_Hardware[0]);
|
||||||
copyIPv4(@Header^.Destination_Protocol[0], @AHeader.Destination_Protocol[0]);
|
copyIPv4(@Header^.Destination_Protocol[0], @AHeader.Destination_Protocol[0]);
|
||||||
|
|
||||||
|
{ Process ARP Packet }
|
||||||
|
Merge:= false;
|
||||||
|
CacheElement:= findCacheRecordByIP(@AHeader.Source_Protocol[0]);
|
||||||
|
if CacheElement <> nil then begin
|
||||||
|
copyMAC(@AHeader.Source_Hardware[0], @CacheElement^.MAC[0]);
|
||||||
|
Merge:= true;
|
||||||
|
end else begin
|
||||||
|
if IPEqual(@AHeader.Destination_Protocol[0], @getIPv4Config^.Address[0]) then begin
|
||||||
|
if not Merge then begin
|
||||||
|
CacheElement:= PARPCacheRecord(LL_Add(Cache));
|
||||||
|
CopyMAC(@AHeader.Source_Hardware[0], @CacheElement^.MAC[0]);
|
||||||
|
copyIPv4(@AHeader.Source_Protocol[0], @CacheElement^.IP[0]);
|
||||||
|
end;
|
||||||
case AHeader.Operation of
|
case AHeader.Operation of
|
||||||
$1:begin { ARP Request }
|
$1:begin { ARP Request }
|
||||||
writeToLogLn(' arp.recv.arp.req');
|
writeToLogLn(' arp.recv.arp.req');
|
||||||
|
context:= newPacketContext;
|
||||||
|
//context^.
|
||||||
|
copyMAC(@AHeader.Source_Hardware[0], @context^.MAC.Destination[0]);
|
||||||
|
copyIPv4(@AHeader.Source_Protocol[0], @context^.IP.Destination[0]);
|
||||||
|
copyMAC(getMAC, @context^.MAC.Source[0]);
|
||||||
|
copyIPv4(@getIPv4Config^.Address[0], @context^.IP.Source[0]);
|
||||||
|
send($1, $8000, $2, context);
|
||||||
|
freePacketContext(context);
|
||||||
end;
|
end;
|
||||||
$2:begin { ARP Reply }
|
$2:begin { ARP Reply }
|
||||||
writeToLogLn(' arp.recv.arp.rep');
|
writeToLogLn(' arp.recv.arp.rep');
|
||||||
@ -111,7 +175,8 @@ begin
|
|||||||
writeToLogLn(' arp.recv.inarp.rep');
|
writeToLogLn(' arp.recv.inarp.rep');
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
pop_trace;
|
end;
|
||||||
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure register;
|
procedure register;
|
||||||
|
@ -10,6 +10,7 @@ uses
|
|||||||
eth2;
|
eth2;
|
||||||
|
|
||||||
procedure registerProtocol(Protocol_ID : uint8; recv_callback : TRecvCallback);
|
procedure registerProtocol(Protocol_ID : uint8; recv_callback : TRecvCallback);
|
||||||
|
function getIPv4Config : PIPv4Configuration;
|
||||||
procedure register;
|
procedure register;
|
||||||
|
|
||||||
implementation
|
implementation
|
||||||
@ -19,6 +20,11 @@ var
|
|||||||
Protocols : Array[0..255] of TRecvCallback;
|
Protocols : Array[0..255] of TRecvCallback;
|
||||||
Config : TIPv4Configuration;
|
Config : TIPv4Configuration;
|
||||||
|
|
||||||
|
function getIPv4Config : PIPv4Configuration;
|
||||||
|
begin
|
||||||
|
getIPv4Config:= @Config;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure recv(p_data : void; p_len : uint16; p_context : PPacketContext);
|
procedure recv(p_data : void; p_len : uint16; p_context : PPacketContext);
|
||||||
var
|
var
|
||||||
Header : PIPV4Header;
|
Header : PIPV4Header;
|
||||||
|
@ -9,14 +9,14 @@ const
|
|||||||
VERSION_SUB = '1';
|
VERSION_SUB = '1';
|
||||||
REVISION = '677';
|
REVISION = '677';
|
||||||
RELEASE = 'ia';
|
RELEASE = 'ia';
|
||||||
LINE_COUNT = 27683;
|
LINE_COUNT = 27777;
|
||||||
FILE_COUNT = 89;
|
FILE_COUNT = 89;
|
||||||
DRIVER_COUNT = 32;
|
DRIVER_COUNT = 32;
|
||||||
FPC_VERSION = '2.6.4';
|
FPC_VERSION = '2.6.4';
|
||||||
NASM_VERSION = '2.10.09';
|
NASM_VERSION = '2.10.09';
|
||||||
MAKE_VERSION = '3.81';
|
MAKE_VERSION = '3.81';
|
||||||
COMPILE_DATE = '10/05/18';
|
COMPILE_DATE = '10/05/18';
|
||||||
COMPILE_TIME = '10:07:09';
|
COMPILE_TIME = '11:33:11';
|
||||||
|
|
||||||
implementation
|
implementation
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user