Rev 5584 | Rev 5976 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 5584 | Rev 5842 | ||
---|---|---|---|
Line 13... | Line 13... | ||
13 | ;; GNU GENERAL PUBLIC LICENSE ;; |
13 | ;; GNU GENERAL PUBLIC LICENSE ;; |
14 | ;; Version 2, June 1991 ;; |
14 | ;; Version 2, June 1991 ;; |
15 | ;; ;; |
15 | ;; ;; |
16 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
16 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
Line 17... | Line 17... | ||
17 | 17 | ||
Line 18... | Line 18... | ||
18 | $Revision: 5584 $ |
18 | $Revision: 5842 $ |
Line 19... | Line 19... | ||
19 | 19 | ||
20 | struct SOCKET |
20 | struct SOCKET |
Line 25... | Line 25... | ||
25 | 25 | ||
Line 26... | Line 26... | ||
26 | mutex MUTEX |
26 | mutex MUTEX |
27 | 27 | ||
28 | PID dd ? ; process ID |
28 | PID dd ? ; process ID |
29 | TID dd ? ; thread ID |
29 | TID dd ? ; thread ID |
30 | Domain dd ? ; INET/LOCAL/.. |
30 | Domain dd ? ; INET4/INET6/LOCAL/.. |
31 | Type dd ? ; RAW/STREAM/DGRAM |
31 | Type dd ? ; RAW/STREAM/DGRAM |
32 | Protocol dd ? ; ICMP/IPv4/ARP/TCP/UDP |
32 | Protocol dd ? ; UDP/TCP/ARP/ICMP |
Line 33... | Line 33... | ||
33 | errorcode dd ? |
33 | errorcode dd ? |
34 | device dd ? ; driver pointer, socket pointer if it's an LOCAL socket |
34 | device dd ? ; driver pointer, socket pointer if it's an LOCAL socket |
Line 45... | Line 45... | ||
45 | 45 | ||
Line 46... | Line 46... | ||
46 | struct IP_SOCKET SOCKET |
46 | struct IP_SOCKET SOCKET |
47 | 47 | ||
- | 48 | LocalIP rd 4 ; network byte order |
|
- | 49 | RemoteIP rd 4 ; network byte order |
|
Line 48... | Line 50... | ||
48 | LocalIP rd 4 ; network byte order |
50 | ttl db ? |
Line 49... | Line 51... | ||
49 | RemoteIP rd 4 ; network byte order |
51 | rb 3 ; align |
Line 148... | Line 150... | ||
148 | LocalPort dw ? ; network byte order |
150 | LocalPort dw ? ; network byte order |
149 | RemotePort dw ? ; network byte order |
151 | RemotePort dw ? ; network byte order |
Line 150... | Line 152... | ||
150 | 152 | ||
Line 151... | Line -... | ||
151 | ends |
- | |
152 | - | ||
153 | - | ||
154 | struct ICMP_SOCKET IP_SOCKET |
- | |
155 | - | ||
156 | Identifier dw ? |
- | |
157 | - | ||
158 | ends |
- | |
159 | 153 | ends |
|
Line 160... | Line 154... | ||
160 | 154 | ||
161 | struct RING_BUFFER |
155 | struct RING_BUFFER |
162 | 156 | ||
Line 311... | Line 305... | ||
311 | mov [eax + SOCKET.connect_proc], connect_notsupp |
305 | mov [eax + SOCKET.connect_proc], connect_notsupp |
Line 312... | Line 306... | ||
312 | 306 | ||
313 | cmp ecx, AF_INET4 |
307 | cmp ecx, AF_INET4 |
Line -... | Line 308... | ||
- | 308 | jne .no_inet4 |
|
- | 309 | ||
314 | jne .no_inet4 |
310 | mov [eax + IP_SOCKET.ttl], 128 |
315 | 311 | ||
Line 316... | Line 312... | ||
316 | cmp edx, SOCK_DGRAM |
312 | cmp edx, SOCK_DGRAM |
317 | je .udp |
313 | je .udp |
Line 352... | Line 348... | ||
352 | 348 | ||
Line 353... | Line 349... | ||
353 | jmp .unsupported |
349 | jmp .unsupported |
354 | 350 | ||
- | 351 | align 4 |
|
- | 352 | .udp: |
|
- | 353 | push eax |
|
- | 354 | init_queue (eax + SOCKET_QUEUE_LOCATION) ; Set up data receiving queue |
|
355 | align 4 |
355 | pop eax |
356 | .udp: |
356 | |
357 | mov [eax + SOCKET.Protocol], IP_PROTO_UDP |
357 | mov [eax + SOCKET.Protocol], IP_PROTO_UDP |
358 | mov [eax + SOCKET.snd_proc], SOCKET_send_udp |
358 | mov [eax + SOCKET.snd_proc], SOCKET_send_udp |
359 | mov [eax + SOCKET.rcv_proc], SOCKET_receive_dgram |
359 | mov [eax + SOCKET.rcv_proc], SOCKET_receive_dgram |
Line 371... | Line 371... | ||
371 | ret |
371 | ret |
Line 372... | Line 372... | ||
372 | 372 | ||
373 | 373 | ||
- | 374 | align 4 |
|
- | 375 | .raw_ip: |
|
- | 376 | push eax |
|
- | 377 | init_queue (eax + SOCKET_QUEUE_LOCATION) ; Set up data receiving queue |
|
374 | align 4 |
378 | pop eax |
375 | .raw_ip: |
379 | |
376 | mov [eax + SOCKET.snd_proc], SOCKET_send_ip |
380 | mov [eax + SOCKET.snd_proc], SOCKET_send_ip |
377 | mov [eax + SOCKET.rcv_proc], SOCKET_receive_dgram |
381 | mov [eax + SOCKET.rcv_proc], SOCKET_receive_dgram |
Line 378... | Line 382... | ||
378 | mov [eax + SOCKET.connect_proc], IPv4_connect |
382 | mov [eax + SOCKET.connect_proc], IPv4_connect |
379 | ret |
383 | ret |
- | 384 | ||
- | 385 | ||
- | 386 | align 4 |
|
- | 387 | .raw_icmp: |
|
380 | 388 | push eax |
|
381 | 389 | init_queue (eax + SOCKET_QUEUE_LOCATION) ; Set up data receiving queue |
|
382 | align 4 |
390 | pop eax |
383 | .raw_icmp: |
391 | |
Line 973... | Line 981... | ||
973 | SOCKET_send_ip: |
981 | SOCKET_send_ip: |
Line 974... | Line 982... | ||
974 | 982 | ||
Line 975... | Line 983... | ||
975 | DEBUGF DEBUG_NETWORK_VERBOSE, "SOCKET_send: IPv4\n" |
983 | DEBUGF DEBUG_NETWORK_VERBOSE, "SOCKET_send: IPv4\n" |
976 | 984 | ||
977 | mov [esp+32], ecx |
985 | mov [esp+32], ecx |
978 | call IPv4_output_raw ; FIXME: IPv4_output_raw should return error codes! |
986 | call IPv4_output_raw |
979 | cmp eax, -1 |
987 | cmp eax, -1 |
Line 980... | Line 988... | ||
980 | je .error |
988 | je .error |
981 | ret |
989 | ret |
982 | 990 | ||
983 | .error: |
991 | .error: |
Line 984... | Line 992... | ||
984 | mov dword[esp+32], -1 |
992 | mov dword[esp+32], eax |
985 | mov dword[esp+20], EMSGSIZE |
993 | mov dword[esp+20], ebx |
Line 986... | Line 994... | ||
986 | ret |
994 | ret |
Line 987... | Line 995... | ||
987 | 995 | ||
988 | 996 | ||
989 | align 4 |
997 | align 4 |
990 | SOCKET_send_icmp: |
998 | SOCKET_send_icmp: |
991 | 999 | ||
Line 992... | Line 1000... | ||
992 | DEBUGF DEBUG_NETWORK_VERBOSE, "SOCKET_send: ICMP\n" |
1000 | DEBUGF DEBUG_NETWORK_VERBOSE, "SOCKET_send: ICMP\n" |
993 | 1001 | ||
994 | mov [esp+32], ecx |
1002 | mov [esp+32], ecx |
995 | call ICMP_output_raw ; FIXME: errorcodes |
1003 | call ICMP_output_raw |
Line 996... | Line 1004... | ||
996 | cmp eax, -1 |
1004 | cmp eax, -1 |
997 | je .error |
1005 | je .error |
Line 1124... | Line 1132... | ||
1124 | mov dword[esp+32], -1 |
1132 | mov dword[esp+32], -1 |
1125 | mov dword[esp+20], EINVAL |
1133 | mov dword[esp+20], EINVAL |
1126 | ret |
1134 | ret |
Line 1127... | Line -... | ||
1127 | - | ||
1128 | 1135 | ||
1129 | 1136 | ||
1130 | ;----------------------------------------------------------------- |
1137 | ;----------------------------------------------------------------- |
1131 | ; |
1138 | ; |
1132 | ; SOCKET_set_options |
1139 | ; SOCKET_set_options |
1133 | ; |
1140 | ; |
1134 | ; IN: ecx = socket number |
- | |
1135 | ; edx = pointer to the options: |
1141 | ; IN: ecx = socket number |
1136 | ; dd level, optname, optlen, optval |
1142 | ; edx = pointer to socket_options |
1137 | ; OUT: -1 on error |
1143 | ; OUT: -1 on error |
- | 1144 | ; |
|
- | 1145 | ;----------------------------------------------------------------- |
|
- | 1146 | ||
- | 1147 | struct socket_options |
|
- | 1148 | level dd ? |
|
- | 1149 | optname dd ? |
|
- | 1150 | optlen dd ? |
|
- | 1151 | optval dd ? |
|
1138 | ; |
1152 | ends |
1139 | ;----------------------------------------------------------------- |
1153 | |
Line 1140... | Line 1154... | ||
1140 | align 4 |
1154 | align 4 |
Line 1141... | Line 1155... | ||
1141 | SOCKET_set_opt: |
1155 | SOCKET_set_opt: |
1142 | 1156 | ||
Line -... | Line 1157... | ||
- | 1157 | DEBUGF DEBUG_NETWORK_VERBOSE, "SOCKET_set_opt\n" |
|
- | 1158 | ||
1143 | DEBUGF DEBUG_NETWORK_VERBOSE, "SOCKET_set_opt\n" |
1159 | call SOCKET_num_to_ptr |
1144 | 1160 | jz .invalid |
|
Line 1145... | Line -... | ||
1145 | call SOCKET_num_to_ptr |
- | |
1146 | jz .invalid |
- | |
1147 | - | ||
1148 | cmp dword [edx], SOL_SOCKET |
1161 | |
1149 | jne .invalid |
- | |
1150 | 1162 | cmp [edx + socket_options.level], IP_PROTO_IP |
|
1151 | cmp dword [edx+4], SO_BINDTODEVICE |
1163 | je .ip |
Line 1152... | Line 1164... | ||
1152 | je .bind |
1164 | cmp [edx + socket_options.level], SOL_SOCKET |
1153 | 1165 | jne .invalid |
|
1154 | .invalid: |
1166 | |
Line 1155... | Line 1167... | ||
1155 | mov dword[esp+32], -1 |
1167 | .socket: |
1156 | mov dword[esp+20], EINVAL |
1168 | cmp [edx + socket_options.optname], SO_BINDTODEVICE |
1157 | ret |
1169 | jne .invalid |
Line 1158... | Line 1170... | ||
1158 | 1170 | ||
1159 | .bind: |
1171 | .bind: |
Line 1178... | Line 1190... | ||
1178 | mov [eax + SOCKET.device], 0 |
1190 | mov [eax + SOCKET.device], 0 |
Line 1179... | Line 1191... | ||
1179 | 1191 | ||
1180 | mov dword[esp+32], 0 ; success! |
1192 | mov dword[esp+32], 0 ; success! |
Line -... | Line 1193... | ||
- | 1193 | ret |
|
- | 1194 | ||
- | 1195 | .ip: |
|
- | 1196 | cmp [edx + socket_options.optname], IP_TTL |
|
- | 1197 | jne .invalid |
|
- | 1198 | ||
- | 1199 | .ttl: |
|
- | 1200 | mov bl, byte[edx + socket_options.optval] |
|
- | 1201 | mov [eax + IP_SOCKET.ttl], bl |
|
- | 1202 | ||
- | 1203 | mov dword[esp+32], 0 ; success! |
|
1181 | ret |
1204 | ret |
1182 | 1205 | ||
1183 | .already: |
1206 | .already: |
1184 | mov dword[esp+20], EALREADY |
1207 | mov dword[esp+20], EALREADY |
Line -... | Line 1208... | ||
- | 1208 | mov dword[esp+32], -1 |
|
- | 1209 | ret |
|
- | 1210 | ||
- | 1211 | .invalid: |
|
- | 1212 | mov dword[esp+20], EINVAL |
|
Line 1185... | Line 1213... | ||
1185 | mov dword[esp+32], -1 |
1213 | mov dword[esp+32], -1 |
1186 | ret |
1214 | ret |
Line 1472... | Line 1500... | ||
1472 | pusha |
1500 | pusha |
1473 | lea ecx, [eax + SOCKET.mutex] |
1501 | lea ecx, [eax + SOCKET.mutex] |
1474 | call mutex_unlock |
1502 | call mutex_unlock |
1475 | popa |
1503 | popa |
Line -... | Line 1504... | ||
- | 1504 | ||
1476 | 1505 | add esp, 8 |
|
1477 | call NET_BUFF_free |
1506 | call NET_BUFF_free |
Line 1478... | Line 1507... | ||
1478 | ret |
1507 | ret |