Changeset f14291b in mainline for uspace/lib
- Timestamp:
- 2010-10-19T20:55:53Z (15 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- a93d79a
- Parents:
- 1882525 (diff), a7a85d16 (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/lib
- Files:
-
- 31 added
- 27 deleted
- 45 edited
- 28 moved
-
c/Makefile (modified) (2 diffs)
-
c/generic/adt/char_map.c (added)
-
c/generic/adt/dynamic_fifo.c (added)
-
c/generic/adt/measured_strings.c (added)
-
c/generic/async_rel.c (added)
-
c/generic/ddi.c (modified) (1 diff)
-
c/generic/io/io.c (modified) (1 diff)
-
c/generic/libc.c (modified) (2 diffs)
-
c/generic/net/icmp_api.c (added)
-
c/generic/net/icmp_common.c (moved) (moved from uspace/lib/socket/generic/icmp_common.c ) (1 diff)
-
c/generic/net/inet.c (added)
-
c/generic/net/modules.c (added)
-
c/generic/net/packet.c (added)
-
c/generic/net/socket_client.c (added)
-
c/generic/net/socket_parse.c (moved) (moved from uspace/lib/socket/generic/socket_parse.c ) (1 diff)
-
c/include/adt/char_map.h (added)
-
c/include/adt/dynamic_fifo.h (added)
-
c/include/adt/generic_char_map.h (added)
-
c/include/adt/generic_field.h (added)
-
c/include/adt/int_map.h (added)
-
c/include/adt/measured_strings.h (added)
-
c/include/async_rel.h (added)
-
c/include/byteorder.h (modified) (1 diff)
-
c/include/ddi.h (modified) (1 diff)
-
c/include/err.h (modified) (2 diffs)
-
c/include/errno.h (modified) (1 diff)
-
c/include/fibril_synch.h (modified) (5 diffs)
-
c/include/ipc/arp.h (moved) (moved from uspace/lib/net/include/arp_messages.h ) (1 diff)
-
c/include/ipc/icmp.h (moved) (moved from uspace/lib/socket/include/icmp_messages.h ) (1 diff)
-
c/include/ipc/il.h (moved) (moved from uspace/lib/net/include/il_messages.h ) (2 diffs)
-
c/include/ipc/ip.h (moved) (moved from uspace/lib/net/include/ip_messages.h ) (1 diff)
-
c/include/ipc/net.h (added)
-
c/include/ipc/net_net.h (moved) (moved from uspace/lib/net/include/net_net_messages.h ) (1 diff)
-
c/include/ipc/netif.h (moved) (moved from uspace/lib/net/include/netif_messages.h ) (4 diffs)
-
c/include/ipc/nil.h (moved) (moved from uspace/lib/net/include/nil_messages.h ) (2 diffs)
-
c/include/ipc/packet.h (moved) (moved from uspace/lib/socket/include/packet/packet_messages.h ) (2 diffs)
-
c/include/ipc/socket.h (moved) (moved from uspace/lib/socket/include/socket_messages.h ) (2 diffs)
-
c/include/ipc/tl.h (moved) (moved from uspace/lib/net/include/tl_messages.h ) (1 diff)
-
c/include/net/device.h (moved) (moved from uspace/lib/socket/include/net_device.h ) (2 diffs)
-
c/include/net/icmp_api.h (added)
-
c/include/net/icmp_codes.h (moved) (moved from uspace/lib/socket/include/icmp_codes.h ) (2 diffs)
-
c/include/net/icmp_common.h (moved) (moved from uspace/lib/socket/include/icmp_common.h ) (1 diff)
-
c/include/net/in.h (moved) (moved from uspace/lib/socket/include/in.h ) (2 diffs)
-
c/include/net/in6.h (moved) (moved from uspace/lib/socket/include/in6.h ) (2 diffs)
-
c/include/net/inet.h (added)
-
c/include/net/ip_codes.h (added)
-
c/include/net/ip_protocols.h (added)
-
c/include/net/modules.h (added)
-
c/include/net/packet.h (added)
-
c/include/net/packet_header.h (moved) (moved from uspace/lib/socket/include/packet/packet_header.h ) (1 diff)
-
c/include/net/socket.h (added)
-
c/include/net/socket_codes.h (added)
-
c/include/net/socket_parse.h (moved) (moved from uspace/lib/socket/include/socket_parse.h )
-
c/include/stdio.h (modified) (1 diff)
-
c/include/sys/time.h (modified) (1 diff)
-
c/include/unistd.h (modified) (2 diffs)
-
net/Makefile (modified) (1 diff)
-
net/adt/module_map.c (modified) (5 diffs)
-
net/generic/generic.c (added)
-
net/generic/net_checksum.c (modified) (4 diffs)
-
net/generic/net_remote.c (modified) (1 diff)
-
net/generic/packet_client.c (added)
-
net/generic/packet_remote.c (modified) (10 diffs)
-
net/generic/socket_core.c (added)
-
net/il/arp_remote.c (modified) (2 diffs)
-
net/il/ip_client.c (modified) (4 diffs)
-
net/il/ip_remote.c (modified) (3 diffs)
-
net/include/adt/module_map.h (modified) (1 diff)
-
net/include/arp_interface.h (modified) (1 diff)
-
net/include/generic.h (moved) (moved from uspace/lib/socket/generic/icmp_api.c ) (1 diff)
-
net/include/icmp_client.h (modified) (1 diff)
-
net/include/icmp_header.h (modified) (1 diff)
-
net/include/icmp_interface.h (modified) (1 diff)
-
net/include/il_interface.h (modified) (1 diff)
-
net/include/ip_client.h (modified) (1 diff)
-
net/include/ip_interface.h (modified) (3 diffs)
-
net/include/ip_remote.h (modified) (1 diff)
-
net/include/net_checksum.h (modified) (1 diff)
-
net/include/net_interface.h (modified) (1 diff)
-
net/include/netif_interface.h (modified) (2 diffs)
-
net/include/netif_local.h (modified) (2 diffs)
-
net/include/netif_remote.h (modified) (1 diff)
-
net/include/nil_interface.h (modified) (2 diffs)
-
net/include/nil_remote.h (modified) (1 diff)
-
net/include/packet_client.h (added)
-
net/include/packet_remote.h (modified) (1 diff)
-
net/include/socket_core.h (added)
-
net/include/tl_common.h (modified) (1 diff)
-
net/include/tl_interface.h (modified) (1 diff)
-
net/netif/netif_local.c (modified) (2 diffs)
-
net/netif/netif_nil_bundle.c (deleted)
-
net/netif/netif_remote.c (modified) (2 diffs)
-
net/nil/nil_remote.c (modified) (1 diff)
-
net/tl/icmp_client.c (modified) (1 diff)
-
net/tl/icmp_remote.c (modified) (1 diff)
-
net/tl/tl_common.c (modified) (6 diffs)
-
packet/Makefile (moved) (moved from uspace/lib/socket/Makefile ) (1 diff)
-
packet/generic/packet_server.c (moved) (moved from uspace/lib/socket/packet/packet_server.c ) (2 diffs)
-
packet/include/net_byteorder.h (moved) (moved from uspace/lib/socket/include/net_byteorder.h )
-
packet/include/net_err.h (moved) (moved from uspace/lib/socket/include/net_err.h )
-
packet/include/netdb.h (moved) (moved from uspace/lib/socket/include/netdb.h )
-
packet/include/packet_local.h (added)
-
packet/include/packet_server.h (moved) (moved from uspace/lib/socket/include/packet/packet_server.h )
-
packet/include/socket_errno.h (moved) (moved from uspace/lib/socket/include/socket_errno.h )
-
packet/include/tcp_codes.h (moved) (moved from uspace/lib/socket/include/tcp_codes.h )
-
socket/adt/char_map.c (deleted)
-
socket/adt/dynamic_fifo.c (deleted)
-
socket/adt/measured_strings.c (deleted)
-
socket/generic/inet.c (deleted)
-
socket/generic/net_modules.c (deleted)
-
socket/generic/socket_client.c (deleted)
-
socket/generic/socket_core.c (deleted)
-
socket/include/adt/char_map.h (deleted)
-
socket/include/adt/dynamic_fifo.h (deleted)
-
socket/include/adt/generic_char_map.h (deleted)
-
socket/include/adt/generic_field.h (deleted)
-
socket/include/adt/int_map.h (deleted)
-
socket/include/adt/measured_strings.h (deleted)
-
socket/include/icmp_api.h (deleted)
-
socket/include/inet.h (deleted)
-
socket/include/ip_codes.h (deleted)
-
socket/include/ip_protocols.h (deleted)
-
socket/include/net_messages.h (deleted)
-
socket/include/net_modules.h (deleted)
-
socket/include/packet/packet.h (deleted)
-
socket/include/packet/packet_client.h (deleted)
-
socket/include/socket.h (deleted)
-
socket/include/socket_codes.h (deleted)
-
socket/include/socket_core.h (deleted)
-
socket/packet/packet.c (deleted)
-
socket/packet/packet_client.c (deleted)
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/c/Makefile
r1882525 rf14291b 84 84 generic/ipc.c \ 85 85 generic/async.c \ 86 generic/async_rel.c \ 86 87 generic/loader.c \ 87 88 generic/getopt.c \ 88 89 generic/adt/list.o \ 89 90 generic/adt/hash_table.o \ 91 generic/adt/dynamic_fifo.c \ 92 generic/adt/measured_strings.c \ 93 generic/adt/char_map.c \ 90 94 generic/time.c \ 91 95 generic/err.c \ … … 95 99 generic/vfs/vfs.c \ 96 100 generic/vfs/canonify.c \ 101 generic/net/inet.c \ 102 generic/net/icmp_common.c \ 103 generic/net/icmp_api.c \ 104 generic/net/modules.c \ 105 generic/net/packet.c \ 106 generic/net/socket_client.c \ 107 generic/net/socket_parse.c \ 97 108 generic/stacktrace.c \ 98 109 generic/arg_parse.c \ -
uspace/lib/c/generic/ddi.c
r1882525 rf14291b 96 96 } 97 97 98 /** Interrupt control99 *100 * @param enable 1 - enable interrupts, 0 - disable interrupts101 */102 int preemption_control(int enable)103 {104 return __SYSCALL1(SYS_PREEMPT_CONTROL, (sysarg_t) enable);105 }106 107 98 /** Enable PIO for specified I/O range. 108 99 * -
uspace/lib/c/generic/io/io.c
r1882525 rf14291b 757 757 } 758 758 759 int fileno(FILE *stream) 760 { 761 if (stream->klog) { 762 errno = EBADF; 763 return -1; 764 } 765 766 return stream->fd; 767 } 768 759 769 int fphone(FILE *stream) 760 770 { -
uspace/lib/c/generic/libc.c
r1882525 rf14291b 50 50 #include <ipc/ipc.h> 51 51 #include <async.h> 52 #include <async_rel.h> 52 53 #include <as.h> 53 54 #include <loader/pcb.h> … … 65 66 __heap_init(); 66 67 __async_init(); 68 (void) async_rel_init(); 67 69 fibril_t *fibril = fibril_setup(); 68 70 __tcb_set(fibril->tcb); -
uspace/lib/c/generic/net/icmp_common.c
r1882525 rf14291b 27 27 */ 28 28 29 /** @addtogroup icmp29 /** @addtogroup libc 30 30 * @{ 31 31 */ 32 32 33 33 /** @file 34 * ICMP common interface implementation.35 * @see icmp_common.h34 * ICMP common interface implementation. 35 * @see icmp_common.h 36 36 */ 37 37 38 #include <net/modules.h> 39 #include <net/icmp_common.h> 40 41 #include <ipc/services.h> 42 #include <ipc/icmp.h> 43 44 #include <sys/time.h> 38 45 #include <async.h> 39 #include <ipc/services.h>40 46 41 #include <net_modules.h> 42 #include <icmp_common.h> 43 #include <icmp_messages.h> 44 45 int icmp_connect_module(services_t service, suseconds_t timeout){ 47 /** Connects to the ICMP module. 48 * 49 * @param service The ICMP module service. Ignored parameter. 50 * @param[in] timeout The connection timeout in microseconds. No timeout if 51 * set to zero. 52 * @returns The ICMP module phone on success. 53 * @returns ETIMEOUT if the connection timeouted. 54 */ 55 int icmp_connect_module(services_t service, suseconds_t timeout) 56 { 46 57 int phone; 47 58 48 59 phone = connect_to_service_timeout(SERVICE_ICMP, timeout); 49 if (phone >= 0){60 if (phone >= 0) 50 61 async_req_0_0(phone, NET_ICMP_INIT); 51 } 62 52 63 return phone; 53 64 } -
uspace/lib/c/generic/net/socket_parse.c
r1882525 rf14291b 35 35 */ 36 36 37 #include <socket_parse.h> 37 #include <net/socket_parse.h> 38 #include <net/socket.h> 38 39 #include <arg_parse.h> 39 40 #include <errno.h> 40 41 #include <str.h> 41 #include <socket.h>42 42 43 43 /** Translate the character string to the address family number. -
uspace/lib/c/include/byteorder.h
r1882525 rf14291b 80 80 #endif 81 81 82 #define htons(n) host2uint16_t_be((n)) 83 #define htonl(n) host2uint32_t_be((n)) 84 #define ntohs(n) uint16_t_be2host((n)) 85 #define ntohl(n) uint32_t_be2host((n)) 86 82 87 static inline uint64_t uint64_t_byteorder_swap(uint64_t n) 83 88 { -
uspace/lib/c/include/ddi.h
r1882525 rf14291b 41 41 extern int physmem_map(void *, void *, unsigned long, int); 42 42 extern int iospace_enable(task_id_t, void *, unsigned long); 43 extern int preemption_control(int);44 43 extern int pio_enable(void *, size_t, void **); 45 44 -
uspace/lib/c/include/err.h
r1882525 rf14291b 36 36 #define LIBC_ERR_H_ 37 37 38 #include <stdio.h> 39 #include <errno.h> 40 41 #ifdef CONFIG_DEBUG 42 #include <str_error.h> 43 #endif 44 38 45 #define errx(status, fmt, ...) { \ 39 46 printf((fmt), ##__VA_ARGS__); \ … … 41 48 } 42 49 50 51 /** An actual stored error code. */ 52 #define ERROR_CODE error_check_return_value 53 54 /** An error processing routines declaration. 55 * 56 * This has to be declared in the block where the error processing 57 * is desired. 58 */ 59 #define ERROR_DECLARE int ERROR_CODE 60 61 /** Store the value as an error code and checks if an error occurred. 62 * 63 * @param[in] value The value to be checked. May be a function call. 64 * @return False if the value indicates success (EOK). 65 * @return True otherwise. 66 */ 67 #ifdef CONFIG_DEBUG 68 69 #define ERROR_OCCURRED(value) \ 70 (((ERROR_CODE = (value)) != EOK) && \ 71 ({ \ 72 fprintf(stderr, "libsocket error at %s:%d (%s)\n", \ 73 __FILE__, __LINE__, str_error(ERROR_CODE)); \ 74 1; \ 75 })) 76 77 #else 78 79 #define ERROR_OCCURRED(value) ((ERROR_CODE = (value)) != EOK) 80 81 #endif 82 83 #define ERROR_NONE(value) !ERROR_OCCURRED((value)) 84 85 /** Error propagation 86 * 87 * Check if an error occurred and immediately exit the actual 88 * function returning the error code. 89 * 90 * @param[in] value The value to be checked. May be a function call. 91 * 92 */ 93 94 #define ERROR_PROPAGATE(value) \ 95 if (ERROR_OCCURRED(value)) \ 96 return ERROR_CODE 97 43 98 #endif 44 99 -
uspace/lib/c/include/errno.h
r1882525 rf14291b 56 56 #define EMLINK (-266) 57 57 58 /** An API function is called while another blocking function is in progress. */ 59 #define EINPROGRESS (-10036) 60 61 /** The socket identifier is not valid. */ 62 #define ENOTSOCK (-10038) 63 64 /** The destination address required. */ 65 #define EDESTADDRREQ (-10039) 66 67 /** Protocol is not supported. */ 68 #define EPROTONOSUPPORT (-10043) 69 70 /** Socket type is not supported. */ 71 #define ESOCKTNOSUPPORT (-10044) 72 73 /** Protocol family is not supported. */ 74 #define EPFNOSUPPORT (-10046) 75 76 /** Address family is not supported. */ 77 #define EAFNOSUPPORT (-10047) 78 79 /** Address is already in use. */ 80 #define EADDRINUSE (-10048) 81 82 /** The socket is not connected or bound. */ 83 #define ENOTCONN (-10057) 84 85 /** The requested operation was not performed. 86 * Try again later. 87 */ 88 #define TRY_AGAIN (-11002) 89 90 /** No data. 91 */ 92 #define NO_DATA (-11004) 93 58 94 #endif 59 95 -
uspace/lib/c/include/fibril_synch.h
r1882525 rf14291b 47 47 } fibril_mutex_t; 48 48 49 #define FIBRIL_MUTEX_INITIALIZE (name) \50 fibril_mutex_t name = {\49 #define FIBRIL_MUTEX_INITIALIZER(name) \ 50 { \ 51 51 .counter = 1, \ 52 52 .waiters = { \ … … 55 55 } \ 56 56 } 57 58 #define FIBRIL_MUTEX_INITIALIZE(name) \ 59 fibril_mutex_t name = FIBRIL_MUTEX_INITIALIZER(name) 57 60 58 61 typedef struct { … … 62 65 } fibril_rwlock_t; 63 66 64 #define FIBRIL_RWLOCK_INITIALIZE (name) \65 fibril_rwlock_t name ={ \67 #define FIBRIL_RWLOCK_INITIALIZER(name) \ 68 { \ 66 69 .readers = 0, \ 67 70 .writers = 0, \ … … 72 75 } 73 76 77 #define FIBRIL_RWLOCK_INITIALIZE(name) \ 78 fibril_rwlock_t name = FIBRIL_RWLOCK_INITIALIZER(name) 79 74 80 typedef struct { 75 81 link_t waiters; 76 82 } fibril_condvar_t; 77 83 78 #define FIBRIL_CONDVAR_INITIALIZE (name) \79 fibril_condvar_t name ={ \84 #define FIBRIL_CONDVAR_INITIALIZER(name) \ 85 { \ 80 86 .waiters = { \ 81 87 .next = &name.waiters, \ … … 83 89 } \ 84 90 } 91 92 #define FIBRIL_CONDVAR_INITIALIZE(name) \ 93 fibril_condvar_t name = FIBRIL_CONDVAR_INITIALIZER(name) 85 94 86 95 extern void fibril_mutex_initialize(fibril_mutex_t *); -
uspace/lib/c/include/ipc/arp.h
r1882525 rf14291b 27 27 */ 28 28 29 /** @addtogroup arp30 * @{29 /** @addtogroup libc 30 * @{ 31 31 */ 32 32 33 33 /** @file 34 * ARP module messages.35 * @see arp_interface.h34 * ARP module messages. 35 * @see arp_interface.h 36 36 */ 37 37 38 #ifndef __NET_ARP_MESSAGES__39 #define __NET_ARP_MESSAGES__38 #ifndef LIBC_ARP_MESSAGES_ 39 #define LIBC_ARP_MESSAGES_ 40 40 41 41 #include <ipc/ipc.h> 42 #include <ipc/net.h> 42 43 43 #include <net_messages.h> 44 45 /** ARP module messages. 46 */ 47 typedef enum{ 44 /** ARP module messages. */ 45 typedef enum { 48 46 /** Clean cache message. 49 * @see arp_clean_cache()47 * @see arp_clean_cache() 50 48 */ 51 49 NET_ARP_CLEAN_CACHE = NET_ARP_FIRST, 52 50 /** Clear address cache message. 53 * @see arp_clear_address_msg()51 * @see arp_clear_address_msg() 54 52 */ 55 53 NET_ARP_CLEAR_ADDRESS, 56 54 /** Clear device cache message. 57 * @see arp_clear_device_req()55 * @see arp_clear_device_req() 58 56 */ 59 57 NET_ARP_CLEAR_DEVICE, 60 58 /** New device message. 61 * @see arp_device_req()59 * @see arp_device_req() 62 60 */ 63 61 NET_ARP_DEVICE, 64 62 /** Address translation message. 65 * @see arp_translate_req()63 * @see arp_translate_req() 66 64 */ 67 65 NET_ARP_TRANSLATE 68 66 } arp_messages; 69 67 70 /** @name ARP specific message parameters definitions 71 */ 68 /** @name ARP specific message parameters definitions */ 72 69 /*@{*/ 73 70 74 71 /** Returns the protocol service message parameter. 75 * @param[in] call The message call structure.72 * @param[in] call The message call structure. 76 73 */ 77 74 #define ARP_GET_NETIF(call) \ 78 ({services_t service = (services_t) IPC_GET_ARG2(*call); service;}) 75 ({ \ 76 services_t service = (services_t) IPC_GET_ARG2(*call); \ 77 service; \ 78 }) 79 79 80 80 /*@}*/ -
uspace/lib/c/include/ipc/icmp.h
r1882525 rf14291b 27 27 */ 28 28 29 /** @addtogroup icmp30 * @{29 /** @addtogroup libc 30 * @{ 31 31 */ 32 32 33 33 /** @file 34 * ICMP module messages.35 * @see icmp_interface.h34 * ICMP module messages. 35 * @see icmp_interface.h 36 36 */ 37 37 38 #ifndef __NET_ICMP_MESSAGES__39 #define __NET_ICMP_MESSAGES__38 #ifndef LIBC_ICMP_MESSAGES_ 39 #define LIBC_ICMP_MESSAGES_ 40 40 41 41 #include <ipc/ipc.h> 42 #include <ipc/net.h> 42 43 #include <sys/types.h> 44 #include <sys/time.h> 43 45 44 #include <icmp_codes.h> 45 #include <net_messages.h> 46 #include <net/icmp_codes.h> 46 47 47 /** ICMP module messages. 48 */ 49 typedef enum{ 50 /** Sends echo request. 51 * @see icmp_echo() 52 */ 48 /** ICMP module messages. */ 49 typedef enum { 50 /** Sends echo request. @see icmp_echo() */ 53 51 NET_ICMP_ECHO = NET_ICMP_FIRST, 54 /** Sends destination unreachable error message. 55 * @see icmp_destination_unreachable_msg() 52 53 /** 54 * Sends destination unreachable error message. 55 * @see icmp_destination_unreachable_msg() 56 56 */ 57 57 NET_ICMP_DEST_UNREACH, 58 /** Sends source quench error message. 59 * @see icmp_source_quench_msg() 58 59 /** 60 * Sends source quench error message. 61 * @see icmp_source_quench_msg() 60 62 */ 61 63 NET_ICMP_SOURCE_QUENCH, 62 /** Sends time exceeded error message. 63 * @see icmp_time_exceeded_msg() 64 65 /** 66 * Sends time exceeded error message. 67 * @see icmp_time_exceeded_msg() 64 68 */ 65 69 NET_ICMP_TIME_EXCEEDED, 66 /** Sends parameter problem error message. 67 * @see icmp_parameter_problem_msg() 70 71 /** 72 * Sends parameter problem error message. 73 * @see icmp_parameter_problem_msg() 68 74 */ 69 75 NET_ICMP_PARAMETERPROB, 70 /** Initializes new connection.71 */76 77 /** Initializes new connection. */ 72 78 NET_ICMP_INIT 73 79 } icmp_messages; 74 80 75 /** @name ICMP specific message parameters definitions 76 */ 81 /** @name ICMP specific message parameters definitions */ 77 82 /*@{*/ 78 83 79 84 /** Returns the ICMP code message parameter. 80 * @param[in] call The message call structure. 85 * 86 * @param[in] call The message call structure. 81 87 */ 82 88 #define ICMP_GET_CODE(call) \ 83 ({icmp_code_t code = (icmp_code_t) IPC_GET_ARG1(*call); code;}) 89 ({ \ 90 icmp_code_t code = (icmp_code_t) IPC_GET_ARG1(*call); \ 91 code; \ 92 }) 84 93 85 94 /** Returns the ICMP link MTU message parameter. 86 * @param[in] call The message call structure. 95 * 96 * @param[in] call The message call structure. 87 97 */ 88 98 #define ICMP_GET_MTU(call) \ 89 ({icmp_param_t mtu = (icmp_param_t) IPC_GET_ARG3(*call); mtu;}) 99 ({ \ 100 icmp_param_t mtu = (icmp_param_t) IPC_GET_ARG3(*call); \ 101 mtu; \ 102 }) 90 103 91 104 /** Returns the pointer message parameter. 92 * @param[in] call The message call structure. 105 * 106 * @param[in] call The message call structure. 93 107 */ 94 108 #define ICMP_GET_POINTER(call) \ 95 ({icmp_param_t pointer = (icmp_param_t) IPC_GET_ARG3(*call); pointer;}) 109 ({ \ 110 icmp_param_t pointer = (icmp_param_t) IPC_GET_ARG3(*call); \ 111 pointer; \ 112 }) 96 113 97 114 /** Returns the size message parameter. 98 * @param[in] call The message call structure. 115 * 116 * @param[in] call The message call structure. 99 117 */ 100 118 #define ICMP_GET_SIZE(call) \ 101 ({size_t size = (size_t) IPC_GET_ARG1(call); size;}) 119 ({ \ 120 size_t size = (size_t) IPC_GET_ARG1(call); \ 121 size; \ 122 }) 102 123 103 124 /** Returns the timeout message parameter. 104 * @param[in] call The message call structure. 125 * 126 * @param[in] call The message call structure. 105 127 */ 106 128 #define ICMP_GET_TIMEOUT(call) \ 107 (({suseconds_t timeout = (suseconds_t) IPC_GET_ARG2(call); timeout;})) 129 ({ \ 130 suseconds_t timeout = (suseconds_t) IPC_GET_ARG2(call); \ 131 timeout; \ 132 }) 108 133 109 134 /** Returns the time to live message parameter. 110 * @param[in] call The message call structure. 135 * 136 * @param[in] call The message call structure. 111 137 */ 112 138 #define ICMP_GET_TTL(call) \ 113 ({ip_ttl_t ttl = (ip_ttl_t) IPC_GET_ARG3(call); ttl;}) 139 ({ \ 140 ip_ttl_t ttl = (ip_ttl_t) IPC_GET_ARG3(call); \ 141 ttl; \ 142 }) 114 143 115 144 /** Returns the type of service message parameter. 116 * @param[in] call The message call structure. 145 * 146 * @param[in] call The message call structure. 117 147 */ 118 148 #define ICMP_GET_TOS(call) \ 119 ({ip_tos_t tos = (ip_tos_t) IPC_GET_ARG4(call); tos;}) 149 ({ \ 150 ip_tos_t tos = (ip_tos_t) IPC_GET_ARG4(call); \ 151 tos; \ 152 }) 120 153 121 154 /** Returns the dont fragment message parameter. 122 * @param[in] call The message call structure. 155 * 156 * @param[in] call The message call structure. 123 157 */ 124 158 #define ICMP_GET_DONT_FRAGMENT(call) \ 125 ({int dont_fragment = (int) IPC_GET_ARG5(call); dont_fragment;}) 159 ({ \ 160 int dont_fragment = (int) IPC_GET_ARG5(call); \ 161 dont_fragment; \ 162 }) 126 163 127 164 /*@}*/ -
uspace/lib/c/include/ipc/il.h
r1882525 rf14291b 27 27 */ 28 28 29 /** @addtogroup net_il29 /** @addtogroup libc 30 30 * @{ 31 31 */ … … 37 37 */ 38 38 39 #ifndef __NET_IL_MESSAGES_H__40 #define __NET_IL_MESSAGES_H__39 #ifndef LIBC_IL_MESSAGES_H_ 40 #define LIBC_IL_MESSAGES_H_ 41 41 42 42 #include <ipc/ipc.h> 43 #include <ipc/net.h> 43 44 44 /** Internet layer modules messages. 45 */ 45 /** Internet layer modules messages. */ 46 46 typedef enum { 47 47 /** New device message. 48 * @see ip_device_req()48 * @see ip_device_req() 49 49 */ 50 50 NET_IL_DEVICE = NET_IL_FIRST, 51 51 /** Device state changed message. 52 * @see il_device_state_msg()52 * @see il_device_state_msg() 53 53 */ 54 54 NET_IL_DEVICE_STATE, 55 55 /** Device MTU changed message. 56 * @see il_mtu_changed_msg()56 * @see il_mtu_changed_msg() 57 57 */ 58 58 NET_IL_MTU_CHANGED, 59 59 /** Packet size message. 60 * @see il_packet_size_req()60 * @see il_packet_size_req() 61 61 */ 62 62 NET_IL_PACKET_SPACE, 63 63 /** Packet received message. 64 * @see il_received_msg()64 * @see il_received_msg() 65 65 */ 66 66 NET_IL_RECEIVED, 67 67 /** Packet send message. 68 * @see il_send_msg()68 * @see il_send_msg() 69 69 */ 70 70 NET_IL_SEND 71 71 } il_messages; 72 72 73 /** @name Internetwork layer specific message parameters definitions 74 * 75 */ 73 /** @name Internetwork layer specific message parameters definitions */ 76 74 /*@{*/ 77 75 78 76 /** Return the protocol number message parameter. 79 77 * @param[in] call The message call structure. 80 *81 78 */ 82 #define IL_GET_PROTO(call) (int) IPC_GET_ARG1(*call)79 #define IL_GET_PROTO(call) (int) IPC_GET_ARG1(*call) 83 80 84 81 /** Return the registering service message parameter. 85 82 * @param[in] call The message call structure. 86 *87 83 */ 88 #define IL_GET_SERVICE(call) (services_t) IPC_GET_ARG2(*call)84 #define IL_GET_SERVICE(call) (services_t) IPC_GET_ARG2(*call) 89 85 90 86 /*@}*/ -
uspace/lib/c/include/ipc/ip.h
r1882525 rf14291b 27 27 */ 28 28 29 /** @addtogroup ip30 * @{29 /** @addtogroup libc 30 * @{ 31 31 */ 32 32 33 33 /** @file 34 * IP module messages.35 * @see ip_interface.h34 * IP module messages. 35 * @see ip_interface.h 36 36 */ 37 37 38 #ifndef __NET_IP_MESSAGES_H__39 #define __NET_IP_MESSAGES_H__38 #ifndef LIBC_IP_MESSAGES_H_ 39 #define LIBC_IP_MESSAGES_H_ 40 40 41 41 #include <ipc/ipc.h> 42 #include <ipc/net.h> 42 43 43 #include < in.h>44 #include < ip_codes.h>44 #include <net/in.h> 45 #include <net/ip_codes.h> 45 46 46 /** IP module messages. 47 */ 48 typedef enum{ 47 /** IP module messages. */ 48 typedef enum { 49 49 /** Adds the routing entry. 50 * @see ip_add_route()50 * @see ip_add_route() 51 51 */ 52 52 NET_IP_ADD_ROUTE = NET_IP_FIRST, 53 53 /** Gets the actual route information. 54 * @see ip_get_route()54 * @see ip_get_route() 55 55 */ 56 56 NET_IP_GET_ROUTE, 57 57 /** Processes the received error notification. 58 * @see ip_received_error_msg()58 * @see ip_received_error_msg() 59 59 */ 60 60 NET_IP_RECEIVED_ERROR, 61 61 /** Sets the default gateway. 62 * @see ip_set_default_gateway()62 * @see ip_set_default_gateway() 63 63 */ 64 64 NET_IP_SET_GATEWAY 65 65 } ip_messages; 66 66 67 /** @name IP specific message parameters definitions 68 */ 67 /** @name IP specific message parameters definitions */ 69 68 /*@{*/ 70 69 71 70 /** Returns the address message parameter. 72 * @param[in] call The message call structure.71 * @param[in] call The message call structure. 73 72 */ 74 73 #define IP_GET_ADDRESS(call) \ 75 ({in_addr_t addr; addr.s_addr = IPC_GET_ARG3(*call); addr;}) 74 ({ \ 75 in_addr_t addr; \ 76 addr.s_addr = IPC_GET_ARG3(*call); \ 77 addr; \ 78 }) 76 79 77 80 /** Returns the gateway message parameter. 78 * @param[in] call The message call structure.81 * @param[in] call The message call structure. 79 82 */ 80 83 #define IP_GET_GATEWAY(call) \ 81 ({in_addr_t addr; addr.s_addr = IPC_GET_ARG2(*call); addr;}) 84 ({ \ 85 in_addr_t addr; \ 86 addr.s_addr = IPC_GET_ARG2(*call); \ 87 addr; \ 88 }) 82 89 83 90 /** Sets the header length in the message answer. 84 * @param[out] answer The message answer structure.91 * @param[out] answer The message answer structure. 85 92 */ 86 93 #define IP_SET_HEADERLEN(answer, value) \ 87 {ipcarg_t argument = (ipcarg_t) (value); IPC_SET_ARG2(*answer, argument);} 94 do { \ 95 ipcarg_t argument = (ipcarg_t) (value); \ 96 IPC_SET_ARG2(*answer, argument); \ 97 } while (0) 88 98 89 99 /** Returns the network mask message parameter. 90 * @param[in] call The message call structure.100 * @param[in] call The message call structure. 91 101 */ 92 102 #define IP_GET_NETMASK(call) \ 93 ({in_addr_t addr; addr.s_addr = IPC_GET_ARG4(*call); addr;}) 103 ({ \ 104 in_addr_t addr; \ 105 addr.s_addr = IPC_GET_ARG4(*call); \ 106 addr; \ 107 }) 94 108 95 109 /** Returns the protocol message parameter. 96 * @param[in] call The message call structure.110 * @param[in] call The message call structure. 97 111 */ 98 112 #define IP_GET_PROTOCOL(call) \ 99 ({ip_protocol_t protocol = (ip_protocol_t) IPC_GET_ARG1(*call); protocol;}) 113 ({ \ 114 ip_protocol_t protocol = (ip_protocol_t) IPC_GET_ARG1(*call); \ 115 protocol; \ 116 }) 100 117 101 118 /*@}*/ -
uspace/lib/c/include/ipc/net_net.h
r1882525 rf14291b 27 27 */ 28 28 29 /** @addtogroup net30 * @{29 /** @addtogroup libc 30 * @{ 31 31 */ 32 32 33 33 /** @file 34 * Networking subsystem central module messages.35 * @see net_interface.h34 * Networking subsystem central module messages. 35 * @see net_interface.h 36 36 */ 37 37 38 #ifndef __NET_NET_MESSAGES_H__39 #define __NET_NET_MESSAGES_H__38 #ifndef LIBC_NET_NET_MESSAGES_H_ 39 #define LIBC_NET_NET_MESSAGES_H_ 40 40 41 41 #include <ipc/ipc.h> 42 #include <ipc/net.h> 42 43 43 #include <net_messages.h> 44 45 /** Networking subsystem central module messages. 46 */ 47 typedef enum{ 44 /** Networking subsystem central module messages. */ 45 typedef enum { 48 46 /** Returns the general configuration 49 * @see net_get_conf_req()47 * @see net_get_conf_req() 50 48 */ 51 49 NET_NET_GET_CONF = NET_FIRST, 52 50 /** Returns the device specific configuration 53 * @see net_get_device_conf_req()51 * @see net_get_device_conf_req() 54 52 */ 55 53 NET_NET_GET_DEVICE_CONF, 56 /** Starts the networking stack. 57 */ 54 /** Starts the networking stack. */ 58 55 NET_NET_STARTUP, 59 56 } net_messages; -
uspace/lib/c/include/ipc/netif.h
r1882525 rf14291b 27 27 */ 28 28 29 /** @addtogroup netif29 /** @addtogroup libc 30 30 * @{ 31 31 */ … … 35 35 */ 36 36 37 #ifndef __NET_NETIF_MESSAGES_H__38 #define __NET_NETIF_MESSAGES_H__37 #ifndef LIBC_NETIF_MESSAGES_H_ 38 #define LIBC_NETIF_MESSAGES_H_ 39 39 40 40 #include <ipc/ipc.h> 41 #include <ipc/net.h> 41 42 42 #include <net_messages.h> 43 44 /** Network interface common module messages. 45 */ 43 /** Network interface common module messages. */ 46 44 typedef enum { 47 45 /** Probe device message. 48 * @see netif_probe_req()46 * @see netif_probe_req() 49 47 */ 50 48 NET_NETIF_PROBE = NET_NETIF_FIRST, 51 49 /** Send packet message. 52 * @see netif_send_msg()50 * @see netif_send_msg() 53 51 */ 54 52 NET_NETIF_SEND, 55 53 /** Start device message. 56 * @see netif_start_req()54 * @see netif_start_req() 57 55 */ 58 56 NET_NETIF_START, 59 57 /** Get device usage statistics message. 60 * @see netif_stats_req()58 * @see netif_stats_req() 61 59 */ 62 60 NET_NETIF_STATS, 63 61 /** Stop device message. 64 * @see netif_stop_req()62 * @see netif_stop_req() 65 63 */ 66 64 NET_NETIF_STOP, 67 65 /** Get device address message. 68 * @see netif_get_addr_req()66 * @see netif_get_addr_req() 69 67 */ 70 68 NET_NETIF_GET_ADDR, 71 69 } netif_messages; 72 70 73 /** @name Network interface specific message parameters definitions 74 */ 71 /** @name Network interface specific message parameters definitions */ 75 72 /*@{*/ 76 73 … … 79 76 */ 80 77 #define NETIF_GET_IRQ(call) \ 81 ({int irq = (int) IPC_GET_ARG2(*call); irq;}) 78 ({ \ 79 int irq = (int) IPC_GET_ARG2(*call); \ 80 irq; \ 81 }) 82 82 83 83 /** Return the input/output address message parameter. … … 85 85 */ 86 86 #define NETIF_GET_IO(call) \ 87 ({int io = (int) IPC_GET_ARG3(*call); io;}) 87 ({ \ 88 int io = (int) IPC_GET_ARG3(*call); \ 89 io; \ 90 }) 88 91 89 92 /*@}*/ -
uspace/lib/c/include/ipc/nil.h
r1882525 rf14291b 27 27 */ 28 28 29 /** @addtogroup net_nil29 /** @addtogroup libc 30 30 * @{ 31 31 */ … … 35 35 */ 36 36 37 #ifndef __NET_NIL_MESSAGES_H__38 #define __NET_NIL_MESSAGES_H__37 #ifndef LIBC_NIL_MESSAGES_H_ 38 #define LIBC_NIL_MESSAGES_H_ 39 39 40 40 #include <ipc/ipc.h> 41 #include <ipc/net.h> 41 42 42 #include <net_messages.h> 43 44 /** Network interface layer module messages. 45 */ 43 /** Network interface layer module messages. */ 46 44 typedef enum { 47 45 /** New device or update MTU message. 48 * @see nil_device_req()46 * @see nil_device_req() 49 47 */ 50 48 NET_NIL_DEVICE = NET_NIL_FIRST, 51 49 /** New device state message. 52 * @see nil_device_state_msg()50 * @see nil_device_state_msg() 53 51 */ 54 52 NET_NIL_DEVICE_STATE, 55 53 /** Received packet queue message. 56 * @see nil_received_msg()54 * @see nil_received_msg() 57 55 */ 58 56 NET_NIL_RECEIVED, 59 57 /** Send packet queue message. 60 * @see nil_send_msg()58 * @see nil_send_msg() 61 59 */ 62 60 NET_NIL_SEND, 63 61 /** Packet size message. 64 * @see nil_packet_size_req()62 * @see nil_packet_size_req() 65 63 */ 66 64 NET_NIL_PACKET_SPACE, 67 65 /** Device local hardware address message. 68 * @see nil_get_addr()66 * @see nil_get_addr() 69 67 */ 70 68 NET_NIL_ADDR, 71 69 /** Device broadcast hardware address message. 72 * @see nil_get_broadcast_addr()70 * @see nil_get_broadcast_addr() 73 71 */ 74 72 NET_NIL_BROADCAST_ADDR, 75 73 } nil_messages; 76 74 77 /** @name Network interface layer specific message parameters definitions 78 */ 75 /** @name Network interface layer specific message parameters definitions */ 79 76 /*@{*/ 80 77 81 /** Return the protocol service message parameter. 82 */ 78 /** Return the protocol service message parameter. */ 83 79 #define NIL_GET_PROTO(call) \ 84 ({services_t service = (services_t) IPC_GET_ARG2(*call); service;}) 80 ({ \ 81 services_t service = (services_t) IPC_GET_ARG2(*call); \ 82 service; \ 83 }) 85 84 86 85 /*@}*/ -
uspace/lib/c/include/ipc/packet.h
r1882525 rf14291b 27 27 */ 28 28 29 /** @addtogroup packet29 /** @addtogroup libc 30 30 * @{ 31 31 */ … … 35 35 */ 36 36 37 #ifndef __NET_PACKET_MESSAGES__38 #define __NET_PACKET_MESSAGES__37 #ifndef LIBC_PACKET_MESSAGES_ 38 #define LIBC_PACKET_MESSAGES_ 39 39 40 40 #include <ipc/ipc.h> 41 #include <ipc/net.h> 41 42 42 #include <net_messages.h> 43 44 /** Packet server module messages. 45 */ 43 /** Packet server module messages. */ 46 44 typedef enum { 47 45 /** Create packet message with specified content length. 48 * @see packet_get_1()46 * @see packet_get_1() 49 47 */ 50 48 NET_PACKET_CREATE_1 = NET_PACKET_FIRST, 51 /** Create packet message with specified address length, prefix, content and suffix. 52 * @see packet_get_4() 49 50 /** 51 * Create packet message with specified address length, prefix, content 52 * and suffix. 53 * @see packet_get_4() 53 54 */ 54 55 NET_PACKET_CREATE_4, 56 55 57 /** Get packet message. 56 * @see packet_return() 57 */ 58 * @see packet_return() */ 58 59 NET_PACKET_GET, 60 59 61 /** Get packet size message. 60 * @see packet_translate()62 * @see packet_translate() 61 63 */ 62 64 NET_PACKET_GET_SIZE, 65 63 66 /** Release packet message. 64 * @see pq_release()67 * @see pq_release() 65 68 */ 66 69 NET_PACKET_RELEASE 67 70 } packet_messages; 68 71 69 /** Returns the protocol service message parameter. 70 */ 71 #define ARP_GET_PROTO(call) (services_t) IPC_GET_ARG2(*call) 72 /** Returns the protocol service message parameter. */ 73 #define ARP_GET_PROTO(call) (services_t) IPC_GET_ARG2(*call) 72 74 73 /** Returns the packet identifier message parameter. 74 */ 75 #define IPC_GET_ID(call) (packet_id_t) IPC_GET_ARG1(*call) 75 /** Returns the packet identifier message parameter. */ 76 #define IPC_GET_ID(call) (packet_id_t) IPC_GET_ARG1(*call) 76 77 77 /** Returns the maximal content length message parameter. 78 */ 79 #define IPC_GET_CONTENT(call) (size_t) IPC_GET_ARG1(*call) 78 /** Returns the maximal content length message parameter. */ 79 #define IPC_GET_CONTENT(call) (size_t) IPC_GET_ARG1(*call) 80 80 81 /** Returns the maximal address length message parameter. 82 */ 81 /** Returns the maximal address length message parameter. */ 83 82 #define IPC_GET_ADDR_LEN(call) (size_t) IPC_GET_ARG2(*call) 84 83 85 /** Returns the maximal prefix length message parameter. 86 */ 87 #define IPC_GET_PREFIX(call) (size_t) IPC_GET_ARG3(*call) 84 /** Returns the maximal prefix length message parameter. */ 85 #define IPC_GET_PREFIX(call) (size_t) IPC_GET_ARG3(*call) 88 86 89 /** Returns the maximal suffix length message parameter. 90 */ 91 #define IPC_GET_SUFFIX(call) (size_t) IPC_GET_ARG4(*call) 87 /** Returns the maximal suffix length message parameter. */ 88 #define IPC_GET_SUFFIX(call) (size_t) IPC_GET_ARG4(*call) 92 89 93 90 #endif -
uspace/lib/c/include/ipc/socket.h
r1882525 rf14291b 27 27 */ 28 28 29 /** @addtogroup socket30 * @{29 /** @addtogroup libc 30 * @{ 31 31 */ 32 32 33 33 /** @file 34 * Socket messages. 35 * @see socket.h 36 */ 37 38 39 #ifndef __NET_SOCKET_MESSAGES_H__ 40 #define __NET_SOCKET_MESSAGES_H__ 34 * Socket messages. 35 */ 36 37 #ifndef LIBC_SOCKET_MESSAGES_H_ 38 #define LIBC_SOCKET_MESSAGES_H_ 41 39 42 40 #include <ipc/ipc.h> 43 44 #include <net_messages.h> 45 #include <socket_codes.h> 46 47 /** Socket client messages. 48 */ 49 typedef enum{ 50 /** Creates a new socket. 51 * @see socket() 52 */ 41 #include <ipc/net.h> 42 43 /** Socket client messages. */ 44 typedef enum { 45 /** Creates a new socket. @see socket() */ 53 46 NET_SOCKET = NET_SOCKET_FIRST, 54 /** Binds the socket. 55 * @see bind() 56 */ 47 /** Binds the socket. @see bind() */ 57 48 NET_SOCKET_BIND, 58 /** Creates a new socket. 59 * @see socket() 60 */ 49 /** Creates a new socket. @see socket() */ 61 50 NET_SOCKET_LISTEN, 62 /** Accepts an incomming connection. 63 * @see accept() 64 */ 51 /** Accepts an incomming connection. @see accept() */ 65 52 NET_SOCKET_ACCEPT, 66 /** Connects the socket. 67 * @see connect() 68 */ 53 /** Connects the socket. @see connect() */ 69 54 NET_SOCKET_CONNECT, 70 /** Closes the socket. 71 * @see closesocket() 72 */ 55 /** Closes the socket. @see closesocket() */ 73 56 NET_SOCKET_CLOSE, 74 /** Sends data via the stream socket. 75 * @see send() 76 */ 57 /** Sends data via the stream socket. @see send() */ 77 58 NET_SOCKET_SEND, 78 /** Sends data via the datagram socket. 79 * @see sendto() 80 */ 59 /** Sends data via the datagram socket. @see sendto() */ 81 60 NET_SOCKET_SENDTO, 82 /** Receives data from the stream socket. 83 * @see socket() 84 */ 61 /** Receives data from the stream socket. @see socket() */ 85 62 NET_SOCKET_RECV, 86 /** Receives data from the datagram socket. 87 * @see socket() 88 */ 63 /** Receives data from the datagram socket. @see socket() */ 89 64 NET_SOCKET_RECVFROM, 90 /** Gets the socket option. 91 * @see getsockopt() 92 */ 65 /** Gets the socket option. @see getsockopt() */ 93 66 NET_SOCKET_GETSOCKOPT, 94 /** Sets the socket option. 95 * @see setsockopt() 96 */ 67 /** Sets the socket option. @see setsockopt() */ 97 68 NET_SOCKET_SETSOCKOPT, 98 /** New socket for acceptence notification message. 99 */ 69 /** New socket for acceptence notification message. */ 100 70 NET_SOCKET_ACCEPTED, 101 /** New data received notification message. 102 */ 71 /** New data received notification message. */ 103 72 NET_SOCKET_RECEIVED, 104 /** New socket data fragment size notification message. 105 */ 73 /** New socket data fragment size notification message. */ 106 74 NET_SOCKET_DATA_FRAGMENT_SIZE 107 75 } socket_messages; … … 112 80 113 81 /** Sets the socket identifier in the message answer. 114 * @param[out] answerThe message answer structure.82 * @param[out] answer The message answer structure. 115 83 */ 116 84 #define SOCKET_SET_SOCKET_ID(answer, value) \ 117 {ipcarg_t argument = (ipcarg_t) (value); IPC_SET_ARG1(answer, argument);} 85 do { \ 86 ipcarg_t argument = (ipcarg_t) (value); \ 87 IPC_SET_ARG1(answer, argument); \ 88 } while (0) 118 89 119 90 /** Returns the socket identifier message parameter. 120 * @param[in] callThe message call structure.91 * @param[in] call The message call structure. 121 92 */ 122 93 #define SOCKET_GET_SOCKET_ID(call) \ 123 ({int socket_id = (int) IPC_GET_ARG1(call); socket_id;}) 94 ({ \ 95 int socket_id = (int) IPC_GET_ARG1(call); \ 96 socket_id; \ 97 }) 124 98 125 99 /** Sets the read data length in the message answer. 126 * @param[out] answerThe message answer structure.100 * @param[out] answer The message answer structure. 127 101 */ 128 102 #define SOCKET_SET_READ_DATA_LENGTH(answer, value) \ 129 {ipcarg_t argument = (ipcarg_t) (value); IPC_SET_ARG1(answer, argument);} 103 do { \ 104 ipcarg_t argument = (ipcarg_t) (value); \ 105 IPC_SET_ARG1(answer, argument); \ 106 } while (0) 130 107 131 108 /** Returns the read data length message parameter. 132 * @param[in] callThe message call structure.109 * @param[in] call The message call structure. 133 110 */ 134 111 #define SOCKET_GET_READ_DATA_LENGTH(call) \ 135 ({int data_length = (int) IPC_GET_ARG1(call); data_length;}) 112 ({ \ 113 int data_length = (int) IPC_GET_ARG1(call); \ 114 data_length; \ 115 }) 136 116 137 117 /** Returns the backlog message parameter. 138 * @param[in] callThe message call structure.118 * @param[in] call The message call structure. 139 119 */ 140 120 #define SOCKET_GET_BACKLOG(call) \ 141 ({int backlog = (int) IPC_GET_ARG2(call); backlog;}) 121 ({ \ 122 int backlog = (int) IPC_GET_ARG2(call); \ 123 backlog; \ 124 }) 142 125 143 126 /** Returns the option level message parameter. 144 * @param[in] callThe message call structure.127 * @param[in] call The message call structure. 145 128 */ 146 129 #define SOCKET_GET_OPT_LEVEL(call) \ 147 ({int opt_level = (int) IPC_GET_ARG2(call); opt_level;}) 130 ({ \ 131 int opt_level = (int) IPC_GET_ARG2(call); \ 132 opt_level; \ 133 }) 148 134 149 135 /** Returns the data fragment size message parameter. 150 * @param[in] callThe message call structure.136 * @param[in] call The message call structure. 151 137 */ 152 138 #define SOCKET_GET_DATA_FRAGMENT_SIZE(call) \ 153 ({size_t size = (size_t) IPC_GET_ARG2(call); size;}) 139 ({ \ 140 size_t size = (size_t) IPC_GET_ARG2(call); \ 141 size; \ 142 }) 154 143 155 144 /** Sets the data fragment size in the message answer. 156 * @param[out] answerThe message answer structure.145 * @param[out] answer The message answer structure. 157 146 */ 158 147 #define SOCKET_SET_DATA_FRAGMENT_SIZE(answer, value) \ 159 {ipcarg_t argument = (ipcarg_t) (value); IPC_SET_ARG2(answer, argument);} 148 do { \ 149 ipcarg_t argument = (ipcarg_t) (value); \ 150 IPC_SET_ARG2(answer, argument); \ 151 } while (0) 160 152 161 153 /** Sets the address length in the message answer. 162 * @param[out] answerThe message answer structure.154 * @param[out] answer The message answer structure. 163 155 */ 164 156 #define SOCKET_SET_ADDRESS_LENGTH(answer, value) \ 165 {ipcarg_t argument = (ipcarg_t) (value); IPC_SET_ARG3(answer, argument);} 157 do { \ 158 ipcarg_t argument = (ipcarg_t) (value); \ 159 IPC_SET_ARG3(answer, argument);\ 160 } while (0) 166 161 167 162 /** Returns the address length message parameter. 168 * @param[in] callThe message call structure.163 * @param[in] call The message call structure. 169 164 */ 170 165 #define SOCKET_GET_ADDRESS_LENGTH(call) \ 171 ({socklen_t address_length = (socklen_t) IPC_GET_ARG3(call); address_length;}) 166 ({ \ 167 socklen_t address_length = (socklen_t) IPC_GET_ARG3(call); \ 168 address_length; \ 169 }) 172 170 173 171 /** Sets the header size in the message answer. 174 * @param[out] answerThe message answer structure.172 * @param[out] answer The message answer structure. 175 173 */ 176 174 #define SOCKET_SET_HEADER_SIZE(answer, value) \ 177 \ 178 {ipcarg_t argument = (ipcarg_t) (value); IPC_SET_ARG3(answer, argument);} 175 do { \ 176 ipcarg_t argument = (ipcarg_t) (value); \ 177 IPC_SET_ARG3(answer, argument); \ 178 } while (0) 179 179 180 180 /** Returns the header size message parameter. 181 * @param[in] call The message call structure.181 * @param[in] call The message call structure. 182 182 */ 183 183 #define SOCKET_GET_HEADER_SIZE(call) \ 184 ({size_t size = (size_t) IPC_GET_ARG3(call); size;}) 184 ({ \ 185 size_t size = (size_t) IPC_GET_ARG3(call); \ 186 size; \ 187 }) 185 188 186 189 /** Returns the flags message parameter. 187 * @param[in] call The message call structure.190 * @param[in] call The message call structure. 188 191 */ 189 192 #define SOCKET_GET_FLAGS(call) \ 190 ({int flags = (int) IPC_GET_ARG4(call); flags;}) 193 ({ \ 194 int flags = (int) IPC_GET_ARG4(call); \ 195 flags; \ 196 }) 191 197 192 198 /** Returns the option name message parameter. 193 * @param[in] call The message call structure.199 * @param[in] call The message call structure. 194 200 */ 195 201 #define SOCKET_GET_OPT_NAME(call) \ 196 ({int opt_name = (int) IPC_GET_ARG4(call); opt_name;}) 202 ({ \ 203 int opt_name = (int) IPC_GET_ARG4(call); \ 204 opt_name; \ 205 }) 197 206 198 207 /** Returns the data fragments message parameter. 199 * @param[in] call The message call structure.208 * @param[in] call The message call structure. 200 209 */ 201 210 #define SOCKET_GET_DATA_FRAGMENTS(call) \ 202 ({int fragments = (int) IPC_GET_ARG5(call); fragments;}) 211 ({ \ 212 int fragments = (int) IPC_GET_ARG5(call); \ 213 fragments; \ 214 }) 203 215 204 216 /** Returns the new socket identifier message parameter. 205 * @param[in] call The message call structure.217 * @param[in] call The message call structure. 206 218 */ 207 219 #define SOCKET_GET_NEW_SOCKET_ID(call) \ 208 ({int socket_id = (int) IPC_GET_ARG5(call); socket_id;}) 220 ({ \ 221 int socket_id = (int) IPC_GET_ARG5(call); \ 222 socket_id; \ 223 }) 209 224 210 225 /*@}*/ -
uspace/lib/c/include/ipc/tl.h
r1882525 rf14291b 27 27 */ 28 28 29 /** @addtogroup net_tl30 * @{29 /** @addtogroup libc 30 * @{ 31 31 */ 32 32 33 33 /** @file 34 * Transport layer modules messages.35 * @see tl_interface.h34 * Transport layer modules messages. 35 * @see tl_interface.h 36 36 */ 37 37 38 #ifndef __NET_TL_MESSAGES_H__39 #define __NET_TL_MESSAGES_H__38 #ifndef LIBC_TL_MESSAGES_H_ 39 #define LIBC_TL_MESSAGES_H_ 40 40 41 41 #include <ipc/ipc.h> 42 #include <ipc/net.h> 42 43 43 #include <net_messages.h> 44 45 /** Transport layer modules messages. 46 */ 47 typedef enum{ 44 /** Transport layer modules messages. */ 45 typedef enum { 48 46 /** Packet received message. 49 * @see tl_received_msg()47 * @see tl_received_msg() 50 48 */ 51 49 NET_TL_RECEIVED = NET_TL_FIRST -
uspace/lib/c/include/net/device.h
r1882525 rf14291b 27 27 */ 28 28 29 /** @addtogroup netif30 * @{29 /** @addtogroup libc 30 * @{ 31 31 */ 32 32 33 33 /** @file 34 * Device identifier, state and usage statistics.34 * Device identifier, state and usage statistics. 35 35 */ 36 36 37 #ifndef __NET_DEVICE_ID_TYPE_H__38 #define __NET_DEVICE_ID_TYPE_H__37 #ifndef LIBC_DEVICE_ID_TYPE_H_ 38 #define LIBC_DEVICE_ID_TYPE_H_ 39 39 40 40 #include <adt/int_map.h> 41 41 42 /** Device identifier to generic type map declaration. 43 */ 44 #define DEVICE_MAP_DECLARE INT_MAP_DECLARE 42 /** Device identifier to generic type map declaration. */ 43 #define DEVICE_MAP_DECLARE INT_MAP_DECLARE 45 44 46 /** Device identifier to generic type map implementation. 47 */ 45 /** Device identifier to generic type map implementation. */ 48 46 #define DEVICE_MAP_IMPLEMENT INT_MAP_IMPLEMENT 49 47 50 /** Invalid device identifier. 51 */ 52 #define DEVICE_INVALID_ID (-1) 48 /** Invalid device identifier. */ 49 #define DEVICE_INVALID_ID (-1) 53 50 54 /** Device identifier type. 55 */ 56 typedef int device_id_t; 51 /** Device identifier type. */ 52 typedef int device_id_t; 57 53 58 /** Device state type. 59 */ 60 typedef enum device_state device_state_t; 54 /** Device state type. */ 55 typedef enum device_state device_state_t; 61 56 62 57 /** Type definition of the device usage statistics. 63 * @see device_stats58 * @see device_stats 64 59 */ 65 typedef struct device_stats device_stats_t;60 typedef struct device_stats device_stats_t; 66 61 67 62 /** Type definition of the device usage statistics pointer. 68 * @see device_stats63 * @see device_stats 69 64 */ 70 typedef device_stats_t * device_stats_ref;65 typedef device_stats_t *device_stats_ref; 71 66 72 /** Device state. 73 */ 74 enum device_state{ 75 /** Device not present or not initialized. 76 */ 67 /** Device state. */ 68 enum device_state { 69 /** Device not present or not initialized. */ 77 70 NETIF_NULL = 0, 78 /** Device present and stopped. 79 */ 71 /** Device present and stopped. */ 80 72 NETIF_STOPPED, 81 /** Device present and active. 82 */ 73 /** Device present and active. */ 83 74 NETIF_ACTIVE, 84 /** Device present but unable to transmit. 85 */ 75 /** Device present but unable to transmit. */ 86 76 NETIF_CARRIER_LOST 87 77 }; 88 78 89 /** Device usage statistics. 90 */ 91 struct device_stats{ 92 /** Total packets received. 93 */ 79 /** Device usage statistics. */ 80 struct device_stats { 81 /** Total packets received. */ 94 82 unsigned long receive_packets; 95 /** Total packets transmitted. 96 */ 83 /** Total packets transmitted. */ 97 84 unsigned long send_packets; 98 /** Total bytes received. 99 */ 85 /** Total bytes received. */ 100 86 unsigned long receive_bytes; 101 /** Total bytes transmitted. 102 */ 87 /** Total bytes transmitted. */ 103 88 unsigned long send_bytes; 104 /** Bad packets received counter. 105 */ 89 /** Bad packets received counter. */ 106 90 unsigned long receive_errors; 107 /** Packet transmition problems counter. 108 */ 91 /** Packet transmition problems counter. */ 109 92 unsigned long send_errors; 110 /** No space in buffers counter. 111 */ 93 /** No space in buffers counter. */ 112 94 unsigned long receive_dropped; 113 /** No space available counter. 114 */ 95 /** No space available counter. */ 115 96 unsigned long send_dropped; 116 /** Total multicast packets received. 117 */ 97 /** Total multicast packets received. */ 118 98 unsigned long multicast; 119 /** The number of collisions due to congestion on the medium. 120 */ 99 /** The number of collisions due to congestion on the medium. */ 121 100 unsigned long collisions; 122 101 123 /* detailed receive_errors :*/124 /** Received packet length error counter. 125 */102 /* detailed receive_errors */ 103 104 /** Received packet length error counter. */ 126 105 unsigned long receive_length_errors; 127 /** Receiver buffer overflow counter. 128 */ 106 /** Receiver buffer overflow counter. */ 129 107 unsigned long receive_over_errors; 130 /** Received packet with crc error counter. 131 */ 108 /** Received packet with crc error counter. */ 132 109 unsigned long receive_crc_errors; 133 /** Received frame alignment error counter. 134 */ 110 /** Received frame alignment error counter. */ 135 111 unsigned long receive_frame_errors; 136 /** Receiver fifo overrun counter. 137 */ 112 /** Receiver fifo overrun counter. */ 138 113 unsigned long receive_fifo_errors; 139 /** Receiver missed packet counter. 140 */ 114 /** Receiver missed packet counter. */ 141 115 unsigned long receive_missed_errors; 142 116 143 117 /* detailed send_errors */ 144 /** Transmitter aborted counter. 145 */118 119 /** Transmitter aborted counter. */ 146 120 unsigned long send_aborted_errors; 147 /** Transmitter carrier errors counter. 148 */ 121 /** Transmitter carrier errors counter. */ 149 122 unsigned long send_carrier_errors; 150 /** Transmitter fifo overrun counter. 151 */ 123 /** Transmitter fifo overrun counter. */ 152 124 unsigned long send_fifo_errors; 153 /** Transmitter carrier errors counter. 154 */ 125 /** Transmitter carrier errors counter. */ 155 126 unsigned long send_heartbeat_errors; 156 /** Transmitter window errors counter. 157 */ 127 /** Transmitter window errors counter. */ 158 128 unsigned long send_window_errors; 159 129 160 130 /* for cslip etc */ 161 /** Total compressed packets received.162 */131 132 /** Total compressed packets received. */ 163 133 unsigned long receive_compressed; 164 /** Total compressed packet transmitted. 165 */ 134 /** Total compressed packet transmitted. */ 166 135 unsigned long send_compressed; 167 136 }; … … 171 140 /** @} 172 141 */ 173 -
uspace/lib/c/include/net/icmp_codes.h
r1882525 rf14291b 27 27 */ 28 28 29 /** @addtogroup icmp29 /** @addtogroup libc 30 30 * @{ 31 31 */ 32 32 33 33 /** @file 34 * ICMP types and codes according to the on-line IANA - ICMP Type Numbers - <http://http://www.iana.org/assignments/icmp-parameters>, cited September 14 2009. 35 */ 36 37 #ifndef __NET_ICMP_CODES_H__ 38 #define __NET_ICMP_CODES_H__ 39 40 /** ICMP type type definition. 41 */ 42 typedef uint8_t icmp_type_t; 43 44 /** ICMP code type definition. 45 */ 46 typedef uint8_t icmp_code_t; 47 48 /** ICMP parameter type definition. 49 */ 50 typedef uint16_t icmp_param_t; 51 52 /** @name ICMP types definitions 53 */ 54 /*@{*/ 55 56 /** Echo Reply. 57 */ 34 * ICMP types and codes according to the on-line IANA - ICMP Type Numbers 35 * 36 * http://www.iana.org/assignments/icmp-parameters> 37 * 38 * cited September 14 2009. 39 */ 40 41 #ifndef LIBC_ICMP_CODES_H_ 42 #define LIBC_ICMP_CODES_H_ 43 44 /** ICMP type type definition. */ 45 typedef uint8_t icmp_type_t; 46 47 /** ICMP code type definition. */ 48 typedef uint8_t icmp_code_t; 49 50 /** ICMP parameter type definition. */ 51 typedef uint16_t icmp_param_t; 52 53 /** @name ICMP types definitions */ 54 /*@{*/ 55 56 /** Echo Reply. */ 58 57 #define ICMP_ECHOREPLY 0 59 58 60 /** Destination Unreachable. 61 */ 59 /** Destination Unreachable. */ 62 60 #define ICMP_DEST_UNREACH 3 63 61 64 /** Source Quench. 65 */ 62 /** Source Quench. */ 66 63 #define ICMP_SOURCE_QUENCH 4 67 64 68 /** Redirect. 69 */ 65 /** Redirect. */ 70 66 #define ICMP_REDIRECT 5 71 67 72 /** Alternate Host Address. 73 */ 68 /** Alternate Host Address. */ 74 69 #define ICMP_ALTERNATE_ADDR 6 75 70 76 /** Echo Request. 77 */ 78 #define ICMP_ECHO 8 79 80 /** Router Advertisement. 81 */ 71 /** Echo Request. */ 72 #define ICMP_ECHO 8 73 74 /** Router Advertisement. */ 82 75 #define ICMP_ROUTER_ADV 9 83 76 84 /** Router solicitation. 85 */ 77 /** Router solicitation. */ 86 78 #define ICMP_ROUTER_SOL 10 87 79 88 /** Time Exceeded. 89 */ 80 /** Time Exceeded. */ 90 81 #define ICMP_TIME_EXCEEDED 11 91 82 92 /** Parameter Problem. 93 */ 83 /** Parameter Problem. */ 94 84 #define ICMP_PARAMETERPROB 12 95 85 96 /** Timestamp Request. 97 */ 86 /** Timestamp Request. */ 98 87 #define ICMP_TIMESTAMP 13 99 88 100 /** Timestamp Reply. 101 */ 89 /** Timestamp Reply. */ 102 90 #define ICMP_TIMESTAMPREPLY 14 103 91 104 /** Information Request. 105 */ 92 /** Information Request. */ 106 93 #define ICMP_INFO_REQUEST 15 107 94 108 /** Information Reply. 109 */ 95 /** Information Reply. */ 110 96 #define ICMP_INFO_REPLY 16 111 97 112 /** Address Mask Request. 113 */ 98 /** Address Mask Request. */ 114 99 #define ICMP_ADDRESS 17 115 100 116 /** Address Mask Reply. 117 */ 101 /** Address Mask Reply. */ 118 102 #define ICMP_ADDRESSREPLY 18 119 103 120 /** Traceroute. 121 */ 104 /** Traceroute. */ 122 105 #define ICMP_TRACEROUTE 30 123 106 124 /** Datagram Conversion Error. 125 */ 107 /** Datagram Conversion Error. */ 126 108 #define ICMP_CONVERSION_ERROR 31 127 109 128 /** Mobile Host Redirect. 129 */ 110 /** Mobile Host Redirect. */ 130 111 #define ICMP_REDIRECT_MOBILE 32 131 112 132 /** IPv6 Where-Are-You. 133 */ 113 /** IPv6 Where-Are-You. */ 134 114 #define ICMP_IPV6_WHERE_ARE_YOU 33 135 115 136 /** IPv6 I-Am-Here. 137 */ 116 /** IPv6 I-Am-Here. */ 138 117 #define ICMP_IPV6_I_AM_HERE 34 139 118 140 /** Mobile Registration Request. 141 */ 119 /** Mobile Registration Request. */ 142 120 #define ICMP_MOBILE_REQUEST 35 143 121 144 /** Mobile Registration Reply. 145 */ 122 /** Mobile Registration Reply. */ 146 123 #define ICMP_MOBILE_REPLY 36 147 124 148 /** Domain name request. 149 */ 125 /** Domain name request. */ 150 126 #define ICMP_DN_REQUEST 37 151 127 152 /** Domain name reply. 153 */ 128 /** Domain name reply. */ 154 129 #define ICMP_DN_REPLY 38 155 130 156 /** SKIP. 157 */ 158 #define ICMP_SKIP 39 159 160 /** Photuris. 161 */ 131 /** SKIP. */ 132 #define ICMP_SKIP 39 133 134 /** Photuris. */ 162 135 #define ICMP_PHOTURIS 40 163 136 … … 168 141 /*@{*/ 169 142 170 /** Network Unreachable. 171 */ 143 /** Network Unreachable. */ 172 144 #define ICMP_NET_UNREACH 0 173 145 174 /** Host Unreachable. 175 */ 146 /** Host Unreachable. */ 176 147 #define ICMP_HOST_UNREACH 1 177 148 178 /** Protocol Unreachable. 179 */ 149 /** Protocol Unreachable. */ 180 150 #define ICMP_PROT_UNREACH 2 181 151 182 /** Port Unreachable. 183 */ 152 /** Port Unreachable. */ 184 153 #define ICMP_PORT_UNREACH 3 185 154 186 /** Fragmentation needed but the Do Not Fragment bit was set. 187 */ 155 /** Fragmentation needed but the Do Not Fragment bit was set. */ 188 156 #define ICMP_FRAG_NEEDED 4 189 157 190 /** Source Route failed. 191 */ 158 /** Source Route failed. */ 192 159 #define ICMP_SR_FAILED 5 193 160 194 /** Destination network unknown. 195 */ 161 /** Destination network unknown. */ 196 162 #define ICMP_NET_UNKNOWN 6 197 163 198 /** Destination host unknown. 199 */ 164 /** Destination host unknown. */ 200 165 #define ICMP_HOST_UNKNOWN 7 201 166 202 /** Source host isolated (obsolete). 203 */ 167 /** Source host isolated (obsolete). */ 204 168 #define ICMP_HOST_ISOLATED 8 205 169 206 /** Destination network administratively prohibited. 207 */ 170 /** Destination network administratively prohibited. */ 208 171 #define ICMP_NET_ANO 9 209 172 210 /** Destination host administratively prohibited. 211 */ 173 /** Destination host administratively prohibited. */ 212 174 #define ICMP_HOST_ANO 10 213 175 214 /** Network unreachable for this type of service. 215 */ 176 /** Network unreachable for this type of service. */ 216 177 #define ICMP_NET_UNR_TOS 11 217 178 218 /** Host unreachable for this type of service. 219 */ 179 /** Host unreachable for this type of service. */ 220 180 #define ICMP_HOST_UNR_TOS 12 221 181 222 /** Communication administratively prohibited by filtering. 223 */ 182 /** Communication administratively prohibited by filtering. */ 224 183 #define ICMP_PKT_FILTERED 13 225 184 226 /** Host precedence violation. 227 */ 185 /** Host precedence violation. */ 228 186 #define ICMP_PREC_VIOLATION 14 229 187 230 /** Precedence cutoff in effect. 231 */ 188 /** Precedence cutoff in effect. */ 232 189 #define ICMP_PREC_CUTOFF 15 233 190 234 191 /*@}*/ 235 192 236 /** @name ICMP_REDIRECT codes definitions 237 */ 238 /*@{*/ 239 240 /** Network redirect (or subnet). 241 */ 193 /** @name ICMP_REDIRECT codes definitions */ 194 /*@{*/ 195 196 /** Network redirect (or subnet). */ 242 197 #define ICMP_REDIR_NET 0 243 198 244 /** Host redirect. 245 */ 199 /** Host redirect. */ 246 200 #define ICMP_REDIR_HOST 1 247 201 248 /** Network redirect for this type of service. 249 */ 202 /** Network redirect for this type of service. */ 250 203 #define ICMP_REDIR_NETTOS 2 251 204 252 /** Host redirect for this type of service. 253 */ 205 /** Host redirect for this type of service. */ 254 206 #define ICMP_REDIR_HOSTTOS 3 255 207 256 208 /*@}*/ 257 209 258 /** @name ICMP_ALTERNATE_ADDRESS codes definitions 259 */ 260 /*@{*/ 261 262 /** Alternate address for host. 263 */ 210 /** @name ICMP_ALTERNATE_ADDRESS codes definitions */ 211 /*@{*/ 212 213 /** Alternate address for host. */ 264 214 #define ICMP_ALTERNATE_HOST 0 265 215 266 216 /*@}*/ 267 217 268 /** @name ICMP_ROUTER_ADV codes definitions 269 */ 270 /*@{*/ 271 272 /** Normal router advertisement. 273 */ 218 /** @name ICMP_ROUTER_ADV codes definitions */ 219 /*@{*/ 220 221 /** Normal router advertisement. */ 274 222 #define ICMP_ROUTER_NORMAL 0 275 223 276 /** Does not route common traffic. 277 */ 224 /** Does not route common traffic. */ 278 225 #define ICMP_ROUTER_NO_NORMAL_TRAFFIC 16 279 226 280 227 /*@}*/ 281 228 282 /** @name ICMP_TIME_EXCEEDED codes definitions 283 */ 284 /*@{*/ 285 286 /** Transit TTL exceeded. 287 */ 229 /** @name ICMP_TIME_EXCEEDED codes definitions */ 230 /*@{*/ 231 232 /** Transit TTL exceeded. */ 288 233 #define ICMP_EXC_TTL 0 289 234 290 /** Reassembly TTL exceeded. 291 */ 235 /** Reassembly TTL exceeded. */ 292 236 #define ICMP_EXC_FRAGTIME 1 293 237 294 238 /*@}*/ 295 239 296 /** @name ICMP_PARAMETERPROB codes definitions 297 */ 298 /*@{*/ 299 300 /** Pointer indicates the error. 301 */ 240 /** @name ICMP_PARAMETERPROB codes definitions */ 241 /*@{*/ 242 243 /** Pointer indicates the error. */ 302 244 #define ICMP_PARAM_POINTER 0 303 245 304 /** Missing required option. 305 */ 246 /** Missing required option. */ 306 247 #define ICMP_PARAM_MISSING 1 307 248 308 /** Bad length. 309 */ 249 /** Bad length. */ 310 250 #define ICMP_PARAM_LENGTH 2 311 251 312 252 /*@}*/ 313 253 314 /** @name ICMP_PHOTURIS codes definitions 315 */ 316 /*@{*/ 317 318 /** Bad SPI. 319 */ 320 #define ICMP_PHOTURIS_BAD_SPI 0 321 322 /** Authentication failed. 323 */ 324 #define ICMP_PHOTURIS_AUTHENTICATION 1 325 326 /** Decompression failed. 327 */ 254 /** @name ICMP_PHOTURIS codes definitions */ 255 /*@{*/ 256 257 /** Bad SPI. */ 258 #define ICMP_PHOTURIS_BAD_SPI 0 259 260 /** Authentication failed. */ 261 #define ICMP_PHOTURIS_AUTHENTICATION 1 262 263 /** Decompression failed. */ 328 264 #define ICMP_PHOTURIS_DECOMPRESSION 2 329 265 330 /** Decryption failed. 331 */ 332 #define ICMP_PHOTURIS_DECRYPTION 3 333 334 /** Need authentication. 335 */ 266 /** Decryption failed. */ 267 #define ICMP_PHOTURIS_DECRYPTION 3 268 269 /** Need authentication. */ 336 270 #define ICMP_PHOTURIS_NEED_AUTHENTICATION 4 337 271 338 /** Need authorization. 339 */ 272 /** Need authorization. */ 340 273 #define ICMP_PHOTURIS_NEED_AUTHORIZATION 5 341 274 -
uspace/lib/c/include/net/icmp_common.h
r1882525 rf14291b 27 27 */ 28 28 29 /** @addtogroup icmp29 /** @addtogroup libc 30 30 * @{ 31 31 */ 32 32 33 33 /** @file 34 * ICMP module common interface.34 * ICMP module common interface. 35 35 */ 36 36 37 #ifndef __NET_ICMP_COMMON_H__38 #define __NET_ICMP_COMMON_H__37 #ifndef LIBC_ICMP_COMMON_H_ 38 #define LIBC_ICMP_COMMON_H_ 39 39 40 40 #include <ipc/services.h> 41 42 41 #include <sys/time.h> 43 42 44 /** Default timeout for incoming connections in microseconds. 45 */ 43 /** Default timeout for incoming connections in microseconds. */ 46 44 #define ICMP_CONNECT_TIMEOUT (1 * 1000 * 1000) 47 45 48 /** Connects to the ICMP module. 49 * @param service The ICMP module service. Ignored parameter. 50 * @param[in] timeout The connection timeout in microseconds. No timeout if set to zero (0). 51 * @returns The ICMP module phone on success. 52 * @returns The ICMP socket identifier if called by the bundle module. 53 * @returns ETIMEOUT if the connection timeouted. 54 */ 55 extern int icmp_connect_module(services_t service, suseconds_t timeout); 46 extern int icmp_connect_module(services_t, suseconds_t); 56 47 57 48 #endif -
uspace/lib/c/include/net/in.h
r1882525 rf14291b 27 27 */ 28 28 29 /** @addtogroup net29 /** @addtogroup libc 30 30 * @{ 31 31 */ … … 35 35 */ 36 36 37 #ifndef __NET_IN_H__38 #define __NET_IN_H__37 #ifndef LIBC_IN_H_ 38 #define LIBC_IN_H_ 39 39 40 #include <net/inet.h> 41 #include <net/ip_protocols.h> 40 42 #include <sys/types.h> 41 43 42 #include <ip_protocols.h> 43 #include <inet.h> 44 45 /** INET string address maximum length. 46 */ 44 /** INET string address maximum length. */ 47 45 #define INET_ADDRSTRLEN (4 * 3 + 3 + 1) 48 46 49 47 /** Type definition of the INET address. 50 * @see in_addr48 * @see in_addr 51 49 */ 52 50 typedef struct in_addr in_addr_t; 53 51 54 52 /** Type definition of the INET socket address. 55 * @see sockaddr_in53 * @see sockaddr_in 56 54 */ 57 55 typedef struct sockaddr_in sockaddr_in_t; 58 56 59 /** INET address. 60 */ 61 struct in_addr{ 62 /** 4 byte IP address. 63 */ 57 /** INET address. */ 58 struct in_addr { 59 /** 4 byte IP address. */ 64 60 uint32_t s_addr; 65 61 }; 66 62 67 63 /** INET socket address. 68 * @see sockaddr64 * @see sockaddr 69 65 */ 70 struct sockaddr_in{ 71 /** Address family. 72 * Should be AF_INET. 73 */ 66 struct sockaddr_in { 67 /** Address family. Should be AF_INET. */ 74 68 uint16_t sin_family; 75 /** Port number. 76 */ 69 /** Port number. */ 77 70 uint16_t sin_port; 78 /** Internet address. 79 */ 71 /** Internet address. */ 80 72 struct in_addr sin_addr; 81 /** Padding to meet the sockaddr size. 82 */ 73 /** Padding to meet the sockaddr size. */ 83 74 uint8_t sin_zero[8]; 84 75 }; -
uspace/lib/c/include/net/in6.h
r1882525 rf14291b 27 27 */ 28 28 29 /** @addtogroup net29 /** @addtogroup libc 30 30 * @{ 31 31 */ … … 35 35 */ 36 36 37 #ifndef __NET_IN6_H__38 #define __NET_IN6_H__37 #ifndef LIBC_IN6_H_ 38 #define LIBC_IN6_H_ 39 39 40 #include <net/inet.h> 41 #include <net/ip_protocols.h> 40 42 #include <sys/types.h> 41 43 42 #include <ip_protocols.h> 43 #include <inet.h> 44 45 /** INET6 string address maximum length. 46 */ 44 /** INET6 string address maximum length. */ 47 45 #define INET6_ADDRSTRLEN (8 * 4 + 7 + 1) 48 46 49 47 /** Type definition of the INET6 address. 50 * @see in6_addr48 * @see in6_addr 51 49 */ 52 50 typedef struct in6_addr in6_addr_t; 53 51 54 52 /** Type definition of the INET6 socket address. 55 * @see sockaddr_in653 * @see sockaddr_in6 56 54 */ 57 55 typedef struct sockaddr_in6 sockaddr_in6_t; 58 56 59 /** INET6 address. 60 */ 61 struct in6_addr{ 62 /** 16 byte IPv6 address. 63 */ 57 /** INET6 address. */ 58 struct in6_addr { 59 /** 16 byte IPv6 address. */ 64 60 unsigned char s6_addr[16]; 65 61 }; 66 62 67 63 /** INET6 socket address. 68 * @see sockaddr64 * @see sockaddr 69 65 */ 70 struct sockaddr_in6{ 71 /** Address family. 72 * Should be AF_INET6. 73 */ 66 struct sockaddr_in6 { 67 /** Address family. Should be AF_INET6. */ 74 68 uint16_t sin6_family; 75 /** Port number. 76 */ 69 /** Port number. */ 77 70 uint16_t sin6_port; 78 /** IPv6 flow information. 79 */ 71 /** IPv6 flow information. */ 80 72 uint32_t sin6_flowinfo; 81 /** IPv6 address. 82 */ 73 /** IPv6 address. */ 83 74 struct in6_addr sin6_addr; 84 /** Scope identifier. 85 */ 75 /** Scope identifier. */ 86 76 uint32_t sin6_scope_id; 87 77 }; -
uspace/lib/c/include/net/packet_header.h
r1882525 rf14291b 27 27 */ 28 28 29 /** @addtogroup packet29 /** @addtogroup libc 30 30 * @{ 31 31 */ 32 32 33 33 /** @file 34 * Packet header.34 * Packet header. 35 35 */ 36 36 37 #ifndef __NET_PACKET_HEADER_H__38 #define __NET_PACKET_HEADER_H__37 #ifndef LIBC_PACKET_HEADER_H_ 38 #define LIBC_PACKET_HEADER_H_ 39 39 40 #include < packet/packet.h>40 #include <net/packet.h> 41 41 42 42 /** Returns the actual packet data length. 43 * @param[in] headerThe packet header.43 * @param[in] header The packet header. 44 44 */ 45 #define PACKET_DATA_LENGTH(header) ((header)->data_end - (header)->data_start) 45 #define PACKET_DATA_LENGTH(header) \ 46 ((header)->data_end - (header)->data_start) 46 47 47 48 /** Returns the maximum packet address length. 48 * @param[in] headerThe packet header.49 * @param[in] header The packet header. 49 50 */ 50 #define PACKET_MAX_ADDRESS_LENGTH(header) ((header)->dest_addr - (header)->src_addr) 51 #define PACKET_MAX_ADDRESS_LENGTH(header) \ 52 ((header)->dest_addr - (header)->src_addr) 51 53 52 54 /** Returns the minimum packet suffix. 53 * @param[in] header The packet header.55 * @param[in] header The packet header. 54 56 */ 55 #define PACKET_MIN_SUFFIX(header) ((header)->length - (header)->data_start - (header)->max_content) 57 #define PACKET_MIN_SUFFIX(header) \ 58 ((header)->length - (header)->data_start - (header)->max_content) 56 59 57 /** Packet integrity check magic value. 58 */ 60 /** Packet integrity check magic value. */ 59 61 #define PACKET_MAGIC_VALUE 0x11227788 60 62 61 /** Packet header. 62 */ 63 struct packet{ 64 /** Packet identifier. 65 */ 63 /** Packet header. */ 64 struct packet { 65 /** Packet identifier. */ 66 66 packet_id_t packet_id; 67 /** Packet queue sorting value. 68 * The packet queue is sorted the ascending order. 67 68 /** 69 * Packet queue sorting value. 70 * The packet queue is sorted the ascending order. 69 71 */ 70 72 size_t order; 71 /** Packet metric. 72 */73 74 /** Packet metric. */ 73 75 size_t metric; 74 /** Previous packet in the queue. 75 */ 76 /** Previous packet in the queue. */ 76 77 packet_id_t previous; 77 /** Next packet in the queue. 78 */ 78 /** Next packet in the queue. */ 79 79 packet_id_t next; 80 /** Total length of the packet. 81 * Contains the header, the addresses and the data of the packet. 82 * Corresponds to the mapped sharable memory block. 80 81 /** 82 * Total length of the packet. 83 * Contains the header, the addresses and the data of the packet. 84 * Corresponds to the mapped sharable memory block. 83 85 */ 84 86 size_t length; 85 /** Stored source and destination addresses length. 86 */87 88 /** Stored source and destination addresses length. */ 87 89 size_t addr_len; 88 /** Souce address offset in bytes from the beginning of the packet header. 90 91 /** 92 * Souce address offset in bytes from the beginning of the packet 93 * header. 89 94 */ 90 95 size_t src_addr; 91 /** Destination address offset in bytes from the beginning of the packet header. 96 97 /** 98 * Destination address offset in bytes from the beginning of the packet 99 * header. 92 100 */ 93 101 size_t dest_addr; 94 /** Reserved data prefix length in bytes. 95 */102 103 /** Reserved data prefix length in bytes. */ 96 104 size_t max_prefix; 97 /** Reserved content length in bytes. 98 */ 105 /** Reserved content length in bytes. */ 99 106 size_t max_content; 100 /** Actual data start offset in bytes from the beginning of the packet header. 107 108 /** 109 * Actual data start offset in bytes from the beginning of the packet 110 * header. 101 111 */ 102 112 size_t data_start; 103 /** Actual data end offset in bytes from the beginning of the packet header. 113 114 /** 115 * Actual data end offset in bytes from the beginning of the packet 116 * header. 104 117 */ 105 118 size_t data_end; 106 /** Integrity check magic value. 107 */119 120 /** Integrity check magic value. */ 108 121 int magic_value; 109 122 }; 110 123 111 124 /** Returns whether the packet is valid. 112 * @param[in] packet The packet to be checked. 113 * @returns true if the packet is not NULL and the magic value is correct. 114 * @returns false otherwise. 125 * @param[in] packet The packet to be checked. 126 * @returns True if the packet is not NULL and the magic value is 127 * correct. 128 * @returns False otherwise. 115 129 */ 116 static inline int packet_is_valid(const packet_t packet){ 130 static inline int packet_is_valid(const packet_t packet) 131 { 117 132 return packet && (packet->magic_value == PACKET_MAGIC_VALUE); 118 133 } -
uspace/lib/c/include/stdio.h
r1882525 rf14291b 171 171 extern off64_t ftell(FILE *); 172 172 extern int feof(FILE *); 173 extern int fileno(FILE *); 173 174 174 175 extern int fflush(FILE *); -
uspace/lib/c/include/sys/time.h
r1882525 rf14291b 43 43 typedef long suseconds_t; 44 44 45 typedef uint32_t useconds_t; 46 typedef uint32_t mseconds_t; 47 45 48 struct timeval { 46 49 time_t tv_sec; /* seconds */ -
uspace/lib/c/include/unistd.h
r1882525 rf14291b 37 37 38 38 #include <sys/types.h> 39 #include <time.h> 39 40 #include <libarch/config.h> 40 41 … … 56 57 #define SEEK_END 2 57 58 #endif 58 59 typedef uint32_t useconds_t;60 59 61 60 extern int dup2(int oldfd, int newfd); -
uspace/lib/net/Makefile
r1882525 rf14291b 29 29 30 30 USPACE_PREFIX = ../.. 31 EXTRA_CFLAGS = -Iinclude -I$(LIBSOCKET_PREFIX)/include31 EXTRA_CFLAGS = -Iinclude 32 32 LIBRARY = libnet 33 33 34 34 SOURCES = \ 35 generic/generic.c \ 35 36 generic/net_remote.c \ 36 37 generic/net_checksum.c \ 38 generic/packet_client.c \ 37 39 generic/packet_remote.c \ 40 generic/socket_core.c \ 38 41 adt/module_map.c \ 39 42 netif/netif_local.c \ 40 43 netif/netif_remote.c \ 41 netif/netif_nil_bundle.c \42 44 nil/nil_remote.c \ 43 45 il/ip_remote.c \ -
uspace/lib/net/adt/module_map.c
r1882525 rf14291b 27 27 */ 28 28 29 /** @addtogroup net30 * @{29 /** @addtogroup libnet 30 * @{ 31 31 */ 32 32 33 33 /** @file 34 * Character string to module map implementation.34 * Character string to module map implementation. 35 35 */ 36 36 … … 38 38 #include <task.h> 39 39 #include <unistd.h> 40 #include <err.h> 40 41 41 42 #include <ipc/services.h> 42 43 43 #include <net_err.h> 44 #include <net_modules.h> 44 #include <net/modules.h> 45 45 46 46 #include <adt/generic_char_map.h> … … 49 49 GENERIC_CHAR_MAP_IMPLEMENT(modules, module_t) 50 50 51 int add_module(module_ref * module, modules_ref modules, const char * name, const char * filename, services_t service, task_id_t task_id, connect_module_t connect_module){ 51 /** Adds module to the module map. 52 * 53 * @param[out] module The module structure added. 54 * @param[in] modules The module map. 55 * @param[in] name The module name. 56 * @param[in] filename The full path filename. 57 * @param[in] service The module service. 58 * @param[in] task_id The module current task identifier. Zero means not 59 * running. 60 * @param[in] connect_module The module connecting function. 61 * @returns EOK on success. 62 * @returns ENOMEM if there is not enough memory left. 63 */ 64 int 65 add_module(module_ref *module, modules_ref modules, const char *name, 66 const char *filename, services_t service, task_id_t task_id, 67 connect_module_t connect_module) 68 { 52 69 ERROR_DECLARE; 53 70 … … 55 72 56 73 tmp_module = (module_ref) malloc(sizeof(module_t)); 57 if (! tmp_module){74 if (!tmp_module) 58 75 return ENOMEM; 59 } 76 60 77 tmp_module->task_id = task_id; 61 78 tmp_module->phone = 0; … … 65 82 tmp_module->service = service; 66 83 tmp_module->connect_module = connect_module; 67 if(ERROR_OCCURRED(modules_add(modules, tmp_module->name, 0, tmp_module))){ 84 85 if (ERROR_OCCURRED(modules_add(modules, tmp_module->name, 0, 86 tmp_module))) { 68 87 free(tmp_module); 69 88 return ERROR_CODE; 70 89 } 71 if (module){90 if (module) 72 91 *module = tmp_module; 73 } 92 74 93 return EOK; 75 94 } 76 95 77 module_ref get_running_module(modules_ref modules, char * name){ 96 /** Searches and returns the specified module. 97 * 98 * If the module is not running, the module filaname is spawned. 99 * If the module is not connected, the connect_function is called. 100 * 101 * @param[in] modules The module map. 102 * @param[in] name The module name. 103 * @returns The running module found. It does not have to be 104 * connected. 105 * @returns NULL if there is no such module. 106 */ 107 module_ref get_running_module(modules_ref modules, char *name) 108 { 78 109 module_ref module; 79 110 80 111 module = modules_find(modules, name, 0); 81 if (! module){112 if (!module) 82 113 return NULL; 114 115 if (!module->task_id) { 116 module->task_id = spawn(module->filename); 117 if (!module->task_id) 118 return NULL; 83 119 } 84 if(! module->task_id){ 85 module->task_id = spawn(module->filename); 86 if(! module->task_id){ 87 return NULL; 88 } 89 } 90 if(! module->phone){ 120 if (!module->phone) 91 121 module->phone = module->connect_module(module->service); 92 } 122 93 123 return module; 94 124 } 95 125 126 /** Starts the given module. 127 * 128 * @param[in] fname The module full or relative path filename. 129 * @returns The new module task identifier on success. 130 * @returns Zero if there is no such module. 131 */ 96 132 task_id_t spawn(const char *fname) 97 133 { -
uspace/lib/net/generic/net_checksum.c
r1882525 rf14291b 27 27 */ 28 28 29 /** @addtogroup net30 * @{29 /** @addtogroup libnet 30 * @{ 31 31 */ 32 32 33 33 /** @file 34 * General CRC and checksum computation implementation.34 * General CRC and checksum computation implementation. 35 35 */ 36 36 … … 39 39 #include <net_checksum.h> 40 40 41 /** Big-endian encoding CRC divider. 42 */ 43 #define CRC_DIVIDER_BE 0x04C11DB7 44 45 /** Little-endian encoding CRC divider. 46 */ 47 #define CRC_DIVIDER_LE 0xEDB88320 48 49 uint16_t compact_checksum(uint32_t sum){ 41 /** Big-endian encoding CRC divider. */ 42 #define CRC_DIVIDER_BE 0x04c11db7 43 44 /** Little-endian encoding CRC divider. */ 45 #define CRC_DIVIDER_LE 0xedb88320 46 47 /** Compacts the computed checksum to the 16 bit number adding the carries. 48 * 49 * @param[in] sum Computed checksum. 50 * @returns Compacted computed checksum to the 16 bits. 51 */ 52 uint16_t compact_checksum(uint32_t sum) 53 { 50 54 // shorten to the 16 bits 51 while(sum >> 16){ 52 sum = (sum &0xFFFF) + (sum >> 16); 53 } 55 while (sum >> 16) 56 sum = (sum & 0xffff) + (sum >> 16); 54 57 55 58 return (uint16_t) sum; 56 59 } 57 60 58 uint32_t compute_checksum(uint32_t seed, uint8_t * data, size_t length){ 61 /** Computes sum of the 2 byte fields. 62 * 63 * Padds one zero (0) byte if odd. 64 * 65 * @param[in] seed Initial value. Often used as 0 or ~0. 66 * @param[in] data Pointer to the beginning of data to process. 67 * @param[in] length Length of the data in bytes. 68 * @returns The computed checksum of the length bytes of the data. 69 */ 70 uint32_t compute_checksum(uint32_t seed, uint8_t *data, size_t length) 71 { 59 72 size_t index; 60 73 61 74 // sum all the 16 bit fields 62 for (index = 0; index + 1 < length; index += 2){75 for (index = 0; index + 1 < length; index += 2) 63 76 seed += (data[index] << 8) + data[index + 1]; 64 }65 77 66 78 // last odd byte with zero padding 67 if (index + 1 == length){79 if (index + 1 == length) 68 80 seed += data[index] << 8; 69 }70 81 71 82 return seed; 72 83 } 73 84 74 uint32_t compute_crc32_be(uint32_t seed, uint8_t * data, size_t length){ 85 /** Computes CRC32 value in the big-endian environment. 86 * 87 * @param[in] seed Initial value. Often used as 0 or ~0. 88 * @param[in] data Pointer to the beginning of data to process. 89 * @param[in] length Length of the data in bits. 90 * @returns The computed CRC32 of the length bits of the data. 91 */ 92 uint32_t compute_crc32_be(uint32_t seed, uint8_t * data, size_t length) 93 { 75 94 size_t index; 76 95 77 96 // process full bytes 78 while (length >= 8){97 while (length >= 8) { 79 98 // add the data 80 99 seed ^= (*data) << 24; 100 81 101 // for each added bit 82 for (index = 0; index < 8; ++ index){102 for (index = 0; index < 8; ++index) { 83 103 // if the first bit is set 84 if (seed &0x80000000){104 if (seed & 0x80000000) { 85 105 // shift and divide the checksum 86 106 seed = (seed << 1) ^ ((uint32_t) CRC_DIVIDER_BE); 87 } else{107 } else { 88 108 // shift otherwise 89 109 seed <<= 1; 90 110 } 91 111 } 112 92 113 // move to the next byte 93 ++ data;114 ++data; 94 115 length -= 8; 95 116 } 96 117 97 118 // process the odd bits 98 if (length > 0){119 if (length > 0) { 99 120 // add the data with zero padding 100 seed ^= ((*data) &(0xFF << (8 - length))) << 24; 121 seed ^= ((*data) & (0xff << (8 - length))) << 24; 122 101 123 // for each added bit 102 for (index = 0; index < length; ++ index){124 for (index = 0; index < length; ++index) { 103 125 // if the first bit is set 104 if (seed &0x80000000){126 if (seed & 0x80000000) { 105 127 // shift and divide the checksum 106 128 seed = (seed << 1) ^ ((uint32_t) CRC_DIVIDER_BE); 107 } else{129 } else { 108 130 // shift otherwise 109 131 seed <<= 1; … … 115 137 } 116 138 117 uint32_t compute_crc32_le(uint32_t seed, uint8_t * data, size_t length){ 139 /** Computes CRC32 value in the little-endian environment. 140 * 141 * @param[in] seed Initial value. Often used as 0 or ~0. 142 * @param[in] data Pointer to the beginning of data to process. 143 * @param[in] length Length of the data in bits. 144 * @returns The computed CRC32 of the length bits of the data. 145 */ 146 uint32_t compute_crc32_le(uint32_t seed, uint8_t * data, size_t length) 147 { 118 148 size_t index; 119 149 120 150 // process full bytes 121 while (length >= 8){151 while (length >= 8) { 122 152 // add the data 123 153 seed ^= (*data); 154 124 155 // for each added bit 125 for (index = 0; index < 8; ++ index){156 for (index = 0; index < 8; ++index) { 126 157 // if the last bit is set 127 if (seed &1){158 if (seed & 1) { 128 159 // shift and divide the checksum 129 160 seed = (seed >> 1) ^ ((uint32_t) CRC_DIVIDER_LE); 130 } else{161 } else { 131 162 // shift otherwise 132 163 seed >>= 1; 133 164 } 134 165 } 166 135 167 // move to the next byte 136 ++ data;168 ++data; 137 169 length -= 8; 138 170 } 139 171 140 172 // process the odd bits 141 if (length > 0){173 if (length > 0) { 142 174 // add the data with zero padding 143 175 seed ^= (*data) >> (8 - length); 144 for(index = 0; index < length; ++ index){ 176 177 for (index = 0; index < length; ++index) { 145 178 // if the last bit is set 146 if (seed &1){179 if (seed & 1) { 147 180 // shift and divide the checksum 148 181 seed = (seed >> 1) ^ ((uint32_t) CRC_DIVIDER_LE); 149 } else{182 } else { 150 183 // shift otherwise 151 184 seed >>= 1; … … 157 190 } 158 191 159 uint16_t flip_checksum(uint16_t checksum){ 192 /** Returns or flips the checksum if zero. 193 * 194 * @param[in] checksum The computed checksum. 195 * @returns The internet protocol header checksum. 196 * @returns 0xFFFF if the computed checksum is zero. 197 */ 198 uint16_t flip_checksum(uint16_t checksum) 199 { 160 200 // flip, zero is returned as 0xFFFF (not flipped) 161 checksum = ~ checksum;201 checksum = ~checksum; 162 202 return checksum ? checksum : IP_CHECKSUM_ZERO; 163 203 } 164 204 165 uint16_t ip_checksum(uint8_t * data, size_t length){ 205 /** Computes the ip header checksum. 206 * 207 * To compute the checksum of a new packet, the checksum header field must be 208 * zero. To check the checksum of a received packet, the checksum may be left 209 * set. Zero will be returned in this case if valid. 210 * 211 * @param[in] data The header data. 212 * @param[in] length The header length in bytes. 213 * @returns The internet protocol header checksum. 214 * @returns 0xFFFF if the computed checksum is zero. 215 */ 216 uint16_t ip_checksum(uint8_t *data, size_t length) 217 { 166 218 // compute, compact and flip the data checksum 167 return flip_checksum(compact_checksum(compute_checksum(0, data, length))); 219 return flip_checksum(compact_checksum(compute_checksum(0, data, 220 length))); 168 221 } 169 222 -
uspace/lib/net/generic/net_remote.c
r1882525 rf14291b 27 27 */ 28 28 29 /** @addtogroup net30 * @{29 /** @addtogroup libnet 30 * @{ 31 31 */ 32 32 33 33 /** @file 34 * Networking interface implementation for remote modules.35 * @see net_interface.h34 * Networking interface implementation for remote modules. 35 * @see net_interface.h 36 36 */ 37 37 38 38 #include <ipc/services.h> 39 #include <ipc/net_net.h> 39 40 40 41 #include <malloc.h> 41 42 42 #include < net_messages.h>43 #include <net _modules.h>44 #include <net _device.h>43 #include <generic.h> 44 #include <net/modules.h> 45 #include <net/device.h> 45 46 #include <net_interface.h> 46 47 #include <adt/measured_strings.h> 47 #include <net_net_messages.h>48 48 49 int net_connect_module(services_t service){ 49 /** Connects to the networking module. 50 * 51 * @returns The networking module phone on success. 52 */ 53 int net_connect_module(void) 54 { 50 55 return connect_to_service(SERVICE_NETWORKING); 51 56 } 52 57 53 void net_free_settings(measured_string_ref settings, char * data){ 54 if(settings){ 58 /** Frees the received settings. 59 * 60 * @param[in] settings The received settings. 61 * @param[in] data The received settings data. 62 * @see net_get_device_conf_req() 63 * @see net_get_conf_req() 64 */ 65 void net_free_settings(measured_string_ref settings, char *data) 66 { 67 if (settings) 55 68 free(settings); 56 } 57 if(data){ 69 if (data) 58 70 free(data); 59 }60 71 } 61 72 62 int net_get_conf_req(int net_phone, measured_string_ref * configuration, size_t count, char ** data){ 63 return generic_translate_req(net_phone, NET_NET_GET_DEVICE_CONF, 0, 0, * configuration, count, configuration, data); 73 /** Returns the global configuration. 74 * 75 * The configuration names are read and the appropriate settings are set 76 * instead. Call net_free_settings() function to release the returned 77 * configuration. 78 * 79 * @param[in] net_phone The networking module phone. 80 * @param[in,out] configuration The requested configuration. The names are read 81 * and the appropriate settings are set instead. 82 * 83 * @param[in] count The configuration entries count. 84 * @param[in,out] data The configuration and settings data. 85 * @returns EOK on success. 86 * @returns EINVAL if the configuration is NULL. 87 * @returns EINVAL if the count is zero. 88 * @returns Other error codes as defined for the 89 * generic_translate_req() function. 90 */ 91 int 92 net_get_conf_req(int net_phone, measured_string_ref *configuration, 93 size_t count, char **data) 94 { 95 return generic_translate_req(net_phone, NET_NET_GET_DEVICE_CONF, 0, 0, 96 *configuration, count, configuration, data); 64 97 } 65 98 66 int net_get_device_conf_req(int net_phone, device_id_t device_id, measured_string_ref * configuration, size_t count, char ** data){ 67 return generic_translate_req(net_phone, NET_NET_GET_DEVICE_CONF, device_id, 0, * configuration, count, configuration, data); 99 /** Returns the device specific configuration. 100 * 101 * Returns the global configuration if the device specific is not found. 102 * The configuration names are read and the appropriate settings are set 103 * instead. Call net_free_settings() function to release the returned 104 * configuration. 105 * 106 * @param[in] net_phone The networking module phone. 107 * @param[in] device_id The device identifier. 108 * @param[in,out] configuration The requested device configuration. The names 109 * are read and the appropriate settings are set instead. 110 * @param[in] count The configuration entries count. 111 * @param[in,out] data The configuration and settings data. 112 * @returns EOK on success. 113 * @returns EINVAL if the configuration is NULL. 114 * @returns EINVAL if the count is zero. 115 * @returns Other error codes as defined for the 116 * generic_translate_req() function. 117 */ 118 int 119 net_get_device_conf_req(int net_phone, device_id_t device_id, 120 measured_string_ref *configuration, size_t count, char **data) 121 { 122 return generic_translate_req(net_phone, NET_NET_GET_DEVICE_CONF, 123 device_id, 0, *configuration, count, configuration, data); 68 124 } 69 125 -
uspace/lib/net/generic/packet_remote.c
r1882525 rf14291b 27 27 */ 28 28 29 /** @addtogroup packet30 * @{29 /** @addtogroup libnet 30 * @{ 31 31 */ 32 32 33 33 /** @file 34 * Packet client interface implementation for remote modules.35 * @see packet_client.h34 * Packet client interface implementation for remote modules. 35 * @see packet_client.h 36 36 */ 37 37 38 38 #include <async.h> 39 39 #include <errno.h> 40 #include <err.h> 40 41 #include <ipc/ipc.h> 42 #include <ipc/packet.h> 41 43 #include <sys/mman.h> 42 44 43 #include <net_err.h> 44 #include <net_messages.h> 45 #include <packet/packet.h> 46 #include <packet/packet_client.h> 47 #include <packet/packet_header.h> 48 #include <packet/packet_messages.h> 45 #include <packet_client.h> 49 46 #include <packet_remote.h> 47 48 #include <net/packet.h> 49 #include <net/packet_header.h> 50 50 51 51 /** Obtain the packet from the packet server as the shared memory block. … … 64 64 * 65 65 */ 66 static int packet_return(int phone, packet_ref packet, packet_id_t packet_id, size_t size){ 66 static int 67 packet_return(int phone, packet_ref packet, packet_id_t packet_id, size_t size) 68 { 67 69 ERROR_DECLARE; 68 70 69 71 ipc_call_t answer; 70 72 aid_t message = async_send_1(phone, NET_PACKET_GET, packet_id, &answer); 73 71 74 *packet = (packet_t) as_get_mappable_page(size); 72 if (ERROR_OCCURRED(async_share_in_start_0_0(phone, *packet, size)) 73 ||ERROR_OCCURRED(pm_add(*packet))) {75 if (ERROR_OCCURRED(async_share_in_start_0_0(phone, *packet, size)) || 76 ERROR_OCCURRED(pm_add(*packet))) { 74 77 munmap(*packet, size); 75 78 async_wait_for(message, NULL); … … 83 86 } 84 87 88 /** Translates the packet identifier to the packet reference. 89 * 90 * Tries to find mapping first. 91 * Contacts the packet server to share the packet if the mapping is not present. 92 * 93 * @param[in] phone The packet server module phone. 94 * @param[out] packet The packet reference. 95 * @param[in] packet_id The packet identifier. 96 * @returns EOK on success. 97 * @returns EINVAL if the packet parameter is NULL. 98 * @returns Other error codes as defined for the NET_PACKET_GET_SIZE 99 * message. 100 * @returns Other error codes as defined for the packet_return() 101 * function. 102 */ 85 103 int packet_translate_remote(int phone, packet_ref packet, packet_id_t packet_id) 86 104 { … … 91 109 92 110 *packet = pm_find(packet_id); 93 if (! (*packet)) {111 if (!*packet) { 94 112 ipcarg_t size; 95 113 96 ERROR_PROPAGATE(async_req_1_1(phone, NET_PACKET_GET_SIZE, packet_id, &size)); 114 ERROR_PROPAGATE(async_req_1_1(phone, NET_PACKET_GET_SIZE, 115 packet_id, &size)); 97 116 ERROR_PROPAGATE(packet_return(phone, packet, packet_id, size)); 98 117 } 99 if ((* * packet).next) {118 if ((*packet)->next) { 100 119 packet_t next; 101 120 102 return packet_translate_remote(phone, &next, (* * packet).next);121 return packet_translate_remote(phone, &next, (*packet)->next); 103 122 } 104 123 … … 106 125 } 107 126 127 /** Obtains the packet of the given dimensions. 128 * 129 * Contacts the packet server to return the appropriate packet. 130 * 131 * @param[in] phone The packet server module phone. 132 * @param[in] addr_len The source and destination addresses maximal length in 133 * bytes. 134 * @param[in] max_prefix The maximal prefix length in bytes. 135 * @param[in] max_content The maximal content length in bytes. 136 * @param[in] max_suffix The maximal suffix length in bytes. 137 * @returns The packet reference. 138 * @returns NULL on error. 139 */ 108 140 packet_t packet_get_4_remote(int phone, size_t max_content, size_t addr_len, 109 141 size_t max_prefix, size_t max_suffix) … … 114 146 ipcarg_t size; 115 147 116 if (ERROR_OCCURRED(async_req_4_2(phone, NET_PACKET_CREATE_4, max_content,117 addr_len, max_prefix, max_suffix, &packet_id, &size)))148 if (ERROR_OCCURRED(async_req_4_2(phone, NET_PACKET_CREATE_4, 149 max_content, addr_len, max_prefix, max_suffix, &packet_id, &size))) 118 150 return NULL; 119 151 … … 121 153 packet_t packet = pm_find(packet_id); 122 154 if (!packet) { 123 if (ERROR_OCCURRED(packet_return(phone, &packet, packet_id, size))) 155 if (ERROR_OCCURRED(packet_return(phone, &packet, packet_id, 156 size))) 124 157 return NULL; 125 158 } … … 128 161 } 129 162 163 /** Obtains the packet of the given content size. 164 * 165 * Contacts the packet server to return the appropriate packet. 166 * 167 * @param[in] phone The packet server module phone. 168 * @param[in] content The maximal content length in bytes. 169 * @returns The packet reference. 170 * @returns NULL on error. 171 */ 130 172 packet_t packet_get_1_remote(int phone, size_t content) 131 173 { … … 141 183 packet_t packet = pm_find(packet_id); 142 184 if (!packet) { 143 if (ERROR_OCCURRED(packet_return(phone, &packet, packet_id, size))) 185 if (ERROR_OCCURRED(packet_return(phone, &packet, packet_id, 186 size))) 144 187 return NULL; 145 188 } … … 148 191 } 149 192 193 /** Releases the packet queue. 194 * 195 * All packets in the queue are marked as free for use. 196 * The packet queue may be one packet only. 197 * The module should not use the packets after this point until they are 198 * received or obtained again. 199 * 200 * @param[in] phone The packet server module phone. 201 * @param[in] packet_id The packet identifier. 202 */ 150 203 void pq_release_remote(int phone, packet_id_t packet_id) 151 204 { -
uspace/lib/net/il/arp_remote.c
r1882525 rf14291b 27 27 */ 28 28 29 /** @addtogroup arp30 * @{29 /** @addtogroup libnet 30 * @{ 31 31 */ 32 32 33 33 /** @file 34 * ARP interface implementation for remote modules.35 * @see arp_interface.h34 * ARP interface implementation for remote modules. 35 * @see arp_interface.h 36 36 */ 37 38 #include <arp_interface.h> 39 #include <generic.h> 37 40 38 41 #include <async.h> … … 40 43 #include <ipc/ipc.h> 41 44 #include <ipc/services.h> 45 #include <ipc/arp.h> 42 46 43 #include <net_messages.h> 44 #include <net_modules.h> 45 #include <net_device.h> 46 #include <arp_interface.h> 47 #include <net/modules.h> 48 #include <net/device.h> 47 49 #include <adt/measured_strings.h> 48 #include <arp_messages.h>49 50 50 int arp_connect_module(services_t service){ 51 if(service != SERVICE_ARP){ 51 /** Connects to the ARP module. 52 * 53 * @param service The ARP module service. Ignored parameter. 54 * @returns The ARP module phone on success. 55 */ 56 int arp_connect_module(services_t service) 57 { 58 if (service != SERVICE_ARP) 52 59 return EINVAL; 53 } 60 54 61 return connect_to_service(SERVICE_ARP); 55 62 } 56 63 57 int arp_clean_cache_req(int arp_phone){ 64 /** Cleans the cache. 65 * 66 * @param[in] arp_phone The ARP module phone used for (semi)remote calls. 67 * @returns EOK on success. 68 */ 69 int arp_clean_cache_req(int arp_phone) 70 { 58 71 return (int) async_req_0_0(arp_phone, NET_ARP_CLEAN_CACHE); 59 72 } 60 73 61 int arp_clear_address_req(int arp_phone, device_id_t device_id, services_t protocol, measured_string_ref address){ 74 /** Clears the given protocol address from the cache. 75 * 76 * @param[in] arp_phone The ARP module phone used for (semi)remote calls. 77 * @param[in] device_id The device identifier. 78 * @param[in] protocol The requesting protocol service. 79 * @param[in] address The protocol address to be cleared. 80 * @returns EOK on success. 81 * @returns ENOENT if the mapping is not found. 82 */ 83 int 84 arp_clear_address_req(int arp_phone, device_id_t device_id, services_t protocol, 85 measured_string_ref address) 86 { 62 87 aid_t message_id; 63 88 ipcarg_t result; 64 89 65 message_id = async_send_2(arp_phone, NET_ARP_CLEAR_ADDRESS, (ipcarg_t) device_id, protocol, NULL); 90 message_id = async_send_2(arp_phone, NET_ARP_CLEAR_ADDRESS, 91 (ipcarg_t) device_id, protocol, NULL); 66 92 measured_strings_send(arp_phone, address, 1); 67 93 async_wait_for(message_id, &result); 94 68 95 return (int) result; 69 96 } 70 97 71 int arp_clear_device_req(int arp_phone, device_id_t device_id){ 72 return (int) async_req_1_0(arp_phone, NET_ARP_CLEAR_DEVICE, (ipcarg_t) device_id); 98 /** Clears the device cache. 99 * 100 * @param[in] arp_phone The ARP module phone used for (semi)remote calls. 101 * @param[in] device_id The device identifier. 102 * @returns EOK on success. 103 * @returns ENOENT if the device is not found. 104 */ 105 int arp_clear_device_req(int arp_phone, device_id_t device_id) 106 { 107 return (int) async_req_1_0(arp_phone, NET_ARP_CLEAR_DEVICE, 108 (ipcarg_t) device_id); 73 109 } 74 110 75 int arp_device_req(int arp_phone, device_id_t device_id, services_t protocol, services_t netif, measured_string_ref address){ 111 /** Registers the new device and the requesting protocol service. 112 * 113 * Connects to the network interface layer service. 114 * Determines the device broadcast address, its address lengths and packet size. 115 * 116 * @param[in] arp_phone The ARP module phone used for (semi)remote calls. 117 * @param[in] device_id The new device identifier. 118 * @param[in] protocol The requesting protocol service. 119 * @param[in] netif The underlying device network interface layer service. 120 * @param[in] address The local requesting protocol address of the device. 121 * @returns EOK on success. 122 * @returns EEXIST if the device is already used. 123 * @returns ENOMEM if there is not enough memory left. 124 * @returns ENOENT if the network interface service is not known. 125 * @returns EREFUSED if the network interface service is not 126 * responding. 127 * @returns Other error codes as defined for the 128 * nil_packet_get_size() function. 129 * @returns Other error codes as defined for the nil_get_addr() 130 * function. 131 * @returns Other error codes as defined for the 132 * nil_get_broadcast_addr() function. 133 */ 134 int arp_device_req(int arp_phone, device_id_t device_id, services_t protocol, 135 services_t netif, measured_string_ref address) 136 { 76 137 aid_t message_id; 77 138 ipcarg_t result; 78 139 79 message_id = async_send_3(arp_phone, NET_ARP_DEVICE, (ipcarg_t) device_id, protocol, netif, NULL); 140 message_id = async_send_3(arp_phone, NET_ARP_DEVICE, 141 (ipcarg_t) device_id, protocol, netif, NULL); 80 142 measured_strings_send(arp_phone, address, 1); 81 143 async_wait_for(message_id, &result); 144 82 145 return (int) result; 83 146 } 84 147 85 task_id_t arp_task_get_id(void){ 86 return 0; 87 } 88 89 int arp_translate_req(int arp_phone, device_id_t device_id, services_t protocol, measured_string_ref address, measured_string_ref * translation, char ** data){ 90 return generic_translate_req(arp_phone, NET_ARP_TRANSLATE, device_id, protocol, address, 1, translation, data); 148 /** Translates the given protocol address to the network interface address. 149 * 150 * Broadcasts the ARP request if the mapping is not found. 151 * Allocates and returns the needed memory block as the data parameter. 152 * 153 * @param[in] arp_phone The ARP module phone used for (semi)remote calls. 154 * @param[in] device_id The device identifier. 155 * @param[in] protocol The requesting protocol service. 156 * @param[in] address The local requesting protocol address. 157 * @param[out] translation The translation of the local protocol address. 158 * @param[out] data The allocated raw translation data container. 159 * @returns EOK on success. 160 * @returns EINVAL if the address parameter is NULL. 161 * @returns EBADMEM if the translation or the data parameters are 162 * NULL. 163 * @returns ENOENT if the mapping is not found. 164 */ 165 int 166 arp_translate_req(int arp_phone, device_id_t device_id, services_t protocol, 167 measured_string_ref address, measured_string_ref *translation, char **data) 168 { 169 return generic_translate_req(arp_phone, NET_ARP_TRANSLATE, device_id, 170 protocol, address, 1, translation, data); 91 171 } 92 172 -
uspace/lib/net/il/ip_client.c
r1882525 rf14291b 27 27 */ 28 28 29 /** @addtogroup ip30 * @{29 /** @addtogroup libnet 30 * @{ 31 31 */ 32 32 33 33 /** @file 34 * IP client interface implementation.35 * @see ip_client.h34 * IP client interface implementation. 35 * @see ip_client.h 36 36 */ 37 37 … … 40 40 41 41 #include <ip_client.h> 42 #include <socket_errno.h> 43 #include <packet/packet.h> 44 #include <packet/packet_client.h> 42 #include <packet_client.h> 45 43 #include <ip_header.h> 46 44 47 size_t ip_client_header_length(packet_t packet){ 45 #include <net/packet.h> 46 47 /** Returns the IP header length. 48 * 49 * @param[in] packet The packet. 50 * @returns The IP header length in bytes. 51 * @returns Zero if there is no IP header. 52 */ 53 size_t ip_client_header_length(packet_t packet) 54 { 48 55 ip_header_ref header; 49 56 50 57 header = (ip_header_ref) packet_get_data(packet); 51 if((! header) 52 || (packet_get_data_length(packet) < sizeof(ip_header_t))){ 58 if (!header || (packet_get_data_length(packet) < sizeof(ip_header_t))) 53 59 return 0; 54 } 60 55 61 return IP_HEADER_LENGTH(header); 56 62 } 57 63 58 int ip_client_get_pseudo_header(ip_protocol_t protocol, struct sockaddr * src, socklen_t srclen, struct sockaddr * dest, socklen_t destlen, size_t data_length, void **header, size_t * headerlen){ 64 /** Constructs the IPv4 pseudo header. 65 * 66 * @param[in] protocol The transport protocol. 67 * @param[in] src The source address. 68 * @param[in] srclen The source address length. 69 * @param[in] dest The destination address. 70 * @param[in] destlen The destination address length. 71 * @param[in] data_length The data length to be set. 72 * @param[out] header The constructed IPv4 pseudo header. 73 * @param[out] headerlen The length of the IP pseudo header in bytes. 74 * @returns EOK on success. 75 * @returns EBADMEM if the header and/or the headerlen parameter is 76 * NULL. 77 * @returns EINVAL if the source address and/or the destination 78 * address parameter is NULL. 79 * @returns EINVAL if the source address length is less than struct 80 * sockaddr length. 81 * @returns EINVAL if the source address length differs from the 82 * destination address length. 83 * @returns EINVAL if the source address family differs from the 84 * destination family. 85 * @returns EAFNOSUPPORT if the address family is not supported. 86 * @returns ENOMEM if there is not enough memory left. 87 */ 88 int 89 ip_client_get_pseudo_header(ip_protocol_t protocol, struct sockaddr *src, 90 socklen_t srclen, struct sockaddr *dest, socklen_t destlen, 91 size_t data_length, void **header, size_t *headerlen) 92 { 59 93 ipv4_pseudo_header_ref header_in; 60 struct sockaddr_in * address_in;61 62 if (!(header && headerlen)){94 struct sockaddr_in *address_in; 95 96 if (!header || !headerlen) 63 97 return EBADMEM; 64 } 65 if(!(src && dest && (srclen > 0) && ((size_t) srclen >= sizeof(struct sockaddr)) && (srclen == destlen) && (src->sa_family == dest->sa_family))){ 98 99 if (!src || !dest || srclen <= 0 || 100 (((size_t) srclen < sizeof(struct sockaddr))) || 101 (srclen != destlen) || (src->sa_family != dest->sa_family)) { 66 102 return EINVAL; 67 103 } 68 104 69 switch(src->sa_family){ 70 case AF_INET: 71 if(srclen != sizeof(struct sockaddr_in)){ 72 return EINVAL; 73 } 74 *headerlen = sizeof(*header_in); 75 header_in = (ipv4_pseudo_header_ref) malloc(*headerlen); 76 if(! header_in){ 77 return ENOMEM; 78 } 79 bzero(header_in, * headerlen); 80 address_in = (struct sockaddr_in *) dest; 81 header_in->destination_address = address_in->sin_addr.s_addr; 82 address_in = (struct sockaddr_in *) src; 83 header_in->source_address = address_in->sin_addr.s_addr; 84 header_in->protocol = protocol; 85 header_in->data_length = htons(data_length); 86 *header = header_in; 87 return EOK; 88 // TODO IPv6 89 /* case AF_INET6: 90 if(addrlen != sizeof(struct sockaddr_in6)){ 91 return EINVAL; 92 } 93 address_in6 = (struct sockaddr_in6 *) addr; 94 return EOK; 95 */ default: 96 return EAFNOSUPPORT; 97 } 98 } 99 100 int ip_client_prepare_packet(packet_t packet, ip_protocol_t protocol, ip_ttl_t ttl, ip_tos_t tos, int dont_fragment, size_t ipopt_length){ 105 switch (src->sa_family) { 106 case AF_INET: 107 if (srclen != sizeof(struct sockaddr_in)) 108 return EINVAL; 109 110 *headerlen = sizeof(*header_in); 111 header_in = (ipv4_pseudo_header_ref) malloc(*headerlen); 112 if (!header_in) 113 return ENOMEM; 114 115 bzero(header_in, *headerlen); 116 address_in = (struct sockaddr_in *) dest; 117 header_in->destination_address = address_in->sin_addr.s_addr; 118 address_in = (struct sockaddr_in *) src; 119 header_in->source_address = address_in->sin_addr.s_addr; 120 header_in->protocol = protocol; 121 header_in->data_length = htons(data_length); 122 *header = header_in; 123 return EOK; 124 125 // TODO IPv6 126 /* case AF_INET6: 127 if (addrlen != sizeof(struct sockaddr_in6)) 128 return EINVAL; 129 130 address_in6 = (struct sockaddr_in6 *) addr; 131 return EOK; 132 */ 133 134 default: 135 return EAFNOSUPPORT; 136 } 137 } 138 139 /** Prepares the packet to be transfered via IP. 140 * 141 * The IP header is prefixed. 142 * 143 * @param[in,out] packet The packet to be prepared. 144 * @param[in] protocol The transport protocol. 145 * @param[in] ttl The time to live counter. The IPDEFTTL is set if zero. 146 * @param[in] tos The type of service. 147 * @param[in] dont_fragment The value indicating whether fragmentation is 148 * disabled. 149 * @param[in] ipopt_length The prefixed IP options length in bytes. 150 * @returns EOK on success. 151 * @returns ENOMEM if there is not enough memory left in the packet. 152 */ 153 int 154 ip_client_prepare_packet(packet_t packet, ip_protocol_t protocol, ip_ttl_t ttl, 155 ip_tos_t tos, int dont_fragment, size_t ipopt_length) 156 { 101 157 ip_header_ref header; 102 uint8_t * data;158 uint8_t *data; 103 159 size_t padding; 104 160 … … 106 162 // multiple of 4 bytes 107 163 padding = ipopt_length % 4; 108 if (padding){164 if (padding) { 109 165 padding = 4 - padding; 110 166 ipopt_length += padding; … … 113 169 // prefix the header 114 170 data = (uint8_t *) packet_prefix(packet, sizeof(ip_header_t) + padding); 115 if (! data){171 if (!data) 116 172 return ENOMEM; 117 }118 173 119 174 // add the padding 120 while (padding --){175 while (padding--) 121 176 data[sizeof(ip_header_t) + padding] = IPOPT_NOOP; 122 }123 177 124 178 // set the header 125 179 header = (ip_header_ref) data; 126 header->header_length = IP_COMPUTE_HEADER_LENGTH(sizeof(ip_header_t) + ipopt_length); 127 header->ttl = (ttl ? ttl : IPDEFTTL); //(((ttl) <= MAXTTL) ? ttl : MAXTTL) : IPDEFTTL; 180 header->header_length = IP_COMPUTE_HEADER_LENGTH(sizeof(ip_header_t) + 181 ipopt_length); 182 header->ttl = (ttl ? ttl : IPDEFTTL); 128 183 header->tos = tos; 129 184 header->protocol = protocol; 130 185 131 if (dont_fragment){186 if (dont_fragment) 132 187 header->flags = IPFLAG_DONT_FRAGMENT; 133 } 188 134 189 return EOK; 135 190 } 136 191 137 int ip_client_process_packet(packet_t packet, ip_protocol_t * protocol, ip_ttl_t * ttl, ip_tos_t * tos, int * dont_fragment, size_t * ipopt_length){ 192 /** Processes the received IP packet. 193 * 194 * Fills set header fields. 195 * Returns the prefixed IP header length. 196 * 197 * @param[in] packet The received packet. 198 * @param[out] protocol The transport protocol. May be NULL if not desired. 199 * @param[out] ttl The time to live counter. May be NULL if not desired. 200 * @param[out] tos The type of service. May be NULL if not desired. 201 * @param[out] dont_fragment The value indicating whether the fragmentation is 202 * disabled. May be NULL if not desired. 203 * @param[out] ipopt_length The IP options length in bytes. May be NULL if not 204 * desired. 205 * @returns The prefixed IP header length in bytes on success. 206 * @returns ENOMEM if the packet is too short to contain the IP 207 * header. 208 */ 209 int 210 ip_client_process_packet(packet_t packet, ip_protocol_t *protocol, 211 ip_ttl_t *ttl, ip_tos_t *tos, int *dont_fragment, size_t *ipopt_length) 212 { 138 213 ip_header_ref header; 139 214 140 215 header = (ip_header_ref) packet_get_data(packet); 141 if((! header) 142 || (packet_get_data_length(packet) < sizeof(ip_header_t))){ 216 if (!header || (packet_get_data_length(packet) < sizeof(ip_header_t))) 143 217 return ENOMEM; 144 } 145 146 if(protocol){ 218 219 if (protocol) 147 220 *protocol = header->protocol; 148 } 149 if(ttl){ 221 if (ttl) 150 222 *ttl = header->ttl; 151 } 152 if(tos){ 223 if (tos) 153 224 *tos = header->tos; 154 } 155 if(dont_fragment){ 156 *dont_fragment = header->flags &IPFLAG_DONT_FRAGMENT; 157 } 158 if(ipopt_length){ 225 if (dont_fragment) 226 *dont_fragment = header->flags & IPFLAG_DONT_FRAGMENT; 227 if (ipopt_length) { 159 228 *ipopt_length = IP_HEADER_LENGTH(header) - sizeof(ip_header_t); 160 229 return sizeof(ip_header_t); 161 } else{230 } else { 162 231 return IP_HEADER_LENGTH(header); 163 232 } 164 233 } 165 234 166 int ip_client_set_pseudo_header_data_length(void *header, size_t headerlen, size_t data_length){ 235 /** Updates the IPv4 pseudo header data length field. 236 * 237 * @param[in,out] header The IPv4 pseudo header to be updated. 238 * @param[in] headerlen The length of the IP pseudo header in bytes. 239 * @param[in] data_length The data length to be set. 240 * @returns EOK on success. 241 * @returns EBADMEM if the header parameter is NULL. 242 * @returns EINVAL if the headerlen parameter is not IPv4 pseudo 243 * header length. 244 */ 245 int 246 ip_client_set_pseudo_header_data_length(void *header, size_t headerlen, 247 size_t data_length) 248 { 167 249 ipv4_pseudo_header_ref header_in; 168 250 169 if (! header){251 if (!header) 170 252 return EBADMEM; 171 } 172 173 if(headerlen == sizeof(ipv4_pseudo_header_t)){ 253 254 if (headerlen == sizeof(ipv4_pseudo_header_t)) { 174 255 header_in = (ipv4_pseudo_header_ref) header; 175 256 header_in->data_length = htons(data_length); 176 257 return EOK; 177 258 // TODO IPv6 178 } else{259 } else { 179 260 return EINVAL; 180 261 } -
uspace/lib/net/il/ip_remote.c
r1882525 rf14291b 40 40 */ 41 41 42 #include <ip_remote.h> 43 #include <ip_interface.h> 44 #include <packet_client.h> 45 #include <generic.h> 46 42 47 #include <ipc/services.h> 43 44 #include <net_messages.h> 45 #include <net_modules.h> 46 #include <net_device.h> 47 #include <inet.h> 48 #include <ip_interface.h> 49 #include <packet/packet_client.h> 50 #include <il_messages.h> 51 #include <ip_messages.h> 52 #include <ip_remote.h> 48 #include <ipc/il.h> 49 #include <ipc/ip.h> 50 51 #include <net/modules.h> 52 #include <net/device.h> 53 #include <net/inet.h> 53 54 54 55 /** Add a route to the device routing table. … … 72 73 73 74 int ip_bind_service(services_t service, int protocol, services_t me, 74 async_client_conn_t receiver , tl_received_msg_t tl_received_msg)75 async_client_conn_t receiver) 75 76 { 76 77 return (int) bind_service(service, (ipcarg_t) protocol, me, service, … … 127 128 return EINVAL; 128 129 129 if ((!device_id) || ( header) || (headerlen))130 if ((!device_id) || (!header) || (!headerlen)) 130 131 return EBADMEM; 131 132 -
uspace/lib/net/include/adt/module_map.h
r1882525 rf14291b 27 27 */ 28 28 29 /** @addtogroup net30 * @{29 /** @addtogroup libnet 30 * @{ 31 31 */ 32 32 33 33 /** @file 34 * Character string to module map.34 * Character string to module map. 35 35 */ 36 36 37 #ifndef __NET_MODULES_MAP_H__38 #define __NET_MODULES_MAP_H__37 #ifndef LIBNET_MODULES_MAP_H_ 38 #define LIBNET_MODULES_MAP_H_ 39 39 40 40 #include <task.h> 41 42 41 #include <ipc/services.h> 43 44 #include <net_modules.h> 45 42 #include <net/modules.h> 46 43 #include <adt/generic_char_map.h> 47 44 48 45 /** Type definition of the module structure. 49 * @see module_struct46 * @see module_struct 50 47 */ 51 typedef struct module_struct module_t;48 typedef struct module_struct module_t; 52 49 53 50 /** Type definition of the module structure pointer. 54 * @see module_struct51 * @see module_struct 55 52 */ 56 typedef module_t * module_ref;53 typedef module_t *module_ref; 57 54 58 55 /** Module map. 59 * Sorted by module names.60 * @see generic_char_map.h56 * Sorted by module names. 57 * @see generic_char_map.h 61 58 */ 62 59 GENERIC_CHAR_MAP_DECLARE(modules, module_t) 63 60 64 /** Module structure. 65 */ 66 struct module_struct{ 67 /** Module task identifier if running. 68 */ 61 /** Module structure. */ 62 struct module_struct { 63 /** Module task identifier if running. */ 69 64 task_id_t task_id; 70 /** Module service identifier. 71 */ 65 /** Module service identifier. */ 72 66 services_t service; 73 /** Module phone if running and connected. 74 */ 67 /** Module phone if running and connected. */ 75 68 int phone; 76 /** Usage counter. 77 */ 69 /** Usage counter. */ 78 70 int usage; 79 /** Module name. 80 */ 81 const char * name; 82 /** Module full path filename. 83 */ 84 const char * filename; 85 /** Connecting function. 86 */ 87 connect_module_t * connect_module; 71 /** Module name. */ 72 const char *name; 73 /** Module full path filename. */ 74 const char *filename; 75 /** Connecting function. */ 76 connect_module_t *connect_module; 88 77 }; 89 78 90 /** Adds module to the module map. 91 * @param[out] module The module structure added. 92 * @param[in] modules The module map. 93 * @param[in] name The module name. 94 * @param[in] filename The full path filename. 95 * @param[in] service The module service. 96 * @param[in] task_id The module current task identifier. Zero (0) means not running. 97 * @param[in] connect_module The module connecting function. 98 * @returns EOK on success. 99 * @returns ENOMEM if there is not enough memory left. 100 */ 101 int add_module(module_ref * module, modules_ref modules, const char * name, const char * filename, services_t service, task_id_t task_id, connect_module_t * connect_module); 102 103 /** Searches and returns the specified module. 104 * If the module is not running, the module filaname is spawned. 105 * If the module is not connected, the connect_function is called. 106 * @param[in] modules The module map. 107 * @param[in] name The module name. 108 * @returns The running module found. It does not have to be connected. 109 * @returns NULL if there is no such module. 110 */ 111 module_ref get_running_module(modules_ref modules, char * name); 112 113 /** Starts the given module. 114 * @param[in] fname The module full or relative path filename. 115 * @returns The new module task identifier on success. 116 * @returns 0 if there is no such module. 117 */ 118 task_id_t spawn(const char * fname); 79 extern int add_module(module_ref *, modules_ref, const char *, const char *, 80 services_t, task_id_t, connect_module_t *); 81 extern module_ref get_running_module(modules_ref, char *); 82 extern task_id_t spawn(const char *); 119 83 120 84 #endif -
uspace/lib/net/include/arp_interface.h
r1882525 rf14291b 27 27 */ 28 28 29 /** @addtogroup arp30 * @{29 /** @addtogroup libnet 30 * @{ 31 31 */ 32 32 33 #ifndef __NET_ARP_INTERFACE_H__34 #define __NET_ARP_INTERFACE_H__33 #ifndef LIBNET_ARP_INTERFACE_H_ 34 #define LIBNET_ARP_INTERFACE_H_ 35 35 36 36 #include <adt/measured_strings.h> 37 #include <net_device.h> 37 #include <task.h> 38 39 #include <ipc/services.h> 40 41 #include <net/device.h> 42 #include <net/socket.h> 38 43 39 44 /** @name ARP module interface 40 * This interface is used by other modules.45 * This interface is used by other modules. 41 46 */ 42 47 /*@{*/ 43 48 44 /** Registers the new device and the requesting protocol service. 45 * Connects to the network interface layer service. 46 * Determines the device broadcast address, its address lengths and packet size. 47 * @param[in] arp_phone The ARP module phone used for (semi)remote calls. 48 * @param[in] device_id The new device identifier. 49 * @param[in] protocol The requesting protocol service. 50 * @param[in] netif The underlying device network interface layer service. 51 * @param[in] address The local requesting protocol address of the device. 52 * @returns EOK on success. 53 * @returns EEXIST if the device is already used. 54 * @returns ENOMEM if there is not enough memory left. 55 * @returns ENOENT if the network interface service is not known. 56 * @returns EREFUSED if the network interface service is not responding. 57 * @returns Other error codes as defined for the nil_packet_get_size() function. 58 * @returns Other error codes as defined for the nil_get_addr() function. 59 * @returns Other error codes as defined for the nil_get_broadcast_addr() function. 60 */ 61 extern int arp_device_req(int arp_phone, device_id_t device_id, services_t protocol, services_t netif, measured_string_ref address); 62 63 /** Translates the given protocol address to the network interface address. 64 * Broadcasts the ARP request if the mapping is not found. 65 * Allocates and returns the needed memory block as the data parameter. 66 * @param[in] arp_phone The ARP module phone used for (semi)remote calls. 67 * @param[in] device_id The device identifier. 68 * @param[in] protocol The requesting protocol service. 69 * @param[in] address The local requesting protocol address. 70 * @param[out] translation The translation of the local protocol address. 71 * @param[out] data The allocated raw translation data container. 72 * @returns EOK on success. 73 * @returns EINVAL if the address parameter is NULL. 74 * @returns EBADMEM if the translation or the data parameters are NULL. 75 * @returns ENOENT if the mapping is not found. 76 */ 77 extern int arp_translate_req(int arp_phone, device_id_t device_id, services_t protocol, measured_string_ref address, measured_string_ref * translation, char ** data); 78 79 /** Clears the device cache. 80 * @param[in] arp_phone The ARP module phone used for (semi)remote calls. 81 * @param[in] device_id The device identifier. 82 * @returns EOK on success. 83 * @returns ENOENT if the device is not found. 84 */ 85 extern int arp_clear_device_req(int arp_phone, device_id_t device_id); 86 87 /** Clears the given protocol address from the cache. 88 * @param[in] arp_phone The ARP module phone used for (semi)remote calls. 89 * @param[in] device_id The device identifier. 90 * @param[in] protocol The requesting protocol service. 91 * @param[in] address The protocol address to be cleared. 92 * @returns EOK on success. 93 * @returns ENOENT if the mapping is not found. 94 */ 95 extern int arp_clear_address_req(int arp_phone, device_id_t device_id, services_t protocol, measured_string_ref address); 96 97 /** Cleans the cache. 98 * @param[in] arp_phone The ARP module phone used for (semi)remote calls. 99 * @returns EOK on success. 100 */ 101 extern int arp_clean_cache_req(int arp_phone); 102 103 /** Connects to the ARP module. 104 * @param service The ARP module service. Ignored parameter. 105 * @returns The ARP module phone on success. 106 * @returns 0 if called by the bundle module. 107 */ 108 extern int arp_connect_module(services_t service); 109 110 /** Returns the ARP task identifier. 111 * @returns The current task identifier if called by the bundle module. 112 * @returns 0 if called by the remote module. 113 */ 114 extern task_id_t arp_task_get_id(void); 49 extern int arp_device_req(int, device_id_t, services_t, services_t, 50 measured_string_ref); 51 extern int arp_translate_req(int, device_id_t, services_t, measured_string_ref, 52 measured_string_ref *, char **); 53 extern int arp_clear_device_req(int, device_id_t); 54 extern int arp_clear_address_req(int, device_id_t, services_t, 55 measured_string_ref); 56 extern int arp_clean_cache_req(int); 57 extern int arp_connect_module(services_t); 115 58 116 59 /*@}*/ -
uspace/lib/net/include/generic.h
r1882525 rf14291b 27 27 */ 28 28 29 /** @addtogroup icmp30 * @{29 /** @addtogroup libnet 30 * @{ 31 31 */ 32 32 33 33 /** @file 34 * ICMP application interface implementation. 35 * @see icmp_api.h 34 * Generic communication interfaces for networking. 36 35 */ 37 36 37 #ifndef LIBNET_GENERIC_H_ 38 #define LIBNET_GENERIC_H_ 39 38 40 #include <async.h> 39 40 41 #include <ipc/ipc.h> 41 42 #include <ipc/services.h> 42 43 43 #include <sys/types.h> 44 #include <net/device.h> 45 #include <adt/measured_strings.h> 46 #include <net/packet.h> 44 47 45 #include <net_modules.h> 46 #include <icmp_api.h> 47 #include <inet.h> 48 #include <ip_codes.h> 49 #include <socket_codes.h> 50 #include <icmp_messages.h> 48 extern int generic_device_state_msg_remote(int, int, device_id_t, int, 49 services_t); 50 extern int generic_device_req_remote(int, int, device_id_t, int, services_t); 51 extern int generic_get_addr_req(int, int, device_id_t, measured_string_ref *, 52 char **); 53 extern int generic_packet_size_req_remote(int, int, device_id_t, 54 packet_dimension_ref); 55 extern int generic_received_msg_remote(int, int, device_id_t, packet_id_t, 56 services_t, services_t); 57 extern int generic_send_msg_remote(int, int, device_id_t, packet_id_t, 58 services_t, services_t); 59 extern int generic_translate_req(int, int, device_id_t, services_t, 60 measured_string_ref, size_t, measured_string_ref *, char **); 51 61 52 int icmp_echo_msg(int icmp_phone, size_t size, mseconds_t timeout, ip_ttl_t ttl, ip_tos_t tos, int dont_fragment, const struct sockaddr * addr, socklen_t addrlen){ 53 aid_t message_id; 54 ipcarg_t result; 55 56 if(addrlen <= 0){ 57 return EINVAL; 58 } 59 message_id = async_send_5(icmp_phone, NET_ICMP_ECHO, size, timeout, ttl, tos, (ipcarg_t) dont_fragment, NULL); 60 // send the address 61 async_data_write_start(icmp_phone, addr, (size_t) addrlen); 62 // timeout version may cause inconsistency - there is also an inner timer 63 // return async_wait_timeout(message_id, &result, timeout); 64 async_wait_for(message_id, &result); 65 return (int) result; 66 } 62 #endif 67 63 68 64 /** @} -
uspace/lib/net/include/icmp_client.h
r1882525 rf14291b 38 38 #define __NET_ICMP_CLIENT_H__ 39 39 40 #include < icmp_codes.h>41 #include < packet/packet.h>40 #include <net/icmp_codes.h> 41 #include <net/packet.h> 42 42 43 43 /** Processes the received packet prefixed with an ICMP header. -
uspace/lib/net/include/icmp_header.h
r1882525 rf14291b 41 41 #include <sys/types.h> 42 42 43 #include < in.h>44 #include < icmp_codes.h>43 #include <net/in.h> 44 #include <net/icmp_codes.h> 45 45 46 46 /** ICMP header size in bytes. -
uspace/lib/net/include/icmp_interface.h
r1882525 rf14291b 34 34 #define __NET_ICMP_INTERFACE_H__ 35 35 36 #include <net/socket_codes.h> 36 37 #include <sys/types.h> 37 38 38 #include <net _device.h>39 #include <net/device.h> 39 40 #include <adt/measured_strings.h> 40 #include <packet/packet.h> 41 #include <inet.h> 42 #include <ip_codes.h> 43 #include <socket_codes.h> 44 #include <icmp_codes.h> 45 #include <icmp_common.h> 41 #include <net/packet.h> 42 #include <net/inet.h> 43 #include <net/ip_codes.h> 44 #include <net/icmp_codes.h> 45 #include <net/icmp_common.h> 46 46 47 47 /** @name ICMP module interface -
uspace/lib/net/include/il_interface.h
r1882525 rf14291b 39 39 #define __NET_IL_INTERFACE_H__ 40 40 41 #include < async.h>41 #include <generic.h> 42 42 43 43 #include <ipc/services.h> 44 #include <ipc/il.h> 44 45 45 #include <net_messages.h> 46 #include <net_device.h> 47 #include <packet/packet.h> 48 #include <packet/packet_client.h> 49 #include <il_messages.h> 46 #include <net/device.h> 47 #include <net/packet.h> 48 49 #include <packet_client.h> 50 50 51 51 /** @name Internetwork layer module interface -
uspace/lib/net/include/ip_client.h
r1882525 rf14291b 27 27 */ 28 28 29 /** @addtogroup ip30 * @{29 /** @addtogroup libnet 30 * @{ 31 31 */ 32 32 33 33 /** @file 34 * IP client interface.34 * IP client interface. 35 35 */ 36 36 37 #ifndef __NET_IP_CLIENT_H__38 #define __NET_IP_CLIENT_H__37 #ifndef LIBNET_IP_CLIENT_H_ 38 #define LIBNET_IP_CLIENT_H_ 39 39 40 #include <net/socket_codes.h> 40 41 #include <sys/types.h> 41 42 42 #include < packet/packet.h>43 #include < ip_codes.h>43 #include <net/packet.h> 44 #include <net/ip_codes.h> 44 45 #include <ip_interface.h> 45 #include <socket_codes.h>46 46 47 /** Prepares the packet to be transfered via IP. 48 * The IP header is prefixed. 49 * @param[in,out] packet The packet to be prepared. 50 * @param[in] protocol The transport protocol. 51 * @param[in] ttl The time to live counter. The IPDEFTTL is set if zero (0). 52 * @param[in] tos The type of service. 53 * @param[in] dont_fragment The value indicating whether fragmentation is disabled. 54 * @param[in] ipopt_length The prefixed IP options length in bytes. 55 * @returns EOK on success. 56 * @returns ENOMEM if there is not enough memory left in the packet. 57 */ 58 extern int ip_client_prepare_packet(packet_t packet, ip_protocol_t protocol, ip_ttl_t ttl, ip_tos_t tos, int dont_fragment, size_t ipopt_length); 59 60 /** Processes the received IP packet. 61 * Fills set header fields. 62 * Returns the prefixed IP header length. 63 * @param[in] packet The received packet. 64 * @param[out] protocol The transport protocol. May be NULL if not desired. 65 * @param[out] ttl The time to live counter. May be NULL if not desired. 66 * @param[out] tos The type of service. May be NULL if not desired. 67 * @param[out] dont_fragment The value indicating whether the fragmentation is disabled. May be NULL if not desired. 68 * @param[out] ipopt_length The IP options length in bytes. May be NULL if not desired. 69 * @returns The prefixed IP header length in bytes on success. 70 * @returns ENOMEM if the packet is too short to contain the IP header. 71 */ 72 extern int ip_client_process_packet(packet_t packet, ip_protocol_t * protocol, ip_ttl_t * ttl, ip_tos_t * tos, int * dont_fragment, size_t * ipopt_length); 73 74 /** Returns the IP header length. 75 * @param[in] packet The packet. 76 * @returns The IP header length in bytes. 77 * @returns Zero (0) if there is no IP header. 78 */ 79 extern size_t ip_client_header_length(packet_t packet); 80 81 /** Updates the IPv4 pseudo header data length field. 82 * @param[in,out] header The IPv4 pseudo header to be updated. 83 * @param[in] headerlen The length of the IP pseudo header in bytes. 84 * @param[in] data_length The data length to be set. 85 * @returns EOK on success. 86 * @returns EBADMEM if the header parameter is NULL. 87 * @returns EINVAL if the headerlen parameter is not IPv4 pseudo header length. 88 */ 89 extern int ip_client_set_pseudo_header_data_length(void *header, size_t headerlen, size_t data_length); 90 91 /** Constructs the IPv4 pseudo header. 92 * @param[in] protocol The transport protocol. 93 * @param[in] src The source address. 94 * @param[in] srclen The source address length. 95 * @param[in] dest The destination address. 96 * @param[in] destlen The destination address length. 97 * @param[in] data_length The data length to be set. 98 * @param[out] header The constructed IPv4 pseudo header. 99 * @param[out] headerlen The length of the IP pseudo header in bytes. 100 * @returns EOK on success. 101 * @returns EBADMEM if the header and/or the headerlen parameter is NULL. 102 * @returns EINVAL if the source address and/or the destination address parameter is NULL. 103 * @returns EINVAL if the source address length is less than struct sockaddr length. 104 * @returns EINVAL if the source address length differs from the destination address length. 105 * @returns EINVAL if the source address family differs from the destination family. 106 * @returns EAFNOSUPPORT if the address family is not supported. 107 * @returns ENOMEM if there is not enough memory left. 108 */ 109 extern int ip_client_get_pseudo_header(ip_protocol_t protocol, struct sockaddr * src, socklen_t srclen, struct sockaddr * dest, socklen_t destlen, size_t data_length, void **header, size_t * headerlen); 47 extern int ip_client_prepare_packet(packet_t, ip_protocol_t, ip_ttl_t, ip_tos_t, 48 int, size_t); 49 extern int ip_client_process_packet(packet_t, ip_protocol_t *, ip_ttl_t *, 50 ip_tos_t *, int *, size_t *); 51 extern size_t ip_client_header_length(packet_t); 52 extern int ip_client_set_pseudo_header_data_length(void *, size_t, size_t); 53 extern int ip_client_get_pseudo_header(ip_protocol_t, struct sockaddr *, 54 socklen_t, struct sockaddr *, socklen_t, size_t, void **, size_t *); 110 55 111 56 // TODO ipopt manipulation -
uspace/lib/net/include/ip_interface.h
r1882525 rf14291b 34 34 #define __NET_IP_INTERFACE_H__ 35 35 36 #include <net/socket_codes.h> 36 37 #include <async.h> 37 38 #include <ipc/services.h> 38 39 39 #include <net _device.h>40 #include < packet/packet.h>40 #include <net/device.h> 41 #include <net/packet.h> 41 42 42 #include <in.h> 43 #include <ip_codes.h> 44 #include <socket_codes.h> 45 46 #ifdef CONFIG_IL_TL_BUNDLE 47 48 #include <ip_local.h> 49 50 #define ip_received_error_msg ip_received_error_msg_local 51 #define ip_set_gateway_req ip_set_gateway_req_local 52 #define ip_packet_size_req ip_packet_size_req_local 53 #define ip_device_req ip_device_req_local 54 #define ip_add_route_req ip_add_route_req_local 55 #define ip_send_msg ip_send_msg_local 56 #define ip_get_route_req ip_get_route_req_local 57 58 #else 43 #include <net/in.h> 44 #include <net/ip_codes.h> 59 45 60 46 #include <ip_remote.h> … … 67 53 #define ip_send_msg ip_send_msg_remote 68 54 #define ip_get_route_req ip_get_route_req_remote 69 70 #endif71 55 72 56 /** @name IP module interface … … 90 74 * @param[in] me The requesting module service. 91 75 * @param[in] receiver The message receiver. Used for remote connection. 92 * @param[in] tl_received_msg The message processing function. Used if bundled together.93 76 * @returns The phone of the needed service. 94 77 * @returns EOK on success. 95 78 * @returns Other error codes as defined for the bind_service() function. 96 79 */ 97 extern int ip_bind_service(services_t service, int protocol, services_t me, async_client_conn_t receiver , tl_received_msg_t tl_received_msg);80 extern int ip_bind_service(services_t service, int protocol, services_t me, async_client_conn_t receiver); 98 81 99 82 /** Connects to the IP module. 100 83 * @param service The IP module service. Ignored parameter. 101 84 * @returns The IP module phone on success. 102 * @returns 0 if called by the bundle module.103 85 */ 104 86 extern int ip_connect_module(services_t service); -
uspace/lib/net/include/ip_remote.h
r1882525 rf14291b 34 34 #define __NET_IP_REMOTE_H__ 35 35 36 #include <async.h>37 36 #include <ipc/services.h> 38 37 39 #include <ip_codes.h> 40 #include <inet.h> 41 #include <in.h> 42 #include <socket.h> 38 #include <net/ip_codes.h> 39 #include <net/inet.h> 40 #include <net/in.h> 41 #include <net/packet.h> 42 #include <net/device.h> 43 #include <net/socket.h> 43 44 44 45 extern int ip_set_gateway_req_remote(int, device_id_t, in_addr_t); -
uspace/lib/net/include/net_checksum.h
r1882525 rf14291b 27 27 */ 28 28 29 /** @addtogroup net30 * @{29 /** @addtogroup libnet 30 * @{ 31 31 */ 32 32 33 33 /** @file 34 * General CRC and checksum computation.34 * General CRC and checksum computation. 35 35 */ 36 36 37 #ifndef __NET_CHECKSUM_H__38 #define __NET_CHECKSUM_H__37 #ifndef LIBNET_CHECKSUM_H_ 38 #define LIBNET_CHECKSUM_H_ 39 39 40 40 #include <byteorder.h> 41 42 41 #include <sys/types.h> 43 42 44 43 /** IP checksum value for computed zero checksum. 45 * Zero is returned as 0xFFFF (not flipped)44 * Zero is returned as 0xFFFF (not flipped) 46 45 */ 47 #define IP_CHECKSUM_ZERO 0xFFFFu46 #define IP_CHECKSUM_ZERO 0xffffU 48 47 49 /** Computes CRC32 value.50 * @param[in] seed Initial value. Often used as 0 or ~0.51 * @param[in] data Pointer to the beginning of data to process.52 * @param[in] length Length of the data in bits.53 * @returns The computed CRC32 of the length bits of the data.54 */55 48 #ifdef ARCH_IS_BIG_ENDIAN 56 #define compute_crc32(seed, data, length) compute_crc32_be(seed, (uint8_t *) data, length) 49 #define compute_crc32(seed, data, length) \ 50 compute_crc32_be(seed, (uint8_t *) data, length) 57 51 #else 58 #define compute_crc32(seed, data, length) compute_crc32_le(seed, (uint8_t *) data, length) 52 #define compute_crc32(seed, data, length) \ 53 compute_crc32_le(seed, (uint8_t *) data, length) 59 54 #endif 60 55 61 /** Computes CRC32 value in the little-endian environment. 62 * @param[in] seed Initial value. Often used as 0 or ~0. 63 * @param[in] data Pointer to the beginning of data to process. 64 * @param[in] length Length of the data in bits. 65 * @returns The computed CRC32 of the length bits of the data. 66 */ 67 extern uint32_t compute_crc32_le(uint32_t seed, uint8_t * data, size_t length); 68 69 /** Computes CRC32 value in the big-endian environment. 70 * @param[in] seed Initial value. Often used as 0 or ~0. 71 * @param[in] data Pointer to the beginning of data to process. 72 * @param[in] length Length of the data in bits. 73 * @returns The computed CRC32 of the length bits of the data. 74 */ 75 extern uint32_t compute_crc32_be(uint32_t seed, uint8_t * data, size_t length); 76 77 /** Computes sum of the 2 byte fields. 78 * Padds one zero (0) byte if odd. 79 * @param[in] seed Initial value. Often used as 0 or ~0. 80 * @param[in] data Pointer to the beginning of data to process. 81 * @param[in] length Length of the data in bytes. 82 * @returns The computed checksum of the length bytes of the data. 83 */ 84 extern uint32_t compute_checksum(uint32_t seed, uint8_t * data, size_t length); 85 86 /** Compacts the computed checksum to the 16 bit number adding the carries. 87 * @param[in] sum Computed checksum. 88 * @returns Compacted computed checksum to the 16 bits. 89 */ 90 extern uint16_t compact_checksum(uint32_t sum); 91 92 /** Returns or flips the checksum if zero. 93 * @param[in] checksum The computed checksum. 94 * @returns The internet protocol header checksum. 95 * @returns 0xFFFF if the computed checksum is zero. 96 */ 97 extern uint16_t flip_checksum(uint16_t checksum); 98 99 /** Computes the ip header checksum. 100 * To compute the checksum of a new packet, the checksum header field must be zero. 101 * To check the checksum of a received packet, the checksum may be left set. 102 * The zero (0) value will be returned in this case if valid. 103 * @param[in] data The header data. 104 * @param[in] length The header length in bytes. 105 * @returns The internet protocol header checksum. 106 * @returns 0xFFFF if the computed checksum is zero. 107 */ 108 extern uint16_t ip_checksum(uint8_t * data, size_t length); 56 extern uint32_t compute_crc32_le(uint32_t, uint8_t *, size_t); 57 extern uint32_t compute_crc32_be(uint32_t, uint8_t *, size_t); 58 extern uint32_t compute_checksum(uint32_t, uint8_t *, size_t); 59 extern uint16_t compact_checksum(uint32_t); 60 extern uint16_t flip_checksum(uint16_t); 61 extern uint16_t ip_checksum(uint8_t *, size_t); 109 62 110 63 #endif -
uspace/lib/net/include/net_interface.h
r1882525 rf14291b 27 27 */ 28 28 29 /** @addtogroup net29 /** @addtogroup libnet 30 30 * @{ 31 31 */ 32 32 33 #ifndef __NET_NET_INTERFACE_H__34 #define __NET_NET_INTERFACE_H__33 #ifndef LIBNET_NET_INTERFACE_H_ 34 #define LIBNET_NET_INTERFACE_H_ 35 35 36 36 #include <ipc/services.h> 37 37 38 #include <net _device.h>38 #include <net/device.h> 39 39 #include <adt/measured_strings.h> 40 40 41 41 /** @name Networking module interface 42 * This interface is used by other modules.42 * This interface is used by other modules. 43 43 */ 44 44 /*@{*/ 45 45 46 /** Returns the device specific configuration. 47 * Returns the global configuration if the device specific is not found. 48 * The configuration names are read and the appropriate settings are set instead. 49 * Call net_free_settings() function to release the returned configuration. 50 * @param[in] net_phone The networking module phone. 51 * @param[in] device_id The device identifier. 52 * @param[in,out] configuration The requested device configuration. The names are read and the appropriate settings are set instead. 53 * @param[in] count The configuration entries count. 54 * @param[in,out] data The configuration and settings data. 55 * @returns EOK on success. 56 * @returns EINVAL if the configuration is NULL. 57 * @returns EINVAL if the count is zero (0). 58 * @returns Other error codes as defined for the generic_translate_req() function. 59 */ 60 extern int net_get_device_conf_req(int net_phone, device_id_t device_id, measured_string_ref * configuration, size_t count, char ** data); 61 62 /** Returns the global configuration. 63 * The configuration names are read and the appropriate settings are set instead. 64 * Call net_free_settings() function to release the returned configuration. 65 * @param[in] net_phone The networking module phone. 66 * @param[in,out] configuration The requested configuration. The names are read and the appropriate settings are set instead. 67 * @param[in] count The configuration entries count. 68 * @param[in,out] data The configuration and settings data. 69 * @returns EOK on success. 70 * @returns EINVAL if the configuration is NULL. 71 * @returns EINVAL if the count is zero (0). 72 * @returns Other error codes as defined for the generic_translate_req() function. 73 */ 74 extern int net_get_conf_req(int net_phone, measured_string_ref * configuration, size_t count, char ** data); 75 76 /** Frees the received settings. 77 * @param[in] settings The received settings. 78 * @param[in] data The received settings data. 79 * @see net_get_device_conf_req() 80 * @see net_get_conf_req() 81 */ 82 extern void net_free_settings(measured_string_ref settings, char * data); 83 84 /** Connects to the networking module. 85 * @param service The networking module service. Ignored parameter. 86 * @returns The networking module phone on success. 87 * @returns 0 if called by the bundle module. 88 */ 89 extern int net_connect_module(services_t service); 46 extern int net_get_device_conf_req(int, device_id_t, measured_string_ref *, 47 size_t, char **); 48 extern int net_get_conf_req(int, measured_string_ref *, size_t, char **); 49 extern void net_free_settings(measured_string_ref, char *); 50 extern int net_connect_module(void); 90 51 91 52 /*@}*/ -
uspace/lib/net/include/netif_interface.h
r1882525 rf14291b 34 34 #define __NET_NETIF_INTERFACE_H__ 35 35 36 #ifdef CONFIG_NETIF_NIL_BUNDLE37 38 #include <netif_local.h>39 #include <netif_nil_bundle.h>40 #include <packet/packet_server.h>41 42 #define netif_module_message netif_nil_module_message43 #define netif_module_start netif_nil_module_start44 #define netif_get_addr_req netif_get_addr_req_local45 #define netif_probe_req netif_probe_req_local46 #define netif_send_msg netif_send_msg_local47 #define netif_start_req netif_start_req_local48 #define netif_stop_req netif_stop_req_local49 #define netif_stats_req netif_stats_req_local50 #define netif_bind_service netif_bind_service_local51 52 #else /* CONFIG_NETIF_NIL_BUNDLE */53 54 36 #include <netif_remote.h> 55 #include <packet /packet_client.h>37 #include <packet_client.h> 56 38 57 39 #define netif_module_message netif_module_message_standalone … … 65 47 #define netif_bind_service netif_bind_service_remote 66 48 67 #endif /* CONFIG_NETIF_NIL_BUNDLE */68 69 49 #endif 70 50 -
uspace/lib/net/include/netif_local.h
r1882525 rf14291b 34 34 * Network interface module skeleton. 35 35 * The skeleton has to be part of each network interface module. 36 * The skeleton can be also part of the module bundled with the network interface layer.37 36 */ 38 37 … … 44 43 #include <ipc/ipc.h> 45 44 #include <ipc/services.h> 45 #include <err.h> 46 46 47 47 #include <adt/measured_strings.h> 48 #include <net_err.h> 49 #include <net_device.h> 50 #include <packet/packet.h> 48 #include <net/device.h> 49 #include <net/packet.h> 51 50 52 51 /** Network interface device specific data. -
uspace/lib/net/include/netif_remote.h
r1882525 rf14291b 34 34 #define __NET_NETIF_REMOTE_H__ 35 35 36 #include < async.h>37 #include < fibril_synch.h>38 #include < ipc/ipc.h>36 #include <ipc/services.h> 37 #include <adt/measured_strings.h> 38 #include <net/device.h> 39 39 40 40 extern int netif_get_addr_req_remote(int, device_id_t, measured_string_ref *, -
uspace/lib/net/include/nil_interface.h
r1882525 rf14291b 38 38 39 39 #include <ipc/ipc.h> 40 #include <ipc/nil.h> 40 41 41 #include <net_messages.h> 42 #include <adt/measured_strings.h> 43 #include <packet/packet.h> 44 #include <nil_messages.h> 45 #include <net_device.h> 42 #include <generic.h> 43 #include <nil_remote.h> 46 44 47 45 #define nil_bind_service(service, device_id, me, receiver) \ … … 67 65 netif_service) 68 66 69 70 #ifdef CONFIG_NETIF_NIL_BUNDLE71 72 #include <nil_local.h>73 #include <packet/packet_server.h>74 75 #define nil_device_state_msg nil_device_state_msg_local76 #define nil_received_msg nil_received_msg_local77 78 #else /* CONFIG_NETIF_NIL_BUNDLE */79 80 #include <nil_remote.h>81 #include <packet/packet_server.h>82 83 67 #define nil_device_state_msg nil_device_state_msg_remote 84 68 #define nil_received_msg nil_received_msg_remote 85 86 #endif /* CONFIG_NETIF_NIL_BUNDLE */87 69 88 70 #endif -
uspace/lib/net/include/nil_remote.h
r1882525 rf14291b 34 34 #define __NET_NIL_REMOTE_H__ 35 35 36 #include < async.h>37 #include < fibril_synch.h>38 #include < ipc/ipc.h>36 #include <ipc/services.h> 37 #include <net/device.h> 38 #include <net/packet.h> 39 39 40 40 extern int nil_device_state_msg_remote(int, device_id_t, int); -
uspace/lib/net/include/packet_remote.h
r1882525 rf14291b 27 27 */ 28 28 29 /** @addtogroup packet29 /** @addtogroup libnet 30 30 * @{ 31 31 */ 32 32 33 #ifndef __NET_PACKET_REMOTE_H__34 #define __NET_PACKET_REMOTE_H__33 #ifndef LIBNET_PACKET_REMOTE_H_ 34 #define LIBNET_PACKET_REMOTE_H_ 35 35 36 #include <packet/packet.h> 36 #include <net/packet.h> 37 #include <sys/types.h> 37 38 38 39 extern int packet_translate_remote(int, packet_ref, packet_id_t); -
uspace/lib/net/include/tl_common.h
r1882525 rf14291b 38 38 #define __NET_TL_COMMON_H__ 39 39 40 #include < packet/packet.h>41 #include <net _device.h>42 #include < inet.h>43 #include < socket_codes.h>40 #include <net/socket_codes.h> 41 #include <net/packet.h> 42 #include <net/device.h> 43 #include <net/inet.h> 44 44 45 45 /** Device packet dimensions. -
uspace/lib/net/include/tl_interface.h
r1882525 rf14291b 40 40 #include <async.h> 41 41 #include <ipc/services.h> 42 #include <ipc/tl.h> 42 43 43 #include <net_messages.h> 44 #include <net_device.h> 45 #include <packet/packet.h> 46 #include <packet/packet_client.h> 47 #include <tl_messages.h> 44 #include <generic.h> 45 #include <net/device.h> 46 #include <net/packet.h> 47 #include <packet_client.h> 48 48 49 49 /** @name Transport layer module interface -
uspace/lib/net/netif/netif_local.c
r1882525 rf14291b 42 42 #include <ipc/ipc.h> 43 43 #include <ipc/services.h> 44 45 #include < net_err.h>46 #include <net_messages.h> 47 #include < net_modules.h>48 #include < packet/packet.h>49 #include < packet/packet_client.h>50 #include <packet /packet_server.h>44 #include <ipc/netif.h> 45 #include <err.h> 46 47 #include <generic.h> 48 #include <net/modules.h> 49 #include <net/packet.h> 50 #include <packet_client.h> 51 51 #include <packet_remote.h> 52 52 #include <adt/measured_strings.h> 53 #include <net _device.h>53 #include <net/device.h> 54 54 #include <nil_interface.h> 55 55 #include <netif_local.h> 56 #include <netif_messages.h>57 56 #include <netif_interface.h> 58 57 … … 228 227 229 228 return ERROR_CODE; 230 }231 232 /** Create bidirectional connection with the network interface module and registers the message receiver.233 *234 * @param[in] service The network interface module service.235 * @param[in] device_id The device identifier.236 * @param[in] me The requesting module service.237 * @param[in] receiver The message receiver.238 *239 * @return The phone of the needed service.240 * @return EOK on success.241 * @return Other error codes as defined for the bind_service() function.242 *243 */244 int netif_bind_service_local(services_t service, device_id_t device_id,245 services_t me, async_client_conn_t receiver)246 {247 return EOK;248 229 } 249 230 -
uspace/lib/net/netif/netif_remote.c
r1882525 rf14291b 36 36 37 37 #include <ipc/services.h> 38 #include <ipc/netif.h> 38 39 39 #include <net _modules.h>40 #include <net/modules.h> 40 41 #include <adt/measured_strings.h> 41 #include < packet/packet.h>42 #include <packet /packet_client.h>43 #include <net _device.h>42 #include <net/packet.h> 43 #include <packet_client.h> 44 #include <net/device.h> 44 45 #include <netif_remote.h> 45 #include < netif_messages.h>46 #include <generic.h> 46 47 47 48 int netif_get_addr_req_remote(int netif_phone, device_id_t device_id, … … 90 91 } 91 92 93 /** Create bidirectional connection with the network interface module and 94 * registers the message receiver. 95 * 96 * @param[in] service The network interface module service. 97 * @param[in] device_id The device identifier. 98 * @param[in] me The requesting module service. 99 * @param[in] receiver The message receiver. 100 * 101 * @return The phone of the needed service. 102 * @return EOK on success. 103 * @return Other error codes as defined for the bind_service() function. 104 * 105 */ 92 106 int netif_bind_service_remote(services_t service, device_id_t device_id, services_t me, 93 107 async_client_conn_t receiver) -
uspace/lib/net/nil/nil_remote.c
r1882525 rf14291b 36 36 */ 37 37 38 #include <net_messages.h> 39 #include <net_device.h> 38 #include <nil_remote.h> 40 39 #include <nil_interface.h> 41 #include <packet/packet.h> 42 #include <packet/packet_client.h> 43 #include <nil_messages.h> 44 #include <nil_remote.h> 40 #include <generic.h> 41 #include <net/device.h> 42 #include <net/packet.h> 43 #include <packet_client.h> 44 45 #include <ipc/nil.h> 45 46 46 47 /** Notify the network interface layer about the device state change. -
uspace/lib/net/tl/icmp_client.c
r1882525 rf14291b 43 43 #include <sys/types.h> 44 44 45 #include < icmp_codes.h>45 #include <net/icmp_codes.h> 46 46 #include <icmp_client.h> 47 #include < packet/packet.h>48 #include <packet /packet_client.h>47 #include <net/packet.h> 48 #include <packet_client.h> 49 49 #include <icmp_header.h> 50 50 -
uspace/lib/net/tl/icmp_remote.c
r1882525 rf14291b 40 40 #include <ipc/ipc.h> 41 41 #include <ipc/services.h> 42 #include <ipc/icmp.h> 42 43 #include <sys/types.h> 43 44 44 #include <net_messages.h> 45 #include <net_modules.h> 45 #include <net/modules.h> 46 46 #include <icmp_interface.h> 47 #include <packet/packet_client.h> 48 #include <icmp_messages.h> 47 #include <packet_client.h> 49 48 50 49 int icmp_destination_unreachable_msg(int icmp_phone, icmp_code_t code, icmp_param_t mtu, packet_t packet){ -
uspace/lib/net/tl/tl_common.c
r1882525 rf14291b 36 36 */ 37 37 38 #include <net/socket_codes.h> 39 #include <net/in.h> 40 #include <net/in6.h> 41 #include <net/inet.h> 38 42 #include <async.h> 39 43 #include <ipc/services.h> 40 41 #include <net_err.h> 42 #include <packet/packet.h> 43 #include <packet/packet_client.h> 44 #include <errno.h> 45 #include <err.h> 46 47 #include <net/packet.h> 48 #include <packet_client.h> 44 49 #include <packet_remote.h> 45 #include <net _device.h>50 #include <net/device.h> 46 51 #include <icmp_interface.h> 47 #include <in.h>48 #include <in6.h>49 #include <inet.h>50 #include <ip_local.h>51 52 #include <ip_remote.h> 52 #include <socket_codes.h>53 #include <socket_errno.h>54 53 #include <ip_interface.h> 55 54 #include <tl_interface.h> … … 58 57 DEVICE_MAP_IMPLEMENT(packet_dimensions, packet_dimension_t); 59 58 60 int tl_get_address_port(const struct sockaddr * addr, int addrlen, uint16_t * port){ 61 const struct sockaddr_in * address_in; 62 const struct sockaddr_in6 * address_in6; 63 64 if((addrlen <= 0) || ((size_t) addrlen < sizeof(struct sockaddr))){ 65 return EINVAL; 66 } 67 switch(addr->sa_family){ 68 case AF_INET: 69 if(addrlen != sizeof(struct sockaddr_in)){ 59 int 60 tl_get_address_port(const struct sockaddr *addr, int addrlen, uint16_t *port) 61 { 62 const struct sockaddr_in *address_in; 63 const struct sockaddr_in6 *address_in6; 64 65 if ((addrlen <= 0) || ((size_t) addrlen < sizeof(struct sockaddr))) 66 return EINVAL; 67 68 switch (addr->sa_family) { 69 case AF_INET: 70 if (addrlen != sizeof(struct sockaddr_in)) 71 return EINVAL; 72 73 address_in = (struct sockaddr_in *) addr; 74 *port = ntohs(address_in->sin_port); 75 break; 76 case AF_INET6: 77 if (addrlen != sizeof(struct sockaddr_in6)) 70 78 return EINVAL; 71 } 72 address_in = (struct sockaddr_in *) addr; 73 *port = ntohs(address_in->sin_port); 74 break; 75 case AF_INET6: 76 if(addrlen != sizeof(struct sockaddr_in6)){ 77 return EINVAL; 78 } 79 address_in6 = (struct sockaddr_in6 *) addr; 80 *port = ntohs(address_in6->sin6_port); 81 break; 82 default: 83 return EAFNOSUPPORT; 84 } 79 80 address_in6 = (struct sockaddr_in6 *) addr; 81 *port = ntohs(address_in6->sin6_port); 82 break; 83 default: 84 return EAFNOSUPPORT; 85 } 86 85 87 return EOK; 86 88 } … … 112 114 return EBADMEM; 113 115 114 *packet_dimension = packet_dimensions_find(packet_dimensions, device_id); 116 *packet_dimension = packet_dimensions_find(packet_dimensions, 117 device_id); 115 118 if (!*packet_dimension) { 116 119 /* Ask for and remember them if not found */ … … 136 139 } 137 140 138 int tl_update_ip_packet_dimension(packet_dimensions_ref packet_dimensions, device_id_t device_id, size_t content){ 141 int 142 tl_update_ip_packet_dimension(packet_dimensions_ref packet_dimensions, 143 device_id_t device_id, size_t content) 144 { 139 145 packet_dimension_ref packet_dimension; 140 146 141 147 packet_dimension = packet_dimensions_find(packet_dimensions, device_id); 142 if (! packet_dimension){148 if (!packet_dimension) 143 149 return ENOENT; 144 }145 150 packet_dimension->content = content; 146 if(device_id != DEVICE_INVALID_ID){ 147 packet_dimension = packet_dimensions_find(packet_dimensions, DEVICE_INVALID_ID); 148 if(packet_dimension){ 149 if(packet_dimension->content >= content){ 151 152 if (device_id != DEVICE_INVALID_ID) { 153 packet_dimension = packet_dimensions_find(packet_dimensions, 154 DEVICE_INVALID_ID); 155 156 if (packet_dimension) { 157 if (packet_dimension->content >= content) 150 158 packet_dimension->content = content; 151 }else{ 152 packet_dimensions_exclude(packet_dimensions, DEVICE_INVALID_ID); 153 } 159 else 160 packet_dimensions_exclude(packet_dimensions, 161 DEVICE_INVALID_ID); 162 154 163 } 155 164 } 165 156 166 return EOK; 157 167 } 158 168 159 int tl_set_address_port(struct sockaddr * addr, int addrlen, uint16_t port){ 160 struct sockaddr_in * address_in; 161 struct sockaddr_in6 * address_in6; 169 int tl_set_address_port(struct sockaddr * addr, int addrlen, uint16_t port) 170 { 171 struct sockaddr_in *address_in; 172 struct sockaddr_in6 *address_in6; 162 173 size_t length; 163 174 164 if (addrlen < 0){165 return EINVAL; 166 }175 if (addrlen < 0) 176 return EINVAL; 177 167 178 length = (size_t) addrlen; 168 if(length < sizeof(struct sockaddr)){ 169 return EINVAL; 170 } 171 switch(addr->sa_family){ 172 case AF_INET: 173 if(length != sizeof(struct sockaddr_in)){ 179 if (length < sizeof(struct sockaddr)) 180 return EINVAL; 181 182 switch (addr->sa_family) { 183 case AF_INET: 184 if (length != sizeof(struct sockaddr_in)) 185 return EINVAL; 186 address_in = (struct sockaddr_in *) addr; 187 address_in->sin_port = htons(port); 188 return EOK; 189 case AF_INET6: 190 if (length != sizeof(struct sockaddr_in6)) 174 191 return EINVAL; 175 } 176 address_in = (struct sockaddr_in *) addr; 177 address_in->sin_port = htons(port); 178 return EOK; 179 case AF_INET6: 180 if(length != sizeof(struct sockaddr_in6)){ 181 return EINVAL; 182 } 183 address_in6 = (struct sockaddr_in6 *) addr; 184 address_in6->sin6_port = htons(port); 185 return EOK; 186 default: 187 return EAFNOSUPPORT; 188 } 189 } 190 191 int tl_prepare_icmp_packet(int packet_phone, int icmp_phone, packet_t packet, services_t error){ 192 address_in6 = (struct sockaddr_in6 *) addr; 193 address_in6->sin6_port = htons(port); 194 return EOK; 195 default: 196 return EAFNOSUPPORT; 197 } 198 } 199 200 int 201 tl_prepare_icmp_packet(int packet_phone, int icmp_phone, packet_t packet, 202 services_t error) 203 { 192 204 packet_t next; 193 uint8_t * src;205 uint8_t *src; 194 206 int length; 195 207 … … 200 212 201 213 length = packet_get_addr(packet, &src, NULL); 202 if((length > 0) 203 && (! error) 204 && (icmp_phone >= 0) 205 // set both addresses to the source one (avoids the source address deletion before setting the destination one) 206 && (packet_set_addr(packet, src, src, (size_t) length) == EOK)){ 214 if ((length > 0) && (!error) && (icmp_phone >= 0) && 215 // set both addresses to the source one (avoids the source address 216 // deletion before setting the destination one) 217 (packet_set_addr(packet, src, src, (size_t) length) == EOK)) { 207 218 return EOK; 208 } else{219 } else 209 220 pq_release_remote(packet_phone, packet_get_id(packet)); 210 } 221 211 222 return ENOENT; 212 223 } 213 224 214 int tl_socket_read_packet_data(int packet_phone, packet_ref packet, size_t prefix, const packet_dimension_ref dimension, const struct sockaddr * addr, socklen_t addrlen){ 225 int 226 tl_socket_read_packet_data(int packet_phone, packet_ref packet, size_t prefix, 227 const packet_dimension_ref dimension, const struct sockaddr *addr, 228 socklen_t addrlen) 229 { 215 230 ERROR_DECLARE; 216 231 … … 219 234 void * data; 220 235 221 if (! dimension){222 return EINVAL; 223 } 236 if (!dimension) 237 return EINVAL; 238 224 239 // get the data length 225 if (! async_data_write_receive(&callid, &length)){226 return EINVAL; 227 } 240 if (!async_data_write_receive(&callid, &length)) 241 return EINVAL; 242 228 243 // get a new packet 229 *packet = packet_get_4_remote(packet_phone, length, dimension->addr_len, prefix + dimension->prefix, dimension->suffix); 230 if(! packet){ 244 *packet = packet_get_4_remote(packet_phone, length, dimension->addr_len, 245 prefix + dimension->prefix, dimension->suffix); 246 if (!packet) 231 247 return ENOMEM; 232 } 248 233 249 // allocate space in the packet 234 250 data = packet_suffix(*packet, length); 235 if (! data){251 if (!data) { 236 252 pq_release_remote(packet_phone, packet_get_id(*packet)); 237 253 return ENOMEM; 238 254 } 255 239 256 // read the data into the packet 240 if(ERROR_OCCURRED(async_data_write_finalize(callid, data, length)) 241 // set the packet destination address 242 || ERROR_OCCURRED(packet_set_addr(*packet, NULL, (uint8_t *) addr, addrlen))){ 257 if (ERROR_OCCURRED(async_data_write_finalize(callid, data, length)) || 258 // set the packet destination address 259 ERROR_OCCURRED(packet_set_addr(*packet, NULL, (uint8_t *) addr, 260 addrlen))) { 243 261 pq_release_remote(packet_phone, packet_get_id(*packet)); 244 262 return ERROR_CODE; 245 263 } 264 246 265 return (int) length; 247 266 } -
uspace/lib/packet/Makefile
r1882525 rf14291b 30 30 USPACE_PREFIX = ../.. 31 31 EXTRA_CFLAGS = -Iinclude 32 LIBRARY = lib socket32 LIBRARY = libpacket 33 33 34 34 SOURCES = \ 35 generic/socket_client.c \ 36 generic/socket_core.c \ 37 generic/socket_parse.c \ 38 generic/inet.c \ 39 generic/net_modules.c \ 40 generic/icmp_common.c \ 41 generic/icmp_api.c \ 42 packet/packet.c \ 43 packet/packet_client.c \ 44 packet/packet_server.c \ 45 adt/dynamic_fifo.c \ 46 adt/measured_strings.c \ 47 adt/char_map.c 35 generic/packet_server.c 48 36 49 37 include $(USPACE_PREFIX)/Makefile.common -
uspace/lib/packet/generic/packet_server.c
r1882525 rf14291b 39 39 #include <async.h> 40 40 #include <errno.h> 41 #include <err.h> 41 42 #include <fibril_synch.h> 42 43 #include <unistd.h> 44 #include <sys/mman.h> 43 45 44 46 #include <ipc/ipc.h> 45 #include <sys/mman.h> 46 47 #include <net_err.h> 48 #include <net_messages.h> 49 #include <packet/packet.h> 50 #include <packet/packet_client.h> 51 #include <packet/packet_header.h> 52 #include <packet/packet_messages.h> 53 #include <packet/packet_server.h> 47 #include <ipc/packet.h> 48 #include <ipc/net.h> 49 50 #include <net/packet.h> 51 #include <net/packet_header.h> 52 53 #include <packet_server.h> 54 #include <packet_local.h> 54 55 55 56 #define FREE_QUEUES_COUNT 7 … … 85 86 unsigned int count; 86 87 } ps_globals = { 87 .lock = { 88 .counter = 1, 89 .waiters = { 90 .prev = &ps_globals.lock.waiters, 91 .next = &ps_globals.lock.waiters, 92 } 93 }, 88 .lock = FIBRIL_MUTEX_INITIALIZER(ps_globals.lock), 94 89 .free = {NULL, NULL, NULL, NULL, NULL, NULL, NULL}, 95 90 .sizes = {PAGE_SIZE, PAGE_SIZE * 2, PAGE_SIZE * 4, PAGE_SIZE * 8, PAGE_SIZE * 16, PAGE_SIZE * 32, PAGE_SIZE * 64},
Note:
See TracChangeset
for help on using the changeset viewer.
