Changeset 1affcdf3 in mainline for uspace/srv/net
- Timestamp:
- 2011-06-10T19:33:41Z (15 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 1878386
- Parents:
- 13ecdac9 (diff), 79a141a (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)links above to see all the changes relative to each parent. - Location:
- uspace/srv/net
- Files:
-
- 11 edited
-
il/arp/arp.c (modified) (1 diff)
-
il/ip/ip.c (modified) (16 diffs)
-
net/net.c (modified) (4 diffs)
-
netif/lo/lo.c (modified) (2 diffs)
-
nil/eth/eth.c (modified) (2 diffs)
-
nil/nildummy/nildummy.c (modified) (2 diffs)
-
tl/icmp/Makefile (modified) (1 diff)
-
tl/icmp/icmp.c (modified) (2 diffs)
-
tl/tcp/tcp.c (modified) (17 diffs)
-
tl/tcp/tcp_header.h (modified) (2 diffs)
-
tl/udp/udp.c (modified) (7 diffs)
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/net/il/arp/arp.c
r13ecdac9 r1affcdf3 845 845 846 846 *count = 0; 847 848 if (!IPC_GET_IMETHOD(*call)) 849 return EOK; 850 847 851 switch (IPC_GET_IMETHOD(*call)) { 848 case IPC_M_PHONE_HUNGUP:849 return EOK;850 851 852 case NET_ARP_DEVICE: 852 853 rc = measured_strings_receive(&address, &data, 1); -
uspace/srv/net/il/ip/ip.c
r13ecdac9 r1affcdf3 77 77 #include <il_skel.h> 78 78 79 // FIXME: remove this header 80 #include <kernel/ipc/ipc_methods.h> 81 79 82 /** IP module name. */ 80 83 #define NAME "ip" … … 201 204 202 205 /* Set the destination address */ 203 switch ( header->version) {206 switch (GET_IP_HEADER_VERSION(header)) { 204 207 case IPVERSION: 205 208 addrlen = sizeof(dest_in); … … 635 638 636 639 /* Process all IP options */ 637 while (next < first->header_length) {640 while (next < GET_IP_HEADER_LENGTH(first)) { 638 641 option = (ip_option_t *) (((uint8_t *) first) + next); 639 642 /* Skip end or noop */ … … 656 659 if (length % 4) { 657 660 bzero(((uint8_t *) last) + length, 4 - (length % 4)); 658 last->header_length = length / 4 + 1;661 SET_IP_HEADER_LENGTH(last, (length / 4 + 1)); 659 662 } else { 660 last->header_length = length / 4;663 SET_IP_HEADER_LENGTH(last, (length / 4)); 661 664 } 662 665 … … 706 709 return rc; 707 710 708 header->version = IPV4;709 header->fragment_offset_high = 0;711 SET_IP_HEADER_VERSION(header, IPV4); 712 SET_IP_HEADER_FRAGMENT_OFFSET_HIGH(header, 0); 710 713 header->fragment_offset_low = 0; 711 714 header->header_checksum = 0; … … 735 738 memcpy(middle_header, last_header, 736 739 IP_HEADER_LENGTH(last_header)); 737 header->flags |= IPFLAG_MORE_FRAGMENTS; 740 SET_IP_HEADER_FLAGS(header, 741 (GET_IP_HEADER_FLAGS(header) | IPFLAG_MORE_FRAGMENTS)); 738 742 middle_header->total_length = 739 743 htons(packet_get_data_length(next)); 740 middle_header->fragment_offset_high =741 IP_COMPUTE_FRAGMENT_OFFSET_HIGH(length) ;744 SET_IP_HEADER_FRAGMENT_OFFSET_HIGH(middle_header, 745 IP_COMPUTE_FRAGMENT_OFFSET_HIGH(length)); 742 746 middle_header->fragment_offset_low = 743 747 IP_COMPUTE_FRAGMENT_OFFSET_LOW(length); … … 768 772 middle_header->total_length = 769 773 htons(packet_get_data_length(next)); 770 middle_header->fragment_offset_high =771 IP_COMPUTE_FRAGMENT_OFFSET_HIGH(length) ;774 SET_IP_HEADER_FRAGMENT_OFFSET_HIGH(middle_header, 775 IP_COMPUTE_FRAGMENT_OFFSET_HIGH(length)); 772 776 middle_header->fragment_offset_low = 773 777 IP_COMPUTE_FRAGMENT_OFFSET_LOW(length); … … 785 789 length += packet_get_data_length(next); 786 790 free(last_header); 787 header->flags |= IPFLAG_MORE_FRAGMENTS; 791 SET_IP_HEADER_FLAGS(header, 792 (GET_IP_HEADER_FLAGS(header) | IPFLAG_MORE_FRAGMENTS)); 788 793 } 789 794 … … 834 839 new_header->total_length = htons(IP_HEADER_LENGTH(new_header) + length); 835 840 offset = IP_FRAGMENT_OFFSET(header) + IP_HEADER_DATA_LENGTH(header); 836 new_header->fragment_offset_high =837 IP_COMPUTE_FRAGMENT_OFFSET_HIGH(offset) ;841 SET_IP_HEADER_FRAGMENT_OFFSET_HIGH(new_header, 842 IP_COMPUTE_FRAGMENT_OFFSET_HIGH(offset)); 838 843 new_header->fragment_offset_low = 839 844 IP_COMPUTE_FRAGMENT_OFFSET_LOW(offset); … … 865 870 return NULL; 866 871 memcpy(middle, last, IP_HEADER_LENGTH(last)); 867 middle->flags |= IPFLAG_MORE_FRAGMENTS; 872 SET_IP_HEADER_FLAGS(middle, 873 (GET_IP_HEADER_FLAGS(middle) | IPFLAG_MORE_FRAGMENTS)); 868 874 return middle; 869 875 } … … 922 928 923 929 /* Fragmentation forbidden? */ 924 if( header->flags& IPFLAG_DONT_FRAGMENT)930 if(GET_IP_HEADER_FLAGS(header) & IPFLAG_DONT_FRAGMENT) 925 931 return EPERM; 926 932 … … 958 964 959 965 /* Mark the first as fragmented */ 960 header->flags |= IPFLAG_MORE_FRAGMENTS; 966 SET_IP_HEADER_FLAGS(header, 967 (GET_IP_HEADER_FLAGS(header) | IPFLAG_MORE_FRAGMENTS)); 961 968 962 969 /* Create middle fragments */ … … 1319 1326 int rc; 1320 1327 1321 if (( header->flags& IPFLAG_MORE_FRAGMENTS) ||1328 if ((GET_IP_HEADER_FLAGS(header) & IPFLAG_MORE_FRAGMENTS) || 1322 1329 IP_FRAGMENT_OFFSET(header)) { 1323 1330 // TODO fragmented … … 1325 1332 } 1326 1333 1327 switch ( header->version) {1334 switch (GET_IP_HEADER_VERSION(header)) { 1328 1335 case IPVERSION: 1329 1336 addrlen = sizeof(src_in); … … 1447 1454 1448 1455 /* Set the destination address */ 1449 switch ( header->version) {1456 switch (GET_IP_HEADER_VERSION(header)) { 1450 1457 case IPVERSION: 1451 1458 addrlen = sizeof(addr_in); … … 1909 1916 1910 1917 *answer_count = 0; 1918 1919 if (!IPC_GET_IMETHOD(*call)) 1920 return EOK; 1921 1911 1922 switch (IPC_GET_IMETHOD(*call)) { 1912 case IPC_M_PHONE_HUNGUP:1913 return EOK;1914 1915 1923 case IPC_M_CONNECT_TO_ME: 1916 1924 return ip_register(IL_GET_PROTO(*call), IL_GET_SERVICE(*call), -
uspace/srv/net/net/net.c
r13ecdac9 r1affcdf3 41 41 #include <ctype.h> 42 42 #include <ddi.h> 43 #include <ns.h> 43 44 #include <errno.h> 44 45 #include <malloc.h> … … 339 340 goto out; 340 341 341 rc = async_connect_to_me(PHONE_NS, SERVICE_NETWORKING, 0, 0, NULL);342 rc = service_register(SERVICE_NETWORKING); 342 343 if (rc != EOK) 343 344 goto out; … … 638 639 639 640 *answer_count = 0; 641 642 if (!IPC_GET_IMETHOD(*call)) 643 return EOK; 644 640 645 switch (IPC_GET_IMETHOD(*call)) { 641 case IPC_M_PHONE_HUNGUP:642 return EOK;643 646 case NET_NET_GET_DEVICE_CONF: 644 647 rc = measured_strings_receive(&strings, &data, … … 703 706 704 707 /* End if told to either by the message or the processing result */ 705 if (( IPC_GET_IMETHOD(call) == IPC_M_PHONE_HUNGUP) || (res == EHANGUP))708 if ((!IPC_GET_IMETHOD(call)) || (res == EHANGUP)) 706 709 return; 707 710 -
uspace/srv/net/netif/lo/lo.c
r13ecdac9 r1affcdf3 39 39 #include <stdio.h> 40 40 #include <str.h> 41 #include <ns.h> 41 42 #include <ipc/services.h> 42 43 #include <ipc/nil.h> … … 164 165 int netif_initialize(void) 165 166 { 166 return async_connect_to_me(PHONE_NS, SERVICE_LO, 0, 0, NULL);167 return service_register(SERVICE_LO); 167 168 } 168 169 -
uspace/srv/net/nil/eth/eth.c
r13ecdac9 r1affcdf3 59 59 #include <packet_remote.h> 60 60 #include <nil_skel.h> 61 62 // FIXME: remove this header 63 #include <kernel/ipc/ipc_methods.h> 61 64 62 65 #include "eth.h" … … 846 849 847 850 *answer_count = 0; 851 852 if (!IPC_GET_IMETHOD(*call)) 853 return EOK; 854 848 855 switch (IPC_GET_IMETHOD(*call)) { 849 case IPC_M_PHONE_HUNGUP:850 return EOK;851 852 856 case NET_NIL_DEVICE: 853 857 return eth_device_message(IPC_GET_DEVICE(*call), -
uspace/srv/net/nil/nildummy/nildummy.c
r13ecdac9 r1affcdf3 54 54 #include <nil_skel.h> 55 55 56 // FIXME: remove this header 57 #include <kernel/ipc/ipc_methods.h> 58 56 59 #include "nildummy.h" 57 60 … … 393 396 394 397 *answer_count = 0; 398 399 if (!IPC_GET_IMETHOD(*call)) 400 return EOK; 401 395 402 switch (IPC_GET_IMETHOD(*call)) { 396 case IPC_M_PHONE_HUNGUP:397 return EOK;398 399 403 case NET_NIL_DEVICE: 400 404 return nildummy_device_message(IPC_GET_DEVICE(*call), -
uspace/srv/net/tl/icmp/Makefile
r13ecdac9 r1affcdf3 32 32 EXTRA_CFLAGS = -I$(LIBNET_PREFIX)/include 33 33 BINARY = icmp 34 STATIC_ONLY = y 34 35 35 36 SOURCES = \ -
uspace/srv/net/tl/icmp/icmp.c
r13ecdac9 r1affcdf3 612 612 static void icmp_receiver(ipc_callid_t iid, ipc_call_t *icall) 613 613 { 614 bool loop = true;615 614 packet_t *packet; 616 615 int rc; 617 616 618 while (loop) { 617 while (true) { 618 if (!IPC_GET_IMETHOD(*icall)) 619 break; 620 619 621 switch (IPC_GET_IMETHOD(*icall)) { 620 622 case NET_TL_RECEIVED: … … 629 631 async_answer_0(iid, (sysarg_t) rc); 630 632 break; 631 case IPC_M_PHONE_HUNGUP:632 loop = false;633 continue;634 633 default: 635 634 async_answer_0(iid, (sysarg_t) ENOTSUP); -
uspace/srv/net/tl/tcp/tcp.c
r13ecdac9 r1affcdf3 38 38 #include <assert.h> 39 39 #include <async.h> 40 #include <async_obsolete.h> 40 41 #include <fibril_synch.h> 41 42 #include <malloc.h> … … 72 73 #include "tcp.h" 73 74 #include "tcp_header.h" 75 76 // FIXME: remove this header 77 #include <kernel/ipc/ipc_methods.h> 74 78 75 79 /** TCP module name. */ … … 476 480 old_incoming = socket_data->next_incoming; 477 481 478 if ( header->finalize) {482 if (GET_TCP_HEADER_FINALIZE(header)) { 479 483 socket_data->fin_incoming = new_sequence_number + 480 484 total_length - TCP_HEADER_LENGTH(header); … … 799 803 800 804 /* Notify the destination socket */ 801 async_ msg_5(socket->phone, NET_SOCKET_RECEIVED,805 async_obsolete_msg_5(socket->phone, NET_SOCKET_RECEIVED, 802 806 (sysarg_t) socket->socket_id, 803 807 ((packet_dimension->content < socket_data->data_fragment_size) ? … … 820 824 821 825 /* Notify the destination socket */ 822 async_ msg_5(socket->phone, NET_SOCKET_RECEIVED,826 async_obsolete_msg_5(socket->phone, NET_SOCKET_RECEIVED, 823 827 (sysarg_t) socket->socket_id, 824 828 0, 0, 0, … … 838 842 assert(packet); 839 843 840 if (! header->synchronize)844 if (!GET_TCP_HEADER_SYNCHRONIZE(header)) 841 845 return tcp_release_and_return(packet, EINVAL); 842 846 … … 903 907 assert(packet); 904 908 905 if (! header->synchronize)909 if (!GET_TCP_HEADER_SYNCHRONIZE(header)) 906 910 return tcp_release_and_return(packet, EINVAL); 907 911 … … 1057 1061 assert(packet); 1058 1062 1059 if (! header->acknowledge)1063 if (!GET_TCP_HEADER_ACKNOWLEDGE(header)) 1060 1064 return tcp_release_and_return(packet, EINVAL); 1061 1065 … … 1078 1082 if (rc == EOK) { 1079 1083 /* Notify the destination socket */ 1080 async_ msg_5(socket->phone, NET_SOCKET_ACCEPTED,1084 async_obsolete_msg_5(socket->phone, NET_SOCKET_ACCEPTED, 1081 1085 (sysarg_t) listening_socket->socket_id, 1082 1086 socket_data->data_fragment_size, TCP_HEADER_SIZE, … … 1126 1130 assert(header); 1127 1131 1128 if (! header->acknowledge)1132 if (!GET_TCP_HEADER_ACKNOWLEDGE(header)) 1129 1133 return; 1130 1134 … … 1269 1273 { 1270 1274 int res; 1271 bool keep_on_going = true;1272 1275 socket_cores_t local_sockets; 1273 1276 int app_phone = IPC_GET_PHONE(call); … … 1293 1296 fibril_rwlock_initialize(&lock); 1294 1297 1295 while ( keep_on_going) {1298 while (true) { 1296 1299 1297 1300 /* Answer the call */ … … 1301 1304 /* Get the next call */ 1302 1305 callid = async_get_call(&call); 1306 1307 if (!IPC_GET_IMETHOD(call)) { 1308 res = EHANGUP; 1309 break; 1310 } 1303 1311 1304 1312 /* Process the call */ 1305 1313 switch (IPC_GET_IMETHOD(call)) { 1306 case IPC_M_PHONE_HUNGUP:1307 keep_on_going = false;1308 res = EHANGUP;1309 break;1310 1311 1314 case NET_SOCKET: 1312 1315 socket_data = … … 1506 1509 1507 1510 /* Release the application phone */ 1508 async_ hangup(app_phone);1511 async_obsolete_hangup(app_phone); 1509 1512 1510 1513 printf("release\n"); … … 1833 1836 1834 1837 /* Remember the outgoing FIN */ 1835 if ( header->finalize)1838 if (GET_TCP_HEADER_FINALIZE(header)) 1836 1839 socket_data->fin_outgoing = socket_data->next_outgoing; 1837 1840 … … 1952 1955 header->acknowledgement_number = 1953 1956 htonl(socket_data->next_incoming); 1954 header->acknowledge = 1;1957 SET_TCP_HEADER_ACKNOWLEDGE(header, 1); 1955 1958 } 1956 1959 header->window = htons(socket_data->window); … … 2024 2027 header->source_port = htons(socket->port); 2025 2028 header->source_port = htons(socket_data->dest_port); 2026 header->header_length = TCP_COMPUTE_HEADER_LENGTH(sizeof(*header)); 2027 header->synchronize = synchronize; 2028 header->finalize = finalize; 2029 SET_TCP_HEADER_LENGTH(header, 2030 TCP_COMPUTE_HEADER_LENGTH(sizeof(*header))); 2031 SET_TCP_HEADER_SYNCHRONIZE(header, synchronize); 2032 SET_TCP_HEADER_FINALIZE(header, finalize); 2029 2033 } 2030 2034 -
uspace/srv/net/tl/tcp/tcp_header.h
r13ecdac9 r1affcdf3 47 47 * @param[in] header The TCP packet header. 48 48 */ 49 #define TCP_HEADER_LENGTH(header) ( (header)->header_length* 4U)49 #define TCP_HEADER_LENGTH(header) (GET_TCP_HEADER_LENGTH(header) * 4U) 50 50 51 51 /** Returns the TCP header length. … … 73 73 uint32_t sequence_number; 74 74 uint32_t acknowledgement_number; 75 76 #ifdef ARCH_IS_BIG_ENDIAN77 uint8_t header_length:4;78 uint8_t reserved1:4;79 #else80 uint8_t reserved1:4;81 uint8_t header_length:4;82 #endif83 75 84 #ifdef ARCH_IS_BIG_ENDIAN 85 uint8_t reserved2:2; 86 uint8_t urgent:1; 87 uint8_t acknowledge:1; 88 uint8_t push:1; 89 uint8_t reset:1; 90 uint8_t synchronize:1; 91 uint8_t finalize:1; 92 #else 93 uint8_t finalize:1; 94 uint8_t synchronize:1; 95 uint8_t reset:1; 96 uint8_t push:1; 97 uint8_t acknowledge:1; 98 uint8_t urgent:1; 99 uint8_t reserved2:2; 100 #endif 76 uint8_t hlr; /* header length, reserved1 */ 77 78 #define GET_TCP_HEADER_LENGTH(header) \ 79 (((header)->hlr & 0xf0) >> 4) 80 #define SET_TCP_HEADER_LENGTH(header, length) \ 81 ((header)->hlr = \ 82 ((length & 0x0f) << 4) | ((header)->hlr & 0x0f)) 83 84 #define GET_TCP_HEADER_RESERVED1(header) \ 85 ((header)->hlr & 0x0f) 86 #define SET_TCP_HEADER_RESERVED1(header, reserved1) \ 87 ((header)->hlr = \ 88 (reserved1 & 0x0f) | ((header)->hlr & 0xf0)) 89 90 /* reserved2, urgent, acknowledge, push, reset, synchronize, finalize */ 91 uint8_t ruaprsf; 92 93 #define GET_TCP_HEADER_RESERVED2(header) \ 94 (((header)->ruaprsf & 0xc0) >> 6) 95 #define SET_TCP_HEADER_RESERVED2(header, reserved2) \ 96 ((header)->ruaprsf = \ 97 ((reserved2 & 0x03) << 6) | ((header)->ruaprsf & 0x3f)) 98 99 #define GET_TCP_HEADER_URGENT(header) \ 100 (((header)->ruaprsf & 0x20) >> 5) 101 #define SET_TCP_HEADER_URGENT(header, urgent) \ 102 ((header)->ruaprsf = \ 103 ((urgent & 0x01) << 5) | ((header)->ruaprsf & 0xdf)) 104 105 #define GET_TCP_HEADER_ACKNOWLEDGE(header) \ 106 (((header)->ruaprsf & 0x10) >> 4) 107 #define SET_TCP_HEADER_ACKNOWLEDGE(header, acknowledge) \ 108 ((header)->ruaprsf = \ 109 ((acknowledge & 0x01) << 4) | ((header)->ruaprsf & 0xef)) 110 111 #define GET_TCP_HEADER_PUSH(header) \ 112 (((header)->ruaprsf & 0x08) >> 3) 113 #define SET_TCP_HEADER_PUSH(header, push) \ 114 ((header)->ruaprsf = \ 115 ((push & 0x01) << 3) | ((header)->ruaprsf & 0xf7)) 116 117 #define GET_TCP_HEADER_RESET(header) \ 118 (((header)->ruaprsf & 0x04) >> 2) 119 #define SET_TCP_HEADER_RESET(header, reset) \ 120 ((header)->ruaprsf = \ 121 ((reset & 0x01) << 2) | ((header)->ruaprsf & 0xfb)) 122 123 #define GET_TCP_HEADER_SYNCHRONIZE(header) \ 124 (((header)->ruaprsf & 0x02) >> 1) 125 #define SET_TCP_HEADER_SYNCHRONIZE(header, synchronize) \ 126 ((header)->ruaprsf = \ 127 ((synchronize & 0x01) << 1) | ((header)->ruaprsf & 0xfd)) 128 129 #define GET_TCP_HEADER_FINALIZE(header) \ 130 ((header)->ruaprsf & 0x01) 131 #define SET_TCP_HEADER_FINALIZE(header, finalize) \ 132 ((header)->ruaprsf = \ 133 (finalize & 0x01) | ((header)->ruaprsf & 0xfe)) 101 134 102 135 uint16_t window; -
uspace/srv/net/tl/udp/udp.c
r13ecdac9 r1affcdf3 37 37 38 38 #include <async.h> 39 #include <async_obsolete.h> 39 40 #include <fibril_synch.h> 40 41 #include <malloc.h> … … 69 70 #include "udp.h" 70 71 #include "udp_header.h" 72 73 // FIXME: remove this header 74 #include <kernel/ipc/ipc_methods.h> 71 75 72 76 /** UDP module name. */ … … 299 303 /* Notify the destination socket */ 300 304 fibril_rwlock_write_unlock(&udp_globals.lock); 301 async_ msg_5(socket->phone, NET_SOCKET_RECEIVED,305 async_obsolete_msg_5(socket->phone, NET_SOCKET_RECEIVED, 302 306 (sysarg_t) socket->socket_id, packet_dimension->content, 0, 0, 303 307 (sysarg_t) fragments); … … 748 752 { 749 753 int res; 750 bool keep_on_going = true;751 754 socket_cores_t local_sockets; 752 755 int app_phone = IPC_GET_PHONE(call); … … 773 776 socket_cores_initialize(&local_sockets); 774 777 775 while ( keep_on_going) {778 while (true) { 776 779 777 780 /* Answer the call */ … … 783 786 /* Get the next call */ 784 787 callid = async_get_call(&call); 788 789 if (!IPC_GET_IMETHOD(call)) { 790 res = EHANGUP; 791 break; 792 } 785 793 786 794 /* Process the call */ 787 795 switch (IPC_GET_IMETHOD(call)) { 788 case IPC_M_PHONE_HUNGUP:789 keep_on_going = false;790 res = EHANGUP;791 break;792 793 796 case NET_SOCKET: 794 797 socket_id = SOCKET_GET_SOCKET_ID(call); … … 880 883 881 884 /* Release the application phone */ 882 async_ hangup(app_phone);885 async_obsolete_hangup(app_phone); 883 886 884 887 /* Release all local sockets */
Note:
See TracChangeset
for help on using the changeset viewer.
