Classes | |
| struct | IPv4_header | 
| struct | IPv4_FRAGMENT_slot | 
| struct | IPv4_FRAGMENT_entry | 
| This structure will replace the ethernet header in fragmented ip packets.  More... | |
Macros | |
| #define | ipv4_init | 
| --------------------------------------------------------------—; ; ipv4_init: Resets all IPv4 variables ; ; --------------------------------------------------------------—;  More... | |
| #define | ipv4_decrease_fragment_ttls | 
| --------------------------------------------------------------—; ; Decrease TimeToLive of all fragment slots ; ; --------------------------------------------------------------—;  More... | |
| #define | ipv4_checksum(ptr) | 
Functions | |
| void | ipv4_fragment (arg_t buffer) | 
| --------------------------------------------------------------—; ; ipv4_fragment ; ; IN: [esp] = ptr to packet buffer to fragment ; edi = ptrr to ip header in that buffer ; ebx = device ptr ; ; OUT: / ; ; --------------------------------------------------------------—;  More... | |
Variables | |
| rd | IPv4_address | 
| rd | IPv4_subnet | 
| rd | IPv4_nameserver | 
| rd | IPv4_gateway | 
| rd | IPv4_broadcast | 
| rd | IPv4_packets_tx | 
| rd | IPv4_packets_rx | 
| rd | IPv4_packets_dumped | 
| rb | IPv4_fragments | 
| label | ipv4_input | 
| --------------------------------------------------------------—; ; ipv4_input: Check if IPv4 Packet isnt damaged and call ; appropriate handler. (TCP/UDP/ICMP/..) ; We will also re-construct fragmented packets. ; ; IN: Pointer to buffer in [esp] ; pointer to device struct in ebx ; pointer to IPv4 header in edx ; size of IPv4 packet in ecx ; ; OUT: / ; ; --------------------------------------------------------------—;  More... | |
| label | ipv4_find_fragment_slot | 
| --------------------------------------------------------------—; ; ipv4_find_fragment_slot ; ; IN: pointer to fragmented packet in edx ; ; OUT: pointer to slot in esi, -1 on error ; ; --------------------------------------------------------------—;  More... | |
| label | ipv4_output | 
| ---------------------------------------------------------------—; ; ipv4_output ; ; IN: al = protocol ; ah = TTL ; ebx = device ptr (or 0 to let IP layer decide) ; ecx = data length ; edx = Source IP ; edi = Destination IP ; ; OUT: eax = pointer to buffer start ; eax = 0 on error ; ebx = device ptr (send packet through this device) ; ecx = data length ; edx = size of complete frame ; edi = start of IPv4 payload ; ; ---------------------------------------------------------------—;  More... | |
| label | ipv4_output_raw | 
| ---------------------------------------------------------------—; ; ipv4_output_raw ; ; IN: eax = socket ptr ; ecx = data length ; esi = data ptr ; ; OUT: eax = -1 on error ; ; ---------------------------------------------------------------—;  More... | |
| dd | offset | 
| dd | headerlength | 
| dd | headerptr | 
| dd | dataptr | 
| dd | remaining | 
| dd | segmentsize | 
| edi | IPv4_checksum | 
| Send the fragment.  More... | |
| label | ipv4_route | 
| --------------------------------------------------------------—; ; ipv4_route ; ; IN: eax = Destination IP ; ebx = outgoing device / 0 ; edx = Source IP ; ; OUT: eax = Destination IP (may be gateway), 0 on error ; edx = Source IP ; edi = device number*4 ; ; DESTROYED: ; ecx ; ; --------------------------------------------------------------—;  More... | |
| label | ipv4_get_frgmnt_num | 
| --------------------------------------------------------------—; ; ipv4_get_frgmnt_num ; ; IN: / ; ; OUT: ax = fragment number ; ; --------------------------------------------------------------—;  More... | |
| label | ipv4_connect | 
| --------------------------------------------------------------—; ; ipv4_connect ; ; IN: eax = socket pointer ; ; OUT: eax = 0 on success ; eax = -1 on error ; ebx = error code on error ; ; --------------------------------------------------------------—;  More... | |
| label | ipv4_api | 
| --------------------------------------------------------------—; ; ipv4_API: Part of system function 76. ; ; IN: bl = subfunction number ; bh = device number ; ecx, edx, .. depends on subfunction ; ; OUT: depends on subfunction ; ; --------------------------------------------------------------—;  More... | |
| #define ipv4_checksum | ( | ptr | ) | 
| #define ipv4_decrease_fragment_ttls | 
--------------------------------------------------------------—; ; Decrease TimeToLive of all fragment slots ; ; --------------------------------------------------------------—;
| #define ipv4_init | 
--------------------------------------------------------------—; ; ipv4_init: Resets all IPv4 variables ; ; --------------------------------------------------------------—;
| void ipv4_fragment | ( | arg_t | buffer | ) | 
--------------------------------------------------------------—; ; ipv4_fragment ; ; IN: [esp] = ptr to packet buffer to fragment ; edi = ptrr to ip header in that buffer ; ebx = device ptr ; ; OUT: / ; ; --------------------------------------------------------------—;
| dd dataptr | 
| dd headerlength | 
| dd headerptr | 
| rd IPv4_address | 
| label ipv4_api | 
--------------------------------------------------------------—; ; ipv4_API: Part of system function 76. ; ; IN: bl = subfunction number ; bh = device number ; ecx, edx, .. depends on subfunction ; ; OUT: depends on subfunction ; ; --------------------------------------------------------------—;
| rd IPv4_broadcast | 
| edi IPv4_checksum | 
| label ipv4_connect | 
--------------------------------------------------------------—; ; ipv4_connect ; ; IN: eax = socket pointer ; ; OUT: eax = 0 on success ; eax = -1 on error ; ebx = error code on error ; ; --------------------------------------------------------------—;
| label ipv4_find_fragment_slot | 
--------------------------------------------------------------—; ; ipv4_find_fragment_slot ; ; IN: pointer to fragmented packet in edx ; ; OUT: pointer to slot in esi, -1 on error ; ; --------------------------------------------------------------—;
| rb IPv4_fragments | 
| rd IPv4_gateway | 
| label ipv4_get_frgmnt_num | 
--------------------------------------------------------------—; ; ipv4_get_frgmnt_num ; ; IN: / ; ; OUT: ax = fragment number ; ; --------------------------------------------------------------—;
| label ipv4_input | 
--------------------------------------------------------------—; ; ipv4_input: Check if IPv4 Packet isnt damaged and call ; appropriate handler. (TCP/UDP/ICMP/..) ; We will also re-construct fragmented packets. ; ; IN: Pointer to buffer in [esp] ; pointer to device struct in ebx ; pointer to IPv4 header in edx ; size of IPv4 packet in ecx ; ; OUT: / ; ; --------------------------------------------------------------—;
| rd IPv4_nameserver | 
| label ipv4_output | 
---------------------------------------------------------------—; ; ipv4_output ; ; IN: al = protocol ; ah = TTL ; ebx = device ptr (or 0 to let IP layer decide) ; ecx = data length ; edx = Source IP ; edi = Destination IP ; ; OUT: eax = pointer to buffer start ; eax = 0 on error ; ebx = device ptr (send packet through this device) ; ecx = data length ; edx = size of complete frame ; edi = start of IPv4 payload ; ; ---------------------------------------------------------------—;
| label ipv4_output_raw | 
---------------------------------------------------------------—; ; ipv4_output_raw ; ; IN: eax = socket ptr ; ecx = data length ; esi = data ptr ; ; OUT: eax = -1 on error ; ; ---------------------------------------------------------------—;
| rd IPv4_packets_dumped | 
| rd IPv4_packets_rx | 
| rd IPv4_packets_tx | 
| label ipv4_route | 
--------------------------------------------------------------—; ; ipv4_route ; ; IN: eax = Destination IP ; ebx = outgoing device / 0 ; edx = Source IP ; ; OUT: eax = Destination IP (may be gateway), 0 on error ; edx = Source IP ; edi = device number*4 ; ; DESTROYED: ; ecx ; ; --------------------------------------------------------------—;
| rd IPv4_subnet | 
| dd offset | 
| dd remaining | 
| dd segmentsize |