Changes in uspace/srv/net/il/ip/ip.c [79ae36dd:ccca251] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/net/il/ip/ip.c
r79ae36dd rccca251 77 77 #include <il_skel.h> 78 78 79 // FIXME: remove this header80 #include <kernel/ipc/ipc_methods.h>81 82 79 /** IP module name. */ 83 80 #define NAME "ip" … … 204 201 205 202 /* Set the destination address */ 206 switch ( GET_IP_HEADER_VERSION(header)) {203 switch (header->version) { 207 204 case IPVERSION: 208 205 addrlen = sizeof(dest_in); … … 638 635 639 636 /* Process all IP options */ 640 while (next < GET_IP_HEADER_LENGTH(first)) {637 while (next < first->header_length) { 641 638 option = (ip_option_t *) (((uint8_t *) first) + next); 642 639 /* Skip end or noop */ … … 659 656 if (length % 4) { 660 657 bzero(((uint8_t *) last) + length, 4 - (length % 4)); 661 SET_IP_HEADER_LENGTH(last, (length / 4 + 1));658 last->header_length = length / 4 + 1; 662 659 } else { 663 SET_IP_HEADER_LENGTH(last, (length / 4));660 last->header_length = length / 4; 664 661 } 665 662 … … 709 706 return rc; 710 707 711 SET_IP_HEADER_VERSION(header, IPV4);712 SET_IP_HEADER_FRAGMENT_OFFSET_HIGH(header, 0);708 header->version = IPV4; 709 header->fragment_offset_high = 0; 713 710 header->fragment_offset_low = 0; 714 711 header->header_checksum = 0; … … 738 735 memcpy(middle_header, last_header, 739 736 IP_HEADER_LENGTH(last_header)); 740 SET_IP_HEADER_FLAGS(header, 741 (GET_IP_HEADER_FLAGS(header) | IPFLAG_MORE_FRAGMENTS)); 737 header->flags |= IPFLAG_MORE_FRAGMENTS; 742 738 middle_header->total_length = 743 739 htons(packet_get_data_length(next)); 744 SET_IP_HEADER_FRAGMENT_OFFSET_HIGH(middle_header,745 IP_COMPUTE_FRAGMENT_OFFSET_HIGH(length) );740 middle_header->fragment_offset_high = 741 IP_COMPUTE_FRAGMENT_OFFSET_HIGH(length); 746 742 middle_header->fragment_offset_low = 747 743 IP_COMPUTE_FRAGMENT_OFFSET_LOW(length); … … 772 768 middle_header->total_length = 773 769 htons(packet_get_data_length(next)); 774 SET_IP_HEADER_FRAGMENT_OFFSET_HIGH(middle_header,775 IP_COMPUTE_FRAGMENT_OFFSET_HIGH(length) );770 middle_header->fragment_offset_high = 771 IP_COMPUTE_FRAGMENT_OFFSET_HIGH(length); 776 772 middle_header->fragment_offset_low = 777 773 IP_COMPUTE_FRAGMENT_OFFSET_LOW(length); … … 789 785 length += packet_get_data_length(next); 790 786 free(last_header); 791 SET_IP_HEADER_FLAGS(header, 792 (GET_IP_HEADER_FLAGS(header) | IPFLAG_MORE_FRAGMENTS)); 787 header->flags |= IPFLAG_MORE_FRAGMENTS; 793 788 } 794 789 … … 839 834 new_header->total_length = htons(IP_HEADER_LENGTH(new_header) + length); 840 835 offset = IP_FRAGMENT_OFFSET(header) + IP_HEADER_DATA_LENGTH(header); 841 SET_IP_HEADER_FRAGMENT_OFFSET_HIGH(new_header,842 IP_COMPUTE_FRAGMENT_OFFSET_HIGH(offset) );836 new_header->fragment_offset_high = 837 IP_COMPUTE_FRAGMENT_OFFSET_HIGH(offset); 843 838 new_header->fragment_offset_low = 844 839 IP_COMPUTE_FRAGMENT_OFFSET_LOW(offset); … … 870 865 return NULL; 871 866 memcpy(middle, last, IP_HEADER_LENGTH(last)); 872 SET_IP_HEADER_FLAGS(middle, 873 (GET_IP_HEADER_FLAGS(middle) | IPFLAG_MORE_FRAGMENTS)); 867 middle->flags |= IPFLAG_MORE_FRAGMENTS; 874 868 return middle; 875 869 } … … 928 922 929 923 /* Fragmentation forbidden? */ 930 if( GET_IP_HEADER_FLAGS(header)& IPFLAG_DONT_FRAGMENT)924 if(header->flags & IPFLAG_DONT_FRAGMENT) 931 925 return EPERM; 932 926 … … 964 958 965 959 /* Mark the first as fragmented */ 966 SET_IP_HEADER_FLAGS(header, 967 (GET_IP_HEADER_FLAGS(header) | IPFLAG_MORE_FRAGMENTS)); 960 header->flags |= IPFLAG_MORE_FRAGMENTS; 968 961 969 962 /* Create middle fragments */ … … 1326 1319 int rc; 1327 1320 1328 if (( GET_IP_HEADER_FLAGS(header)& IPFLAG_MORE_FRAGMENTS) ||1321 if ((header->flags & IPFLAG_MORE_FRAGMENTS) || 1329 1322 IP_FRAGMENT_OFFSET(header)) { 1330 1323 // TODO fragmented … … 1332 1325 } 1333 1326 1334 switch ( GET_IP_HEADER_VERSION(header)) {1327 switch (header->version) { 1335 1328 case IPVERSION: 1336 1329 addrlen = sizeof(src_in); … … 1454 1447 1455 1448 /* Set the destination address */ 1456 switch ( GET_IP_HEADER_VERSION(header)) {1449 switch (header->version) { 1457 1450 case IPVERSION: 1458 1451 addrlen = sizeof(addr_in); … … 1916 1909 1917 1910 *answer_count = 0; 1918 1919 if (!IPC_GET_IMETHOD(*call))1911 switch (IPC_GET_IMETHOD(*call)) { 1912 case IPC_M_PHONE_HUNGUP: 1920 1913 return EOK; 1921 1914 1922 switch (IPC_GET_IMETHOD(*call)) {1923 1915 case IPC_M_CONNECT_TO_ME: 1924 1916 return ip_register(IL_GET_PROTO(*call), IL_GET_SERVICE(*call),
Note:
See TracChangeset
for help on using the changeset viewer.