493,9 → 493,6 |
if( device_id > 0 ){ |
netif = ip_netifs_find( & ip_globals.netifs, device_id ); |
route = ip_netif_find_route( netif, * dest ); |
if( netif && ( ! route ) && ( ip_globals.gateway.netif == netif )){ |
route = & ip_globals.gateway; |
} |
}else{ |
route = ip_find_route( * dest ); |
netif = route ? route->netif : NULL; |
700,7 → 697,6 |
ERROR_PROPAGATE( data_receive(( void ** ) & addr, & addrlen )); |
ERROR_PROPAGATE( ip_get_route_req( 0, IP_GET_PROTOCOL( call ), addr, ( socklen_t ) addrlen, IPC_SET_DEVICE( answer ), & header, & headerlen )); |
* IP_SET_HEADERLEN( answer ) = headerlen; |
* answer_count = 2; |
if( ! ERROR_OCCURRED( data_reply( & headerlen, sizeof( headerlen )))){ |
ERROR_CODE = data_reply( header, headerlen ); |
} |
941,6 → 937,7 |
header->total_length = htons( IP_TOTAL_LENGTH( header ) - length ); |
new_header->total_length = htons( IP_HEADER_LENGTH( new_header ) + length ); |
offset = IP_FRAGMENT_OFFSET( header ) + IP_HEADER_DATA_LENGTH( header ); |
printf( "offset %d = %d + %d\n", offset, IP_FRAGMENT_OFFSET( header ), IP_HEADER_DATA_LENGTH( header )); |
new_header->fragment_offset_high = IP_COMPUTE_FRAGMENT_OFFSET_HIGH( offset ); |
new_header->fragment_offset_low = IP_COMPUTE_FRAGMENT_OFFSET_LOW( offset ); |
new_header->header_checksum = IP_HEADER_CHECKSUM( new_header ); |
1169,17 → 1166,9 |
dest = ( struct sockaddr * ) & dest_in; |
break; |
*/ default: |
return ip_release_and_return( packet, EAFNOSUPPORT ); |
return EAFNOSUPPORT; |
} |
if( ERROR_OCCURRED( packet_set_addr( packet, ( uint8_t * ) src, ( uint8_t * ) dest, addrlen ))){ |
return ip_release_and_return( packet, ERROR_CODE ); |
} |
// trim padding if present |
if(( ! error ) && ( IP_TOTAL_LENGTH( header ) < packet_get_data_length( packet ))){ |
if( ERROR_OCCURRED( packet_trim( packet, 0, packet_get_data_length( packet ) - IP_TOTAL_LENGTH( header )))){ |
return ip_release_and_return( packet, ERROR_CODE ); |
} |
} |
ERROR_PROPAGATE( packet_set_addr( packet, ( uint8_t * ) src, ( uint8_t * ) dest, addrlen )); |
fibril_rwlock_read_lock( & ip_globals.protos_lock ); |
proto = ip_protos_find( & ip_globals.protos, header->protocol ); |
if( ! proto ){ |