/kernel/branches/net/applications/telnet/telnet.asm |
---|
92,7 → 92,7 |
push str4 |
call [con_write_asciiz] |
mcall socket, AF_INET4, SOCK_STREAM, 0 |
mcall socket, AF_INET4, IPPROTO_TCP, 0 |
cmp eax, -1 |
jz fail2 |
mov [socketnum], eax |
/kernel/branches/net/applications/synergyc/synergyc.asm |
---|
86,7 → 86,7 |
push newline |
call [con_write_asciiz] |
mcall socket, AF_INET4, SOCK_STREAM, 0 |
mcall socket, AF_INET4, IPPROTO_TCP, 0 |
cmp eax, -1 |
je error |
/kernel/branches/net/applications/network_lib/network.asm |
---|
7,7 → 7,7 |
include '../macros.inc' |
purge section,mov,add,sub |
include '../network.inc' |
include 'network.inc' |
section '.flat' code readable align 16 |
29,8 → 29,7 |
mov [dll.load], edx |
mov [DNSrequestID], 1 |
stdcall edx, @IMPORT |
xor eax, eax |
ret |
ret 4 |
;;===========================================================================;; |
;; in_addr_t __stdcall inet_addr(__in const char* hostname); ;; |
258,7 → 257,7 |
ret |
struct __gai_reqdata |
socketnum dd ? |
socket dd ? |
; external code should not look on rest of this structure, |
; it is internal for getaddrinfo_start/process/abort |
reqid dw ? ; DNS request ID |
280,7 → 279,7 |
;;---------------------------------------------------------------------------;; |
;> first parameter (optional) = host name ;; |
;> second parameter (optional) = service name (decimal number for now) ;; |
;> third parameter (optional) = hints for socketnum type ;; |
;> third parameter (optional) = hints for socket type ;; |
;> fourth parameter = pointer to result (head of L1-list) ;; |
;;---------------------------------------------------------------------------;; |
;< eax = 0 on success / one of EAI_ codes on error ;; |
426,14 → 425,14 |
jecxz @f |
cmp [ecx+addrinfo.ai_family], edi |
jz @f |
cmp [ecx+addrinfo.ai_family], AF_INET4 |
cmp [ecx+addrinfo.ai_family], PF_INET |
jnz .ret |
@@: |
; 1e. Valid combinations for ai_socktype/ai_protocol: 0/0 for any or |
; SOCK_STREAM/IPPROTO_TCP, SOCK_DGRAM/IPPROTO_UDP |
; (raw socketnums are not yet supported by the kernel) |
; (raw sockets are not yet supported by the kernel) |
xor edx, edx ; assume 0=any if no hints |
jecxz .socketnum_type_ok |
jecxz .socket_type_ok |
mov edx, [ecx+addrinfo.ai_socktype] |
mov esi, [ecx+addrinfo.ai_protocol] |
; 1f. Test for ai_socktype=0 and ai_protocol=0. |
440,16 → 439,16 |
test edx, edx |
jnz .check_socktype |
test esi, esi |
jz .socketnum_type_ok |
jz .socket_type_ok |
; 1g. ai_socktype=0, ai_protocol is nonzero. |
push EAI_SERVICE |
pop eax |
inc edx ; edx = SOCK_STREAM |
cmp esi, IPPROTO_TCP |
jz .socketnum_type_ok |
jz .socket_type_ok |
inc edx ; edx = SOCK_DGRAM |
cmp esi, IPPROTO_UDP |
jz .socketnum_type_ok |
jz .socket_type_ok |
.ret: |
; Restore saved registers, destroy stack frame and return. |
mov esp, ebp |
465,16 → 464,16 |
cmp edx, SOCK_DGRAM |
jnz .ret |
test esi, esi |
jz .socketnum_type_ok |
jz .socket_type_ok |
cmp esi, IPPROTO_UDP |
jz .socketnum_type_ok |
jz .socket_type_ok |
jmp .ret |
.check_tcp: |
test esi, esi |
jz .socketnum_type_ok |
jz .socket_type_ok |
cmp esi, IPPROTO_TCP |
jnz .ret |
.socketnum_type_ok: |
.socket_type_ok: |
mov [ebx+__gai_reqdata.socktype], dl |
; 2. Resolve service. |
; 2a. If no name is given, remember value -1. |
514,7 → 513,7 |
; 3. Process host name. |
mov esi, [.hostname] |
; 3a. If hostname is not given, |
; use localhost for active socketnums and INADDR_ANY for passive socketnums. |
; use localhost for active sockets and INADDR_ANY for passive sockets. |
mov eax, 0x0100007F ; 127.0.0.1 in network byte order |
test byte [ebx+__gai_reqdata.flags], AI_PASSIVE |
jz @f |
680,17 → 679,17 |
cmp eax, -1 |
je .ret.dnserr |
mov esi, eax ; put server address to esi |
; 8. Open UDP socketnum to DNS server, port 53. |
; 8a. Create new socketnum. |
mcall 74, 0, AF_INET4, SOCK_DGRAM |
; 8. Open UDP socket to DNS server, port 53. |
; 8a. Create new socket. |
mcall 74, 0, AF_INET, IPPROTO_UDP |
cmp eax, -1 ; error? |
jz .ret.dnserr |
mov ecx, eax ; put socketnum handle to ecx |
mov ecx, eax ; put socket handle to ecx |
; 8b. Create sockaddr structure on the stack. |
push 0 |
push 0 ; sin_zero |
push esi ; sin_addr |
push AF_INET4 + (53 shl 16) |
push AF_INET + (53 shl 16) |
; sin_family and sin_port in network byte order |
; 8c. Connect. |
mcall 74, 4, , esp, sizeof.sockaddr_in |
707,7 → 706,7 |
cmp eax, -1 |
jz .ret.close |
mov eax, [.reqdata] |
mov [eax+__gai_reqdata.socketnum], ecx |
mov [eax+__gai_reqdata.socket], ecx |
push -1 |
pop eax ; return status: more processing required |
jmp .ret.dns |
760,11 → 759,11 |
push ebx esi edi |
mov edi, [.reqdata] |
; 2. Read UDP datagram. |
mov ecx, [edi+__gai_reqdata.socketnum] |
mov ecx, [edi+__gai_reqdata.socket] |
push edi |
mcall 74, 7, , , 512, 0 |
pop edi |
; 3. Ignore events for other socketnums (return if no data read) |
; 3. Ignore events for other sockets (return if no data read) |
test eax, eax |
jz .ret.more_processing_required |
; 4. Sanity check: discard too short packets. |
919,10 → 918,10 |
@@: |
pop eax |
.ret.close: |
; 15. Close socketnum. |
; 15. Close socket. |
push eax |
mov ecx, [.reqdata] |
mov ecx, [ecx+__gai_reqdata.socketnum] |
mov ecx, [ecx+__gai_reqdata.socket] |
mcall 74, 1 |
pop eax |
; 16. Restore used registers, destroy stack frame and return. |
1171,12 → 1170,12 |
; 4. Fill struct addrinfo. |
mov eax, [ebx+__gai_reqdata.flags] |
mov [edi+addrinfo.ai_flags], eax |
mov byte [edi+addrinfo.ai_family], AF_INET4 |
mov byte [edi+addrinfo.ai_family], PF_INET |
mov byte [edi+addrinfo.ai_addrlen], sizeof.sockaddr_in |
lea ecx, [edi+sizeof.addrinfo] |
mov [edi+addrinfo.ai_addr], ecx |
; 5. Fill struct sockaddr_in. |
mov byte [ecx+sockaddr_in.sin_family], AF_INET4 |
mov byte [ecx+sockaddr_in.sin_family], PF_INET |
pop eax |
mov [ecx+sockaddr_in.sin_addr], eax |
; 6. Append new item to the list. |
1190,7 → 1189,7 |
ret |
.set_socktype: |
; Set ai_socktype and ai_protocol fields by given socketnum type. |
; Set ai_socktype and ai_protocol fields by given socket type. |
mov byte [edi+addrinfo.ai_socktype], cl |
dec cl |
jnz .set_udp |
1220,9 → 1219,9 |
;;===========================================================================;; |
; 0. Save used registers for __stdcall. |
push ebx |
; 1. Allocated resources: only socketnum, so close it and return. |
; 1. Allocated resources: only socket, so close it and return. |
mov eax, [esp+8] |
mov ecx, [eax+__gai_reqdata.socketnum] |
mov ecx, [eax+__gai_reqdata.socket] |
mcall 74, 1 |
; 2. Restore used registers and return. |
pop ebx |
/kernel/branches/net/applications/network_lib/network.inc |
---|
0,0 → 1,60 |
; Socket types |
SOCK_STREAM = 1 |
SOCK_DGRAM = 2 |
SOCK_RAW = 3 ; not supported by the kernel |
; IP protocols |
IPPROTO_IP = 0 |
IPPROTO_ICMP = 1 ; not supported by the kernel |
IPPROTO_TCP = 6 |
IPPROTO_UDP = 17 |
; Address families |
AF_UNSPEC = 0 |
AF_INET = 2 ; IPv4 |
;AF_INET6 = 28 ; IPv6 (not supported) |
PF_UNSPEC = AF_UNSPEC |
PF_INET = AF_INET |
;PF_INET6 = AF_INET6 |
; Flags for addrinfo |
AI_PASSIVE = 1 |
AI_CANONNAME = 2 |
AI_NUMERICHOST = 4 |
AI_NUMERICSERV = 8 |
AI_ADDRCONFIG = 0x400 |
; internal definition |
AI_SUPPORTED = 0x40F |
struct sockaddr_in |
sin_family dw ? ; sa_family_t |
sin_port dw ? ; in_port_t |
sin_addr dd ? ; struct in_addr |
sin_zero rb 8 ; zero |
ends |
struct addrinfo |
ai_flags dd ? ; bitmask of AI_* |
ai_family dd ? ; PF_* |
ai_socktype dd ? ; SOCK_* |
ai_protocol dd ? ; 0 or IPPROTO_* |
ai_addrlen dd ? ; length of ai_addr |
ai_canonname dd ? ; char* |
ai_addr dd ? ; struct sockaddr* |
ai_next dd ? ; struct addrinfo* |
ends |
EAI_ADDRFAMILY = 1 |
EAI_AGAIN = 2 |
EAI_BADFLAGS = 3 |
EAI_FAIL = 4 |
EAI_FAMILY = 5 |
EAI_MEMORY = 6 |
EAI_NONAME = 8 |
EAI_SERVICE = 9 |
EAI_SOCKTYPE = 10 |
EAI_BADHINTS = 12 |
EAI_PROTOCOL = 13 |
EAI_OVERFLOW = 14 |
Property changes: |
Added: svn:keywords |
+Revision |
\ No newline at end of property |
Added: svn:mergeinfo |
/kernel/branches/net/applications/nslookup/nslookup.asm |
---|
15,7 → 15,7 |
include '../proc32.inc' |
include '../dll.inc' |
include '../network.inc' |
include '../network_lib/network.inc' |
; entry point |
start: |
/kernel/branches/net/applications/nslookup/dll.inc |
---|
0,0 → 1,157 |
;----------------------------------------------------------------------------- |
proc mem.Alloc size ;///////////////////////////////////////////////////////// |
;----------------------------------------------------------------------------- |
push ebx ecx |
mov eax,[size] |
lea ecx,[eax+4+4095] |
and ecx,not 4095 |
mcall 68,12 |
add ecx,-4 |
mov [eax],ecx |
add eax,4 |
pop ecx ebx |
ret |
endp |
;----------------------------------------------------------------------------- |
proc mem.ReAlloc mptr,size;/////////////////////////////////////////////////// |
;----------------------------------------------------------------------------- |
push ebx ecx esi edi eax |
mov eax,[mptr] |
mov ebx,[size] |
or eax,eax |
jz @f |
lea ecx,[ebx+4+4095] |
and ecx,not 4095 |
add ecx,-4 |
cmp ecx,[eax-4] |
je .exit |
@@: mov eax,ebx |
call mem.Alloc |
xchg eax,[esp] |
or eax,eax |
jz .exit |
mov esi,eax |
xchg eax,[esp] |
mov edi,eax |
mov ecx,[esi-4] |
cmp ecx,[edi-4] |
jbe @f |
mov ecx,[edi-4] |
@@: add ecx,3 |
shr ecx,2 |
cld |
rep movsd |
xchg eax,[esp] |
call mem.Free |
.exit: |
pop eax edi esi ecx ebx |
ret |
endp |
;----------------------------------------------------------------------------- |
proc mem.Free mptr ;////////////////////////////////////////////////////////// |
;----------------------------------------------------------------------------- |
mov eax,[mptr] |
or eax,eax |
jz @f |
push ebx ecx |
lea ecx,[eax-4] |
mcall 68,13 |
pop ecx ebx |
@@: ret |
endp |
proc dll.Load, import_table:dword |
mov esi,[import_table] |
.next_lib: mov edx,[esi] |
or edx,edx |
jz .exit |
push esi |
mov esi,[esi+4] |
mov edi,s_libdir.fname |
@@: lodsb |
stosb |
or al,al |
jnz @b |
mcall 68,19,s_libdir |
or eax,eax |
jz .fail |
stdcall dll.Link,eax,edx |
stdcall dll.Init,[eax+4] |
pop esi |
add esi,8 |
jmp .next_lib |
.exit: xor eax,eax |
ret |
.fail: add esp,4 |
xor eax,eax |
inc eax |
ret |
endp |
proc dll.Link, exp:dword,imp:dword |
push eax |
mov esi,[imp] |
test esi,esi |
jz .done |
.next: lodsd |
test eax,eax |
jz .done |
stdcall dll.GetProcAddress,[exp],eax |
or eax,eax |
jz @f |
mov [esi-4],eax |
jmp .next |
@@: mov dword[esp],0 |
.done: pop eax |
ret |
endp |
proc dll.Init, dllentry:dword |
pushad |
mov eax,mem.Alloc |
mov ebx,mem.Free |
mov ecx,mem.ReAlloc |
mov edx,dll.Load |
stdcall [dllentry] |
popad |
ret |
endp |
proc dll.GetProcAddress, exp:dword,sz_name:dword |
mov edx,[exp] |
xor eax,eax |
.next: or edx,edx |
jz .end |
cmp dword[edx],0 |
jz .end |
stdcall strcmp,[edx],[sz_name] |
test eax,eax |
jz .ok |
add edx,8 |
jmp .next |
.ok: mov eax,[edx+4] |
.end: ret |
endp |
proc strcmp, str1:dword,str2:dword |
push esi edi |
mov esi,[str1] |
mov edi,[str2] |
xor eax,eax |
@@: lodsb |
scasb |
jne .fail |
or al,al |
jnz @b |
jmp .ok |
.fail: or eax,-1 |
.ok: pop edi esi |
ret |
endp |
s_libdir: |
db '/sys/lib/' |
.fname rb 32 |
Property changes: |
Added: svn:keywords |
+Revision |
\ No newline at end of property |
/kernel/branches/net/applications/tftpc/TFTP.asm |
---|
226,7 → 226,7 |
mov esi, [esi + sockaddr_in.sin_addr] |
mov dword [IP], esi |
mcall socket, AF_INET4, SOCK_DGRAM, 0 ; socket_open |
mcall socket, AF_INET4, IP_PROTO_UDP, 0 ; socket_open |
cmp eax, -1 |
je still |
/kernel/branches/net/applications/zeroconf/zeroconf.asm |
---|
42,10 → 42,14 |
DEFEND_INTERVAL equ 10 ; seconds (min. wait between defensive ARPs) |
AF_INET4 equ 2 ;;;;; |
IP_PROTO_UDP equ 17 |
include '../proc32.inc' |
include '../macros.inc' |
include '../debug-fdo.inc' |
include '../network.inc' |
include 'dhcp.inc' |
include 'dll.inc' |
132,7 → 136,7 |
mcall 75, 1337 shl 16 + 4 |
cmp eax, -1 |
je exit |
je close |
mov word[MAC], bx |
mov dword[MAC+2], eax |
194,7 → 198,7 |
DEBUGF 1,"->Skip ini\n" |
mcall 74, 0, AF_INET4, SOCK_DGRAM, 0 ; open socket (parameters: domain, type, reserved) |
mcall 74, 0, AF_INET4, IP_PROTO_UDP, 0 ; open socket (parameters: domain, type, reserved) |
cmp eax, -1 |
je error |
mov [socketNum], eax |
296,7 → 300,7 |
DEBUGF 1,"->%d bytes received\n", eax |
push eax |
mcall 74, 1, [socketNum] ; exit the socket |
mcall 74, 1, [socketNum] ; close the socket |
pop eax |
cmp eax, -1 |
319,7 → 323,7 |
cmp [dhcpMsgType], byte 0x03 ; did we send a request? |
je request |
jmp exit ; really unknown, what we did |
jmp close ; really unknown, what we did |
discover: |
call parseResponse |
335,7 → 339,7 |
cmp [dhcpMsgType], byte 0x05 ; Was the response an ACK? It should be |
jne apipa ; NO - so we do zeroconf |
jmp exit |
jmp close |
;*************************************************************************** |
; Function |
443,7 → 447,7 |
; DEBUGF 1,"Sending ARP announce\n" |
;;; |
jmp exit |
jmp close |
apipa: |
stdcall mem.Free, [dhcpMsg] |
507,7 → 511,7 |
; we should, instead of closing, detect ARP conflicts and detect if cable keeps connected ;) |
error: |
exit: |
close: |
mcall -1 |
588,6 → 592,4 |
path rb 1024+5 |
rb 65536 |
I_END: |
/kernel/branches/net/network/icmp.inc |
---|
225,6 → 225,9 |
cmp [ebx + SOCKET.Domain], AF_INET4 |
jne .next_socket |
cmp [ebx + SOCKET.Type], SOCK_RAW |
jne .next_socket |
cmp [ebx + SOCKET.Protocol], IP_PROTO_ICMP |
jne .next_socket |
/kernel/branches/net/network/socket.inc |
---|
58,8 → 58,8 |
TCP_SOCKET: |
.LocalPort dw ? |
.RemotePort dw ? |
.LocalPort dw ? ; In INET byte order |
.RemotePort dw ? ; In INET byte order |
.backlog dw ? ; Backlog |
.backlog_cur dw ? ; current size of queue for un-accept-ed connections |
150,8 → 150,8 |
UDP_SOCKET: |
.LocalPort dw ? |
.RemotePort dw ? |
.LocalPort dw ? ; In INET byte order |
.RemotePort dw ? ; In INET byte order |
.firstpacket db ? |
.end: |
161,7 → 161,7 |
ICMP_SOCKET: |
.Identifier dw ? |
.Identifier dw ? ; |
.end: |
end virtual |
250,9 → 250,10 |
;----------------------------------------------------------------- |
align 4 |
sys_socket: |
cmp ebx, 9 ; highest possible number |
cmp ebx, 8 ; highest possible number |
jg @f |
jmp dword [sock_sysfn_table + 4*ebx] |
lea ebx, [sock_sysfn_table + 4*ebx] |
jmp dword [ebx] |
@@: |
cmp ebx, 255 |
jz SOCKET_debug |
273,9 → 274,11 |
dd SOCKET_accept ; 5 |
dd SOCKET_send ; 6 |
dd SOCKET_receive ; 7 |
dd SOCKET_set_opt ; 8 |
dd SOCKET_get_opt ; 9 |
dd SOCKET_get_opt ; 8 |
; dd SOCKET_set_opt ; 9 |
;----------------------------------------------------------------- |
; |
; SOCKET_open |
294,12 → 297,12 |
call SOCKET_alloc |
jz s_error |
mov [esp+32], edi ; return socketnumber |
mov [eax + SOCKET.Domain], ecx |
mov [eax + SOCKET.Type], edx |
mov [eax + SOCKET.Protocol], esi |
mov [esp+32], edi ; return socketnumber |
cmp ecx, AF_INET4 |
jne .no_inet4 |
306,10 → 309,12 |
push [IP_LIST] |
pop [eax + IP_SOCKET.LocalIP] ; fill in local ip number |
cmp edx, SOCK_DGRAM |
call SOCKET_find_port ; fill in a local port number, application may change it later, or use this one |
cmp edx, IP_PROTO_UDP |
je .udp |
cmp edx, SOCK_STREAM |
cmp edx, IP_PROTO_TCP |
je .tcp |
cmp edx, SOCK_RAW |
318,28 → 323,21 |
.no_inet4: |
ret |
align 4 |
.raw: |
; test esi, esi ; IP_PROTO_IP |
; jz .ip |
.tcp: |
mov ebx, eax |
cmp esi, IP_PROTO_ICMP |
je .icmp |
lea eax, [ebx + STREAM_SOCKET.snd] |
call SOCKET_ring_create |
cmp esi, IP_PROTO_UDP |
je .udp |
lea eax, [ebx + STREAM_SOCKET.rcv] |
call SOCKET_ring_create |
cmp esi, IP_PROTO_TCP |
je .tcp |
mov [ebx + SOCKET.snd_proc], SOCKET_send_tcp |
mov [ebx + SOCKET.rcv_proc], SOCKET_receive_tcp |
ret |
align 4 |
.udp: |
mov [eax + SOCKET.Protocol], IP_PROTO_UDP |
call SOCKET_find_port ; fill in a local port number, application may change it later, or use this one |
push eax |
init_queue (eax + SOCKET_QUEUE_LOCATION) |
pop eax |
349,29 → 347,16 |
ret |
align 4 |
.tcp: |
mov [eax + SOCKET.Protocol], IP_PROTO_TCP |
.raw: |
; test esi, esi |
; jz .ip |
call SOCKET_find_port ; fill in a local port number, application may change it later, or use this one |
cmp esi, IP_PROTO_ICMP |
je .icmp |
mov ebx, eax |
lea eax, [ebx + STREAM_SOCKET.snd] |
call SOCKET_ring_create |
lea eax, [ebx + STREAM_SOCKET.rcv] |
call SOCKET_ring_create |
mov [ebx + SOCKET.snd_proc], SOCKET_send_tcp |
mov [ebx + SOCKET.rcv_proc], SOCKET_receive_tcp |
ret |
;align 4 |
; .ip: |
; |
; push eax |
; init_queue (eax + SOCKET_QUEUE_LOCATION) |
; pop eax |
381,10 → 366,7 |
; |
; ret |
align 4 |
.icmp: |
push eax |
init_queue (eax + SOCKET_QUEUE_LOCATION) |
pop eax |
439,6 → 421,8 |
cmp esi, 6 |
jl s_error |
mov ecx, [eax + SOCKET.Type] |
mov bx, word [edx + 2] |
test bx, bx |
jz .use_preset_port |
489,21 → 473,17 |
.af_inet4: |
cmp [eax + SOCKET.Protocol], IP_PROTO_UDP |
cmp [eax + SOCKET.Type], IP_PROTO_UDP |
je .udp |
cmp [eax + SOCKET.Protocol], IP_PROTO_TCP |
cmp [eax + SOCKET.Type], IP_PROTO_TCP |
je .tcp |
cmp [eax + SOCKET.Protocol], IP_PROTO_IP |
je .ip |
cmp [eax + SOCKET.Type], SOCK_RAW |
je .raw |
cmp [eax + SOCKET.Protocol], IP_PROTO_ICMP |
je .ip |
jmp s_error |
align 4 |
.udp: |
mov bx , word [edx + 2] |
mov word [eax + UDP_SOCKET.RemotePort], bx |
517,7 → 497,7 |
mov dword [esp+32], 0 |
ret |
align 4 |
.tcp: |
lea ebx, [eax + SOCKET.lock] |
call wait_mutex |
552,8 → 532,7 |
mov dword [esp+32], 0 ; success! |
ret |
align 4 |
.ip: |
.raw: |
push dword [edx + 4] |
pop dword [eax + IP_SOCKET.RemoteIP] |
581,7 → 560,7 |
cmp word [eax + SOCKET.Domain], AF_INET4 |
jne s_error |
cmp [eax + SOCKET.Protocol], IP_PROTO_TCP |
cmp [eax + SOCKET.Type], IP_PROTO_TCP |
jne s_error |
; TODO: check local port number |
593,7 → 572,7 |
mov [eax + TCP_SOCKET.backlog], dx |
mov [eax + TCP_SOCKET.t_state], TCB_LISTEN |
or [eax + SOCKET.options], SO_ACCEPTCON ;;;; TODO: set socket state to listen |
or [eax + SOCKET.options], SO_ACCEPTCON |
mov dword [esp+32], 0 |
625,7 → 604,7 |
.af_inet4: |
cmp [eax + SOCKET.Protocol], IP_PROTO_TCP |
cmp [eax + SOCKET.Type], IP_PROTO_TCP |
je .tcp |
jmp s_error |
672,16 → 651,13 |
cmp [eax + SOCKET.Domain], AF_INET4 |
jne s_error |
cmp [eax + SOCKET.Protocol], IP_PROTO_UDP |
cmp [eax + SOCKET.Type], IP_PROTO_UDP |
je .free |
cmp [eax + SOCKET.Protocol], IP_PROTO_ICMP |
cmp [eax + SOCKET.Type], IP_PROTO_ICMP |
je .free |
cmp [eax + SOCKET.Protocol], IP_PROTO_IP |
je .free |
cmp [eax + SOCKET.Protocol], IP_PROTO_TCP |
cmp [eax + SOCKET.Type], IP_PROTO_TCP |
je .tcp |
jmp s_error |
919,14 → 895,6 |
align 4 |
SOCKET_set_opt: |
ret |
;----------------------------------------------------------------- |
; |
; SOCKET_debug |
974,10 → 942,10 |
push ebx esi ecx |
cmp [eax + SOCKET.Protocol], IP_PROTO_UDP |
cmp [eax + SOCKET.Type], IP_PROTO_UDP |
je .udp |
cmp [eax + SOCKET.Protocol], IP_PROTO_TCP |
cmp [eax + SOCKET.Type], IP_PROTO_TCP |
je .tcp |
jmp .error |
1018,7 → 986,7 |
;----------------------------------------------------------------- |
; |
; SOCKET_check_port (to be used with AF_INET only!) |
; SOCKET_check_port |
; |
; Checks if a local port number is unused |
; If the proposed port number is unused, it is filled in in the socket structure |
1034,7 → 1002,7 |
DEBUGF 1,"SOCKET_check_port\n" |
mov ecx, [eax + SOCKET.Protocol] |
mov ecx, [eax + SOCKET.Type] |
mov esi, net_sockets |
.next_socket: |
1042,7 → 1010,7 |
or esi, esi |
jz .port_ok |
cmp [esi + SOCKET.Protocol], ecx |
cmp [esi + SOCKET.Type], ecx |
jne .next_socket |
cmp [esi + UDP_SOCKET.LocalPort], bx |
1436,7 → 1404,7 |
cmp [eax + SOCKET.Domain], AF_INET4 |
jnz .no_tcp |
cmp [eax + SOCKET.Protocol], IP_PROTO_TCP |
cmp [eax + SOCKET.Type], IP_PROTO_TCP |
jnz .no_tcp |
mov ebx, eax |
1657,10 → 1625,10 |
mov [ebx + SOCKET.PID], 0 |
cmp [ebx + SOCKET.Protocol], IP_PROTO_UDP |
cmp [ebx + SOCKET.Type], IP_PROTO_UDP |
je .udp |
cmp [ebx + SOCKET.Protocol], IP_PROTO_TCP |
cmp [ebx + SOCKET.Type], IP_PROTO_TCP |
je .tcp |
jmp .next_socket ; kill all sockets for given PID |
/kernel/branches/net/network/tcp.inc |
---|
135,7 → 135,7 |
or eax, eax |
jz .exit |
cmp [eax + SOCKET.Protocol], IP_PROTO_TCP ;;; We should also check if family is AF_INET |
cmp [eax + SOCKET.Type], IP_PROTO_TCP |
jne .loop |
dec [eax + TCP_SOCKET.timer_ack] |
177,7 → 177,7 |
or eax, eax |
jz .exit |
cmp [eax + SOCKET.Protocol], IP_PROTO_TCP ;;; We should also check if family is AF_INET |
cmp [eax + SOCKET.Type], IP_PROTO_TCP |
jne .loop |
inc [eax + TCP_SOCKET.t_idle] |
378,7 → 378,7 |
or ebx, ebx |
jz .drop_with_reset |
cmp [ebx + SOCKET.Protocol], IP_PROTO_TCP ;;; We should also check if family is AF_INET |
cmp [ebx + SOCKET.Type], IP_PROTO_TCP |
jne .socket_loop |
mov ax, [edx + TCP_segment.DestinationPort] |
1106,8 → 1106,6 |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; code missing (943?) |
mov eax, [edx + TCP_segment.AckNumber] |
mov [ebx + TCP_SOCKET.SND_UNA], eax |
1116,6 → 1114,7 |
mov [ebx + TCP_SOCKET.SND_NXT], eax |
@@: |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
;--------------------------------------- |
; Wake up process waiting on send buffer |
/kernel/branches/net/network/udp.inc |
---|
152,7 → 152,7 |
jz .dump |
cmp [eax + SOCKET.Domain], AF_INET4 |
jne .next_socket |
cmp [eax + SOCKET.Protocol], IP_PROTO_UDP |
cmp [eax + SOCKET.Type], IP_PROTO_UDP |
jne .next_socket |
cmp [eax + UDP_SOCKET.LocalPort], si |
jne .next_socket |