Changeset efedee77 in mainline for uspace/lib


Ignore:
Timestamp:
2010-11-02T22:38:46Z (15 years ago)
Author:
Vojtech Horky <vojtechhorky@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
af894a21
Parents:
aab02fb (diff), e06ef614 (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.
Message:

Merge mainline changes

Location:
uspace/lib
Files:
56 added
41 deleted
72 edited
28 moved

Legend:

Unmodified
Added
Removed
  • uspace/lib/c/Makefile

    raab02fb refedee77  
    5757        generic/clipboard.c \
    5858        generic/devmap.c \
     59        generic/devman.c \
     60        generic/device/hw_res.c \
     61        generic/device/char.c \
    5962        generic/event.c \
    6063        generic/errno.c \
     
    8487        generic/ipc.c \
    8588        generic/async.c \
     89        generic/async_rel.c \
    8690        generic/loader.c \
    8791        generic/getopt.c \
    8892        generic/adt/list.o \
    8993        generic/adt/hash_table.o \
     94        generic/adt/dynamic_fifo.c \
     95        generic/adt/measured_strings.c \
     96        generic/adt/char_map.c \
    9097        generic/time.c \
    9198        generic/err.c \
     
    95102        generic/vfs/vfs.c \
    96103        generic/vfs/canonify.c \
     104        generic/net/inet.c \
     105        generic/net/icmp_common.c \
     106        generic/net/icmp_api.c \
     107        generic/net/modules.c \
     108        generic/net/packet.c \
     109        generic/net/socket_client.c \
     110        generic/net/socket_parse.c \
    97111        generic/stacktrace.c \
    98112        generic/arg_parse.c \
  • uspace/lib/c/arch/abs32le/include/fibril.h

    raab02fb refedee77  
    4444                (ctx)->pc = (uintptr_t) (_pc); \
    4545                (ctx)->sp = ((uintptr_t) (stack)) + (size) - SP_DELTA; \
     46                (ctx)->fp = 0; \
    4647                (ctx)->tls = ((uintptr_t) (ptls)) + sizeof(tcb_t); \
    4748        } while (0)
     
    5354typedef struct {
    5455        uintptr_t sp;
     56        uintptr_t fp;
    5557        uintptr_t pc;
    5658        uintptr_t tls;
    5759} context_t;
     60
     61static inline uintptr_t context_get_fp(context_t *ctx)
     62{
     63        /* On real hardware, this function returns the frame pointer. */
     64        return ctx->fp;
     65}
    5866
    5967#endif
  • uspace/lib/c/arch/abs32le/include/istate.h

    raab02fb refedee77  
    3636#define LIBC_abs32le__ISTATE_H_
    3737
    38 #include <sys/types.h>
    39 
    40 /** Interrupt context.
    41  *
    42  * On real hardware this stores the registers which
    43  * need to be preserved during interupts.
    44  */
    45 typedef struct istate {
    46         uintptr_t ip;
    47         uintptr_t fp;
    48         uint32_t stack[];
    49 } istate_t;
    50 
    51 static inline uintptr_t istate_get_pc(istate_t *istate)
    52 {
    53         return istate->ip;
    54 }
    55 
    56 static inline uintptr_t istate_get_fp(istate_t *istate)
    57 {
    58         return istate->fp;
    59 }
     38#include <arch/istate.h>
    6039
    6140#endif
  • uspace/lib/c/arch/amd64/include/fibril.h

    raab02fb refedee77  
    5656 */
    5757typedef struct {
    58     uint64_t sp;
    59     uint64_t pc;
    60    
    61     uint64_t rbx;
    62     uint64_t rbp;
     58        uint64_t sp;
     59        uint64_t pc;
    6360
    64     uint64_t r12;
    65     uint64_t r13;
    66     uint64_t r14;
    67     uint64_t r15;
     61        uint64_t rbx;
     62        uint64_t rbp;
    6863
    69     uint64_t tls;
     64        uint64_t r12;
     65        uint64_t r13;
     66        uint64_t r14;
     67        uint64_t r15;
     68
     69        uint64_t tls;
    7070} context_t;
     71
     72static inline uintptr_t context_get_fp(context_t *ctx)
     73{
     74        return ctx->rbp;
     75}
    7176
    7277#endif
  • uspace/lib/c/arch/amd64/include/istate.h

    raab02fb refedee77  
    3636#define LIBC_amd64_ISTATE_H_
    3737
    38 #include <sys/types.h>
    39 
    40 /** Interrupt context.
    41  *
    42  * This is a copy of the kernel definition with which it must be kept in sync.
    43  */
    44 typedef struct istate {
    45         uint64_t rax;
    46         uint64_t rcx;
    47         uint64_t rdx;
    48         uint64_t rsi;
    49         uint64_t rdi;
    50         uint64_t r8;
    51         uint64_t r9;
    52         uint64_t r10;
    53         uint64_t r11;
    54         uint64_t rbp;
    55         uint64_t error_word;
    56         uint64_t rip;
    57         uint64_t cs;
    58         uint64_t rflags;
    59         uint64_t stack[]; /* Additional data on stack */
    60 } istate_t;
    61 
    62 static inline uintptr_t istate_get_pc(istate_t *istate)
    63 {
    64         return istate->rip;
    65 }
    66 
    67 static inline uintptr_t istate_get_fp(istate_t *istate)
    68 {
    69         return istate->rbp;
    70 }
     38#include <arch/istate.h>
    7139
    7240#endif
  • uspace/lib/c/arch/amd64/src/entry.s

    raab02fb refedee77  
    4242        #
    4343        pushq $0
    44         mov %rsp, %rbp
     44        movq %rsp, %rbp
    4545       
    4646        # %rdi was deliberately chosen as the first argument is also in %rdi
  • uspace/lib/c/arch/amd64/src/fibril.S

    raab02fb refedee77  
    4949        movq %rax, OFFSET_TLS(%rdi)
    5050               
    51         xorq %rax,%rax          # context_save returns 1
    52         incq %rax
     51        xorl %eax, %eax         # context_save returns 1
     52        incl %eax
    5353        ret
    5454
     
    6767        # Set thread local storage
    6868        movq OFFSET_TLS(%rdi), %rdi   # Set arg1 to TLS addr
    69         movq $1, %rax           # SYS_TLS_SET
     69        movl $1, %eax           # SYS_TLS_SET
    7070        syscall
    7171
    72         xorq %rax,%rax          # context_restore returns 0
     72        xorl %eax, %eax         # context_restore returns 0
    7373        ret
  • uspace/lib/c/arch/arm32/include/fibril.h

    raab02fb refedee77  
    8686} context_t;
    8787
     88static inline uintptr_t context_get_fp(context_t *ctx)
     89{
     90        return ctx->fp;
     91}
     92
    8893
    8994#endif
  • uspace/lib/c/arch/arm32/include/istate.h

    raab02fb refedee77  
    3636#define LIBC_arm32__ISTATE_H_
    3737
    38 #include <sys/types.h>
    39 
    40 /** Interrupt context.
    41  *
    42  * This is a copy of the kernel definition with which it must be kept in sync.
    43  */
    44 typedef struct istate {
    45         uint32_t spsr;
    46         uint32_t sp;
    47         uint32_t lr;
    48 
    49         uint32_t r0;
    50         uint32_t r1;
    51         uint32_t r2;
    52         uint32_t r3;
    53         uint32_t r4;
    54         uint32_t r5;
    55         uint32_t r6;
    56         uint32_t r7;
    57         uint32_t r8;
    58         uint32_t r9;
    59         uint32_t r10;
    60         uint32_t fp;
    61         uint32_t r12;
    62 
    63         uint32_t pc;
    64 } istate_t;
    65 
    66 static inline uintptr_t istate_get_pc(istate_t *istate)
    67 {
    68         return istate->pc;
    69 }
    70 
    71 static inline uintptr_t istate_get_fp(istate_t *istate)
    72 {
    73         return istate->fp;
    74 }
     38#include <arch/istate.h>
    7539
    7640#endif
  • uspace/lib/c/arch/ia32/include/fibril.h

    raab02fb refedee77  
    6767} context_t;
    6868
     69static inline uintptr_t context_get_fp(context_t *ctx)
     70{
     71        return ctx->ebp;
     72}
     73
    6974#endif
    7075
  • uspace/lib/c/arch/ia32/include/istate.h

    raab02fb refedee77  
    3636#define LIBC_ia32__ISTATE_H_
    3737
    38 #include <sys/types.h>
    39 
    40 /** Interrupt context.
    41  *
    42  * This is a copy of the kernel definition with which it must be kept in sync.
    43  */
    44 typedef struct istate {
    45         uint32_t eax;
    46         uint32_t ecx;
    47         uint32_t edx;
    48         uint32_t ebp;
    49 
    50         uint32_t gs;
    51         uint32_t fs;
    52         uint32_t es;
    53         uint32_t ds;
    54 
    55         uint32_t error_word;
    56         uint32_t eip;
    57         uint32_t cs;
    58         uint32_t eflags;
    59         uint32_t stack[];
    60 } istate_t;
    61 
    62 static inline uintptr_t istate_get_pc(istate_t *istate)
    63 {
    64         return istate->eip;
    65 }
    66 
    67 static inline uintptr_t istate_get_fp(istate_t *istate)
    68 {
    69         return istate->ebp;
    70 }
     38#include <arch/istate.h>
    7139
    7240#endif
  • uspace/lib/c/arch/ia64/include/fibril.h

    raab02fb refedee77  
    130130} context_t;
    131131
     132static inline uintptr_t context_get_fp(context_t *ctx)
     133{
     134        return 0;       /* FIXME */
     135}
     136
    132137#endif
    133138
  • uspace/lib/c/arch/ia64/include/istate.h

    raab02fb refedee77  
    3636#define LIBC_ia64_ISTATE_H_
    3737
    38 #include <sys/types.h>
    39 
    40 /** Interrupt context.
    41  *
    42  * This is a copy of the kernel definition with which it must be kept in sync.
    43  */
    44 typedef struct istate {
    45         /* TODO */
    46 } istate_t;
    47 
    48 static inline uintptr_t istate_get_pc(istate_t *istate)
    49 {
    50         /* TODO */
    51         return 0;
    52 }
    53 
    54 static inline uintptr_t istate_get_fp(istate_t *istate)
    55 {
    56         /* TODO */
    57         return 0;
    58 }
     38#include <arch/istate.h>
    5939
    6040#endif
  • uspace/lib/c/arch/mips32/include/fibril.h

    raab02fb refedee77  
    8585} context_t;
    8686
     87static inline uintptr_t context_get_fp(context_t *ctx)
     88{
     89        return ctx->sp;
     90}
     91
    8792#endif
    8893
  • uspace/lib/c/arch/mips32/include/istate.h

    raab02fb refedee77  
    3636#define LIBC_mips32__ISTATE_H_
    3737
    38 #include <sys/types.h>
    39 
    40 /** Interrupt context.
    41  *
    42  * This is a copy of the kernel definition with which it must be kept in sync.
    43  */
    44 typedef struct istate {
    45         uint32_t at;
    46         uint32_t v0;
    47         uint32_t v1;
    48         uint32_t a0;
    49         uint32_t a1;
    50         uint32_t a2;
    51         uint32_t a3;
    52         uint32_t t0;
    53         uint32_t t1;
    54         uint32_t t2;
    55         uint32_t t3;
    56         uint32_t t4;
    57         uint32_t t5;
    58         uint32_t t6;
    59         uint32_t t7;
    60         uint32_t t8;
    61         uint32_t t9;
    62         uint32_t gp;
    63         uint32_t sp;
    64         uint32_t ra;
    65 
    66         uint32_t lo;
    67         uint32_t hi;
    68 
    69         uint32_t status; /* cp0_status */
    70         uint32_t epc; /* cp0_epc */
    71         uint32_t k1; /* We use it as thread-local pointer */
    72 } istate_t;
    73 
    74 static inline uintptr_t istate_get_pc(istate_t *istate)
    75 {
    76         return istate->epc;
    77 }
    78 
    79 static inline uintptr_t istate_get_fp(istate_t *istate)
    80 {
    81         /* TODO */
    82         return 0;
    83 }
     38#include <arch/istate.h>
    8439
    8540#endif
  • uspace/lib/c/arch/ppc32/include/fibril.h

    raab02fb refedee77  
    7878} __attribute__ ((packed)) context_t;
    7979
     80static inline uintptr_t context_get_fp(context_t *ctx)
     81{
     82        return ctx->sp;
     83}
     84
    8085#endif
    8186
  • uspace/lib/c/arch/sparc64/include/fibril.h

    raab02fb refedee77  
    7777} context_t;
    7878
     79static inline uintptr_t context_get_fp(context_t *ctx)
     80{
     81        return ctx->sp + STACK_BIAS;
     82}
     83
    7984#endif
    8085
  • uspace/lib/c/arch/sparc64/include/istate.h

    raab02fb refedee77  
    3636#define LIBC_sparc64_ISTATE_H_
    3737
    38 #include <sys/types.h>
    39 
    40 /** Interrupt context.
    41  *
    42  * This is a copy of the kernel definition with which it must be kept in sync.
    43  */
    44 typedef struct istate {
    45         /* TODO */
    46 } istate_t;
    47 
    48 static inline uintptr_t istate_get_pc(istate_t *istate)
    49 {
    50         /* TODO */
    51         return 0;
    52 }
    53 
    54 static inline uintptr_t istate_get_fp(istate_t *istate)
    55 {
    56         /* TODO */
    57         return 0;
    58 }
     38#include <arch/istate.h>
    5939
    6040#endif
  • uspace/lib/c/generic/ddi.c

    raab02fb refedee77  
    9696}
    9797
    98 /** Interrupt control
    99  *
    100  * @param enable        1 - enable interrupts, 0 - disable interrupts
     98/** Enable an interrupt.
     99 *
     100 * @param irq the interrupt.
     101 *
     102 * @return Zero on success, negative error code otherwise.
    101103 */
    102 int preemption_control(int enable)
     104int interrupt_enable(int irq)
    103105{
    104         return __SYSCALL1(SYS_PREEMPT_CONTROL, (sysarg_t) enable);
     106        return __SYSCALL2(SYS_INTERRUPT_ENABLE, (sysarg_t) irq, 1);
     107}
     108
     109/** Disable an interrupt.
     110 *
     111 * @param irq the interrupt.
     112 *
     113 * @return Zero on success, negative error code otherwise.
     114 */
     115int interrupt_disable(int irq)
     116{
     117        return __SYSCALL2(SYS_INTERRUPT_ENABLE, (sysarg_t) irq, 0);
    105118}
    106119
  • uspace/lib/c/generic/device/hw_res.c

    raab02fb refedee77  
    11/*
    2  * Copyright (c) 2009 Lukas Mejdrech
     2 * Copyright (c) 2010 Lenka Trochtova
    33 * All rights reserved.
    44 *
     
    2626 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    2727 */
    28 
    29 /** @addtogroup ip
     28 
     29 /** @addtogroup libc
    3030 * @{
    3131 */
     32/** @file
     33 */
     34 
     35#include <device/hw_res.h>
     36#include <errno.h>
     37#include <async.h>
     38#include <malloc.h>
    3239
    33 #ifndef __NET_IP_LOCAL_H__
    34 #define __NET_IP_LOCAL_H__
     40bool get_hw_resources(int dev_phone, hw_resource_list_t *hw_resources)
     41{
     42        ipcarg_t count = 0;
     43        int rc = async_req_1_1(dev_phone, DEV_IFACE_ID(HW_RES_DEV_IFACE), GET_RESOURCE_LIST, &count);
     44        hw_resources->count = count;
     45        if (EOK != rc) {
     46                return false;
     47        }
     48       
     49        size_t size = count * sizeof(hw_resource_t);
     50        hw_resources->resources = (hw_resource_t *)malloc(size);
     51        if (NULL == hw_resources->resources) {
     52                return false;
     53        }
     54       
     55        rc = async_data_read_start(dev_phone, hw_resources->resources, size);
     56        if (EOK != rc) {
     57                free(hw_resources->resources);
     58                hw_resources->resources = NULL;
     59                return false;
     60        }
     61                 
     62        return true;     
     63}
    3564
    36 #include <async.h>
    37 #include <ipc/services.h>
    38 
    39 #include <ip_codes.h>
    40 #include <inet.h>
    41 #include <in.h>
    42 #include <socket.h>
    43 
    44 extern int ip_received_error_msg_local(int, device_id_t, packet_t, services_t,
    45     services_t);
    46 extern int ip_set_gateway_req_local(int, device_id_t, in_addr_t);
    47 extern int ip_packet_size_req_local(int, device_id_t, packet_dimension_ref);
    48 extern int ip_received_error_msg_local(int, device_id_t, packet_t, services_t,
    49     services_t);
    50 extern int ip_device_req_local(int, device_id_t, services_t);
    51 extern int ip_add_route_req_local(int, device_id_t, in_addr_t, in_addr_t,
    52     in_addr_t);
    53 extern int ip_send_msg_local(int, device_id_t, packet_t, services_t,
    54     services_t);
    55 extern int ip_get_route_req_local(int, ip_protocol_t, const struct sockaddr *,
    56     socklen_t, device_id_t *, void **, size_t *);
    57 
    58 #endif
    59 
    60 /** @}
     65bool enable_interrupt(int dev_phone)
     66{
     67        int rc = async_req_1_0(dev_phone, DEV_IFACE_ID(HW_RES_DEV_IFACE), ENABLE_INTERRUPT);
     68        return rc == EOK;
     69}
     70 
     71 
     72 
     73 /** @}
    6174 */
  • uspace/lib/c/generic/fibril.c

    raab02fb refedee77  
    275275        fibril->func = func;
    276276        fibril->arg = arg;
     277
     278        fibril->waits_for = NULL;
    277279       
    278280        context_save(&fibril->ctx);
  • uspace/lib/c/generic/fibril_synch.c

    raab02fb refedee77  
    4242#include <errno.h>
    4343#include <assert.h>
     44#include <stacktrace.h>
     45#include <stdlib.h>
    4446
    4547static void optimize_execution_power(void)
     
    5658}
    5759
     60static bool check_for_deadlock(fibril_owner_info_t *oi)
     61{
     62        while (oi && oi->owned_by) {
     63                if (oi->owned_by == (fibril_t *) fibril_get_id())
     64                        return true;
     65                oi = oi->owned_by->waits_for;
     66        }
     67
     68        return false;
     69}
     70
     71static void print_deadlock(fibril_owner_info_t *oi)
     72{
     73        fibril_t *f = (fibril_t *) fibril_get_id();
     74
     75        printf("Deadlock detected.\n");
     76        stacktrace_print();
     77
     78        printf("Fibril %p waits for primitive %p.\n", f, oi);
     79
     80        while (oi && oi->owned_by) {
     81                printf("Primitive %p is owned by fibril %p.\n",
     82                    oi, oi->owned_by);
     83                if (oi->owned_by == f)
     84                        break;
     85                stacktrace_print_fp_pc(context_get_fp(&oi->owned_by->ctx),
     86                    oi->owned_by->ctx.pc);
     87                printf("Fibril %p waits for primitive %p.\n",
     88                     oi->owned_by, oi->owned_by->waits_for);
     89                oi = oi->owned_by->waits_for;
     90        }
     91
     92        abort();
     93}
     94
    5895void fibril_mutex_initialize(fibril_mutex_t *fm)
    5996{
     97        fm->oi.owned_by = NULL;
    6098        fm->counter = 1;
    6199        list_initialize(&fm->waiters);
     
    64102void fibril_mutex_lock(fibril_mutex_t *fm)
    65103{
     104        fibril_t *f = (fibril_t *) fibril_get_id();
     105
    66106        futex_down(&async_futex);
    67107        if (fm->counter-- <= 0) {
     
    73113                link_initialize(&wdata.wu_event.link);
    74114                list_append(&wdata.wu_event.link, &fm->waiters);
     115
     116                if (check_for_deadlock(&fm->oi))
     117                        print_deadlock(&fm->oi);
     118                f->waits_for = &fm->oi;
     119
    75120                fibril_switch(FIBRIL_TO_MANAGER);
    76121        } else {
     122                fm->oi.owned_by = f;
    77123                futex_up(&async_futex);
    78124        }
     
    86132        if (fm->counter > 0) {
    87133                fm->counter--;
     134                fm->oi.owned_by = (fibril_t *) fibril_get_id();
    88135                locked = true;
    89136        }
     
    99146                link_t *tmp;
    100147                awaiter_t *wdp;
     148                fibril_t *f;
    101149       
    102150                assert(!list_empty(&fm->waiters));
     
    105153                wdp->active = true;
    106154                wdp->wu_event.inlist = false;
     155
     156                f = (fibril_t *) wdp->fid;
     157                fm->oi.owned_by = f;
     158                f->waits_for = NULL;
     159
    107160                list_remove(&wdp->wu_event.link);
    108161                fibril_add_ready(wdp->fid);
    109162                optimize_execution_power();
     163        } else {
     164                fm->oi.owned_by = NULL;
    110165        }
    111166}
     
    120175void fibril_rwlock_initialize(fibril_rwlock_t *frw)
    121176{
     177        frw->oi.owned_by = NULL;
    122178        frw->writers = 0;
    123179        frw->readers = 0;
  • uspace/lib/c/generic/libc.c

    raab02fb refedee77  
    5050#include <ipc/ipc.h>
    5151#include <async.h>
     52#include <async_rel.h>
    5253#include <as.h>
    5354#include <loader/pcb.h>
     
    6566        __heap_init();
    6667        __async_init();
     68        (void) async_rel_init();
    6769        fibril_t *fibril = fibril_setup();
    6870        __tcb_set(fibril->tcb);
  • uspace/lib/c/generic/net/icmp_common.c

    raab02fb refedee77  
    2727 */
    2828
    29 /** @addtogroup icmp
     29/** @addtogroup libc
    3030 *  @{
    3131 */
    3232
    3333/** @file
    34  *  ICMP common interface implementation.
    35  *  @see icmp_common.h
     34 * ICMP common interface implementation.
     35 * @see icmp_common.h
    3636 */
    3737
     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>
    3845#include <async.h>
    39 #include <ipc/services.h>
    4046
    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 */
     55int icmp_connect_module(services_t service, suseconds_t timeout)
     56{
    4657        int phone;
    4758
    4859        phone = connect_to_service_timeout(SERVICE_ICMP, timeout);
    49         if(phone >= 0){
     60        if (phone >= 0)
    5061                async_req_0_0(phone, NET_ICMP_INIT);
    51         }
     62
    5263        return phone;
    5364}
  • uspace/lib/c/generic/net/socket_parse.c

    raab02fb refedee77  
    3535 */
    3636
    37 #include <socket_parse.h>
     37#include <net/socket_parse.h>
     38#include <net/socket.h>
    3839#include <arg_parse.h>
    3940#include <errno.h>
    4041#include <str.h>
    41 #include <socket.h>
    4242
    4343/** Translate the character string to the address family number.
  • uspace/lib/c/include/byteorder.h

    raab02fb refedee77  
    8080#endif
    8181
     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
    8287static inline uint64_t uint64_t_byteorder_swap(uint64_t n)
    8388{
  • uspace/lib/c/include/ddi.h

    raab02fb refedee77  
    4141extern int physmem_map(void *, void *, unsigned long, int);
    4242extern int iospace_enable(task_id_t, void *, unsigned long);
    43 extern int preemption_control(int);
    4443extern int pio_enable(void *, size_t, void **);
     44extern int interrupt_enable(int);
     45extern int interrupt_disable(int);
    4546
    4647#endif
  • uspace/lib/c/include/err.h

    raab02fb refedee77  
    3636#define LIBC_ERR_H_
    3737
     38#include <stdio.h>
     39#include <errno.h>
     40
     41#ifdef CONFIG_DEBUG
     42#include <str_error.h>
     43#endif
     44
    3845#define errx(status, fmt, ...) { \
    3946        printf((fmt), ##__VA_ARGS__); \
     
    4148}
    4249
     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
    4398#endif
    4499
  • uspace/lib/c/include/errno.h

    raab02fb refedee77  
    5656#define EMLINK        (-266)
    5757
     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
    5894#endif
    5995
  • uspace/lib/c/include/fibril.h

    raab02fb refedee77  
    4848#define FIBRIL_WRITER      2
    4949
     50struct fibril;
     51
     52typedef struct {
     53        struct fibril *owned_by;
     54} fibril_owner_info_t;
     55
    5056typedef enum {
    5157        FIBRIL_PREEMPT,
     
    6874        int retval;
    6975        int flags;
     76
     77        fibril_owner_info_t *waits_for;
    7078} fibril_t;
    7179
  • uspace/lib/c/include/fibril_synch.h

    raab02fb refedee77  
    4343
    4444typedef struct {
     45        fibril_owner_info_t oi;         /* Keep this the first thing. */
    4546        int counter;
    4647        link_t waiters;
    4748} fibril_mutex_t;
    4849
    49 #define FIBRIL_MUTEX_INITIALIZE(name) \
    50         fibril_mutex_t name = { \
     50#define FIBRIL_MUTEX_INITIALIZER(name) \
     51        { \
     52                .oi = { \
     53                        .owned_by = NULL \
     54                }, \
    5155                .counter = 1, \
    5256                .waiters = { \
     
    5559                } \
    5660        }
     61       
     62#define FIBRIL_MUTEX_INITIALIZE(name) \
     63        fibril_mutex_t name = FIBRIL_MUTEX_INITIALIZER(name)
    5764
    5865typedef struct {
     66        fibril_owner_info_t oi; /* Keep this the first thing. */
    5967        unsigned writers;
    6068        unsigned readers;
     
    6270} fibril_rwlock_t;
    6371
    64 #define FIBRIL_RWLOCK_INITIALIZE(name) \
    65         fibril_rwlock_t name = { \
     72#define FIBRIL_RWLOCK_INITIALIZER(name) \
     73        { \
     74                .oi = { \
     75                        .owned_by = NULL \
     76                }, \
    6677                .readers = 0, \
    6778                .writers = 0, \
     
    7283        }
    7384
     85#define FIBRIL_RWLOCK_INITIALIZE(name) \
     86        fibril_rwlock_t name = FIBRIL_RWLOCK_INITIALIZER(name)
     87
    7488typedef struct {
    7589        link_t waiters;
    7690} fibril_condvar_t;
    7791
    78 #define FIBRIL_CONDVAR_INITIALIZE(name) \
    79         fibril_condvar_t name = { \
     92#define FIBRIL_CONDVAR_INITIALIZER(name) \
     93        { \
    8094                .waiters = { \
    8195                        .next = &name.waiters, \
     
    8397                } \
    8498        }
     99
     100#define FIBRIL_CONDVAR_INITIALIZE(name) \
     101        fibril_condvar_t name = FIBRIL_CONDVAR_INITIALIZER(name)
    85102
    86103extern void fibril_mutex_initialize(fibril_mutex_t *);
  • uspace/lib/c/include/ipc/arp.h

    raab02fb refedee77  
    2727 */
    2828
    29 /** @addtogroup arp
    30  *  @{
     29/** @addtogroup libc
     30 * @{
    3131 */
    3232
    3333/** @file
    34  *  ARP module messages.
    35  *  @see arp_interface.h
     34 * ARP module messages.
     35 * @see arp_interface.h
    3636 */
    3737
    38 #ifndef __NET_ARP_MESSAGES__
    39 #define __NET_ARP_MESSAGES__
     38#ifndef LIBC_ARP_MESSAGES_
     39#define LIBC_ARP_MESSAGES_
    4040
    4141#include <ipc/ipc.h>
     42#include <ipc/net.h>
    4243
    43 #include <net_messages.h>
    44 
    45 /** ARP module messages.
    46  */
    47 typedef enum{
     44/** ARP module messages. */
     45typedef enum {
    4846        /** Clean cache message.
    49          *  @see arp_clean_cache()
     47         * @see arp_clean_cache()
    5048         */
    5149        NET_ARP_CLEAN_CACHE = NET_ARP_FIRST,
    5250        /** Clear address cache message.
    53          *  @see arp_clear_address_msg()
     51         * @see arp_clear_address_msg()
    5452         */
    5553        NET_ARP_CLEAR_ADDRESS,
    5654        /** Clear device cache message.
    57          *  @see arp_clear_device_req()
     55         * @see arp_clear_device_req()
    5856         */
    5957        NET_ARP_CLEAR_DEVICE,
    6058        /** New device message.
    61          *  @see arp_device_req()
     59         * @see arp_device_req()
    6260         */
    6361        NET_ARP_DEVICE,
    6462        /** Address translation message.
    65          *  @see arp_translate_req()
     63         * @see arp_translate_req()
    6664         */
    6765        NET_ARP_TRANSLATE
    6866} arp_messages;
    6967
    70 /** @name ARP specific message parameters definitions
    71  */
     68/** @name ARP specific message parameters definitions */
    7269/*@{*/
    7370
    7471/** Returns the protocol service message parameter.
    75  *  @param[in] call The message call structure.
     72 * @param[in] call The message call structure.
    7673 */
    7774#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        })
    7979
    8080/*@}*/
  • uspace/lib/c/include/ipc/icmp.h

    raab02fb refedee77  
    2727 */
    2828
    29 /** @addtogroup icmp
    30  *  @{
     29/** @addtogroup libc
     30 * @{
    3131 */
    3232
    3333/** @file
    34  *  ICMP module messages.
    35  *  @see icmp_interface.h
     34 * ICMP module messages.
     35 * @see icmp_interface.h
    3636 */
    3737
    38 #ifndef __NET_ICMP_MESSAGES__
    39 #define __NET_ICMP_MESSAGES__
     38#ifndef LIBC_ICMP_MESSAGES_
     39#define LIBC_ICMP_MESSAGES_
    4040
    4141#include <ipc/ipc.h>
     42#include <ipc/net.h>
    4243#include <sys/types.h>
     44#include <sys/time.h>
    4345
    44 #include <icmp_codes.h>
    45 #include <net_messages.h>
     46#include <net/icmp_codes.h>
    4647
    47 /** ICMP module messages.
    48  */
    49 typedef enum{
    50         /** Sends echo request.
    51          *  @see icmp_echo()
    52          */
     48/** ICMP module messages. */
     49typedef enum {
     50        /** Sends echo request. @see icmp_echo() */
    5351        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()
    5656         */
    5757        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()
    6062         */
    6163        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()
    6468         */
    6569        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()
    6874         */
    6975        NET_ICMP_PARAMETERPROB,
    70         /** Initializes new connection.
    71         */
     76       
     77        /** Initializes new connection. */
    7278        NET_ICMP_INIT
    7379} icmp_messages;
    7480
    75 /** @name ICMP specific message parameters definitions
    76  */
     81/** @name ICMP specific message parameters definitions */
    7782/*@{*/
    7883
    7984/** Returns the ICMP code message parameter.
    80  *  @param[in] call The message call structure.
     85 *
     86 * @param[in] call      The message call structure.
    8187 */
    8288#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        })
    8493
    8594/** Returns the ICMP link MTU message parameter.
    86  *  @param[in] call The message call structure.
     95 *
     96 * @param[in] call      The message call structure.
    8797 */
    8898#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        })
    90103
    91104/** Returns the pointer message parameter.
    92  *  @param[in] call The message call structure.
     105 *
     106 * @param[in] call      The message call structure.
    93107 */
    94108#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        })
    96113
    97114/** Returns the size message parameter.
    98  *  @param[in] call The message call structure.
     115 *
     116 * @param[in] call      The message call structure.
    99117 */
    100118#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        })
    102123
    103124/** Returns the timeout message parameter.
    104  *  @param[in] call The message call structure.
     125 *
     126 * @param[in] call      The message call structure.
    105127 */
    106128#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        })
    108133
    109134/** Returns the time to live message parameter.
    110  *  @param[in] call The message call structure.
     135 *
     136 * @param[in] call      The message call structure.
    111137 */
    112138#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        })
    114143
    115144/** Returns the type of service message parameter.
    116  *  @param[in] call The message call structure.
     145 *
     146 * @param[in] call      The message call structure.
    117147 */
    118148#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        })
    120153
    121154/** Returns the dont fragment message parameter.
    122  *  @param[in] call The message call structure.
     155 *
     156 * @param[in] call      The message call structure.
    123157 */
    124158#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        })
    126163
    127164/*@}*/
  • uspace/lib/c/include/ipc/il.h

    raab02fb refedee77  
    2727 */
    2828
    29 /** @addtogroup net_il
     29/** @addtogroup libc
    3030 * @{
    3131 */
     
    3737 */
    3838
    39 #ifndef __NET_IL_MESSAGES_H__
    40 #define __NET_IL_MESSAGES_H__
     39#ifndef LIBC_IL_MESSAGES_H_
     40#define LIBC_IL_MESSAGES_H_
    4141
    4242#include <ipc/ipc.h>
     43#include <ipc/net.h>
    4344
    44 /** Internet layer modules messages.
    45  */
     45/** Internet layer modules messages. */
    4646typedef enum {
    4747        /** New device message.
    48          *  @see ip_device_req()
     48         * @see ip_device_req()
    4949         */
    5050        NET_IL_DEVICE = NET_IL_FIRST,
    5151        /** Device state changed message.
    52          *  @see il_device_state_msg()
     52         * @see il_device_state_msg()
    5353         */
    5454        NET_IL_DEVICE_STATE,
    5555        /** Device MTU changed message.
    56          *  @see il_mtu_changed_msg()
     56         * @see il_mtu_changed_msg()
    5757         */
    5858        NET_IL_MTU_CHANGED,
    5959        /** Packet size message.
    60          *  @see il_packet_size_req()
     60         * @see il_packet_size_req()
    6161         */
    6262        NET_IL_PACKET_SPACE,
    6363        /** Packet received message.
    64          *  @see il_received_msg()
     64         * @see il_received_msg()
    6565         */
    6666        NET_IL_RECEIVED,
    6767        /** Packet send message.
    68          *  @see il_send_msg()
     68         * @see il_send_msg()
    6969         */
    7070        NET_IL_SEND
    7171} il_messages;
    7272
    73 /** @name Internetwork layer specific message parameters definitions
    74  *
    75  */
     73/** @name Internetwork layer specific message parameters definitions */
    7674/*@{*/
    7775
    7876/** Return the protocol number message parameter.
    7977 * @param[in] call The message call structure.
    80  *
    8178 */
    82 #define IL_GET_PROTO(call)  (int) IPC_GET_ARG1(*call)
     79#define IL_GET_PROTO(call)      (int) IPC_GET_ARG1(*call)
    8380
    8481/** Return the registering service message parameter.
    8582 * @param[in] call The message call structure.
    86  *
    8783 */
    88 #define IL_GET_SERVICE(call)  (services_t) IPC_GET_ARG2(*call)
     84#define IL_GET_SERVICE(call)    (services_t) IPC_GET_ARG2(*call)
    8985
    9086/*@}*/
  • uspace/lib/c/include/ipc/ip.h

    raab02fb refedee77  
    2727 */
    2828
    29 /** @addtogroup ip
    30  *  @{
     29/** @addtogroup libc
     30 * @{
    3131 */
    3232
    3333/** @file
    34  *  IP module messages.
    35  *  @see ip_interface.h
     34 * IP module messages.
     35 * @see ip_interface.h
    3636 */
    3737
    38 #ifndef __NET_IP_MESSAGES_H__
    39 #define __NET_IP_MESSAGES_H__
     38#ifndef LIBC_IP_MESSAGES_H_
     39#define LIBC_IP_MESSAGES_H_
    4040
    4141#include <ipc/ipc.h>
     42#include <ipc/net.h>
    4243
    43 #include <in.h>
    44 #include <ip_codes.h>
     44#include <net/in.h>
     45#include <net/ip_codes.h>
    4546
    46 /** IP module messages.
    47  */
    48 typedef enum{
     47/** IP module messages. */
     48typedef enum {
    4949        /** Adds the routing entry.
    50          *  @see ip_add_route()
     50         * @see ip_add_route()
    5151         */
    5252        NET_IP_ADD_ROUTE = NET_IP_FIRST,
    5353        /** Gets the actual route information.
    54          *  @see ip_get_route()
     54         * @see ip_get_route()
    5555         */
    5656        NET_IP_GET_ROUTE,
    5757        /** Processes the received error notification.
    58          *  @see ip_received_error_msg()
     58         * @see ip_received_error_msg()
    5959         */
    6060        NET_IP_RECEIVED_ERROR,
    6161        /** Sets the default gateway.
    62          *  @see ip_set_default_gateway()
     62         * @see ip_set_default_gateway()
    6363         */
    6464        NET_IP_SET_GATEWAY
    6565} ip_messages;
    6666
    67 /** @name IP specific message parameters definitions
    68  */
     67/** @name IP specific message parameters definitions */
    6968/*@{*/
    7069
    7170/** Returns the address message parameter.
    72  *  @param[in] call The message call structure.
     71 * @param[in] call The message call structure.
    7372 */
    7473#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        })
    7679
    7780/** Returns the gateway message parameter.
    78  *  @param[in] call The message call structure.
     81 * @param[in] call The message call structure.
    7982 */
    8083#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        })
    8289
    8390/** Sets the header length in the message answer.
    84  *  @param[out] answer The message answer structure.
     91 * @param[out] answer The message answer structure.
    8592 */
    8693#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)
    8898
    8999/** Returns the network mask message parameter.
    90  *  @param[in] call The message call structure.
     100 * @param[in] call The message call structure.
    91101 */
    92102#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        })
    94108
    95109/** Returns the protocol message parameter.
    96  *  @param[in] call The message call structure.
     110 * @param[in] call The message call structure.
    97111 */
    98112#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        })
    100117
    101118/*@}*/
  • uspace/lib/c/include/ipc/net_net.h

    raab02fb refedee77  
    2727 */
    2828
    29 /** @addtogroup net
    30  *  @{
     29/** @addtogroup libc
     30 * @{
    3131 */
    3232
    3333/** @file
    34  *  Networking subsystem central module messages.
    35  *  @see net_interface.h
     34 * Networking subsystem central module messages.
     35 * @see net_interface.h
    3636 */
    3737
    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_
    4040
    4141#include <ipc/ipc.h>
     42#include <ipc/net.h>
    4243
    43 #include <net_messages.h>
    44 
    45 /** Networking subsystem central module messages.
    46  */
    47 typedef enum{
     44/** Networking subsystem central module messages. */
     45typedef enum {
    4846        /** Returns the general configuration
    49          *  @see net_get_conf_req()
     47         * @see net_get_conf_req()
    5048         */
    5149        NET_NET_GET_CONF = NET_FIRST,
    5250        /** Returns the device specific configuration
    53          *  @see net_get_device_conf_req()
     51         * @see net_get_device_conf_req()
    5452         */
    5553        NET_NET_GET_DEVICE_CONF,
    56         /** Starts the networking stack.
    57          */
     54        /** Starts the networking stack. */
    5855        NET_NET_STARTUP,
    5956} net_messages;
  • uspace/lib/c/include/ipc/netif.h

    raab02fb refedee77  
    2727 */
    2828
    29 /** @addtogroup netif
     29/** @addtogroup libc
    3030 * @{
    3131 */
     
    3535 */
    3636
    37 #ifndef __NET_NETIF_MESSAGES_H__
    38 #define __NET_NETIF_MESSAGES_H__
     37#ifndef LIBC_NETIF_MESSAGES_H_
     38#define LIBC_NETIF_MESSAGES_H_
    3939
    4040#include <ipc/ipc.h>
     41#include <ipc/net.h>
    4142
    42 #include <net_messages.h>
    43 
    44 /** Network interface common module messages.
    45  */
     43/** Network interface common module messages. */
    4644typedef enum {
    4745        /** Probe device message.
    48          *  @see netif_probe_req()
     46         * @see netif_probe_req()
    4947         */
    5048        NET_NETIF_PROBE = NET_NETIF_FIRST,
    5149        /** Send packet message.
    52          *  @see netif_send_msg()
     50         * @see netif_send_msg()
    5351         */
    5452        NET_NETIF_SEND,
    5553        /** Start device message.
    56          *  @see netif_start_req()
     54         * @see netif_start_req()
    5755         */
    5856        NET_NETIF_START,
    5957        /** Get device usage statistics message.
    60          *  @see netif_stats_req()
     58         * @see netif_stats_req()
    6159         */
    6260        NET_NETIF_STATS,
    6361        /** Stop device message.
    64          *  @see netif_stop_req()
     62         * @see netif_stop_req()
    6563         */
    6664        NET_NETIF_STOP,
    6765        /** Get device address message.
    68          *  @see netif_get_addr_req()
     66         * @see netif_get_addr_req()
    6967         */
    7068        NET_NETIF_GET_ADDR,
    7169} netif_messages;
    7270
    73 /** @name Network interface specific message parameters definitions
    74  */
     71/** @name Network interface specific message parameters definitions */
    7572/*@{*/
    7673
     
    7976 */
    8077#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        })
    8282
    8383/** Return the input/output address message parameter.
     
    8585 */
    8686#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        })
    8891
    8992/*@}*/
  • uspace/lib/c/include/ipc/nil.h

    raab02fb refedee77  
    2727 */
    2828
    29 /** @addtogroup net_nil
     29/** @addtogroup libc
    3030 * @{
    3131 */
     
    3535 */
    3636
    37 #ifndef __NET_NIL_MESSAGES_H__
    38 #define __NET_NIL_MESSAGES_H__
     37#ifndef LIBC_NIL_MESSAGES_H_
     38#define LIBC_NIL_MESSAGES_H_
    3939
    4040#include <ipc/ipc.h>
     41#include <ipc/net.h>
    4142
    42 #include <net_messages.h>
    43 
    44 /** Network interface layer module messages.
    45  */
     43/** Network interface layer module messages. */
    4644typedef enum {
    4745        /** New device or update MTU message.
    48          *  @see nil_device_req()
     46         * @see nil_device_req()
    4947         */
    5048        NET_NIL_DEVICE = NET_NIL_FIRST,
    5149        /** New device state message.
    52          *  @see nil_device_state_msg()
     50         * @see nil_device_state_msg()
    5351         */
    5452        NET_NIL_DEVICE_STATE,
    5553        /** Received packet queue message.
    56          *  @see nil_received_msg()
     54         * @see nil_received_msg()
    5755         */
    5856        NET_NIL_RECEIVED,
    5957        /** Send packet queue message.
    60          *  @see nil_send_msg()
     58         * @see nil_send_msg()
    6159         */
    6260        NET_NIL_SEND,
    6361        /** Packet size message.
    64          *  @see nil_packet_size_req()
     62         * @see nil_packet_size_req()
    6563         */
    6664        NET_NIL_PACKET_SPACE,
    6765        /** Device local hardware address message.
    68          *  @see nil_get_addr()
     66         * @see nil_get_addr()
    6967         */
    7068        NET_NIL_ADDR,
    7169        /** Device broadcast hardware address message.
    72          *  @see nil_get_broadcast_addr()
     70         * @see nil_get_broadcast_addr()
    7371         */
    7472        NET_NIL_BROADCAST_ADDR,
    7573} nil_messages;
    7674
    77 /** @name Network interface layer specific message parameters definitions
    78  */
     75/** @name Network interface layer specific message parameters definitions */
    7976/*@{*/
    8077
    81 /** Return the protocol service message parameter.
    82  */
     78/** Return the protocol service message parameter. */
    8379#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        })
    8584
    8685/*@}*/
  • uspace/lib/c/include/ipc/packet.h

    raab02fb refedee77  
    2727 */
    2828
    29 /** @addtogroup packet
     29/** @addtogroup libc
    3030 *  @{
    3131 */
     
    3535 */
    3636
    37 #ifndef __NET_PACKET_MESSAGES__
    38 #define __NET_PACKET_MESSAGES__
     37#ifndef LIBC_PACKET_MESSAGES_
     38#define LIBC_PACKET_MESSAGES_
    3939
    4040#include <ipc/ipc.h>
     41#include <ipc/net.h>
    4142
    42 #include <net_messages.h>
    43 
    44 /** Packet server module messages.
    45  */
     43/** Packet server module messages. */
    4644typedef enum {
    4745        /** Create packet message with specified content length.
    48          *  @see packet_get_1()
     46         * @see packet_get_1()
    4947         */
    5048        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()
    5354         */
    5455        NET_PACKET_CREATE_4,
     56       
    5557        /** Get packet message.
    56          *  @see packet_return()
    57          */
     58         * @see packet_return() */
    5859        NET_PACKET_GET,
     60       
    5961        /** Get packet size message.
    60          *  @see packet_translate()
     62         * @see packet_translate()
    6163         */
    6264        NET_PACKET_GET_SIZE,
     65       
    6366        /** Release packet message.
    64          *  @see pq_release()
     67         * @see pq_release()
    6568         */
    6669        NET_PACKET_RELEASE
    6770} packet_messages;
    6871
    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)
    7274
    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)
    7677
    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)
    8080
    81 /** Returns the maximal address length message parameter.
    82  */
     81/** Returns the maximal address length message parameter. */
    8382#define IPC_GET_ADDR_LEN(call)  (size_t) IPC_GET_ARG2(*call)
    8483
    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)
    8886
    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)
    9289
    9390#endif
  • uspace/lib/c/include/ipc/services.h

    raab02fb refedee77  
    4545        SERVICE_VFS,
    4646        SERVICE_DEVMAP,
     47        SERVICE_DEVMAN,
    4748        SERVICE_FHC,
    4849        SERVICE_OBIO,
  • uspace/lib/c/include/ipc/socket.h

    raab02fb refedee77  
    2727 */
    2828
    29 /** @addtogroup socket
    30  *  @{
     29/** @addtogroup libc
     30 * @{
    3131 */
    3232
    3333/** @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_
    4139
    4240#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. */
     44typedef enum {
     45        /** Creates a new socket. @see socket() */
    5346        NET_SOCKET = NET_SOCKET_FIRST,
    54         /** Binds the socket.
    55          *  @see bind()
    56          */
     47        /** Binds the socket. @see bind() */
    5748        NET_SOCKET_BIND,
    58         /** Creates a new socket.
    59          *  @see socket()
    60          */
     49        /** Creates a new socket. @see socket() */
    6150        NET_SOCKET_LISTEN,
    62         /** Accepts an incomming connection.
    63          *  @see accept()
    64          */
     51        /** Accepts an incomming connection. @see accept() */
    6552        NET_SOCKET_ACCEPT,
    66         /** Connects the socket.
    67          *  @see connect()
    68          */
     53        /** Connects the socket. @see connect() */
    6954        NET_SOCKET_CONNECT,
    70         /** Closes the socket.
    71          *  @see closesocket()
    72          */
     55        /** Closes the socket. @see closesocket() */
    7356        NET_SOCKET_CLOSE,
    74         /** Sends data via the stream socket.
    75          *  @see send()
    76          */
     57        /** Sends data via the stream socket. @see send() */
    7758        NET_SOCKET_SEND,
    78         /** Sends data via the datagram socket.
    79          *  @see sendto()
    80          */
     59        /** Sends data via the datagram socket. @see sendto() */
    8160        NET_SOCKET_SENDTO,
    82         /** Receives data from the stream socket.
    83          *  @see socket()
    84          */
     61        /** Receives data from the stream socket. @see socket() */
    8562        NET_SOCKET_RECV,
    86         /** Receives data from the datagram socket.
    87          *  @see socket()
    88          */
     63        /** Receives data from the datagram socket. @see socket() */
    8964        NET_SOCKET_RECVFROM,
    90         /** Gets the socket option.
    91          *  @see getsockopt()
    92          */
     65        /** Gets the socket option. @see getsockopt() */
    9366        NET_SOCKET_GETSOCKOPT,
    94         /** Sets the socket option.
    95          *  @see setsockopt()
    96          */
     67        /** Sets the socket option. @see setsockopt() */
    9768        NET_SOCKET_SETSOCKOPT,
    98         /** New socket for acceptence notification message.
    99          */
     69        /** New socket for acceptence notification message. */
    10070        NET_SOCKET_ACCEPTED,
    101         /** New data received notification message.
    102          */
     71        /** New data received notification message. */
    10372        NET_SOCKET_RECEIVED,
    104         /** New socket data fragment size notification message.
    105          */
     73        /** New socket data fragment size notification message. */
    10674        NET_SOCKET_DATA_FRAGMENT_SIZE
    10775} socket_messages;
     
    11280
    11381/** Sets the socket identifier in the message answer.
    114  *  @param[out] answer The message answer structure.
     82 * @param[out] answer   The message answer structure.
    11583 */
    11684#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)
    11889
    11990/** Returns the socket identifier message parameter.
    120  *  @param[in] call The message call structure.
     91 * @param[in] call      The message call structure.
    12192 */
    12293#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        })
    12498
    12599/** Sets the read data length in the message answer.
    126  *  @param[out] answer The message answer structure.
     100 * @param[out] answer   The message answer structure.
    127101 */
    128102#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)
    130107
    131108/** Returns the read data length message parameter.
    132  *  @param[in] call The message call structure.
     109 * @param[in] call      The message call structure.
    133110 */
    134111#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        })
    136116
    137117/** Returns the backlog message parameter.
    138  *  @param[in] call The message call structure.
     118 * @param[in] call      The message call structure.
    139119 */
    140120#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        })
    142125
    143126/** Returns the option level message parameter.
    144  *  @param[in] call The message call structure.
     127 * @param[in] call      The message call structure.
    145128 */
    146129#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        })
    148134
    149135/** Returns the data fragment size message parameter.
    150  *  @param[in] call The message call structure.
     136 * @param[in] call      The message call structure.
    151137 */
    152138#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        })
    154143
    155144/** Sets the data fragment size in the message answer.
    156  *  @param[out] answer The message answer structure.
     145 * @param[out] answer   The message answer structure.
    157146 */
    158147#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)
    160152
    161153/** Sets the address length in the message answer.
    162  *  @param[out] answer The message answer structure.
     154 * @param[out] answer   The message answer structure.
    163155 */
    164156#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)
    166161
    167162/** Returns the address length message parameter.
    168  *  @param[in] call The message call structure.
     163 * @param[in] call      The message call structure.
    169164 */
    170165#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        })
    172170
    173171/** Sets the header size in the message answer.
    174  *  @param[out] answer The message answer structure.
     172 * @param[out] answer   The message answer structure.
    175173 */
    176174#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)
    179179
    180180/** Returns the header size message parameter.
    181  *  @param[in] call The message call structure.
     181 *  @param[in] call     The message call structure.
    182182 */
    183183#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        })
    185188
    186189/** Returns the flags message parameter.
    187  *  @param[in] call The message call structure.
     190 *  @param[in] call     The message call structure.
    188191 */
    189192#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        })
    191197
    192198/** Returns the option name message parameter.
    193  *  @param[in] call The message call structure.
     199 *  @param[in] call     The message call structure.
    194200 */
    195201#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        })
    197206
    198207/** Returns the data fragments message parameter.
    199  *  @param[in] call The message call structure.
     208 *  @param[in] call     The message call structure.
    200209 */
    201210#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        })
    203215
    204216/** Returns the new socket identifier message parameter.
    205  *  @param[in] call The message call structure.
     217 *  @param[in] call     The message call structure.
    206218 */
    207219#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        })
    209224
    210225/*@}*/
  • uspace/lib/c/include/ipc/tl.h

    raab02fb refedee77  
    2727 */
    2828
    29 /** @addtogroup net_tl
    30  *  @{
     29/** @addtogroup libc
     30 * @{
    3131 */
    3232
    3333/** @file
    34  *  Transport layer modules messages.
    35  *  @see tl_interface.h
     34 * Transport layer modules messages.
     35 * @see tl_interface.h
    3636 */
    3737
    38 #ifndef __NET_TL_MESSAGES_H__
    39 #define __NET_TL_MESSAGES_H__
     38#ifndef LIBC_TL_MESSAGES_H_
     39#define LIBC_TL_MESSAGES_H_
    4040
    4141#include <ipc/ipc.h>
     42#include <ipc/net.h>
    4243
    43 #include <net_messages.h>
    44 
    45 /** Transport layer modules messages.
    46  */
    47 typedef enum{
     44/** Transport layer modules messages. */
     45typedef enum {
    4846        /** Packet received message.
    49          *  @see tl_received_msg()
     47         * @see tl_received_msg()
    5048         */
    5149        NET_TL_RECEIVED = NET_TL_FIRST
  • uspace/lib/c/include/net/device.h

    raab02fb refedee77  
    2727 */
    2828
    29 /** @addtogroup netif
    30  *  @{
     29/** @addtogroup libc
     30 * @{
    3131 */
    3232
    3333/** @file
    34  *  Device identifier, state and usage statistics.
     34 * Device identifier, state and usage statistics.
    3535 */
    3636
    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_
    3939
    4040#include <adt/int_map.h>
    4141
    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
    4544
    46 /** Device identifier to generic type map implementation.
    47  */
     45/** Device identifier to generic type map implementation. */
    4846#define DEVICE_MAP_IMPLEMENT    INT_MAP_IMPLEMENT
    4947
    50 /** Invalid device identifier.
    51  */
    52 #define DEVICE_INVALID_ID               (-1)
     48/** Invalid device identifier. */
     49#define DEVICE_INVALID_ID       (-1)
    5350
    54 /** Device identifier type.
    55  */
    56 typedef int     device_id_t;
     51/** Device identifier type. */
     52typedef int device_id_t;
    5753
    58 /** Device state type.
    59  */
    60 typedef enum device_state       device_state_t;
     54/** Device state type. */
     55typedef enum device_state device_state_t;
    6156
    6257/** Type definition of the device usage statistics.
    63  *  @see device_stats
     58 * @see device_stats
    6459 */
    65 typedef struct device_stats     device_stats_t;
     60typedef struct device_stats device_stats_t;
    6661
    6762/** Type definition of the device usage statistics pointer.
    68  *  @see device_stats
     63 * @see device_stats
    6964 */
    70 typedef device_stats_t *        device_stats_ref;
     65typedef device_stats_t *device_stats_ref;
    7166
    72 /** Device state.
    73  */
    74 enum    device_state{
    75         /** Device not present or not initialized.
    76          */
     67/** Device state. */
     68enum device_state {
     69        /** Device not present or not initialized. */
    7770        NETIF_NULL = 0,
    78         /** Device present and stopped.
    79          */
     71        /** Device present and stopped. */
    8072        NETIF_STOPPED,
    81         /** Device present and active.
    82          */
     73        /** Device present and active. */
    8374        NETIF_ACTIVE,
    84         /** Device present but unable to transmit.
    85          */
     75        /** Device present but unable to transmit. */
    8676        NETIF_CARRIER_LOST
    8777};
    8878
    89 /** Device usage statistics.
    90  */
    91 struct  device_stats{
    92         /** Total packets received.
    93          */
     79/** Device usage statistics. */
     80struct device_stats {
     81        /** Total packets received. */
    9482        unsigned long receive_packets;
    95         /** Total packets transmitted.
    96          */
     83        /** Total packets transmitted. */
    9784        unsigned long send_packets;
    98         /** Total bytes received.
    99          */
     85        /** Total bytes received. */
    10086        unsigned long receive_bytes;
    101         /** Total bytes transmitted.
    102          */
     87        /** Total bytes transmitted. */
    10388        unsigned long send_bytes;
    104         /** Bad packets received counter.
    105          */
     89        /** Bad packets received counter. */
    10690        unsigned long receive_errors;
    107         /** Packet transmition problems counter.
    108          */
     91        /** Packet transmition problems counter. */
    10992        unsigned long send_errors;
    110         /** No space in buffers counter.
    111          */
     93        /** No space in buffers counter. */
    11294        unsigned long receive_dropped;
    113         /** No space available counter.
    114          */
     95        /** No space available counter. */
    11596        unsigned long send_dropped;
    116         /** Total multicast packets received.
    117          */
     97        /** Total multicast packets received. */
    11898        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. */
    121100        unsigned long collisions;
    122101
    123         /* detailed receive_errors: */
    124         /** Received packet length error counter.
    125         */
     102        /* detailed receive_errors */
     103
     104        /** Received packet length error counter. */
    126105        unsigned long receive_length_errors;
    127         /** Receiver buffer overflow counter.
    128          */
     106        /** Receiver buffer overflow counter. */
    129107        unsigned long receive_over_errors;
    130         /** Received packet with crc error counter.
    131          */
     108        /** Received packet with crc error counter. */
    132109        unsigned long receive_crc_errors;
    133         /** Received frame alignment error counter.
    134          */
     110        /** Received frame alignment error counter. */
    135111        unsigned long receive_frame_errors;
    136         /** Receiver fifo overrun counter.
    137          */
     112        /** Receiver fifo overrun counter. */
    138113        unsigned long receive_fifo_errors;
    139         /** Receiver missed packet counter.
    140          */
     114        /** Receiver missed packet counter. */
    141115        unsigned long receive_missed_errors;
    142116
    143117        /* detailed send_errors */
    144         /** Transmitter aborted counter.
    145         */
     118
     119        /** Transmitter aborted counter. */
    146120        unsigned long send_aborted_errors;
    147         /** Transmitter carrier errors counter.
    148          */
     121        /** Transmitter carrier errors counter. */
    149122        unsigned long send_carrier_errors;
    150         /** Transmitter fifo overrun counter.
    151          */
     123        /** Transmitter fifo overrun counter. */
    152124        unsigned long send_fifo_errors;
    153         /** Transmitter carrier errors counter.
    154          */
     125        /** Transmitter carrier errors counter. */
    155126        unsigned long send_heartbeat_errors;
    156         /** Transmitter window errors counter.
    157          */
     127        /** Transmitter window errors counter. */
    158128        unsigned long send_window_errors;
    159129
    160130        /* for cslip etc */
    161         /** Total compressed packets received.
    162         */
     131       
     132        /** Total compressed packets received. */
    163133        unsigned long receive_compressed;
    164         /** Total compressed packet transmitted.
    165          */
     134        /** Total compressed packet transmitted. */
    166135        unsigned long send_compressed;
    167136};
     
    171140/** @}
    172141 */
    173 
  • uspace/lib/c/include/net/icmp_codes.h

    raab02fb refedee77  
    2727 */
    2828
    29 /** @addtogroup icmp
     29/** @addtogroup libc
    3030 *  @{
    3131 */
    3232
    3333/** @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#include <sys/types.h>
     45
     46/** ICMP type type definition. */
     47typedef uint8_t icmp_type_t;
     48
     49/** ICMP code type definition. */
     50typedef uint8_t icmp_code_t;
     51
     52/** ICMP parameter type definition. */
     53typedef uint16_t icmp_param_t;
     54
     55/** @name ICMP types definitions */
     56/*@{*/
     57
     58/** Echo Reply. */
    5859#define ICMP_ECHOREPLY          0
    5960
    60 /** Destination Unreachable.
    61  */
     61/** Destination Unreachable. */
    6262#define ICMP_DEST_UNREACH       3
    6363
    64 /** Source Quench.
    65  */
     64/** Source Quench. */
    6665#define ICMP_SOURCE_QUENCH      4
    6766
    68 /** Redirect.
    69  */
     67/** Redirect. */
    7068#define ICMP_REDIRECT           5
    7169
    72 /** Alternate Host Address.
    73  */
     70/** Alternate Host Address. */
    7471#define ICMP_ALTERNATE_ADDR     6
    7572
    76 /** Echo Request.
    77  */
    78 #define ICMP_ECHO                       8
    79 
    80 /** Router Advertisement.
    81  */
     73/** Echo Request. */
     74#define ICMP_ECHO               8
     75
     76/** Router Advertisement. */
    8277#define ICMP_ROUTER_ADV         9
    8378
    84 /** Router solicitation.
    85  */
     79/** Router solicitation. */
    8680#define ICMP_ROUTER_SOL         10
    8781
    88 /** Time Exceeded.
    89  */
     82/** Time Exceeded. */
    9083#define ICMP_TIME_EXCEEDED      11
    9184
    92 /** Parameter Problem.
    93  */
     85/** Parameter Problem. */
    9486#define ICMP_PARAMETERPROB      12
    9587
    96 /** Timestamp Request.
    97  */
     88/** Timestamp Request. */
    9889#define ICMP_TIMESTAMP          13
    9990
    100 /** Timestamp Reply.
    101  */
     91/** Timestamp Reply. */
    10292#define ICMP_TIMESTAMPREPLY     14
    10393
    104 /** Information Request.
    105  */
     94/** Information Request. */
    10695#define ICMP_INFO_REQUEST       15
    10796
    108 /** Information Reply.
    109  */
     97/** Information Reply. */
    11098#define ICMP_INFO_REPLY         16
    11199
    112 /** Address Mask Request.
    113  */
     100/** Address Mask Request. */
    114101#define ICMP_ADDRESS            17
    115102
    116 /** Address Mask Reply.
    117  */
     103/** Address Mask Reply. */
    118104#define ICMP_ADDRESSREPLY       18
    119105
    120 /** Traceroute.
    121  */
     106/** Traceroute. */
    122107#define ICMP_TRACEROUTE         30
    123108
    124 /** Datagram Conversion Error.
    125  */
     109/** Datagram Conversion Error. */
    126110#define ICMP_CONVERSION_ERROR   31
    127111
    128 /** Mobile Host Redirect.
    129  */
     112/** Mobile Host Redirect. */
    130113#define ICMP_REDIRECT_MOBILE    32
    131114
    132 /** IPv6 Where-Are-You.
    133  */
     115/** IPv6 Where-Are-You. */
    134116#define ICMP_IPV6_WHERE_ARE_YOU 33
    135117
    136 /** IPv6 I-Am-Here.
    137  */
     118/** IPv6 I-Am-Here. */
    138119#define ICMP_IPV6_I_AM_HERE     34
    139120
    140 /** Mobile Registration Request.
    141  */
     121/** Mobile Registration Request. */
    142122#define ICMP_MOBILE_REQUEST     35
    143123
    144 /** Mobile Registration Reply.
    145  */
     124/** Mobile Registration Reply. */
    146125#define ICMP_MOBILE_REPLY       36
    147126
    148 /** Domain name request.
    149  */
     127/** Domain name request. */
    150128#define ICMP_DN_REQUEST         37
    151129
    152 /** Domain name reply.
    153  */
     130/** Domain name reply. */
    154131#define ICMP_DN_REPLY           38
    155132
    156 /** SKIP.
    157  */
    158 #define ICMP_SKIP                       39
    159 
    160 /** Photuris.
    161  */
     133/** SKIP. */
     134#define ICMP_SKIP               39
     135
     136/** Photuris. */
    162137#define ICMP_PHOTURIS           40
    163138
     
    168143/*@{*/
    169144
    170 /** Network Unreachable.
    171  */
     145/** Network Unreachable. */
    172146#define ICMP_NET_UNREACH        0
    173147
    174 /** Host Unreachable.
    175  */
     148/** Host Unreachable. */
    176149#define ICMP_HOST_UNREACH       1
    177150
    178 /** Protocol Unreachable.
    179  */
     151/** Protocol Unreachable. */
    180152#define ICMP_PROT_UNREACH       2
    181153
    182 /** Port Unreachable.
    183  */
     154/** Port Unreachable. */
    184155#define ICMP_PORT_UNREACH       3
    185156
    186 /** Fragmentation needed but the Do Not Fragment bit was set.
    187  */
     157/** Fragmentation needed but the Do Not Fragment bit was set. */
    188158#define ICMP_FRAG_NEEDED        4
    189159
    190 /** Source Route failed.
    191  */
     160/** Source Route failed. */
    192161#define ICMP_SR_FAILED          5
    193162
    194 /** Destination network unknown.
    195  */
     163/** Destination network unknown. */
    196164#define ICMP_NET_UNKNOWN        6
    197165
    198 /** Destination host unknown.
    199  */
     166/** Destination host unknown. */
    200167#define ICMP_HOST_UNKNOWN       7
    201168
    202 /** Source host isolated (obsolete).
    203  */
     169/** Source host isolated (obsolete). */
    204170#define ICMP_HOST_ISOLATED      8
    205171
    206 /** Destination network administratively prohibited.
    207  */
     172/** Destination network administratively prohibited. */
    208173#define ICMP_NET_ANO            9
    209174
    210 /** Destination host administratively prohibited.
    211  */
     175/** Destination host administratively prohibited. */
    212176#define ICMP_HOST_ANO           10
    213177
    214 /** Network unreachable for this type of service.
    215  */
     178/** Network unreachable for this type of service. */
    216179#define ICMP_NET_UNR_TOS        11
    217180
    218 /** Host unreachable for this type of service.
    219  */
     181/** Host unreachable for this type of service. */
    220182#define ICMP_HOST_UNR_TOS       12
    221183
    222 /** Communication administratively prohibited by filtering.
    223  */
     184/** Communication administratively prohibited by filtering. */
    224185#define ICMP_PKT_FILTERED       13
    225186
    226 /** Host precedence violation.
    227  */
     187/** Host precedence violation. */
    228188#define ICMP_PREC_VIOLATION     14
    229189
    230 /** Precedence cutoff in effect.
    231  */
     190/** Precedence cutoff in effect. */
    232191#define ICMP_PREC_CUTOFF        15
    233192
    234193/*@}*/
    235194
    236 /** @name ICMP_REDIRECT codes definitions
    237  */
    238 /*@{*/
    239 
    240 /** Network redirect (or subnet).
    241  */
     195/** @name ICMP_REDIRECT codes definitions */
     196/*@{*/
     197
     198/** Network redirect (or subnet). */
    242199#define ICMP_REDIR_NET          0
    243200
    244 /** Host redirect.
    245  */
     201/** Host redirect. */
    246202#define ICMP_REDIR_HOST         1
    247203
    248 /** Network redirect for this type of service.
    249  */
     204/** Network redirect for this type of service. */
    250205#define ICMP_REDIR_NETTOS       2
    251206
    252 /** Host redirect for this type of service.
    253  */
     207/** Host redirect for this type of service. */
    254208#define ICMP_REDIR_HOSTTOS      3
    255209
    256210/*@}*/
    257211
    258 /** @name ICMP_ALTERNATE_ADDRESS codes definitions
    259  */
    260 /*@{*/
    261 
    262 /** Alternate address for host.
    263  */
     212/** @name ICMP_ALTERNATE_ADDRESS codes definitions */
     213/*@{*/
     214
     215/** Alternate address for host. */
    264216#define ICMP_ALTERNATE_HOST     0
    265217
    266218/*@}*/
    267219
    268 /** @name ICMP_ROUTER_ADV codes definitions
    269  */
    270 /*@{*/
    271 
    272 /** Normal router advertisement.
    273  */
     220/** @name ICMP_ROUTER_ADV codes definitions */
     221/*@{*/
     222
     223/** Normal router advertisement. */
    274224#define ICMP_ROUTER_NORMAL      0
    275225
    276 /** Does not route common traffic.
    277  */
     226/** Does not route common traffic. */
    278227#define ICMP_ROUTER_NO_NORMAL_TRAFFIC   16
    279228
    280229/*@}*/
    281230
    282 /** @name ICMP_TIME_EXCEEDED codes definitions
    283  */
    284 /*@{*/
    285 
    286 /** Transit TTL exceeded.
    287  */
     231/** @name ICMP_TIME_EXCEEDED codes definitions */
     232/*@{*/
     233
     234/** Transit TTL exceeded. */
    288235#define ICMP_EXC_TTL            0
    289236
    290 /** Reassembly TTL exceeded.
    291  */
     237/** Reassembly TTL exceeded. */
    292238#define ICMP_EXC_FRAGTIME       1
    293239
    294240/*@}*/
    295241
    296 /** @name ICMP_PARAMETERPROB codes definitions
    297  */
    298 /*@{*/
    299 
    300 /** Pointer indicates the error.
    301  */
     242/** @name ICMP_PARAMETERPROB codes definitions */
     243/*@{*/
     244
     245/** Pointer indicates the error. */
    302246#define ICMP_PARAM_POINTER      0
    303247
    304 /** Missing required option.
    305  */
     248/** Missing required option. */
    306249#define ICMP_PARAM_MISSING      1
    307250
    308 /** Bad length.
    309  */
     251/** Bad length. */
    310252#define ICMP_PARAM_LENGTH       2
    311253
    312254/*@}*/
    313255
    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  */
     256/** @name ICMP_PHOTURIS codes definitions */
     257/*@{*/
     258
     259/** Bad SPI. */
     260#define ICMP_PHOTURIS_BAD_SPI                   0
     261
     262/** Authentication failed. */
     263#define ICMP_PHOTURIS_AUTHENTICATION            1
     264
     265/** Decompression failed. */
    328266#define ICMP_PHOTURIS_DECOMPRESSION             2
    329267
    330 /** Decryption failed.
    331  */
    332 #define ICMP_PHOTURIS_DECRYPTION        3
    333 
    334 /** Need authentication.
    335  */
     268/** Decryption failed. */
     269#define ICMP_PHOTURIS_DECRYPTION                3
     270
     271/** Need authentication. */
    336272#define ICMP_PHOTURIS_NEED_AUTHENTICATION       4
    337273
    338 /** Need authorization.
    339  */
     274/** Need authorization. */
    340275#define ICMP_PHOTURIS_NEED_AUTHORIZATION        5
    341276
  • uspace/lib/c/include/net/icmp_common.h

    raab02fb refedee77  
    2727 */
    2828
    29 /** @addtogroup icmp
     29/** @addtogroup libc
    3030 *  @{
    3131 */
    3232
    3333/** @file
    34  *  ICMP module common interface.
     34 * ICMP module common interface.
    3535 */
    3636
    37 #ifndef __NET_ICMP_COMMON_H__
    38 #define __NET_ICMP_COMMON_H__
     37#ifndef LIBC_ICMP_COMMON_H_
     38#define LIBC_ICMP_COMMON_H_
    3939
    4040#include <ipc/services.h>
    41 
    4241#include <sys/time.h>
    4342
    44 /** Default timeout for incoming connections in microseconds.
    45  */
     43/** Default timeout for incoming connections in microseconds. */
    4644#define ICMP_CONNECT_TIMEOUT    (1 * 1000 * 1000)
    4745
    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);
     46extern int icmp_connect_module(services_t, suseconds_t);
    5647
    5748#endif
  • uspace/lib/c/include/net/in.h

    raab02fb refedee77  
    2727 */
    2828
    29 /** @addtogroup net
     29/** @addtogroup libc
    3030 *  @{
    3131 */
     
    3535 */
    3636
    37 #ifndef __NET_IN_H__
    38 #define __NET_IN_H__
     37#ifndef LIBC_IN_H_
     38#define LIBC_IN_H_
    3939
     40#include <net/inet.h>
     41#include <net/ip_protocols.h>
    4042#include <sys/types.h>
    4143
    42 #include <ip_protocols.h>
    43 #include <inet.h>
    44 
    45 /** INET string address maximum length.
    46  */
     44/** INET string address maximum length. */
    4745#define INET_ADDRSTRLEN         (4 * 3 + 3 + 1)
    4846
    4947/** Type definition of the INET address.
    50  *  @see in_addr
     48 * @see in_addr
    5149 */
    5250typedef struct in_addr          in_addr_t;
    5351
    5452/** Type definition of the INET socket address.
    55  *  @see sockaddr_in
     53 * @see sockaddr_in
    5654 */
    5755typedef struct sockaddr_in      sockaddr_in_t;
    5856
    59 /** INET address.
    60  */
    61 struct in_addr{
    62         /** 4 byte IP address.
    63          */
     57/** INET address. */
     58struct in_addr {
     59        /** 4 byte IP address. */
    6460        uint32_t s_addr;
    6561};
    6662
    6763/** INET socket address.
    68  *  @see sockaddr
     64 * @see sockaddr
    6965 */
    70 struct sockaddr_in{
    71         /** Address family.
    72          *  Should be AF_INET.
    73          */
     66struct sockaddr_in {
     67        /** Address family. Should be AF_INET. */
    7468        uint16_t sin_family;
    75         /** Port number.
    76          */
     69        /** Port number. */
    7770        uint16_t sin_port;
    78         /** Internet address.
    79          */
     71        /** Internet address. */
    8072        struct in_addr sin_addr;
    81         /** Padding to meet the sockaddr size.
    82          */
     73        /** Padding to meet the sockaddr size. */
    8374        uint8_t sin_zero[8];
    8475};
  • uspace/lib/c/include/net/in6.h

    raab02fb refedee77  
    2727 */
    2828
    29 /** @addtogroup net
     29/** @addtogroup libc
    3030 *  @{
    3131 */
     
    3535 */
    3636
    37 #ifndef __NET_IN6_H__
    38 #define __NET_IN6_H__
     37#ifndef LIBC_IN6_H_
     38#define LIBC_IN6_H_
    3939
     40#include <net/inet.h>
     41#include <net/ip_protocols.h>
    4042#include <sys/types.h>
    4143
    42 #include <ip_protocols.h>
    43 #include <inet.h>
    44 
    45 /** INET6 string address maximum length.
    46  */
     44/** INET6 string address maximum length. */
    4745#define INET6_ADDRSTRLEN        (8 * 4 + 7 + 1)
    4846
    4947/** Type definition of the INET6 address.
    50  *  @see in6_addr
     48 * @see in6_addr
    5149 */
    5250typedef struct in6_addr in6_addr_t;
    5351
    5452/** Type definition of the INET6 socket address.
    55  *  @see sockaddr_in6
     53 * @see sockaddr_in6
    5654 */
    5755typedef struct sockaddr_in6     sockaddr_in6_t;
    5856
    59 /** INET6 address.
    60  */
    61 struct in6_addr{
    62         /** 16 byte IPv6 address.
    63          */
     57/** INET6 address. */
     58struct in6_addr {
     59        /** 16 byte IPv6 address. */
    6460        unsigned char s6_addr[16];
    6561};
    6662
    6763/** INET6 socket address.
    68  *  @see sockaddr
     64 * @see sockaddr
    6965 */
    70 struct sockaddr_in6{
    71         /** Address family.
    72          *  Should be AF_INET6.
    73          */
     66struct sockaddr_in6 {
     67        /** Address family. Should be AF_INET6. */
    7468        uint16_t sin6_family;
    75         /** Port number.
    76          */
     69        /** Port number. */
    7770        uint16_t sin6_port;
    78         /** IPv6 flow information.
    79          */
     71        /** IPv6 flow information. */
    8072        uint32_t sin6_flowinfo;
    81         /** IPv6 address.
    82          */
     73        /** IPv6 address. */
    8374        struct in6_addr sin6_addr;
    84         /** Scope identifier.
    85          */
     75        /** Scope identifier. */
    8676        uint32_t sin6_scope_id;
    8777};
  • uspace/lib/c/include/net/packet_header.h

    raab02fb refedee77  
    2727 */
    2828
    29 /** @addtogroup packet
     29/** @addtogroup libc
    3030 *  @{
    3131 */
    3232
    3333/** @file
    34  *  Packet header.
     34 * Packet header.
    3535 */
    3636
    37 #ifndef __NET_PACKET_HEADER_H__
    38 #define __NET_PACKET_HEADER_H__
     37#ifndef LIBC_PACKET_HEADER_H_
     38#define LIBC_PACKET_HEADER_H_
    3939
    40 #include <packet/packet.h>
     40#include <net/packet.h>
    4141
    4242/** Returns the actual packet data length.
    43  *  @param[in] header The packet header.
     43 * @param[in] header    The packet header.
    4444 */
    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)
    4647
    4748/** Returns the maximum packet address length.
    48  *  @param[in] header The packet header.
     49 * @param[in] header    The packet header.
    4950 */
    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)
    5153
    5254/** Returns the minimum packet suffix.
    53  *  @param[in] header The packet header.
     55 *  @param[in] header   The packet header.
    5456 */
    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)
    5659
    57 /** Packet integrity check magic value.
    58  */
     60/** Packet integrity check magic value. */
    5961#define PACKET_MAGIC_VALUE      0x11227788
    6062
    61 /** Packet header.
    62  */
    63 struct packet{
    64         /** Packet identifier.
    65          */
     63/** Packet header. */
     64struct packet {
     65        /** Packet identifier. */
    6666        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.
    6971         */
    7072        size_t order;
    71         /** Packet metric.
    72         */
     73
     74        /** Packet metric. */
    7375        size_t metric;
    74         /** Previous packet in the queue.
    75          */
     76        /** Previous packet in the queue. */
    7677        packet_id_t previous;
    77         /** Next packet in the queue.
    78          */
     78        /** Next packet in the queue. */
    7979        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.
    8385         */
    8486        size_t length;
    85         /** Stored source and destination addresses length.
    86         */
     87
     88        /** Stored source and destination addresses length. */
    8789        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.
    8994         */
    9095        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.
    92100         */
    93101        size_t dest_addr;
    94         /** Reserved data prefix length in bytes.
    95         */
     102
     103        /** Reserved data prefix length in bytes. */
    96104        size_t max_prefix;
    97         /** Reserved content length in bytes.
    98          */
     105        /** Reserved content length in bytes. */
    99106        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.
    101111         */
    102112        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.
    104117         */
    105118        size_t data_end;
    106         /** Integrity check magic value.
    107         */
     119
     120        /** Integrity check magic value. */
    108121        int magic_value;
    109122};
    110123
    111124/** 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.
    115129 */
    116 static inline int packet_is_valid(const packet_t packet){
     130static inline int packet_is_valid(const packet_t packet)
     131{
    117132        return packet && (packet->magic_value == PACKET_MAGIC_VALUE);
    118133}
  • uspace/lib/c/include/sys/time.h

    raab02fb refedee77  
    4343typedef long suseconds_t;
    4444
     45typedef uint32_t useconds_t;
     46typedef uint32_t mseconds_t;
     47
    4548struct timeval {
    4649        time_t tv_sec;        /* seconds */
  • uspace/lib/c/include/unistd.h

    raab02fb refedee77  
    3737
    3838#include <sys/types.h>
     39#include <time.h>
    3940#include <libarch/config.h>
    4041
     
    5657        #define SEEK_END  2
    5758#endif
    58 
    59 typedef uint32_t useconds_t;
    6059
    6160extern int dup2(int oldfd, int newfd);
  • uspace/lib/drv/Makefile

    raab02fb refedee77  
    3030USPACE_PREFIX = ../..
    3131EXTRA_CFLAGS = -Iinclude
    32 LIBRARY = libsocket
     32LIBRARY = libdrv
    3333
    3434SOURCES = \
    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/driver.c \
     36        generic/dev_iface.c \
     37        generic/remote_res.c \
     38        generic/remote_char.c
    4839
    4940include $(USPACE_PREFIX)/Makefile.common
  • uspace/lib/net/Makefile

    raab02fb refedee77  
    2929
    3030USPACE_PREFIX = ../..
    31 EXTRA_CFLAGS = -Iinclude -I$(LIBSOCKET_PREFIX)/include
     31EXTRA_CFLAGS = -Iinclude
    3232LIBRARY = libnet
    3333
    3434SOURCES = \
     35        generic/generic.c \
    3536        generic/net_remote.c \
    3637        generic/net_checksum.c \
     38        generic/packet_client.c \
    3739        generic/packet_remote.c \
     40        generic/protocol_map.c \
    3841        adt/module_map.c \
    3942        netif/netif_local.c \
    4043        netif/netif_remote.c \
    41         netif/netif_nil_bundle.c \
    4244        nil/nil_remote.c \
     45        il/il_interface.c \
    4346        il/ip_remote.c \
    4447        il/ip_client.c \
     
    4649        tl/icmp_remote.c \
    4750        tl/icmp_client.c \
     51        tl/socket_core.c \
     52        tl/tl_interface.c \
    4853        tl/tl_common.c
    4954
  • uspace/lib/net/adt/module_map.c

    raab02fb refedee77  
    2727 */
    2828
    29 /** @addtogroup net
    30  *  @{
     29/** @addtogroup libnet
     30 * @{
    3131 */
    3232
    3333/** @file
    34  *  Character string to module map implementation.
     34 * Character string to module map implementation.
    3535 */
    3636
     
    3838#include <task.h>
    3939#include <unistd.h>
     40#include <err.h>
    4041
    4142#include <ipc/services.h>
    4243
    43 #include <net_err.h>
    44 #include <net_modules.h>
     44#include <net/modules.h>
    4545
    4646#include <adt/generic_char_map.h>
     
    4949GENERIC_CHAR_MAP_IMPLEMENT(modules, module_t)
    5050
    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 */
     64int
     65add_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{
    5269        ERROR_DECLARE;
    5370
     
    5572
    5673        tmp_module = (module_ref) malloc(sizeof(module_t));
    57         if(! tmp_module){
     74        if (!tmp_module)
    5875                return ENOMEM;
    59         }
     76
    6077        tmp_module->task_id = task_id;
    6178        tmp_module->phone = 0;
     
    6582        tmp_module->service = service;
    6683        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))) {
    6887                free(tmp_module);
    6988                return ERROR_CODE;
    7089        }
    71         if(module){
     90        if (module)
    7291                *module = tmp_module;
    73         }
     92
    7493        return EOK;
    7594}
    7695
    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 */
     107module_ref get_running_module(modules_ref modules, char *name)
     108{
    78109        module_ref module;
    79110
    80111        module = modules_find(modules, name, 0);
    81         if(! module){
     112        if (!module)
    82113                return NULL;
     114
     115        if (!module->task_id) {
     116                module->task_id = spawn(module->filename);
     117                if (!module->task_id)
     118                        return NULL;
    83119        }
    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)
    91121                module->phone = module->connect_module(module->service);
    92         }
     122
    93123        return module;
    94124}
    95125
     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 */
    96132task_id_t spawn(const char *fname)
    97133{
  • uspace/lib/net/generic/net_checksum.c

    raab02fb refedee77  
    2727 */
    2828
    29 /** @addtogroup net
    30  *  @{
     29/** @addtogroup libnet
     30 * @{
    3131 */
    3232
    3333/** @file
    34  *  General CRC and checksum computation implementation.
     34 * General CRC and checksum computation implementation.
    3535 */
    3636
     
    3939#include <net_checksum.h>
    4040
    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 */
     52uint16_t compact_checksum(uint32_t sum)
     53{
    5054        // 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);
    5457
    5558        return (uint16_t) sum;
    5659}
    5760
    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 */
     70uint32_t compute_checksum(uint32_t seed, uint8_t *data, size_t length)
     71{
    5972        size_t index;
    6073
    6174        // sum all the 16 bit fields
    62         for(index = 0; index + 1 < length; index += 2){
     75        for (index = 0; index + 1 < length; index += 2)
    6376                seed += (data[index] << 8) + data[index + 1];
    64         }
    6577
    6678        // last odd byte with zero padding
    67         if(index + 1 == length){
     79        if (index + 1 == length)
    6880                seed += data[index] << 8;
    69         }
    7081
    7182        return seed;
    7283}
    7384
    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 */
     92uint32_t compute_crc32_be(uint32_t seed, uint8_t * data, size_t length)
     93{
    7594        size_t index;
    7695
    7796        // process full bytes
    78         while(length >= 8){
     97        while (length >= 8) {
    7998                // add the data
    8099                seed ^= (*data) << 24;
     100               
    81101                // for each added bit
    82                 for(index = 0; index < 8; ++ index){
     102                for (index = 0; index < 8; ++index) {
    83103                        // if the first bit is set
    84                         if(seed &0x80000000){
     104                        if (seed & 0x80000000) {
    85105                                // shift and divide the checksum
    86106                                seed = (seed << 1) ^ ((uint32_t) CRC_DIVIDER_BE);
    87                         }else{
     107                        } else {
    88108                                // shift otherwise
    89109                                seed <<= 1;
    90110                        }
    91111                }
     112               
    92113                // move to the next byte
    93                 ++ data;
     114                ++data;
    94115                length -= 8;
    95116        }
    96117
    97118        // process the odd bits
    98         if(length > 0){
     119        if (length > 0) {
    99120                // add the data with zero padding
    100                 seed ^= ((*data) &(0xFF << (8 - length))) << 24;
     121                seed ^= ((*data) & (0xff << (8 - length))) << 24;
     122               
    101123                // for each added bit
    102                 for(index = 0; index < length; ++ index){
     124                for (index = 0; index < length; ++index) {
    103125                        // if the first bit is set
    104                         if(seed &0x80000000){
     126                        if (seed & 0x80000000) {
    105127                                // shift and divide the checksum
    106128                                seed = (seed << 1) ^ ((uint32_t) CRC_DIVIDER_BE);
    107                         }else{
     129                        } else {
    108130                                // shift otherwise
    109131                                seed <<= 1;
     
    115137}
    116138
    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 */
     146uint32_t compute_crc32_le(uint32_t seed, uint8_t * data, size_t length)
     147{
    118148        size_t index;
    119149
    120150        // process full bytes
    121         while(length >= 8){
     151        while (length >= 8) {
    122152                // add the data
    123153                seed ^= (*data);
     154               
    124155                // for each added bit
    125                 for(index = 0; index < 8; ++ index){
     156                for (index = 0; index < 8; ++index) {
    126157                        // if the last bit is set
    127                         if(seed &1){
     158                        if (seed & 1) {
    128159                                // shift and divide the checksum
    129160                                seed = (seed >> 1) ^ ((uint32_t) CRC_DIVIDER_LE);
    130                         }else{
     161                        } else {
    131162                                // shift otherwise
    132163                                seed >>= 1;
    133164                        }
    134165                }
     166               
    135167                // move to the next byte
    136                 ++ data;
     168                ++data;
    137169                length -= 8;
    138170        }
    139171
    140172        // process the odd bits
    141         if(length > 0){
     173        if (length > 0) {
    142174                // add the data with zero padding
    143175                seed ^= (*data) >> (8 - length);
    144                 for(index = 0; index < length; ++ index){
     176               
     177                for (index = 0; index < length; ++index) {
    145178                        // if the last bit is set
    146                         if(seed &1){
     179                        if (seed & 1) {
    147180                                // shift and divide the checksum
    148181                                seed = (seed >> 1) ^ ((uint32_t) CRC_DIVIDER_LE);
    149                         }else{
     182                        } else {
    150183                                // shift otherwise
    151184                                seed >>= 1;
     
    157190}
    158191
    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 */
     198uint16_t flip_checksum(uint16_t checksum)
     199{
    160200        // flip, zero is returned as 0xFFFF (not flipped)
    161         checksum = ~ checksum;
     201        checksum = ~checksum;
    162202        return checksum ? checksum : IP_CHECKSUM_ZERO;
    163203}
    164204
    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 */
     216uint16_t ip_checksum(uint8_t *data, size_t length)
     217{
    166218        // 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)));
    168221}
    169222
  • uspace/lib/net/generic/net_remote.c

    raab02fb refedee77  
    2727 */
    2828
    29 /** @addtogroup net
    30  *  @{
     29/** @addtogroup libnet
     30 * @{
    3131 */
    3232
    3333/** @file
    34  *  Networking interface implementation for remote modules.
    35  *  @see net_interface.h
     34 * Networking interface implementation for remote modules.
     35 * @see net_interface.h
    3636 */
    3737
    3838#include <ipc/services.h>
     39#include <ipc/net_net.h>
    3940
    4041#include <malloc.h>
    4142
    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>
    4546#include <net_interface.h>
    4647#include <adt/measured_strings.h>
    47 #include <net_net_messages.h>
    4848
    49 int net_connect_module(services_t service){
     49/** Connects to the networking module.
     50 *
     51 * @returns             The networking module phone on success.
     52 */
     53int net_connect_module(void)
     54{
    5055        return connect_to_service(SERVICE_NETWORKING);
    5156}
    5257
    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 */
     65void net_free_settings(measured_string_ref settings, char *data)
     66{
     67        if (settings)
    5568                free(settings);
    56         }
    57         if(data){
     69        if (data)
    5870                free(data);
    59         }
    6071}
    6172
    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 */
     91int
     92net_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);
    6497}
    6598
    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 */
     118int
     119net_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);
    68124}
    69125
  • uspace/lib/net/generic/packet_remote.c

    raab02fb refedee77  
    2727 */
    2828
    29 /** @addtogroup packet
    30  *  @{
     29/** @addtogroup libnet
     30 * @{
    3131 */
    3232
    3333/** @file
    34  *  Packet client interface implementation for remote modules.
    35  *  @see packet_client.h
     34 * Packet client interface implementation for remote modules.
     35 * @see packet_client.h
    3636 */
    3737
    3838#include <async.h>
    3939#include <errno.h>
     40#include <err.h>
    4041#include <ipc/ipc.h>
     42#include <ipc/packet.h>
    4143#include <sys/mman.h>
    4244
    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>
    4946#include <packet_remote.h>
     47
     48#include <net/packet.h>
     49#include <net/packet_header.h>
    5050
    5151/** Obtain the packet from the packet server as the shared memory block.
     
    6464 *
    6565 */
    66 static int packet_return(int phone, packet_ref packet, packet_id_t packet_id, size_t size){
     66static int
     67packet_return(int phone, packet_ref packet, packet_id_t packet_id, size_t size)
     68{
    6769        ERROR_DECLARE;
    6870       
    6971        ipc_call_t answer;
    7072        aid_t message = async_send_1(phone, NET_PACKET_GET, packet_id, &answer);
     73
    7174        *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))) {
    7477                munmap(*packet, size);
    7578                async_wait_for(message, NULL);
     
    8386}
    8487
     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 */
    85103int packet_translate_remote(int phone, packet_ref packet, packet_id_t packet_id)
    86104{
     
    91109       
    92110        *packet = pm_find(packet_id);
    93         if (!(*packet)) {
     111        if (!*packet) {
    94112                ipcarg_t size;
    95113               
    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));
    97116                ERROR_PROPAGATE(packet_return(phone, packet, packet_id, size));
    98117        }
    99         if ((** packet).next) {
     118        if ((*packet)->next) {
    100119                packet_t next;
    101120               
    102                 return packet_translate_remote(phone, &next, (** packet).next);
     121                return packet_translate_remote(phone, &next, (*packet)->next);
    103122        }
    104123       
     
    106125}
    107126
     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 */
    108140packet_t packet_get_4_remote(int phone, size_t max_content, size_t addr_len,
    109141    size_t max_prefix, size_t max_suffix)
     
    114146        ipcarg_t size;
    115147       
    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)))
    118150                return NULL;
    119151       
     
    121153        packet_t packet = pm_find(packet_id);
    122154        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)))
    124157                        return NULL;
    125158        }
     
    128161}
    129162
     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 */
    130172packet_t packet_get_1_remote(int phone, size_t content)
    131173{
     
    141183        packet_t packet = pm_find(packet_id);
    142184        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)))
    144187                        return NULL;
    145188        }
     
    148191}
    149192
     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 */
    150203void pq_release_remote(int phone, packet_id_t packet_id)
    151204{
  • uspace/lib/net/il/arp_remote.c

    raab02fb refedee77  
    2727 */
    2828
    29 /** @addtogroup arp
    30  *  @{
     29/** @addtogroup libnet
     30 * @{
    3131 */
    3232
    3333/** @file
    34  *  ARP interface implementation for remote modules.
    35  *  @see arp_interface.h
     34 * ARP interface implementation for remote modules.
     35 * @see arp_interface.h
    3636 */
     37
     38#include <arp_interface.h>
     39#include <generic.h>
    3740
    3841#include <async.h>
     
    4043#include <ipc/ipc.h>
    4144#include <ipc/services.h>
     45#include <ipc/arp.h>
    4246
    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>
    4749#include <adt/measured_strings.h>
    48 #include <arp_messages.h>
    4950
    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 */
     56int arp_connect_module(services_t service)
     57{
     58        if (service != SERVICE_ARP)
    5259                return EINVAL;
    53         }
     60
    5461        return connect_to_service(SERVICE_ARP);
    5562}
    5663
    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 */
     69int arp_clean_cache_req(int arp_phone)
     70{
    5871        return (int) async_req_0_0(arp_phone, NET_ARP_CLEAN_CACHE);
    5972}
    6073
    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 */
     83int
     84arp_clear_address_req(int arp_phone, device_id_t device_id, services_t protocol,
     85    measured_string_ref address)
     86{
    6287        aid_t message_id;
    6388        ipcarg_t result;
    6489
    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);
    6692        measured_strings_send(arp_phone, address, 1);
    6793        async_wait_for(message_id, &result);
     94
    6895        return (int) result;
    6996}
    7097
    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 */
     105int 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);
    73109}
    74110
    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 */
     134int arp_device_req(int arp_phone, device_id_t device_id, services_t protocol,
     135    services_t netif, measured_string_ref address)
     136{
    76137        aid_t message_id;
    77138        ipcarg_t result;
    78139
    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);
    80142        measured_strings_send(arp_phone, address, 1);
    81143        async_wait_for(message_id, &result);
     144
    82145        return (int) result;
    83146}
    84147
    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 */
     165int
     166arp_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);
    91171}
    92172
  • uspace/lib/net/il/ip_client.c

    raab02fb refedee77  
    2727 */
    2828
    29 /** @addtogroup ip
    30  *  @{
     29/** @addtogroup libnet
     30 * @{
    3131 */
    3232
    3333/** @file
    34  *  IP client interface implementation.
    35  *  @see ip_client.h
     34 * IP client interface implementation.
     35 * @see ip_client.h
    3636 */
    3737
     
    4040
    4141#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>
    4543#include <ip_header.h>
    4644
    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 */
     53size_t ip_client_header_length(packet_t packet)
     54{
    4855        ip_header_ref header;
    4956
    5057        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)))
    5359                return 0;
    54         }
     60
    5561        return IP_HEADER_LENGTH(header);
    5662}
    5763
    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 */
     88int
     89ip_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{
    5993        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)
    6397                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)) {
    66102                return EINVAL;
    67103        }
    68104
    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 */
     153int
     154ip_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{
    101157        ip_header_ref header;
    102         uint8_t * data;
     158        uint8_t *data;
    103159        size_t padding;
    104160
     
    106162        // multiple of 4 bytes
    107163        padding =  ipopt_length % 4;
    108         if(padding){
     164        if (padding) {
    109165                padding = 4 - padding;
    110166                ipopt_length += padding;
     
    113169        // prefix the header
    114170        data = (uint8_t *) packet_prefix(packet, sizeof(ip_header_t) + padding);
    115         if(! data){
     171        if (!data)
    116172                return ENOMEM;
    117         }
    118173
    119174        // add the padding
    120         while(padding --){
     175        while (padding--)
    121176                data[sizeof(ip_header_t) + padding] = IPOPT_NOOP;
    122         }
    123177
    124178        // set the header
    125179        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);
    128183        header->tos = tos;
    129184        header->protocol = protocol;
    130185
    131         if(dont_fragment){
     186        if (dont_fragment)
    132187                header->flags = IPFLAG_DONT_FRAGMENT;
    133         }
     188
    134189        return EOK;
    135190}
    136191
    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 */
     209int
     210ip_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{
    138213        ip_header_ref header;
    139214
    140215        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)))
    143217                return ENOMEM;
    144         }
    145 
    146         if(protocol){
     218
     219        if (protocol)
    147220                *protocol = header->protocol;
    148         }
    149         if(ttl){
     221        if (ttl)
    150222                *ttl = header->ttl;
    151         }
    152         if(tos){
     223        if (tos)
    153224                *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) {
    159228                *ipopt_length = IP_HEADER_LENGTH(header) - sizeof(ip_header_t);
    160229                return sizeof(ip_header_t);
    161         }else{
     230        } else {
    162231                return IP_HEADER_LENGTH(header);
    163232        }
    164233}
    165234
    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 */
     245int
     246ip_client_set_pseudo_header_data_length(void *header, size_t headerlen,
     247    size_t data_length)
     248{
    167249        ipv4_pseudo_header_ref header_in;
    168250
    169         if(! header){
     251        if (!header)
    170252                return EBADMEM;
    171         }
    172 
    173         if(headerlen == sizeof(ipv4_pseudo_header_t)){
     253
     254        if (headerlen == sizeof(ipv4_pseudo_header_t)) {
    174255                header_in = (ipv4_pseudo_header_ref) header;
    175256                header_in->data_length = htons(data_length);
    176257                return EOK;
    177258        // TODO IPv6
    178         }else{
     259        } else {
    179260                return EINVAL;
    180261        }
  • uspace/lib/net/il/ip_remote.c

    raab02fb refedee77  
    2727 */
    2828
    29 /** @addtogroup ip
     29/** @addtogroup libnet
    3030 * @{
    3131 */
     
    4040 */
    4141
     42#include <ip_remote.h>
     43#include <ip_interface.h>
     44#include <packet_client.h>
     45#include <generic.h>
     46
    4247#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>
    5354
    5455/** Add a route to the device routing table.
     
    5657 * The target network is routed using this device.
    5758 *
    58  * @param[in] ip_phone  The IP module phone used for (semi)remote calls.
    59  * @param[in] device_id The device identifier.
    60  * @param[in] address   The target network address.
    61  * @param[in] netmask   The target network mask.
    62  * @param[in] gateway   The target network gateway. Not used if zero.
    63  *
     59 * @param[in] ip_phone  The IP module phone used for (semi)remote calls.
     60 * @param[in] device_id The device identifier.
     61 * @param[in] address   The target network address.
     62 * @param[in] netmask   The target network mask.
     63 * @param[in] gateway   The target network gateway. Not used if zero.
    6464 */
    6565int ip_add_route_req_remote(int ip_phone, device_id_t device_id,
     
    7171}
    7272
     73/** Creates bidirectional connection with the ip module service and registers
     74 * the message receiver.
     75 *
     76 * @param[in] service   The IP module service.
     77 * @param[in] protocol  The transport layer protocol.
     78 * @param[in] me        The requesting module service.
     79 * @param[in] receiver  The message receiver. Used for remote connection.
     80 * @returns             The phone of the needed service.
     81 * @returns             EOK on success.
     82 * @returns             Other error codes as defined for the bind_service()
     83 *                      function.
     84 */
    7385int ip_bind_service(services_t service, int protocol, services_t me,
    74     async_client_conn_t receiver, tl_received_msg_t tl_received_msg)
     86    async_client_conn_t receiver)
    7587{
    7688        return (int) bind_service(service, (ipcarg_t) protocol, me, service,
     
    7890}
    7991
     92/** Connects to the IP module.
     93 *
     94 * @param service       The IP module service. Ignored parameter.
     95 * @returns             The IP module phone on success.
     96 */
    8097int ip_connect_module(services_t service)
    8198{
     
    88105 * If the device uses ARP registers also the new ARP device.
    89106 *
    90  * @param[in] ip_phone  The IP module phone used for (semi)remote calls.
    91  * @param[in] device_id The new device identifier.
    92  * @param[in] netif     The underlying device network interface layer service.
    93  *
    94  * @return EOK on success.
    95  * @return ENOMEM if there is not enough memory left.
    96  * @return EINVAL if the device configuration is invalid.
    97  * @return ENOTSUP if the device uses IPv6.
    98  * @return ENOTSUP if the device uses DHCP.
    99  * @return Other error codes as defined for the net_get_device_conf_req()
    100  *         function.
    101  * @return Other error codes as defined for the arp_device_req() function.
    102  *
     107 * @param[in] ip_phone  The IP module phone used for (semi)remote calls.
     108 * @param[in] device_id The new device identifier.
     109 * @param[in] netif     The underlying device network interface layer service.
     110 * @return              EOK on success.
     111 * @return              ENOMEM if there is not enough memory left.
     112 * @return              EINVAL if the device configuration is invalid.
     113 * @return              ENOTSUP if the device uses IPv6.
     114 * @return              ENOTSUP if the device uses DHCP.
     115 * @return              Other error codes as defined for the
     116 *                      net_get_device_conf_req() function.
     117 * @return              Other error codes as defined for the arp_device_req()
     118 *                      function.
    103119 */
    104120int ip_device_req_remote(int ip_phone, device_id_t device_id,
     
    109125}
    110126
    111 /** Return the device identifier and the IP pseudo header based on the destination address.
    112  *
    113  * @param[in]  ip_phone    The IP module phone used for (semi)remote calls.
    114  * @param[in]  protocol    The transport protocol.
    115  * @param[in]  destination The destination address.
    116  * @param[in]  addrlen     The destination address length.
    117  * @param[out] device_id   The device identifier.
    118  * @param[out] header      The constructed IP pseudo header.
    119  * @param[out] headerlen   The IP pseudo header length.
     127/** Return the device identifier and the IP pseudo header based on the
     128 * destination address.
     129 *
     130 * @param[in] ip_phone  The IP module phone used for (semi)remote calls.
     131 * @param[in] protocol  The transport protocol.
     132 * @param[in] destination The destination address.
     133 * @param[in] addrlen   The destination address length.
     134 * @param[out] device_id The device identifier.
     135 * @param[out] header   The constructed IP pseudo header.
     136 * @param[out] headerlen The IP pseudo header length.
    120137 *
    121138 */
     
    124141    device_id_t *device_id, void **header, size_t *headerlen)
    125142{
    126         if ((!destination) || (addrlen == 0))
     143        if (!destination || (addrlen == 0))
    127144                return EINVAL;
    128145       
    129         if ((!device_id) || (header) || (headerlen))
     146        if (!device_id || !header || !headerlen)
    130147                return EBADMEM;
    131148       
     
    136153            (ipcarg_t) protocol, &answer);
    137154       
    138         if ((async_data_write_start(ip_phone, destination, addrlen) == EOK)
    139             && (async_data_read_start(ip_phone, headerlen, sizeof(*headerlen)) == EOK)
    140             && (*headerlen > 0)) {
     155        if ((async_data_write_start(ip_phone, destination, addrlen) == EOK) &&
     156            (async_data_read_start(ip_phone, headerlen,
     157            sizeof(*headerlen)) == EOK) && (*headerlen > 0)) {
    141158                *header = malloc(*headerlen);
    142159                if (*header) {
    143                         if (async_data_read_start(ip_phone, *header, *headerlen) != EOK)
     160                        if (async_data_read_start(ip_phone, *header,
     161                            *headerlen) != EOK)
    144162                                free(*header);
    145163                }
     
    149167        async_wait_for(message_id, &result);
    150168       
    151         if ((result != EOK) && (*header))
     169        if ((result != EOK) && *header)
    152170                free(*header);
    153171        else
     
    159177/** Return the device packet dimension for sending.
    160178 *
    161  * @param[in]  ip_phone         The IP module phone used for (semi)remote calls.
    162  * @param[in]  device_id        The device identifier.
     179 * @param[in] ip_phone  The IP module phone used for (semi)remote calls.
     180 * @param[in] device_id The device identifier.
    163181 * @param[out] packet_dimension The packet dimension.
    164  *
    165  * @return EOK on success.
    166  * @return ENOENT if there is no such device.
    167  * @return Other error codes as defined for the
    168  *         generic_packet_size_req_remote() function.
    169  *
     182 * @return              EOK on success.
     183 * @return              ENOENT if there is no such device.
     184 * @return              Other error codes as defined for the
     185 *                      generic_packet_size_req_remote() function.
    170186 */
    171187int ip_packet_size_req_remote(int ip_phone, device_id_t device_id,
    172188    packet_dimension_ref packet_dimension)
    173189{
    174         return generic_packet_size_req_remote(ip_phone, NET_IL_PACKET_SPACE, device_id,
    175             packet_dimension);
     190        return generic_packet_size_req_remote(ip_phone, NET_IL_PACKET_SPACE,
     191            device_id, packet_dimension);
    176192}
    177193
    178194/** Notify the IP module about the received error notification packet.
    179195 *
    180  * @param[in] ip_phone  The IP module phone used for (semi)remote calls.
    181  * @param[in] device_id The device identifier.
    182  * @param[in] packet    The received packet or the received packet queue.
    183  * @param[in] target    The target internetwork module service to be
    184  *                      delivered to.
    185  * @param[in] error     The packet error reporting service. Prefixes the
    186  *                      received packet.
    187  *
    188  * @return EOK on success.
    189  *
     196 * @param[in] ip_phone  The IP module phone used for (semi)remote calls.
     197 * @param[in] device_id The device identifier.
     198 * @param[in] packet    The received packet or the received packet queue.
     199 * @param[in] target    The target internetwork module service to be
     200 *                      delivered to.
     201 * @param[in] error     The packet error reporting service. Prefixes the
     202 *                      received packet.
     203 * @return              EOK on success.
    190204 */
    191205int ip_received_error_msg_remote(int ip_phone, device_id_t device_id,
     
    200214 * The packets may get fragmented if needed.
    201215 *
    202  * @param[in] ip_phone  The IP module phone used for (semi)remote calls.
    203  * @param[in] device_id The device identifier.
    204  * @param[in] packet    The packet fragments as a packet queue. All the
    205  *                      packets have to have the same destination address.
    206  * @param[in] sender    The sending module service.
    207  * @param[in] error     The packet error reporting service. Prefixes the
    208  *                      received packet.
    209  *
    210  * @return EOK on success.
    211  * @return Other error codes as defined for the generic_send_msg() function.
    212  *
     216 * @param[in] ip_phone  The IP module phone used for (semi)remote calls.
     217 * @param[in] device_id The device identifier.
     218 * @param[in] packet    The packet fragments as a packet queue. All the
     219 *                      packets have to have the same destination address.
     220 * @param[in] sender    The sending module service.
     221 * @param[in] error     The packet error reporting service. Prefixes the
     222 *                      received packet.
     223 * @return              EOK on success.
     224 * @return              Other error codes as defined for the generic_send_msg()
     225 *                      function.
    213226 */
    214227int ip_send_msg_remote(int ip_phone, device_id_t device_id, packet_t packet,
     
    223236 * This gateway is used if no other route is found.
    224237 *
    225  * @param[in] ip_phone  The IP module phone used for (semi)remote calls.
    226  * @param[in] device_id The device identifier.
    227  * @param[in] gateway   The default gateway.
    228  *
     238 * @param[in] ip_phone  The IP module phone used for (semi)remote calls.
     239 * @param[in] device_id The device identifier.
     240 * @param[in] gateway   The default gateway.
    229241 */
    230242int ip_set_gateway_req_remote(int ip_phone, device_id_t device_id,
  • uspace/lib/net/include/adt/module_map.h

    raab02fb refedee77  
    2727 */
    2828
    29 /** @addtogroup net
    30  *  @{
     29/** @addtogroup libnet
     30 * @{
    3131 */
    3232
    3333/** @file
    34  *  Character string to module map.
     34 * Character string to module map.
    3535 */
    3636
    37 #ifndef __NET_MODULES_MAP_H__
    38 #define __NET_MODULES_MAP_H__
     37#ifndef LIBNET_MODULES_MAP_H_
     38#define LIBNET_MODULES_MAP_H_
    3939
    4040#include <task.h>
    41 
    4241#include <ipc/services.h>
    43 
    44 #include <net_modules.h>
    45 
     42#include <net/modules.h>
    4643#include <adt/generic_char_map.h>
    4744
    4845/** Type definition of the module structure.
    49  *  @see module_struct
     46 * @see module_struct
    5047 */
    51 typedef struct module_struct    module_t;
     48typedef struct module_struct module_t;
    5249
    5350/** Type definition of the module structure pointer.
    54  *  @see module_struct
     51 * @see module_struct
    5552 */
    56 typedef module_t *                              module_ref;
     53typedef module_t *module_ref;
    5754
    5855/** Module map.
    59  *  Sorted by module names.
    60  *  @see generic_char_map.h
     56 * Sorted by module names.
     57 * @see generic_char_map.h
    6158 */
    6259GENERIC_CHAR_MAP_DECLARE(modules, module_t)
    6360
    64 /** Module structure.
    65  */
    66 struct  module_struct{
    67         /** Module task identifier if running.
    68          */
     61/** Module structure. */
     62struct module_struct {
     63        /** Module task identifier if running. */
    6964        task_id_t task_id;
    70         /** Module service identifier.
    71          */
     65        /** Module service identifier. */
    7266        services_t service;
    73         /** Module phone if running and connected.
    74          */
     67        /** Module phone if running and connected. */
    7568        int phone;
    76         /** Usage counter.
    77          */
     69        /** Usage counter. */
    7870        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;
    8877};
    8978
    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);
     79extern int add_module(module_ref *, modules_ref, const char *, const char *,
     80    services_t, task_id_t, connect_module_t *);
     81extern module_ref get_running_module(modules_ref, char *);
     82extern task_id_t spawn(const char *);
    11983
    12084#endif
  • uspace/lib/net/include/arp_interface.h

    raab02fb refedee77  
    2727 */
    2828
    29 /** @addtogroup arp
    30  *  @{
     29/** @addtogroup libnet
     30 * @{
    3131 */
    3232
    33 #ifndef __NET_ARP_INTERFACE_H__
    34 #define __NET_ARP_INTERFACE_H__
     33#ifndef LIBNET_ARP_INTERFACE_H_
     34#define LIBNET_ARP_INTERFACE_H_
    3535
    3636#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>
    3843
    3944/** @name ARP module interface
    40  *  This interface is used by other modules.
     45 * This interface is used by other modules.
    4146 */
    4247/*@{*/
    4348
    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);
     49extern int arp_device_req(int, device_id_t, services_t, services_t,
     50    measured_string_ref);
     51extern int arp_translate_req(int, device_id_t, services_t, measured_string_ref,
     52    measured_string_ref *, char **);
     53extern int arp_clear_device_req(int, device_id_t);
     54extern int arp_clear_address_req(int, device_id_t, services_t,
     55    measured_string_ref);
     56extern int arp_clean_cache_req(int);
     57extern int arp_connect_module(services_t);
    11558
    11659/*@}*/
  • uspace/lib/net/include/ethernet_lsap.h

    raab02fb refedee77  
    2727 */
    2828
    29 /** @addtogroup eth
    30  *  @{
     29/** @addtogroup libnet
     30 * @{
    3131 */
    3232
    3333/** @file
    34  *  Link service access point identifiers.
     34 * Link service access point identifiers.
    3535 */
    3636
    37 #ifndef __NET_ETHERNET_LSAP_H__
    38 #define __NET_ETHERNET_LSAP_H__
     37#ifndef LIBNET_ETHERNET_LSAP_H_
     38#define LIBNET_ETHERNET_LSAP_H_
    3939
    4040#include <sys/types.h>
    4141
    42 /** Ethernet LSAP type definition.
    43  */
    44 typedef uint8_t eth_lsap_t;
     42/** Ethernet LSAP type definition. */
     43typedef uint8_t eth_lsap_t;
    4544
    46 /** @name Ethernet LSAP values definitions
    47  */
     45/** @name Ethernet LSAP values definitions */
    4846/*@{*/
    4947
    50 /** Null LSAP LSAP identifier.
    51  */
     48/** Null LSAP LSAP identifier. */
    5249#define ETH_LSAP_NULL   0x00
    53 /** Individual LLC Sublayer Management Function LSAP identifier.
    54  */
    55 #define ETH_LSAP_ISLMF  0x02
    56 /** Group LLC Sublayer Management Function LSAP identifier.
    57  */
    58 #define ETH_LSAP_GSLMI  0x03
    59 /** IBM SNA Path Control (individual) LSAP identifier.
    60  */
    61 #define ETH_LSAP_ISNA   0x04
    62 /** IBM SNA Path Control (group) LSAP identifier.
    63  */
    64 #define ETH_LSAP_GSNA   0x05
    65 /** ARPANET Internet Protocol (IP) LSAP identifier.
    66  */
     50/** ARPANET Internet Protocol (IP) LSAP identifier. */
    6751#define ETH_LSAP_IP     0x06
    68 /** SNA LSAP identifier.
    69  */
    70 #define ETH_LSAP_SNA    0x08
    71 /** SNA LSAP identifier.
    72  */
    73 #define ETH_LSAP_SNA2   0x0C
    74 /** PROWAY (IEC955) Network Management &Initialization LSAP identifier.
    75  */
    76 #define ETH_LSAP_PROWAY_NMI     0x0E
    77 /** Texas Instruments LSAP identifier.
    78  */
    79 #define ETH_LSAP_TI     0x18
    80 /** IEEE 802.1 Bridge Spanning Tree Protocol LSAP identifier.
    81  */
    82 #define ETH_LSAP_BRIDGE 0x42
    83 /** EIA RS-511 Manufacturing Message Service LSAP identifier.
    84  */
    85 #define ETH_LSAP_EIS    0x4E
    86 /** ISO 8208 (X.25 over IEEE 802.2 Type 2 LLC) LSAP identifier.
    87  */
    88 #define ETH_LSAP_ISO8208        0x7E
    89 /** Xerox Network Systems (XNS) LSAP identifier.
    90  */
    91 #define ETH_LSAP_XNS    0x80
    92 /** Nestar LSAP identifier.
    93  */
    94 #define ETH_LSAP_NESTAR 0x86
    95 /** PROWAY (IEC 955) Active Station List Maintenance LSAP identifier.
    96  */
    97 #define ETH_LSAP_PROWAY_ASLM    0x8E
    98 /** ARPANET Address Resolution Protocol (ARP) LSAP identifier.
    99  */
     52/** ARPANET Address Resolution Protocol (ARP) LSAP identifier. */
    10053#define ETH_LSAP_ARP    0x98
    101 /** Banyan VINES LSAP identifier.
    102  */
    103 #define ETH_LSAP_VINES  0xBC
    104 /** SubNetwork Access Protocol (SNAP) LSAP identifier.
    105  */
     54/** SubNetwork Access Protocol (SNAP) LSAP identifier. */
    10655#define ETH_LSAP_SNAP   0xAA
    107 /** Novell NetWare LSAP identifier.
    108  */
    109 #define ETH_LSAP_NETWARE        0xE0
    110 /** IBM NetBIOS LSAP identifier.
    111  */
    112 #define ETH_LSAP_NETBIOS        0xF0
    113 /** IBM LAN Management (individual) LSAP identifier.
    114  */
    115 #define ETH_LSAP_ILAN   0xF4
    116 /** IBM LAN Management (group) LSAP identifier.
    117  */
    118 #define ETH_LSAP_GLAN   0xF5
    119 /** IBM Remote Program Load (RPL) LSAP identifier.
    120  */
    121 #define ETH_LSAP_RPL    0xF8
    122 /** Ungermann-Bass LSAP identifier.
    123  */
    124 #define ETH_LSAP_UB     0xFA
    125 /** ISO Network Layer Protocol LSAP identifier.
    126  */
    127 #define ETH_LSAP_ISONLP 0xFE
    128 /** Global LSAP LSAP identifier.
    129  */
     56/** Global LSAP LSAP identifier. */
    13057#define ETH_LSAP_GLSAP  0xFF
    13158
  • uspace/lib/net/include/ethernet_protocols.h

    raab02fb refedee77  
    2727 */
    2828
    29 /** @addtogroup eth
    30  *  @{
     29/** @addtogroup libnet
     30 * @{
    3131 */
    3232
    3333/** @file
    34  *  Ethernet protocol numbers according to the on-line IANA - Ethernet numbers - <http://www.iana.org/assignments/ethernet-numbers>, cited January 17 2009.
     34 * Ethernet protocol numbers according to the on-line IANA - Ethernet numbers
     35 * http://www.iana.org/assignments/ethernet-numbers
     36 * cited January 17 2009.
    3537 */
    3638
    37 #ifndef __NET_ETHERNET_PROTOCOLS_H__
    38 #define __NET_ETHERNET_PROTOCOLS_H__
     39#ifndef LIBNET_ETHERNET_PROTOCOLS_H_
     40#define LIBNET_ETHERNET_PROTOCOLS_H_
    3941
    4042#include <sys/types.h>
    4143
    42 /** Ethernet protocol type definition.
    43  */
    44 typedef uint16_t        eth_type_t;
     44/** Ethernet protocol type definition. */
     45typedef uint16_t eth_type_t;
    4546
    46 /** @name Ethernet protocols definitions
    47  */
     47/** @name Ethernet protocols definitions */
    4848/*@{*/
    4949
    5050/** Ethernet minimal protocol number.
    51  *  According to the IEEE 802.3 specification.
     51 * According to the IEEE 802.3 specification.
    5252 */
    53 #define ETH_MIN_PROTO   0x0600 /*1536*/
     53#define ETH_MIN_PROTO           0x0600 /* 1536 */
    5454
    55 /** Ethernet loopback packet protocol type.
    56  */
    57 #define ETH_P_LOOP              0x0060
    58 
    59 /** XEROX PUP (see 0A00) ethernet protocol type.
    60  */
    61 #define ETH_P_PUP               0x0200
    62 
    63 /** PUP Addr Trans (see 0A01) ethernet protocol type.
    64  */
    65 #define ETH_P_PUPAT             0x0201
    66 
    67 /** Nixdorf ethernet protocol type.
    68  */
    69 #define ETH_P_Nixdorf           0x0400
    70 
    71 /** XEROX NS IDP ethernet protocol type.
    72  */
    73 #define ETH_P_XEROX_NS_IDP              0x0600
    74 
    75 /** DLOG ethernet protocol type.
    76  */
    77 #define ETH_P_DLOG              0x0660
    78 
    79 /** DLOG ethernet protocol type.
    80  */
    81 #define ETH_P_DLOG2             0x0661
    82 
    83 /** Internet IP (IPv4) ethernet protocol type.
    84  */
     55/** Internet IP (IPv4) ethernet protocol type. */
    8556#define ETH_P_IP                0x0800
    8657
    87 /** X.75 Internet ethernet protocol type.
    88  */
    89 #define ETH_P_X_75              0x0801
    90 
    91 /** NBS Internet ethernet protocol type.
    92  */
    93 #define ETH_P_NBS               0x0802
    94 
    95 /** ECMA Internet ethernet protocol type.
    96  */
    97 #define ETH_P_ECMA              0x0803
    98 
    99 /** Chaosnet ethernet protocol type.
    100  */
    101 #define ETH_P_Chaosnet          0x0804
    102 
    103 /** X.25 Level 3 ethernet protocol type.
    104  */
    105 #define ETH_P_X25               0x0805
    106 
    107 /** ARP ethernet protocol type.
    108  */
     58/** ARP ethernet protocol type. */
    10959#define ETH_P_ARP               0x0806
    110 
    111 /** XNS Compatability ethernet protocol type.
    112  */
    113 #define ETH_P_XNS_Compatability         0x0807
    114 
    115 /** Frame Relay ARP ethernet protocol type.
    116  */
    117 #define ETH_P_Frame_Relay_ARP           0x0808
    118 
    119 /** Symbolics Private ethernet protocol type.
    120  */
    121 #define ETH_P_Symbolics_Private         0x081C
    122 
    123 /** Xyplex ethernet protocol type.
    124  */
    125 #define ETH_P_Xyplex_MIN                0x0888
    126 
    127 /** Xyplex ethernet protocol type.
    128  */
    129 #define ETH_P_Xyplex_MAX                0x088A
    130 
    131 /** Ungermann-Bass net debugr ethernet protocol type.
    132  */
    133 #define ETH_P_Ungermann_Bass_net_debugr         0x0900
    134 
    135 /** Xerox IEEE802.3 PUP ethernet protocol type.
    136  */
    137 #define ETH_P_IEEEPUP           0x0A00
    138 
    139 /** PUP Addr Trans ethernet protocol type.
    140  */
    141 #define ETH_P_IEEEPUPAT         0x0A01
    142 
    143 /** Banyan VINES ethernet protocol type.
    144  */
    145 #define ETH_P_Banyan_VINES              0x0BAD
    146 
    147 /** VINES Loopback ethernet protocol type.
    148  */
    149 #define ETH_P_VINES_Loopback            0x0BAE
    150 
    151 /** VINES Echo ethernet protocol type.
    152  */
    153 #define ETH_P_VINES_Echo                0x0BAF
    154 
    155 /** Berkeley Trailer nego ethernet protocol type.
    156  */
    157 #define ETH_P_Berkeley_Trailer_nego             0x1000
    158 
    159 /** Berkeley Trailer encap/IP ethernet protocol type.
    160  */
    161 #define ETH_P_Berkeley_Trailer_encapIP_MIN              0x1001
    162 
    163 /** Berkeley Trailer encap/IP ethernet protocol type.
    164  */
    165 #define ETH_P_Berkeley_Trailer_encapIP_MAX              0x100F
    166 
    167 /** Valid Systems ethernet protocol type.
    168  */
    169 #define ETH_P_Valid_Systems             0x1600
    170 
    171 /** PCS Basic Block Protocol ethernet protocol type.
    172  */
    173 #define ETH_P_PCS_Basic_Block_Protocol          0x4242
    174 
    175 /** BBN Simnet ethernet protocol type.
    176  */
    177 #define ETH_P_BBN_Simnet                0x5208
    178 
    179 /** DEC Unassigned (Exp.) ethernet protocol type.
    180  */
    181 #define ETH_P_DEC               0x6000
    182 
    183 /** DEC MOP Dump/Load ethernet protocol type.
    184  */
    185 #define ETH_P_DNA_DL            0x6001
    186 
    187 /** DEC MOP Remote Console ethernet protocol type.
    188  */
    189 #define ETH_P_DNA_RC            0x6002
    190 
    191 /** DEC DECNET Phase IV Route ethernet protocol type.
    192  */
    193 #define ETH_P_DNA_RT            0x6003
    194 
    195 /** DEC LAT ethernet protocol type.
    196  */
    197 #define ETH_P_LAT               0x6004
    198 
    199 /** DEC Diagnostic Protocol ethernet protocol type.
    200  */
    201 #define ETH_P_DIAG              0x6005
    202 
    203 /** DEC Customer Protocol ethernet protocol type.
    204  */
    205 #define ETH_P_CUST              0x6006
    206 
    207 /** DEC LAVC, SCA ethernet protocol type.
    208  */
    209 #define ETH_P_SCA               0x6007
    210 
    211 /** DEC Unassigned ethernet protocol type.
    212  */
    213 #define ETH_P_DEC_Unassigned_MIN                0x6008
    214 
    215 /** DEC Unassigned ethernet protocol type.
    216  */
    217 #define ETH_P_DEC_Unassigned_MAX                0x6009
    218 
    219 /** Com Corporation ethernet protocol type.
    220  */
    221 #define ETH_P_Com_Corporation_MIN               0x6010
    222 
    223 /** Com Corporation ethernet protocol type.
    224  */
    225 #define ETH_P_Com_Corporation_MAX               0x6014
    226 
    227 /** Trans Ether Bridging ethernet protocol type.
    228  */
    229 #define ETH_P_Trans_Ether_Bridging              0x6558
    230 
    231 /** Raw Frame Relay ethernet protocol type.
    232  */
    233 #define ETH_P_Raw_Frame_Relay           0x6559
    234 
    235 /** Ungermann-Bass download ethernet protocol type.
    236  */
    237 #define ETH_P_Ungermann_Bass_download           0x7000
    238 
    239 /** Ungermann-Bass dia/loop ethernet protocol type.
    240  */
    241 #define ETH_P_Ungermann_Bass_dialoop            0x7002
    242 
    243 /** LRT ethernet protocol type.
    244  */
    245 #define ETH_P_LRT_MIN           0x7020
    246 
    247 /** LRT ethernet protocol type.
    248  */
    249 #define ETH_P_LRT_MAX           0x7029
    250 
    251 /** Proteon ethernet protocol type.
    252  */
    253 #define ETH_P_Proteon           0x7030
    254 
    255 /** Cabletron ethernet protocol type.
    256  */
    257 #define ETH_P_Cabletron         0x7034
    258 
    259 /** Cronus VLN ethernet protocol type.
    260  */
    261 #define ETH_P_Cronus_VLN                0x8003
    262 
    263 /** Cronus Direct ethernet protocol type.
    264  */
    265 #define ETH_P_Cronus_Direct             0x8004
    266 
    267 /** HP Probe ethernet protocol type.
    268  */
    269 #define ETH_P_HP_Probe          0x8005
    270 
    271 /** Nestar ethernet protocol type.
    272  */
    273 #define ETH_P_Nestar            0x8006
    274 
    275 /** AT&T ethernet protocol type.
    276  */
    277 #define ETH_P_AT_T              0x8008
    278 
    279 /** Excelan ethernet protocol type.
    280  */
    281 #define ETH_P_Excelan           0x8010
    282 
    283 /** SGI diagnostics ethernet protocol type.
    284  */
    285 #define ETH_P_SGI_diagnostics           0x8013
    286 
    287 /** SGI network games ethernet protocol type.
    288  */
    289 #define ETH_P_SGI_network_games         0x8014
    290 
    291 /** SGI reserved ethernet protocol type.
    292  */
    293 #define ETH_P_SGI_reserved              0x8015
    294 
    295 /** SGI bounce server ethernet protocol type.
    296  */
    297 #define ETH_P_SGI_bounce_server         0x8016
    298 
    299 /** Apollo Domain ethernet protocol type.
    300  */
    301 #define ETH_P_Apollo_Domain             0x8019
    302 
    303 /** Tymshare ethernet protocol type.
    304  */
    305 #define ETH_P_Tymshare          0x802E
    306 
    307 /** Tigan, Inc. ethernet protocol type.
    308  */
    309 #define ETH_P_Tigan             0x802F
    310 
    311 /** Reverse ARP ethernet protocol type.
    312  */
    313 #define ETH_P_RARP              0x8035
    314 
    315 /** Aeonic Systems ethernet protocol type.
    316  */
    317 #define ETH_P_Aeonic_Systems            0x8036
    318 
    319 /** DEC LANBridge ethernet protocol type.
    320  */
    321 #define ETH_P_DEC_LANBridge             0x8038
    322 
    323 /** DEC Unassigned ethernet protocol type.
    324  */
    325 #define ETH_P_DEC_Unassigned_MIN1               0x8039
    326 
    327 /** DEC Unassigned ethernet protocol type.
    328  */
    329 #define ETH_P_DEC_Unassigned_MAX2               0x803C
    330 
    331 /** DEC Ethernet Encryption ethernet protocol type.
    332  */
    333 #define ETH_P_DEC_Ethernet_Encryption           0x803D
    334 
    335 /** DEC Unassigned ethernet protocol type.
    336  */
    337 #define ETH_P_DEC_Unassigned            0x803E
    338 
    339 /** DEC LAN Traffic Monitor ethernet protocol type.
    340  */
    341 #define ETH_P_DEC_LAN_Traffic_Monitor           0x803F
    342 
    343 /** DEC Unassigned ethernet protocol type.
    344  */
    345 #define ETH_P_DEC_Unassigned_MIN3               0x8040
    346 
    347 /** DEC Unassigned ethernet protocol type.
    348  */
    349 #define ETH_P_DEC_Unassigned_MAX3               0x8042
    350 
    351 /** Planning Research Corp. ethernet protocol type.
    352  */
    353 #define ETH_P_Planning_Research_Corp            0x8044
    354 
    355 /** AT&T ethernet protocol type.
    356  */
    357 #define ETH_P_AT_T2             0x8046
    358 
    359 /** AT&T ethernet protocol type.
    360  */
    361 #define ETH_P_AT_T3             0x8047
    362 
    363 /** ExperData ethernet protocol type.
    364  */
    365 #define ETH_P_ExperData         0x8049
    366 
    367 /** Stanford V Kernel exp. ethernet protocol type.
    368  */
    369 #define ETH_P_Stanford_V_Kernel_exp             0x805B
    370 
    371 /** Stanford V Kernel prod. ethernet protocol type.
    372  */
    373 #define ETH_P_Stanford_V_Kernel_prod            0x805C
    374 
    375 /** Evans &Sutherland ethernet protocol type.
    376  */
    377 #define ETH_P_Evans_Sutherland          0x805D
    378 
    379 /** Little Machines ethernet protocol type.
    380  */
    381 #define ETH_P_Little_Machines           0x8060
    382 
    383 /** Counterpoint Computers ethernet protocol type.
    384  */
    385 #define ETH_P_Counterpoint_Computers            0x8062
    386 
    387 /** Univ. of Mass. @ Amherst ethernet protocol type.
    388  */
    389 #define ETH_P_Univ_of_Mass              0x8065
    390 
    391 /** Univ. of Mass. @ Amherst ethernet protocol type.
    392  */
    393 #define ETH_P_Univ_of_Mass2             0x8066
    394 
    395 /** Veeco Integrated Auto. ethernet protocol type.
    396  */
    397 #define ETH_P_Veeco_Integrated_Auto             0x8067
    398 
    399 /** General Dynamics ethernet protocol type.
    400  */
    401 #define ETH_P_General_Dynamics          0x8068
    402 
    403 /** AT&T ethernet protocol type.
    404  */
    405 #define ETH_P_AT_T4             0x8069
    406 
    407 /** Autophon ethernet protocol type.
    408  */
    409 #define ETH_P_Autophon          0x806A
    410 
    411 /** ComDesign ethernet protocol type.
    412  */
    413 #define ETH_P_ComDesign         0x806C
    414 
    415 /** Computgraphic Corp. ethernet protocol type.
    416  */
    417 #define ETH_P_Computgraphic_Corp                0x806D
    418 
    419 /** Landmark Graphics Corp. ethernet protocol type.
    420  */
    421 #define ETH_P_Landmark_Graphics_Corp_MIN                0x806E
    422 
    423 /** Landmark Graphics Corp. ethernet protocol type.
    424  */
    425 #define ETH_P_Landmark_Graphics_Corp_MAX                0x8077
    426 
    427 /** Matra ethernet protocol type.
    428  */
    429 #define ETH_P_Matra             0x807A
    430 
    431 /** Dansk Data Elektronik ethernet protocol type.
    432  */
    433 #define ETH_P_Dansk_Data_Elektronik             0x807B
    434 
    435 /** Merit Internodal ethernet protocol type.
    436  */
    437 #define ETH_P_Merit_Internodal          0x807C
    438 
    439 /** Vitalink Communications ethernet protocol type.
    440  */
    441 #define ETH_P_Vitalink_Communications_MIN               0x807D
    442 
    443 /** Vitalink Communications ethernet protocol type.
    444  */
    445 #define ETH_P_Vitalink_Communications_MAX               0x807F
    446 
    447 /** Vitalink TransLAN III ethernet protocol type.
    448  */
    449 #define ETH_P_Vitalink_TransLAN_III             0x8080
    450 
    451 /** Counterpoint Computers ethernet protocol type.
    452  */
    453 #define ETH_P_Counterpoint_Computers_MIN                0x8081
    454 
    455 /** Counterpoint Computers ethernet protocol type.
    456  */
    457 #define ETH_P_Counterpoint_Computers_MAX                0x8083
    458 
    459 /** Appletalk ethernet protocol type.
    460  */
    461 #define ETH_P_ATALK             0x809B
    462 
    463 /** Datability ethernet protocol type.
    464  */
    465 #define ETH_P_Datability_MIN            0x809C
    466 
    467 /** Datability ethernet protocol type.
    468  */
    469 #define ETH_P_Datability_MAX            0x809E
    470 
    471 /** Spider Systems Ltd. ethernet protocol type.
    472  */
    473 #define ETH_P_Spider_Systems_Ltd                0x809F
    474 
    475 /** Nixdorf Computers ethernet protocol type.
    476  */
    477 #define ETH_P_Nixdorf_Computers         0x80A3
    478 
    479 /** Siemens Gammasonics Inc. ethernet protocol type.
    480  */
    481 #define ETH_P_Siemens_Gammasonics_Inc_MIN               0x80A4
    482 
    483 /** Siemens Gammasonics Inc. ethernet protocol type.
    484  */
    485 #define ETH_P_Siemens_Gammasonics_Inc_MAX               0x80B3
    486 
    487 /** DCA Data Exchange Cluster ethernet protocol type.
    488  */
    489 #define ETH_P_DCA_Data_Exchange_Cluster_MIN             0x80C0
    490 
    491 /** DCA Data Exchange Cluster ethernet protocol type.
    492  */
    493 #define ETH_P_DCA_Data_Exchange_Cluster_MAX             0x80C3
    494 
    495 /** Banyan Systems ethernet protocol type.
    496  */
    497 #define ETH_P_Banyan_Systems            0x80C4
    498 
    499 /** Banyan Systems ethernet protocol type.
    500  */
    501 #define ETH_P_Banyan_Systems2           0x80C5
    502 
    503 /** Pacer Software ethernet protocol type.
    504  */
    505 #define ETH_P_Pacer_Software            0x80C6
    506 
    507 /** Applitek Corporation ethernet protocol type.
    508  */
    509 #define ETH_P_Applitek_Corporation              0x80C7
    510 
    511 /** Intergraph Corporation ethernet protocol type.
    512  */
    513 #define ETH_P_Intergraph_Corporation_MIN                0x80C8
    514 
    515 /** Intergraph Corporation ethernet protocol type.
    516  */
    517 #define ETH_P_Intergraph_Corporation_MAX                0x80CC
    518 
    519 /** Harris Corporation ethernet protocol type.
    520  */
    521 #define ETH_P_Harris_Corporation_MIN            0x80CD
    522 
    523 /** Harris Corporation ethernet protocol type.
    524  */
    525 #define ETH_P_Harris_Corporation_MAX            0x80CE
    526 
    527 /** Taylor Instrument ethernet protocol type.
    528  */
    529 #define ETH_P_Taylor_Instrument_MIN             0x80CF
    530 
    531 /** Taylor Instrument ethernet protocol type.
    532  */
    533 #define ETH_P_Taylor_Instrument_MAX             0x80D2
    534 
    535 /** Rosemount Corporation ethernet protocol type.
    536  */
    537 #define ETH_P_Rosemount_Corporation_MIN         0x80D3
    538 
    539 /** Rosemount Corporation ethernet protocol type.
    540  */
    541 #define ETH_P_Rosemount_Corporation_MAX         0x80D4
    542 
    543 /** IBM SNA Service on Ether ethernet protocol type.
    544  */
    545 #define ETH_P_IBM_SNA_Service_on_Ether          0x80D5
    546 
    547 /** Varian Associates ethernet protocol type.
    548  */
    549 #define ETH_P_Varian_Associates         0x80DD
    550 
    551 /** Integrated Solutions TRFS ethernet protocol type.
    552  */
    553 #define ETH_P_Integrated_Solutions_TRFS_MIN             0x80DE
    554 
    555 /** Integrated Solutions TRFS ethernet protocol type.
    556  */
    557 #define ETH_P_Integrated_Solutions_TRFS_MAX             0x80DF
    558 
    559 /** Allen-Bradley ethernet protocol type.
    560  */
    561 #define ETH_P_Allen_Bradley_MIN         0x80E0
    562 
    563 /** Allen-Bradley ethernet protocol type.
    564  */
    565 #define ETH_P_Allen_Bradley_MAX         0x80E3
    566 
    567 /** Datability ethernet protocol type.
    568  */
    569 #define ETH_P_Datability_MIN2           0x80E4
    570 
    571 /** Datability ethernet protocol type.
    572  */
    573 #define ETH_P_Datability_MAX2           0x80F0
    574 
    575 /** Retix ethernet protocol type.
    576  */
    577 #define ETH_P_Retix             0x80F2
    578 
    579 /** AppleTalk AARP (Kinetics) ethernet protocol type.
    580  */
    581 #define ETH_P_AARP              0x80F3
    582 
    583 /** Kinetics ethernet protocol type.
    584  */
    585 #define ETH_P_Kinetics_MIN              0x80F4
    586 
    587 /** Kinetics ethernet protocol type.
    588  */
    589 #define ETH_P_Kinetics_MAX              0x80F5
    590 
    591 /** Apollo Computer ethernet protocol type.
    592  */
    593 #define ETH_P_Apollo_Computer           0x80F7
    594 
    595 /** Wellfleet Communications ethernet protocol type.
    596  */
    597 #define ETH_P_Wellfleet_Communications          0x80FF
    598 
    599 /** IEEE 802.1Q VLAN-tagged frames (initially Wellfleet) ethernet protocol type.
    600  */
    601 #define ETH_P_8021Q             0x8100
    602 
    603 /** Wellfleet Communications ethernet protocol type.
    604  */
    605 #define ETH_P_Wellfleet_Communications_MIN              0x8101
    606 
    607 /** Wellfleet Communications ethernet protocol type.
    608  */
    609 #define ETH_P_Wellfleet_Communications_MAX              0x8103
    610 
    611 /** Symbolics Private ethernet protocol type.
    612  */
    613 #define ETH_P_Symbolics_Private_MIN             0x8107
    614 
    615 /** Symbolics Private ethernet protocol type.
    616  */
    617 #define ETH_P_Symbolics_Private_MAX             0x8109
    618 
    619 /** Hayes Microcomputers ethernet protocol type.
    620  */
    621 #define ETH_P_Hayes_Microcomputers              0x8130
    622 
    623 /** VG Laboratory Systems ethernet protocol type.
    624  */
    625 #define ETH_P_VG_Laboratory_Systems             0x8131
    626 
    627 /** Bridge Communications ethernet protocol type.
    628  */
    629 #define ETH_P_Bridge_Communications_MIN         0x8132
    630 
    631 /** Bridge Communications ethernet protocol type.
    632  */
    633 #define ETH_P_Bridge_Communications_MAX         0x8136
    634 
    635 /** Novell, Inc. ethernet protocol type.
    636  */
    637 #define ETH_P_Novell_Inc_MIN            0x8137
    638 
    639 /** Novell, Inc. ethernet protocol type.
    640  */
    641 #define ETH_P_Novell_Inc_MAX            0x8138
    642 
    643 /** KTI ethernet protocol type.
    644  */
    645 #define ETH_P_KTI_MIN           0x8139
    646 
    647 /** KTI ethernet protocol type.
    648  */
    649 #define ETH_P_KTI_MAX           0x813D
    650 
    651 /** Logicraft ethernet protocol type.
    652  */
    653 #define ETH_P_Logicraft         0x8148
    654 
    655 /** Network Computing Devices ethernet protocol type.
    656  */
    657 #define ETH_P_Network_Computing_Devices         0x8149
    658 
    659 /** Alpha Micro ethernet protocol type.
    660  */
    661 #define ETH_P_Alpha_Micro               0x814A
    662 
    663 /** SNMP ethernet protocol type.
    664  */
    665 #define ETH_P_SNMP              0x814C
    666 
    667 /** BIIN ethernet protocol type.
    668  */
    669 #define ETH_P_BIIN              0x814D
    670 
    671 /** BIIN ethernet protocol type.
    672  */
    673 #define ETH_P_BIIN2             0x814E
    674 
    675 /** Technically Elite Concept ethernet protocol type.
    676  */
    677 #define ETH_P_Technically_Elite_Concept         0x814F
    678 
    679 /** Rational Corp ethernet protocol type.
    680  */
    681 #define ETH_P_Rational_Corp             0x8150
    682 
    683 /** Qualcomm ethernet protocol type.
    684  */
    685 #define ETH_P_Qualcomm_MIN              0x8151
    686 
    687 /** Qualcomm ethernet protocol type.
    688  */
    689 #define ETH_P_Qualcomm_MAX              0x8153
    690 
    691 /** Computer Protocol Pty Ltd ethernet protocol type.
    692  */
    693 #define ETH_P_Computer_Protocol_Pty_Ltd_MIN             0x815C
    694 
    695 /** Computer Protocol Pty Ltd ethernet protocol type.
    696  */
    697 #define ETH_P_Computer_Protocol_Pty_Ltd_MAX             0x815E
    698 
    699 /** Charles River Data System ethernet protocol type.
    700  */
    701 #define ETH_P_Charles_River_Data_System_MIN             0x8164
    702 
    703 /** Charles River Data System ethernet protocol type.
    704  */
    705 #define ETH_P_Charles_River_Data_System_MAX             0x8166
    706 
    707 /** XTP ethernet protocol type.
    708  */
    709 #define ETH_P_XTP               0x817D
    710 
    711 /** SGI/Time Warner prop. ethernet protocol type.
    712  */
    713 #define ETH_P_SGITime_Warner_prop               0x817E
    714 
    715 /** HIPPI-FP encapsulation ethernet protocol type.
    716  */
    717 #define ETH_P_HIPPI_FP_encapsulation            0x8180
    718 
    719 /** STP, HIPPI-ST ethernet protocol type.
    720  */
    721 #define ETH_P_STP_HIPPI_ST              0x8181
    722 
    723 /** Reserved for HIPPI-6400 ethernet protocol type.
    724  */
    725 #define ETH_P_Reserved_for_HIPPI_6400           0x8182
    726 
    727 /** Reserved for HIPPI-6400 ethernet protocol type.
    728  */
    729 #define ETH_P_Reserved_for_HIPPI_64002          0x8183
    730 
    731 /** Silicon Graphics prop. ethernet protocol type.
    732  */
    733 #define ETH_P_Silicon_Graphics_prop_MIN         0x8184
    734 
    735 /** Silicon Graphics prop. ethernet protocol type.
    736  */
    737 #define ETH_P_Silicon_Graphics_prop_MAX         0x818C
    738 
    739 /** Motorola Computer ethernet protocol type.
    740  */
    741 #define ETH_P_Motorola_Computer         0x818D
    742 
    743 /** Qualcomm ethernet protocol type.
    744  */
    745 #define ETH_P_Qualcomm_MIN2             0x819A
    746 
    747 /** Qualcomm ethernet protocol type.
    748  */
    749 #define ETH_P_Qualcomm_MAX2             0x81A3
    750 
    751 /** ARAI Bunkichi ethernet protocol type.
    752  */
    753 #define ETH_P_ARAI_Bunkichi             0x81A4
    754 
    755 /** RAD Network Devices ethernet protocol type.
    756  */
    757 #define ETH_P_RAD_Network_Devices_MIN           0x81A5
    758 
    759 /** RAD Network Devices ethernet protocol type.
    760  */
    761 #define ETH_P_RAD_Network_Devices_MAX           0x81AE
    762 
    763 /** Xyplex ethernet protocol type.
    764  */
    765 #define ETH_P_Xyplex_MIN2               0x81B7
    766 
    767 /** Xyplex ethernet protocol type.
    768  */
    769 #define ETH_P_Xyplex_MAX2               0x81B9
    770 
    771 /** Apricot Computers ethernet protocol type.
    772  */
    773 #define ETH_P_Apricot_Computers_MIN             0x81CC
    774 
    775 /** Apricot Computers ethernet protocol type.
    776  */
    777 #define ETH_P_Apricot_Computers_MAX             0x81D5
    778 
    779 /** Artisoft ethernet protocol type.
    780  */
    781 #define ETH_P_Artisoft_MIN              0x81D6
    782 
    783 /** Artisoft ethernet protocol type.
    784  */
    785 #define ETH_P_Artisoft_MAX              0x81DD
    786 
    787 /** Polygon ethernet protocol type.
    788  */
    789 #define ETH_P_Polygon_MIN               0x81E6
    790 
    791 /** Polygon ethernet protocol type.
    792  */
    793 #define ETH_P_Polygon_MAX               0x81EF
    794 
    795 /** Comsat Labs ethernet protocol type.
    796  */
    797 #define ETH_P_Comsat_Labs_MIN           0x81F0
    798 
    799 /** Comsat Labs ethernet protocol type.
    800  */
    801 #define ETH_P_Comsat_Labs_MAX           0x81F2
    802 
    803 /** SAIC ethernet protocol type.
    804  */
    805 #define ETH_P_SAIC_MIN          0x81F3
    806 
    807 /** SAIC ethernet protocol type.
    808  */
    809 #define ETH_P_SAIC_MAX          0x81F5
    810 
    811 /** VG Analytical ethernet protocol type.
    812  */
    813 #define ETH_P_VG_Analytical_MIN         0x81F6
    814 
    815 /** VG Analytical ethernet protocol type.
    816  */
    817 #define ETH_P_VG_Analytical_MAX         0x81F8
    818 
    819 /** Quantum Software ethernet protocol type.
    820  */
    821 #define ETH_P_Quantum_Software_MIN              0x8203
    822 
    823 /** Quantum Software ethernet protocol type.
    824  */
    825 #define ETH_P_Quantum_Software_MAX              0x8205
    826 
    827 /** Ascom Banking Systems ethernet protocol type.
    828  */
    829 #define ETH_P_Ascom_Banking_Systems_MIN         0x8221
    830 
    831 /** Ascom Banking Systems ethernet protocol type.
    832  */
    833 #define ETH_P_Ascom_Banking_Systems_MAX         0x8222
    834 
    835 /** Advanced Encryption Syste ethernet protocol type.
    836  */
    837 #define ETH_P_Advanced_Encryption_Syste_MIN             0x823E
    838 
    839 /** Advanced Encryption Syste ethernet protocol type.
    840  */
    841 #define ETH_P_Advanced_Encryption_Syste_MAX             0x8240
    842 
    843 /** Athena Programming ethernet protocol type.
    844  */
    845 #define ETH_P_Athena_Programming_MIN            0x827F
    846 
    847 /** Athena Programming ethernet protocol type.
    848  */
    849 #define ETH_P_Athena_Programming_MAX            0x8282
    850 
    851 /** Charles River Data System ethernet protocol type.
    852  */
    853 #define ETH_P_Charles_River_Data_System_MIN2            0x8263
    854 
    855 /** Charles River Data System ethernet protocol type.
    856  */
    857 #define ETH_P_Charles_River_Data_System_MAX2            0x826A
    858 
    859 /** Inst Ind Info Tech ethernet protocol type.
    860  */
    861 #define ETH_P_Inst_Ind_Info_Tech_MIN            0x829A
    862 
    863 /** Inst Ind Info Tech ethernet protocol type.
    864  */
    865 #define ETH_P_Inst_Ind_Info_Tech_MAX            0x829B
    866 
    867 /** Taurus Controls ethernet protocol type.
    868  */
    869 #define ETH_P_Taurus_Controls_MIN               0x829C
    870 
    871 /** Taurus Controls ethernet protocol type.
    872  */
    873 #define ETH_P_Taurus_Controls_MAX               0x82AB
    874 
    875 /** Walker Richer &Quinn ethernet protocol type.
    876  */
    877 #define ETH_P_Walker_Richer_Quinn_MIN           0x82AC
    878 
    879 /** Walker Richer &Quinn ethernet protocol type.
    880  */
    881 #define ETH_P_Walker_Richer_Quinn_MAX           0x8693
    882 
    883 /** Idea Courier ethernet protocol type.
    884  */
    885 #define ETH_P_Idea_Courier_MIN          0x8694
    886 
    887 /** Idea Courier ethernet protocol type.
    888  */
    889 #define ETH_P_Idea_Courier_MAX          0x869D
    890 
    891 /** Computer Network Tech ethernet protocol type.
    892  */
    893 #define ETH_P_Computer_Network_Tech_MIN         0x869E
    894 
    895 /** Computer Network Tech ethernet protocol type.
    896  */
    897 #define ETH_P_Computer_Network_Tech_MAX         0x86A1
    898 
    899 /** Gateway Communications ethernet protocol type.
    900  */
    901 #define ETH_P_Gateway_Communications_MIN                0x86A3
    902 
    903 /** Gateway Communications ethernet protocol type.
    904  */
    905 #define ETH_P_Gateway_Communications_MAX                0x86AC
    906 
    907 /** SECTRA ethernet protocol type.
    908  */
    909 #define ETH_P_SECTRA            0x86DB
    910 
    911 /** Delta Controls ethernet protocol type.
    912  */
    913 #define ETH_P_Delta_Controls            0x86DE
    914 
    915 /** IPv6 ethernet protocol type.
    916  */
    917 #define ETH_P_IPV6              0x86DD
    918 
    919 /** ATOMIC ethernet protocol type.
    920  */
    921 #define ETH_P_ATOMIC            0x86DF
    922 
    923 /** Landis &Gyr Powers ethernet protocol type.
    924  */
    925 #define ETH_P_Landis_Gyr_Powers_MIN             0x86E0
    926 
    927 /** Landis &Gyr Powers ethernet protocol type.
    928  */
    929 #define ETH_P_Landis_Gyr_Powers_MAX             0x86EF
    930 
    931 /** Motorola ethernet protocol type.
    932  */
    933 #define ETH_P_Motorola_MIN              0x8700
    934 
    935 /** Motorola ethernet protocol type.
    936  */
    937 #define ETH_P_Motorola_MAX              0x8710
    938 
    939 /** TCP/IP Compression ethernet protocol type.
    940  */
    941 #define ETH_P_TCPIP_Compression         0x876B
    942 
    943 /** IP Autonomous Systems ethernet protocol type.
    944  */
    945 #define ETH_P_IP_Autonomous_Systems             0x876C
    946 
    947 /** Secure Data ethernet protocol type.
    948  */
    949 #define ETH_P_Secure_Data               0x876D
    950 
    951 /** PPP ethernet protocol type.
    952  */
    953 #define ETH_P_PPP               0x880B
    954 
    955 /** MPLS ethernet protocol type.
    956  */
    957 #define ETH_P_MPLS_UC           0x8847
    958 
    959 /** MPLS with upstream-assigned label ethernet protocol type.
    960  */
    961 #define ETH_P_MPLS_MC           0x8848
    962 
    963 /** Invisible Software ethernet protocol type.
    964  */
    965 #define ETH_P_Invisible_Software_MIN            0x8A96
    966 
    967 /** Invisible Software ethernet protocol type.
    968  */
    969 #define ETH_P_Invisible_Software_MAX            0x8A97
    970 
    971 /** PPPoE Discovery Stage ethernet protocol type.
    972  */
    973 #define ETH_P_PPP_DISC          0x8863
    974 
    975 /** PPPoE Session Stage ethernet protocol type.
    976  */
    977 #define ETH_P_PPP_SES           0x8864
    978 
    979 /** Loopback ethernet protocol type.
    980  */
    981 #define ETH_P_Loopback          0x9000
    982 
    983 /** Com(Bridge) XNS Sys Mgmt ethernet protocol type.
    984  */
    985 #define ETH_P_Com_XNS_Sys_Mgmt          0x9001
    986 
    987 /** Com(Bridge) TCP-IP Sys ethernet protocol type.
    988  */
    989 #define ETH_P_Com_TCP_IP_Sys            0x9002
    990 
    991 /** Com(Bridge) loop detect ethernet protocol type.
    992  */
    993 #define ETH_P_Com_loop_detect           0x9003
    994 
    995 /** BBN VITAL-LanBridge cache ethernet protocol type.
    996  */
    997 #define ETH_P_BBN_VITAL_LanBridge_cache         0xFF00
    998 
    999 /** ISC Bunker Ramo ethernet protocol type.
    1000  */
    1001 #define ETH_P_ISC_Bunker_Ramo_MIN               0xFF00
    1002 
    1003 /** ISC Bunker Ramo ethernet protocol type.
    1004  */
    1005 #define ETH_P_ISC_Bunker_Ramo_MAX               0xFF0F
    100660
    100761/*@}*/
  • uspace/lib/net/include/generic.h

    raab02fb refedee77  
    2727 */
    2828
    29 /** @addtogroup icmp
    30  *  @{
     29/** @addtogroup libnet
     30 * @{
    3131 */
    3232
    3333/** @file
    34  *  ICMP application interface implementation.
    35  *  @see icmp_api.h
     34 * Generic communication interfaces for networking.
    3635 */
    3736
     37#ifndef LIBNET_GENERIC_H_
     38#define LIBNET_GENERIC_H_
     39
    3840#include <async.h>
    39 
    4041#include <ipc/ipc.h>
    4142#include <ipc/services.h>
    4243
    43 #include <sys/types.h>
     44#include <net/device.h>
     45#include <adt/measured_strings.h>
     46#include <net/packet.h>
    4447
    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>
     48extern int generic_device_state_msg_remote(int, int, device_id_t, int,
     49    services_t);
     50extern int generic_device_req_remote(int, int, device_id_t, int, services_t);
     51extern int generic_get_addr_req(int, int, device_id_t, measured_string_ref *,
     52    char **);
     53extern int generic_packet_size_req_remote(int, int, device_id_t,
     54    packet_dimension_ref);
     55extern int generic_received_msg_remote(int, int, device_id_t, packet_id_t,
     56    services_t, services_t);
     57extern int generic_send_msg_remote(int, int, device_id_t, packet_id_t,
     58    services_t, services_t);
     59extern int generic_translate_req(int, int, device_id_t, services_t,
     60    measured_string_ref, size_t, measured_string_ref *, char **);
    5161
    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
    6763
    6864/** @}
  • uspace/lib/net/include/icmp_client.h

    raab02fb refedee77  
    2727 */
    2828
    29 /** @addtogroup icmp
    30  *  @{
     29/** @addtogroup libnet
     30 * @{
    3131 */
    3232
    3333/** @file
    34  *  ICMP client interface.
     34 * ICMP client interface.
    3535 */
    3636
    37 #ifndef __NET_ICMP_CLIENT_H__
    38 #define __NET_ICMP_CLIENT_H__
     37#ifndef LIBNET_ICMP_CLIENT_H_
     38#define LIBNET_ICMP_CLIENT_H_
    3939
    40 #include <icmp_codes.h>
    41 #include <packet/packet.h>
     40#include <net/icmp_codes.h>
     41#include <net/packet.h>
    4242
    43 /** Processes the received packet prefixed with an ICMP header.
    44  *  @param[in] packet The received packet.
    45  *  @param[out] type The ICMP header type.
    46  *  @param[out] code The ICMP header code.
    47  *  @param[out] pointer The ICMP header pointer.
    48  *  @param[out] mtu The ICMP header MTU.
    49  *  @returns The ICMP header length.
    50  *  @returns Zero (0) if the packet contains no data.
    51  */
    52 extern int icmp_client_process_packet(packet_t packet, icmp_type_t * type, icmp_code_t * code, icmp_param_t * pointer, icmp_param_t * mtu);
    53 
    54 /** Returns the ICMP header length.
    55  *  @param[in] packet The packet.
    56  *  @returns The ICMP header length in bytes.
    57  */
    58 extern size_t icmp_client_header_length(packet_t packet);
     43extern int icmp_client_process_packet(packet_t, icmp_type_t *, icmp_code_t *,
     44    icmp_param_t *, icmp_param_t *);
     45extern size_t icmp_client_header_length(packet_t);
    5946
    6047#endif
  • uspace/lib/net/include/icmp_header.h

    raab02fb refedee77  
    2727 */
    2828
    29 /** @addtogroup icmp
     29/** @addtogroup libnet
    3030 *  @{
    3131 */
    3232
    3333/** @file
    34  *  ICMP header definition.
    35  *  Based on the RFC~792.
     34 * ICMP header definition.
     35 * Based on the RFC 792.
    3636 */
    3737
    38 #ifndef __NET_ICMP_HEADER_H__
    39 #define __NET_ICMP_HEADER_H__
     38#ifndef LIBNET_ICMP_HEADER_H_
     39#define LIBNET_ICMP_HEADER_H_
    4040
    4141#include <sys/types.h>
    4242
    43 #include <in.h>
    44 #include <icmp_codes.h>
     43#include <net/in.h>
     44#include <net/icmp_codes.h>
    4545
    46 /** ICMP header size in bytes.
    47  */
    48 #define ICMP_HEADER_SIZE                        sizeof(icmp_header_t)
     46/** ICMP header size in bytes. */
     47#define ICMP_HEADER_SIZE        sizeof(icmp_header_t)
    4948
    5049/** Type definition of the echo specific data.
    51  *  @see icmp_echo
     50 * @see icmp_echo
    5251 */
    53 typedef struct icmp_echo        icmp_echo_t;
     52typedef struct icmp_echo icmp_echo_t;
    5453
    5554/** Type definition of the echo specific data pointer.
    56  *  @see icmp_echo
     55 * @see icmp_echo
    5756 */
    58 typedef icmp_echo_t *           icmp_echo_ref;
     57typedef icmp_echo_t *icmp_echo_ref;
    5958
    60 /** Echo specific data.
    61  */
    62 struct icmp_echo{
    63         /** Message idintifier.
    64          */
     59/** Echo specific data. */
     60struct icmp_echo {
     61        /** Message idintifier. */
    6562        icmp_param_t identifier;
    66         /** Message sequence number.
    67          */
     63        /** Message sequence number. */
    6864        icmp_param_t sequence_number;
    6965} __attribute__ ((packed));
    7066
    7167/** Type definition of the internet control message header.
    72  *  @see icmp_header
     68 * @see icmp_header
    7369 */
    74 typedef struct icmp_header      icmp_header_t;
     70typedef struct icmp_header icmp_header_t;
    7571
    7672/** Type definition of the internet control message header pointer.
    77  *  @see icmp_header
     73 * @see icmp_header
    7874 */
    79 typedef icmp_header_t *         icmp_header_ref;
     75typedef icmp_header_t *icmp_header_ref;
    8076
    81 /** Internet control message header.
    82  */
    83 struct icmp_header{
    84         /** The type of the message.
    85          */
     77/** Internet control message header. */
     78struct icmp_header {
     79        /** The type of the message. */
    8680        uint8_t type;
    87         /** The error code for the datagram reported by the ICMP message.
    88          *  The interpretation is dependent on the message type.
     81       
     82        /**
     83         * The error code for the datagram reported by the ICMP message.
     84         * The interpretation is dependent on the message type.
    8985         */
    9086        uint8_t code;
    91         /** The checksum is the 16-bit ones's complement of the one's complement sum of the ICMP message starting with the ICMP Type.
    92      *  For computing the checksum, the checksum field should be zero.
    93          *  If the checksum does not match the contents, the datagram is discarded.
     87       
     88        /**
     89         * The checksum is the 16-bit ones's complement of the one's complement
     90         * sum of the ICMP message starting with the ICMP Type. For computing
     91         * the checksum, the checksum field should be zero. If the checksum does
     92         * not match the contents, the datagram is discarded.
    9493         */
    9594        uint16_t checksum;
    96         /** Message specific data.
    97          */
    98         union{
    99                 /** Echo specific data.
    100                  */
     95
     96        /** Message specific data. */
     97        union {
     98                /** Echo specific data. */
    10199                icmp_echo_t  echo;
    102                 /** Proposed gateway value.
    103                  */
     100                /** Proposed gateway value. */
    104101                in_addr_t gateway;
    105                 /** Fragmentation needed specific data.
    106                  */
    107                 struct{
    108                         /** Reserved field.
    109                          *  Must be zero.
    110                          */
     102               
     103                /** Fragmentation needed specific data. */
     104                struct {
     105                        /** Reserved field. Must be zero. */
    111106                        icmp_param_t reserved;
    112                         /** Proposed MTU.
    113                          */
     107                        /** Proposed MTU. */
    114108                        icmp_param_t mtu;
    115109                } frag;
    116                 /** Parameter problem specific data.
    117                  */
    118                 struct{
    119                         /** Problem pointer.
    120                          */
     110               
     111                /** Parameter problem specific data. */
     112                struct {
     113                        /** Problem pointer. */
    121114                        icmp_param_t pointer;
    122                         /** Reserved field.
    123                          *  Must be zero.
    124                          */
     115                        /** Reserved field. Must be zero. */
    125116                        icmp_param_t reserved;
    126117                } param;
  • uspace/lib/net/include/icmp_interface.h

    raab02fb refedee77  
    2727 */
    2828
    29 /** @addtogroup icmp
     29/** @addtogroup libnet
    3030 *  @{
    3131 */
    3232
    33 #ifndef __NET_ICMP_INTERFACE_H__
    34 #define __NET_ICMP_INTERFACE_H__
     33#ifndef LIBNET_ICMP_INTERFACE_H_
     34#define LIBNET_ICMP_INTERFACE_H_
    3535
     36#include <net/socket_codes.h>
    3637#include <sys/types.h>
    3738
    38 #include <net_device.h>
     39#include <net/device.h>
    3940#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>
    4646
    4747/** @name ICMP module interface
    48  *  This interface is used by other modules.
     48 * This interface is used by other modules.
    4949 */
    5050/*@{*/
    5151
    52 /** Sends the Destination Unreachable error notification packet.
    53  *  Beginning of the packet is sent as the notification packet data.
    54  *  The source and the destination addresses should be set in the original packet.
    55  *  @param[in] icmp_phone The ICMP module phone used for (semi)remote calls.
    56  *  @param[in] code The error specific code.
    57  *  @param[in] mtu The error MTU value.
    58  *  @param[in] packet The original packet.
    59  *  @returns EOK on success.
    60  *  @returns EPERM if the ICMP error notifications are disabled.
    61  *  @returns ENOMEM if there is not enough memory left.
    62  */
    63 extern int icmp_destination_unreachable_msg(int icmp_phone, icmp_code_t code, icmp_param_t mtu, packet_t packet);
    64 
    65 /** Sends the Source Quench error notification packet.
    66  *  Beginning of the packet is sent as the notification packet data.
    67  *  The source and the destination addresses should be set in the original packet.
    68  *  @param[in] icmp_phone The ICMP module phone used for (semi)remote calls.
    69  *  @param[in] packet The original packet.
    70  *  @returns EOK on success.
    71  *  @returns EPERM if the ICMP error notifications are disabled.
    72  *  @returns ENOMEM if there is not enough memory left.
    73  */
    74 extern int icmp_source_quench_msg(int icmp_phone, packet_t packet);
    75 
    76 /** Sends the Time Exceeded error notification packet.
    77  *  Beginning of the packet is sent as the notification packet data.
    78  *  The source and the destination addresses should be set in the original packet.
    79  *  @param[in] icmp_phone The ICMP module phone used for (semi)remote calls.
    80  *  @param[in] code The error specific code.
    81  *  @param[in] packet The original packet.
    82  *  @returns EOK on success.
    83  *  @returns EPERM if the ICMP error notifications are disabled.
    84  *  @returns ENOMEM if there is not enough memory left.
    85  */
    86 extern int icmp_time_exceeded_msg(int icmp_phone, icmp_code_t code, packet_t packet);
    87 
    88 /** Sends the Parameter Problem error notification packet.
    89  *  Beginning of the packet is sent as the notification packet data.
    90  *  The source and the destination addresses should be set in the original packet.
    91  *  @param[in] icmp_phone The ICMP module phone used for (semi)remote calls.
    92  *  @param[in] code The error specific code.
    93  *  @param[in] pointer The problematic parameter offset.
    94  *  @param[in] packet The original packet.
    95  *  @returns EOK on success.
    96  *  @returns EPERM if the ICMP error notifications are disabled.
    97  *  @returns ENOMEM if there is not enough memory left.
    98  */
    99 extern int icmp_parameter_problem_msg(int icmp_phone, icmp_code_t code, icmp_param_t pointer, packet_t packet);
     52extern int icmp_destination_unreachable_msg(int, icmp_code_t, icmp_param_t,
     53    packet_t);
     54extern int icmp_source_quench_msg(int, packet_t);
     55extern int icmp_time_exceeded_msg(int, icmp_code_t, packet_t);
     56extern int icmp_parameter_problem_msg(int, icmp_code_t, icmp_param_t, packet_t);
    10057
    10158/*@}*/
  • uspace/lib/net/include/il_interface.h

    raab02fb refedee77  
    2727 */
    2828
    29 /** @addtogroup net_il
    30  *  @{
     29/** @addtogroup libnet
     30 * @{
    3131 */
    3232
    3333/** @file
    34  * Internetwork layer module interface for the underlying network interface layer.
    35  * This interface is always called by the remote modules.
     34 * Internetwork layer module interface for the underlying network interface
     35 * layer. This interface is always called by the remote modules.
    3636 */
    3737
    38 #ifndef __NET_IL_INTERFACE_H__
    39 #define __NET_IL_INTERFACE_H__
    40 
    41 #include <async.h>
     38#ifndef LIBNET_IL_INTERFACE_H_
     39#define LIBNET_IL_INTERFACE_H_
    4240
    4341#include <ipc/services.h>
     42#include <sys/types.h>
    4443
    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>
     44#include <net/device.h>
     45#include <net/packet.h>
    5046
    5147/** @name Internetwork layer module interface
     
    5450/*@{*/
    5551
    56 /** Notify the internetwork layer modules about the device state change.
    57  *
    58  * @param[in] il_phone  The internetwork layer module phone used for
    59  *                      (semi)remote calls.
    60  * @param[in] device_id The device identifier.
    61  * @param[in] state     The new device state.
    62  * @param[in] target    The target internetwork module service to be
    63  *                      delivered to.
    64  *
    65  * @return EOK on success.
    66  *
    67  */
    68 static inline int il_device_state_msg(int il_phone, device_id_t device_id,
    69     device_state_t state, services_t target)
    70 {
    71         return generic_device_state_msg_remote(il_phone, NET_IL_DEVICE_STATE,
    72             device_id, state, target);
    73 }
    74 
    75 /** Notify the internetwork layer modules about the received packet/s.
    76  *
    77  * @param[in] il_phone  The internetwork layer module phone used for
    78  *                      (semi)remote calls.
    79  * @param[in] device_id The device identifier.
    80  * @param[in] packet    The received packet or the received packet queue.
    81  * @param[in] target    The target internetwork module service to be
    82  *                      delivered to.
    83  *
    84  * @return EOK on success.
    85  *
    86  */
    87 inline static int il_received_msg(int il_phone, device_id_t device_id,
    88     packet_t packet, services_t target)
    89 {
    90         return generic_received_msg_remote(il_phone, NET_IL_RECEIVED, device_id,
    91             packet_get_id(packet), target, 0);
    92 }
    93 
    94 /** Notify the internetwork layer modules about the mtu change.
    95  *
    96  * @param[in] il_phone  The internetwork layer module phone used for
    97  *                      (semi)remote calls.
    98  * @param[in] device_id The device identifier.
    99  * @param[in] mtu       The new mtu value.
    100  * @param[in] target    The target internetwork module service to be
    101  *                      delivered to.
    102  *
    103  * @return EOK on success.
    104  *
    105  */
    106 inline static int il_mtu_changed_msg(int il_phone, device_id_t device_id,
    107     size_t mtu, services_t target)
    108 {
    109         return generic_device_state_msg_remote(il_phone, NET_IL_MTU_CHANGED,
    110             device_id, (int) mtu, target);
    111 }
     52extern int il_device_state_msg(int, device_id_t, device_state_t, services_t);
     53extern int il_received_msg(int, device_id_t, packet_t, services_t);
     54extern int il_mtu_changed_msg(int, device_id_t, size_t, services_t);
    11255
    11356/*@}*/
  • uspace/lib/net/include/il_local.h

    raab02fb refedee77  
    2727 */
    2828
    29 /** @addtogroup il_local
    30  *  @{
     29/** @addtogroup libnet
     30 * @{
    3131 */
    3232
    33 #ifndef __IL_LOCAL_H__
    34 #define __IL_LOCAL_H__
     33#ifndef LIBNET_IL_LOCAL_H_
     34#define LIBNET_IL_LOCAL_H_
    3535
    3636#include <ipc/ipc.h>
    3737#include <async.h>
    3838
     39/** Processes the Internet layer module message.
     40 *
     41 * @param[in]           callid The message identifier.
     42 * @param[in]           call The message parameters.
     43 * @param[out]          answer The message answer parameters.
     44 * @param[out]          answer_count The last parameter for the actual answer in
     45 *                      the answer parameter.
     46 * @returns             EOK on success.
     47 * @returns             Other error codes as defined for the arp_message()
     48 *                      function.
     49 */
    3950extern int il_module_message_standalone(ipc_callid_t callid, ipc_call_t *call,
    4051    ipc_call_t *answer, int *answer_count);
     52
     53/** Starts the Internet layer module.
     54 *
     55 * Initializes the client connection servicing function, initializes the module,
     56 * registers the module service and starts the async manager, processing IPC
     57 * messages in an infinite loop.
     58 *
     59 * @param[in] client_connection The client connection processing function. The
     60 *                      module skeleton propagates its own one.
     61 * @returns             EOK on successful module termination.
     62 * @returns             Other error codes as defined for the arp_initialize()
     63 *                      function.
     64 * @returns             Other error codes as defined for the REGISTER_ME() macro
     65 *                      function.
     66 */
    4167extern int il_module_start_standalone(async_client_conn_t client_connection);
    4268
  • uspace/lib/net/include/ip_client.h

    raab02fb refedee77  
    2727 */
    2828
    29 /** @addtogroup ip
    30  *  @{
     29/** @addtogroup libnet
     30 * @{
    3131 */
    3232
    3333/** @file
    34  *  IP client interface.
     34 * IP client interface.
    3535 */
    3636
    37 #ifndef __NET_IP_CLIENT_H__
    38 #define __NET_IP_CLIENT_H__
     37#ifndef LIBNET_IP_CLIENT_H_
     38#define LIBNET_IP_CLIENT_H_
    3939
     40#include <net/socket_codes.h>
    4041#include <sys/types.h>
    4142
    42 #include <packet/packet.h>
    43 #include <ip_codes.h>
     43#include <net/packet.h>
     44#include <net/ip_codes.h>
    4445#include <ip_interface.h>
    45 #include <socket_codes.h>
    4646
    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);
     47extern int ip_client_prepare_packet(packet_t, ip_protocol_t, ip_ttl_t, ip_tos_t,
     48    int, size_t);
     49extern int ip_client_process_packet(packet_t, ip_protocol_t *, ip_ttl_t *,
     50    ip_tos_t *, int *, size_t *);
     51extern size_t ip_client_header_length(packet_t);
     52extern int ip_client_set_pseudo_header_data_length(void *, size_t, size_t);
     53extern int ip_client_get_pseudo_header(ip_protocol_t, struct sockaddr *,
     54    socklen_t, struct sockaddr *, socklen_t, size_t, void **, size_t *);
    11055
    11156// TODO ipopt manipulation
  • uspace/lib/net/include/ip_header.h

    raab02fb refedee77  
    2727 */
    2828
    29 /** @addtogroup ip
    30  *  @{
     29/** @addtogroup libnet
     30 * @{
    3131 */
    3232
    3333/** @file
    34  *  IP header and options definitions.
    35  *  Based on the RFC~791.
    36  */
    37 
    38 #ifndef __NET_IP_HEADER_H__
    39 #define __NET_IP_HEADER_H__
     34 * IP header and options definitions.
     35 * Based on the RFC 791.
     36 */
     37
     38#ifndef LIBNET_IP_HEADER_H_
     39#define LIBNET_IP_HEADER_H_
    4040
    4141#include <byteorder.h>
     
    4343
    4444/** Returns the fragment offest high bits.
    45  *  @param[in] length The prefixed data total length.
    46  */
    47 #define IP_COMPUTE_FRAGMENT_OFFSET_HIGH(length) ((((length) / 8u) &0x1F00) >> 8)
     45 * @param[in] length The prefixed data total length.
     46 */
     47#define IP_COMPUTE_FRAGMENT_OFFSET_HIGH(length) \
     48        ((((length) / 8U) & 0x1f00) >> 8)
    4849
    4950/** Returns the fragment offest low bits.
    50  *  @param[in] length The prefixed data total length.
    51  */
    52 #define IP_COMPUTE_FRAGMENT_OFFSET_LOW(length) (((length) / 8u) &0xFF)
     51 * @param[in] length The prefixed data total length.
     52 */
     53#define IP_COMPUTE_FRAGMENT_OFFSET_LOW(length) \
     54        (((length) / 8U) & 0xff)
    5355
    5456/** Returns the IP header length.
    55  *  @param[in] length The IP header length in bytes.
    56  */
    57 #define IP_COMPUTE_HEADER_LENGTH(length)                ((uint8_t) ((length) / 4u))
     57 * @param[in] length The IP header length in bytes.
     58 */
     59#define IP_COMPUTE_HEADER_LENGTH(length) \
     60        ((uint8_t) ((length) / 4U))
    5861
    5962/** Returns the fragment offest.
    60  *  @param[in] header The IP packet header.
    61  */
    62 #define IP_FRAGMENT_OFFSET(header) ((((header)->fragment_offset_high << 8) + (header)->fragment_offset_low) * 8u)
     63 * @param[in] header The IP packet header.
     64 */
     65#define IP_FRAGMENT_OFFSET(header) \
     66        ((((header)->fragment_offset_high << 8) + \
     67            (header)->fragment_offset_low) * 8U)
    6368
    6469/** Returns the IP packet header checksum.
    6570 *  @param[in] header The IP packet header.
    6671 */
    67 #define IP_HEADER_CHECKSUM(header)      (htons(ip_checksum((uint8_t *)(header), IP_HEADER_LENGTH(header))))
     72#define IP_HEADER_CHECKSUM(header) \
     73        (htons(ip_checksum((uint8_t *) (header), IP_HEADER_LENGTH(header))))
    6874
    6975/** Returns the actual IP packet data length.
    70  *  @param[in] header The IP packet header.
    71  */
    72 #define IP_HEADER_DATA_LENGTH(header)   (IP_TOTAL_LENGTH(header) - IP_HEADER_LENGTH(header))
     76 * @param[in] header The IP packet header.
     77 */
     78#define IP_HEADER_DATA_LENGTH(header) \
     79        (IP_TOTAL_LENGTH(header) - IP_HEADER_LENGTH(header))
    7380
    7481/** Returns the actual IP header length in bytes.
    75  *  @param[in] header The IP packet header.
    76  */
    77 #define IP_HEADER_LENGTH(header)                ((header)->header_length * 4u)
     82 * @param[in] header The IP packet header.
     83 */
     84#define IP_HEADER_LENGTH(header) \
     85        ((header)->header_length * 4U)
    7886
    7987/** Returns the actual IP packet total length.
    80  *  @param[in] header The IP packet header.
    81  */
    82 #define IP_TOTAL_LENGTH(header)         ntohs((header)->total_length)
    83 
    84 /** @name IP flags definitions
    85  */
     88 * @param[in] header The IP packet header.
     89 */
     90#define IP_TOTAL_LENGTH(header) \
     91        ntohs((header)->total_length)
     92
     93/** @name IP flags definitions */
    8694/*@{*/
    8795
    88 /** Fragment flag field shift.
    89  */
    90 #define IPFLAG_FRAGMENT_SHIFT           1
    91 
    92 /** Fragmented flag field shift.
    93  */
    94 #define IPFLAG_FRAGMENTED_SHIFT         0
     96/** Fragment flag field shift. */
     97#define IPFLAG_FRAGMENT_SHIFT   1
     98
     99/** Fragmented flag field shift. */
     100#define IPFLAG_FRAGMENTED_SHIFT 0
    95101
    96102/** Don't fragment flag value.
    97  *  Permits the packet fragmentation.
    98  */
    99 #define IPFLAG_DONT_FRAGMENT            (0x1 << IPFLAG_FRAGMENT_SHIFT)
     103 * Permits the packet fragmentation.
     104 */
     105#define IPFLAG_DONT_FRAGMENT    (0x1 << IPFLAG_FRAGMENT_SHIFT)
    100106
    101107/** Last fragment flag value.
    102  *  Indicates the last packet fragment.
    103  */
    104 #define IPFLAG_LAST_FRAGMENT            (0x0 << IPFLAG_FRAGMENTED_SHIFT)
     108 * Indicates the last packet fragment.
     109 */
     110#define IPFLAG_LAST_FRAGMENT    (0x0 << IPFLAG_FRAGMENTED_SHIFT)
    105111
    106112/** May fragment flag value.
    107  *  Allows the packet fragmentation.
    108  */
    109 #define IPFLAG_MAY_FRAGMENT                     (0x0 << IPFLAG_FRAGMENT_SHIFT)
     113 * Allows the packet fragmentation.
     114 */
     115#define IPFLAG_MAY_FRAGMENT     (0x0 << IPFLAG_FRAGMENT_SHIFT)
    110116
    111117/** More fragments flag value.
    112  *  Indicates that more packet fragments follow.
    113  */
    114 #define IPFLAG_MORE_FRAGMENTS           (0x1 << IPFLAG_FRAGMENTED_SHIFT)
     118 * Indicates that more packet fragments follow.
     119 */
     120#define IPFLAG_MORE_FRAGMENTS   (0x1 << IPFLAG_FRAGMENTED_SHIFT)
    115121
    116122/*@}*/
    117123
    118124/** Type definition of the internet header.
    119  *  @see ip_header
    120  */
    121 typedef struct ip_header        ip_header_t;
     125 * @see ip_header
     126 */
     127typedef struct ip_header ip_header_t;
    122128
    123129/** Type definition of the internet header pointer.
    124  *  @see ip_header
    125  */
    126 typedef ip_header_t *           ip_header_ref;
     130 * @see ip_header
     131 */
     132typedef ip_header_t *ip_header_ref;
    127133
    128134/** Type definition of the internet option header.
    129  *  @see ip_header
    130  */
    131 typedef struct ip_option        ip_option_t;
     135 * @see ip_header
     136 */
     137typedef struct ip_option ip_option_t;
    132138
    133139/** Type definition of the internet option header pointer.
    134  *  @see ip_header
    135  */
    136 typedef ip_option_t *           ip_option_ref;
     140 * @see ip_header
     141 */
     142typedef ip_option_t *ip_option_ref;
    137143
    138144/** Type definition of the internet version 4 pseudo header.
    139  *  @see ipv4_pseudo_header
    140  */
    141 typedef struct ipv4_pseudo_header       ipv4_pseudo_header_t;
     145 * @see ipv4_pseudo_header
     146 */
     147typedef struct ipv4_pseudo_header ipv4_pseudo_header_t;
    142148
    143149/** Type definition of the internet version 4 pseudo header pointer.
    144  *  @see ipv4_pseudo_header
    145  */
    146 typedef ipv4_pseudo_header_t *          ipv4_pseudo_header_ref;
     150 * @see ipv4_pseudo_header
     151 */
     152typedef ipv4_pseudo_header_t *ipv4_pseudo_header_ref;
    147153
    148154/** Internet header.
    149  *  The variable options should be included after the header itself and indicated by the increased header length value.
    150  */
    151 struct ip_header{
     155 *
     156 * The variable options should be included after the header itself and
     157 * indicated by the increased header length value.
     158 */
     159struct ip_header {
    152160#ifdef ARCH_IS_BIG_ENDIAN
    153         /** The Version field indicates the format of the internet header.
    154          */
    155         uint8_t version:4;
    156         /** Internet Header Length is the length of the internet header in 32~bit words, and thus points to the beginning of the data.
    157          *  Note that the minimum value for a~correct header is~5.
    158          */
    159         uint8_t header_length:4;
     161        uint8_t version : 4;
     162        uint8_t header_length : 4;
    160163#else
    161         /** Internet Header Length is the length of the internet header in 32~bit words, and thus points to the beginning of the data.
    162          *  Note that the minimum value for a~correct header is~5.
    163          */
    164         uint8_t header_length:4;
    165         /** The Version field indicates the format of the internet header.
    166          */
    167         uint8_t version:4;
    168 #endif
    169         /** The Type of Service provides an indication of the abstract parameters of the quality of service desired.
    170          *  These parameters are to be used to guide the selection of the actual service parameters when transmitting a~datagram through a~particular network.
    171          *  Several networks offer service precedence, which somehow treats high precedence traffic as more important than other traffic (generally by accepting only traffic above a~certain precedence at time of high load).
    172          *  The major choice is a~three way tradeoff between low-delay, high-reliability, and high-throughput.
    173          */
     164        uint8_t header_length : 4;
     165        uint8_t version : 4;
     166#endif
     167
    174168        uint8_t tos;
    175         /** Total Length is the length of the datagram, measured in octets, including internet header and data.
    176          *  This field allows the length of a~datagram to be up to 65,535~octets.
    177          */
    178169        uint16_t total_length;
    179         /** An identifying value assigned by the sender to aid in assembling the fragments of a~datagram.
    180          */
    181170        uint16_t identification;
     171
    182172#ifdef ARCH_IS_BIG_ENDIAN
    183         /** Various control flags.
    184          */
    185         uint8_t flags:3;
    186         /** This field indicates where in the datagram this fragment belongs.
    187          *  High bits.
    188          */
    189         uint8_t fragment_offset_high:5;
     173        uint8_t flags : 3;
     174        uint8_t fragment_offset_high : 5;
    190175#else
    191         /** This field indicates where in the datagram this fragment belongs.
    192          *  High bits.
    193          */
    194         uint8_t fragment_offset_high:5;
    195         /** Various control flags.
    196          */
    197         uint8_t flags:3;
    198 #endif
    199         /** This field indicates where in the datagram this fragment belongs.
    200          *  Low bits.
    201          */
     176        uint8_t fragment_offset_high : 5;
     177        uint8_t flags : 3;
     178#endif
     179
    202180        uint8_t fragment_offset_low;
    203         /** This field indicates the maximum time the datagram is allowed to remain in the internet system.
    204          *  If this field contains the value zero, then the datagram must be destroyed.
    205          *  This field is modified in internet header processing.
    206          *  The time is measured in units of seconds, but since every module that processes a~datagram must decrease the TTL by at least one even if it process the datagram in less than a~second, the TTL must be thought of only as an upper bound on the time a~datagram may exist.
    207          *  The intention is to cause undeliverable datagrams to be discarded, and to bound the maximum datagram lifetime.
    208          */
    209181        uint8_t ttl;
    210         /** This field indicates the next level protocol used in the data portion of the internet datagram.
    211          */
    212182        uint8_t protocol;
    213         /** A checksum of the header only.
    214          *  Since some header fields change (e.g., time to live), this is recomputed and verified at each point that the internet header is processed.
    215          *  The checksum algorithm is: The checksum field is the 16~bit one's complement of the one's complement sum of all 16~bit words in the header.
    216          *  For purposes of computing the checksum, the value of the checksum field is zero.
    217          */
    218183        uint16_t header_checksum;
    219         /** The source address.
    220          */
    221184        uint32_t source_address;
    222         /** The destination address.
    223          */
    224185        uint32_t destination_address;
    225186} __attribute__ ((packed));
    226187
    227188/** Internet option header.
    228  *  Only type field is always valid.
    229  *  Other fields' validity depends on the option type.
    230  */
    231 struct ip_option{
    232         /** A single octet of option-type.
    233          */
     189 *
     190 * Only type field is always valid.
     191 * Other fields' validity depends on the option type.
     192 */
     193struct ip_option {
    234194        uint8_t type;
    235         /** An option length octet.
    236          */
    237195        uint8_t length;
    238         /** A~pointer.
    239          */
    240196        uint8_t pointer;
     197
    241198#ifdef ARCH_IS_BIG_ENDIAN
    242         /** The number of IP modules that cannot register timestamps due to lack of space.
    243          */
    244         uint8_t overflow:4;
    245         /** Various internet timestamp control flags.
    246          */
    247         uint8_t flags:4;
     199        uint8_t overflow : 4;
     200        uint8_t flags : 4;
    248201#else
    249         /** Various internet timestamp control flags.
    250          */
    251         uint8_t flags:4;
    252         /** The number of IP modules that cannot register timestamps due to lack of space.
    253          */
    254         uint8_t overflow:4;
     202        uint8_t flags : 4;
     203        uint8_t overflow : 4;
    255204#endif
    256205} __attribute__ ((packed));
    257206
    258 /** Internet version 4 pseudo header.
    259  */
    260 struct ipv4_pseudo_header{
    261         /** The source address.
    262          */
     207/** Internet version 4 pseudo header. */
     208struct ipv4_pseudo_header {
    263209        uint32_t source_address;
    264         /** The destination address.
    265          */
    266210        uint32_t destination_address;
    267         /** Reserved byte.
    268          *  Must be zero.
    269          */
    270211        uint8_t reserved;
    271         /** This field indicates the next level protocol used in the data portion of the internet datagram.
    272          */
    273212        uint8_t protocol;
    274         /** Data length is the length of the datagram, measured in octets.
    275          */
    276213        uint16_t data_length;
    277214} __attribute__ ((packed));
  • uspace/lib/net/include/ip_interface.h

    raab02fb refedee77  
    2727 */
    2828
    29 /** @addtogroup ip
    30  *  @{
     29/** @addtogroup libnet
     30 * @{
    3131 */
    3232
    33 #ifndef __NET_IP_INTERFACE_H__
    34 #define __NET_IP_INTERFACE_H__
     33#ifndef LIBNET_IP_INTERFACE_H_
     34#define LIBNET_IP_INTERFACE_H_
    3535
     36#include <net/socket_codes.h>
    3637#include <async.h>
    3738#include <ipc/services.h>
    3839
    39 #include <net_device.h>
    40 #include <packet/packet.h>
     40#include <net/device.h>
     41#include <net/packet.h>
    4142
    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>
    5945
    6046#include <ip_remote.h>
     
    6854#define ip_get_route_req       ip_get_route_req_remote
    6955
    70 #endif
    71 
    7256/** @name IP module interface
    73  *  This interface is used by other modules.
     57 * This interface is used by other modules.
    7458 */
    7559/*@{*/
    7660
    7761/** The transport layer notification function type definition.
    78  *  Notifies the transport layer modules about the received packet/s.
    79  *  @param[in] device_id The device identifier.
    80  *  @param[in] packet The received packet or the received packet queue.
    81  *  @param[in] receiver The receiving module service.
    82  *  @param[in] error The packet error reporting service. Prefixes the received packet.
    83  *  @returns EOK on success.
     62 *
     63 * Notifies the transport layer modules about the received packet/s.
     64 *
     65 * @param[in] device_id The device identifier.
     66 * @param[in] packet    The received packet or the received packet queue.
     67 * @param[in] receiver  The receiving module service.
     68 * @param[in] error     The packet error reporting service. Prefixes the
     69 *                      received packet.
     70 * @returns             EOK on success.
    8471 */
    85 typedef int     (*tl_received_msg_t)(device_id_t device_id, packet_t packet, services_t receiver, services_t error);
     72typedef int (*tl_received_msg_t)(device_id_t device_id, packet_t packet,
     73    services_t receiver, services_t error);
    8674
    87 /** Creates bidirectional connection with the ip module service and registers the message receiver.
    88  *  @param[in] service The IP module service.
    89  *  @param[in] protocol The transport layer protocol.
    90  *  @param[in] me The requesting module service.
    91  *  @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  *  @returns The phone of the needed service.
    94  *  @returns EOK on success.
    95  *  @returns Other error codes as defined for the bind_service() function.
    96  */
    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);
    98 
    99 /** Connects to the IP module.
    100  *  @param service The IP module service. Ignored parameter.
    101  *  @returns The IP module phone on success.
    102  *  @returns 0 if called by the bundle module.
    103  */
    104 extern int ip_connect_module(services_t service);
     75extern int ip_bind_service(services_t, int, services_t, async_client_conn_t);
     76extern int ip_connect_module(services_t);
    10577
    10678/*@}*/
  • uspace/lib/net/include/ip_remote.h

    raab02fb refedee77  
    2727 */
    2828
    29 /** @addtogroup ip
     29/** @addtogroup libnet
    3030 * @{
    3131 */
    3232
    33 #ifndef __NET_IP_REMOTE_H__
    34 #define __NET_IP_REMOTE_H__
     33#ifndef LIBNET_IP_REMOTE_H_
     34#define LIBNET_IP_REMOTE_H_
    3535
    36 #include <async.h>
    3736#include <ipc/services.h>
    3837
    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>
    4344
    4445extern int ip_set_gateway_req_remote(int, device_id_t, in_addr_t);
  • uspace/lib/net/include/net_checksum.h

    raab02fb refedee77  
    2727 */
    2828
    29 /** @addtogroup net
    30  *  @{
     29/** @addtogroup libnet
     30 * @{
    3131 */
    3232
    3333/** @file
    34  *  General CRC and checksum computation.
     34 * General CRC and checksum computation.
    3535 */
    3636
    37 #ifndef __NET_CHECKSUM_H__
    38 #define __NET_CHECKSUM_H__
     37#ifndef LIBNET_CHECKSUM_H_
     38#define LIBNET_CHECKSUM_H_
    3939
    4040#include <byteorder.h>
    41 
    4241#include <sys/types.h>
    4342
    4443/** IP checksum value for computed zero checksum.
    45  *  Zero is returned as 0xFFFF (not flipped)
     44 * Zero is returned as 0xFFFF (not flipped)
    4645 */
    47 #define IP_CHECKSUM_ZERO                        0xFFFFu
     46#define IP_CHECKSUM_ZERO        0xffffU
    4847
    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  */
    5548#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)
    5751#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)
    5954#endif
    6055
    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);
     56extern uint32_t compute_crc32_le(uint32_t, uint8_t *, size_t);
     57extern uint32_t compute_crc32_be(uint32_t, uint8_t *, size_t);
     58extern uint32_t compute_checksum(uint32_t, uint8_t *, size_t);
     59extern uint16_t compact_checksum(uint32_t);
     60extern uint16_t flip_checksum(uint16_t);
     61extern uint16_t ip_checksum(uint8_t *, size_t);
    10962
    11063#endif
  • uspace/lib/net/include/net_hardware.h

    raab02fb refedee77  
    2727 */
    2828
    29 /** @addtogroup net_nil
    30  *  @{
     29/** @addtogroup libnet
     30 * @{
    3131 */
    3232
    3333/** @file
    34  *  Hardware types according to the on-line IANA - Address Resolution Protocol (ARP) Parameters - <http://www.iana.org/assignments/arp-parameters/arp-parameters.xml>, cited January 14 2009.
     34 * Hardware types according to the on-line IANA - Address Resolution Protocol
     35 * (ARP) Parameters
     36 * http://www.iana.org/assignments/arp-parameters/arp-parameters.xml,
     37 * cited January 14 2009.
    3538 */
    3639
    37 #ifndef __NET_HW_TYPES_H__
    38 #define __NET_HW_TYPES_H__
     40#ifndef LIBNET_NET_HARDWARE_H_
     41#define LIBNET_NET_HARDWARE_H_
    3942
    4043#include <sys/types.h>
    4144
    42 /** Network interface layer type type definition.
    43  */
    44 typedef uint8_t hw_type_t;
     45/** Network interface layer type type definition. */
     46typedef uint8_t hw_type_t;
    4547
    46 /** @name Network interface layer types definitions
    47  */
     48/** @name Network interface layer types definitions */
    4849/*@{*/
    4950
    50 /** Ethernet (10Mb) hardware type.
    51  */
     51/** Ethernet (10Mb) hardware type. */
    5252#define HW_ETHER                1
    53 
    54 /** Experimental Ethernet (3Mb) hardware type.
    55  */
    56 #define HW_EETHER               2
    57 
    58 /** Amateur Radio AX.25 hardware type.
    59  */
    60 #define HW_AX25         3
    61 
    62 /** Proteon ProNET Token Ring hardware type.
    63  */
    64 #define HW_PRONET               4
    65 
    66 /** Chaos hardware type.
    67  */
    68 #define HW_CHAOS                5
    69 
    70 /** IEEE 802 Networks hardware type.
    71  */
    72 #define HW_IEEE802              6
    73 
    74 /** ARCNET hardware type.
    75  */
    76 #define HW_ARCNET               7
    77 
    78 /** Hyperchannel hardware type.
    79  */
    80 #define HW_Hyperchannel         8
    81 
    82 /** Lanstar hardware type.
    83  */
    84 #define HW_Lanstar              9
    85 
    86 /** Autonet Short Address hardware type.
    87  */
    88 #define HW_ASA          10
    89 
    90 /** LocalTalk hardware type.
    91  */
    92 #define HW_LocalTalk            11
    93 
    94 /** LocalNet (IBM PCNet or SYTEK LocalNET) hardware type.
    95  */
    96 #define HW_LocalNet             12
    97 
    98 /** Ultra link hardware type.
    99  */
    100 #define HW_Ultra_link           13
    101 
    102 /** SMDS hardware type.
    103  */
    104 #define HW_SMDS         14
    105 
    106 /** Frame Relay DLCI hardware type.
    107  */
    108 #define HW_DLCI         15
    109 
    110 /** Asynchronous Transmission Mode (ATM) hardware type.
    111  */
    112 #define HW_ATM          16
    113 
    114 /** HDLC hardware type.
    115  */
    116 #define HW_HDLC         17
    117 
    118 /** Fibre Channel hardware type.
    119  */
    120 #define HW_Fibre_Channel                18
    121 
    122 /** Asynchronous Transmission Mode (ATM) hardware type.
    123  */
    124 #define HW_ATM2         19
    125 
    126 /** Serial Line hardware type.
    127  */
    128 #define HW_Serial_Line          20
    129 
    130 /** Asynchronous Transmission Mode (ATM) hardware type.
    131  */
    132 #define HW_ATM3         21
    133 
    134 /** MIL-STD-188-220 hardware type.
    135  */
    136 #define HW_MIL_STD_188_220              22
    137 
    138 /** Metricom hardware type.
    139  */
    140 #define HW_METRICOM             23
    141 
    142 /** IEEE 1394.1995 hardware type.
    143  */
    144 #define HW_IEEE1394             24
    145 
    146 /** MAPOS hardware type.
    147  */
    148 #define HW_MAPOS                25
    149 
    150 /** Twinaxial hardware type.
    151  */
    152 #define HW_Twinaxial            26
    153 
    154 /** EUI-64 hardware type.
    155  */
    156 #define HW_EUI64                27
    157 
    158 /** HIPARP hardware type.
    159  */
    160 #define HW_HIPARP               28
    161 
    162 /** IP and ARP over ISO 7816-3 hardware type.
    163  */
    164 #define HW_ISO_7816_3           29
    165 
    166 /** ARPSec hardware type.
    167  */
    168 #define HW_ARPSec               30
    169 
    170 /** IPsec tunnel hardware type.
    171  */
    172 #define HW_IPsec_tunnel         31
    173 
    174 /** InfiniBand (TM) hardware type.
    175  */
    176 #define HW_INFINIBAND           32
    177 
    178 /** TIA-102 Project 25 Common Air Interface (CAI) hardware type.
    179  */
    180 #define HW_CAI          33
    181 
    182 /** Wiegand Interface hardware type.
    183  */
    184 #define HW_Wiegand              34
    185 
    186 /** Pure IP hardware type.
    187  */
    188 #define HW_Pure_IP              35
    18953
    19054/*@}*/
     
    19458/** @}
    19559 */
     60
  • uspace/lib/net/include/net_interface.h

    raab02fb refedee77  
    2727 */
    2828
    29 /** @addtogroup net
     29/** @addtogroup libnet
    3030 *  @{
    3131 */
    3232
    33 #ifndef __NET_NET_INTERFACE_H__
    34 #define __NET_NET_INTERFACE_H__
     33#ifndef LIBNET_NET_INTERFACE_H_
     34#define LIBNET_NET_INTERFACE_H_
    3535
    3636#include <ipc/services.h>
    3737
    38 #include <net_device.h>
     38#include <net/device.h>
    3939#include <adt/measured_strings.h>
    4040
    4141/** @name Networking module interface
    42  *  This interface is used by other modules.
     42 * This interface is used by other modules.
    4343 */
    4444/*@{*/
    4545
    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);
     46extern int net_get_device_conf_req(int, device_id_t, measured_string_ref *,
     47    size_t, char **);
     48extern int net_get_conf_req(int, measured_string_ref *, size_t, char **);
     49extern void net_free_settings(measured_string_ref, char *);
     50extern int net_connect_module(void);
    9051
    9152/*@}*/
  • uspace/lib/net/include/netif_interface.h

    raab02fb refedee77  
    2727 */
    2828
    29 /** @addtogroup netif
     29/** @addtogroup libnet
    3030 * @{
    3131 */
    3232
    33 #ifndef __NET_NETIF_INTERFACE_H__
    34 #define __NET_NETIF_INTERFACE_H__
    35 
    36 #ifdef CONFIG_NETIF_NIL_BUNDLE
    37 
    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_message
    43 #define netif_module_start      netif_nil_module_start
    44 #define netif_get_addr_req      netif_get_addr_req_local
    45 #define netif_probe_req         netif_probe_req_local
    46 #define netif_send_msg          netif_send_msg_local
    47 #define netif_start_req         netif_start_req_local
    48 #define netif_stop_req          netif_stop_req_local
    49 #define netif_stats_req         netif_stats_req_local
    50 #define netif_bind_service      netif_bind_service_local
    51 
    52 #else /* CONFIG_NETIF_NIL_BUNDLE */
     33#ifndef LIBNET_NETIF_INTERFACE_H_
     34#define LIBNET_NETIF_INTERFACE_H_
    5335
    5436#include <netif_remote.h>
    55 #include <packet/packet_client.h>
     37#include <packet_client.h>
    5638
    5739#define netif_module_message    netif_module_message_standalone
     
    6547#define netif_bind_service      netif_bind_service_remote
    6648
    67 #endif /* CONFIG_NETIF_NIL_BUNDLE */
    68 
    6949#endif
    7050
  • uspace/lib/net/include/netif_local.h

    raab02fb refedee77  
    2727 */
    2828
    29 /** @addtogroup netif
     29/** @addtogroup libnet
    3030 * @{
    3131 */
     
    3434 * Network interface module skeleton.
    3535 * 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  */
    38 
    39 #ifndef __NET_NETIF_LOCAL_H__
    40 #define __NET_NETIF_LOCAL_H__
     36 */
     37
     38#ifndef NET_NETIF_LOCAL_H_
     39#define NET_NETIF_LOCAL_H_
    4140
    4241#include <async.h>
     
    4645
    4746#include <adt/measured_strings.h>
    48 #include <net_err.h>
    49 #include <net_device.h>
    50 #include <packet/packet.h>
    51 
    52 /** Network interface device specific data.
    53  *
    54  */
     47#include <net/device.h>
     48#include <net/packet.h>
     49
     50/** Network interface device specific data. */
    5551typedef struct {
    5652        device_id_t device_id;  /**< Device identifier. */
     
    6864DEVICE_MAP_DECLARE(netif_device_map, netif_device_t);
    6965
    70 /** Network interface module skeleton global data.
    71  *
    72  */
     66/** Network interface module skeleton global data. */
    7367typedef struct {
    7468        int net_phone;                  /**< Networking module phone. */
     
    8276 *
    8377 * This function has to be implemented in user code.
    84  *
    8578 */
    8679extern int netif_initialize(void);
     
    9083 * This has to be implemented in user code.
    9184 *
    92  * @param[in] device_id The device identifier.
    93  * @param[in] irq       The device interrupt number.
    94  * @param[in] io        The device input/output address.
    95  *
    96  * @return EOK on success.
    97  * @return Other error codes as defined for the find_device() function.
    98  * @return Other error codes as defined for the specific module message
    99  *         implementation.
    100  *
     85 * @param[in] device_id The device identifier.
     86 * @param[in] irq       The device interrupt number.
     87 * @param[in] io        The device input/output address.
     88 *
     89 * @return              EOK on success.
     90 * @return              Other error codes as defined for the find_device()
     91 *                      function.
     92 * @return              Other error codes as defined for the specific module
     93 *                      message implementation.
    10194 */
    10295extern int netif_probe_message(device_id_t device_id, int irq, uintptr_t io);
     
    10699 * This has to be implemented in user code.
    107100 *
    108  * @param[in] device_id The device identifier.
    109  * @param[in] packet    The packet queue.
    110  * @param[in] sender    The sending module service.
    111  *
    112  * @return EOK on success.
    113  * @return EFORWARD if the device is not active (in the NETIF_ACTIVE state).
    114  * @return Other error codes as defined for the find_device() function.
    115  * @return Other error codes as defined for the specific module message
    116  *         implementation.
    117  *
     101 * @param[in] device_id The device identifier.
     102 * @param[in] packet    The packet queue.
     103 * @param[in] sender    The sending module service.
     104 *
     105 * @return              EOK on success.
     106 * @return              EFORWARD if the device is not active (in the
     107 *                      NETIF_ACTIVE state).
     108 * @return              Other error codes as defined for the find_device()
     109 *                      function.
     110 * @return              Other error codes as defined for the specific module
     111 *                      message implementation.
    118112 */
    119113extern int netif_send_message(device_id_t device_id, packet_t packet,
     
    124118 * This has to be implemented in user code.
    125119 *
    126  * @param[in] device The device structure.
    127  *
    128  * @return EOK on success.
    129  * @return Other error codes as defined for the find_device() function.
    130  * @return Other error codes as defined for the specific module message
    131  *         implementation.
    132  *
     120 * @param[in] device    The device structure.
     121 *
     122 * @return              EOK on success.
     123 * @return              Other error codes as defined for the find_device()
     124 *                      function.
     125 * @return              Other error codes as defined for the specific module
     126 *                      message implementation.
    133127 */
    134128extern int netif_start_message(netif_device_t *device);
     
    138132 * This has to be implemented in user code.
    139133 *
    140  * @param[in] device The device structure.
    141  *
    142  * @return EOK on success.
    143  * @return Other error codes as defined for the find_device() function.
    144  * @return Other error codes as defined for the specific module message
    145  *         implementation.
    146  *
     134 * @param[in] device    The device structure.
     135 *
     136 * @return              EOK on success.
     137 * @return              Other error codes as defined for the find_device()
     138 *                      function.
     139 * @return              Other error codes as defined for the specific module
     140 *                      message implementation.
    147141 */
    148142extern int netif_stop_message(netif_device_t *device);
     
    152146 * This has to be implemented in user code.
    153147 *
    154  * @param[in]  device_id The device identifier.
    155  * @param[out] address   The device local hardware address.
    156  *
    157  * @return EOK on success.
    158  * @return EBADMEM if the address parameter is NULL.
    159  * @return ENOENT if there no such device.
    160  * @return Other error codes as defined for the find_device() function.
    161  * @return Other error codes as defined for the specific module message
    162  *         implementation.
    163  *
     148 * @param[in] device_id The device identifier.
     149 * @param[out] address  The device local hardware address.
     150 *
     151 * @return              EOK on success.
     152 * @return              EBADMEM if the address parameter is NULL.
     153 * @return              ENOENT if there no such device.
     154 * @return              Other error codes as defined for the find_device()
     155 *                      function.
     156 * @return              Other error codes as defined for the specific module
     157 *                      message implementation.
    164158 */
    165159extern int netif_get_addr_message(device_id_t device_id,
     
    171165 * skeleton. This has to be implemented in user code.
    172166 *
    173  * @param[in]  callid       The message identifier.
    174  * @param[in]  call         The message parameters.
    175  * @param[out] answer       The message answer parameters.
     167 * @param[in] callid    The message identifier.
     168 * @param[in] call      The message parameters.
     169 * @param[out] answer   The message answer parameters.
    176170 * @param[out] answer_count The last parameter for the actual answer in
    177  *                          the answer parameter.
    178  *
    179  * @return EOK on success.
    180  * @return ENOTSUP if the message is not known.
    181  * @return Other error codes as defined for the specific module message
    182  *         implementation.
    183  *
     171 *                      the answer parameter.
     172 *
     173 * @return              EOK on success.
     174 * @return              ENOTSUP if the message is not known.
     175 * @return              Other error codes as defined for the specific module
     176 *                      message implementation.
    184177 */
    185178extern int netif_specific_message(ipc_callid_t callid, ipc_call_t *call,
     
    190183 * This has to be implemented in user code.
    191184 *
    192  * @param[in]  device_id The device identifier.
    193  * @param[out] stats     The device usage statistics.
    194  *
    195  * @return EOK on success.
    196  * @return Other error codes as defined for the find_device() function.
    197  * @return Other error codes as defined for the specific module message
    198  *         implementation.
    199  *
     185 * @param[in] device_id The device identifier.
     186 * @param[out] stats    The device usage statistics.
     187 *
     188 * @return              EOK on success.
     189 * @return              Other error codes as defined for the find_device()
     190 *                      function.
     191 * @return              Other error codes as defined for the specific module
     192 *                      message implementation.
    200193 */
    201194extern int netif_get_device_stats(device_id_t device_id,
  • uspace/lib/net/include/netif_remote.h

    raab02fb refedee77  
    2727 */
    2828
    29 /** @addtogroup netif
     29/** @addtogroup libnet
    3030 * @{
    3131 */
    3232
    33 #ifndef __NET_NETIF_REMOTE_H__
    34 #define __NET_NETIF_REMOTE_H__
     33#ifndef LIBNET_NETIF_REMOTE_H_
     34#define LIBNET_NETIF_REMOTE_H_
    3535
    3636#include <async.h>
    37 #include <fibril_synch.h>
    38 #include <ipc/ipc.h>
     37#include <ipc/services.h>
     38#include <adt/measured_strings.h>
     39
     40#include <net/device.h>
     41#include <net/packet.h>
    3942
    4043extern int netif_get_addr_req_remote(int, device_id_t, measured_string_ref *,
  • uspace/lib/net/include/nil_interface.h

    raab02fb refedee77  
    2727 */
    2828
    29 /** @addtogroup net_nil
    30  *  @{
     29/** @addtogroup libnet
     30 * @{
    3131 */
    3232
    33 #ifndef __NET_NIL_INTERFACE_H__
    34 #define __NET_NIL_INTERFACE_H__
     33#ifndef LIBNET_NIL_INTERFACE_H_
     34#define LIBNET_NIL_INTERFACE_H_
    3535
    3636#include <async.h>
     
    3838
    3939#include <ipc/ipc.h>
     40#include <ipc/nil.h>
    4041
    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>
    4644
    4745#define nil_bind_service(service, device_id, me, receiver) \
     
    4947
    5048#define nil_packet_size_req(nil_phone, device_id, packet_dimension) \
    51         generic_packet_size_req_remote(nil_phone, NET_NIL_PACKET_SPACE, device_id, \
    52             packet_dimension)
     49        generic_packet_size_req_remote(nil_phone, NET_NIL_PACKET_SPACE, \
     50            device_id, packet_dimension)
    5351
    5452#define nil_get_addr_req(nil_phone, device_id, address, data) \
     
    6765            netif_service)
    6866
    69 
    70 #ifdef CONFIG_NETIF_NIL_BUNDLE
    71 
    72 #include <nil_local.h>
    73 #include <packet/packet_server.h>
    74 
    75 #define nil_device_state_msg  nil_device_state_msg_local
    76 #define nil_received_msg      nil_received_msg_local
    77 
    78 #else /* CONFIG_NETIF_NIL_BUNDLE */
    79 
    80 #include <nil_remote.h>
    81 #include <packet/packet_server.h>
    82 
    8367#define nil_device_state_msg  nil_device_state_msg_remote
    8468#define nil_received_msg      nil_received_msg_remote
    85 
    86 #endif /* CONFIG_NETIF_NIL_BUNDLE */
    8769
    8870#endif
  • uspace/lib/net/include/nil_local.h

    raab02fb refedee77  
    2727 */
    2828
    29 /** @addtogroup net_nil
    30  *  @{
     29/** @addtogroup libnet
     30 * @{
    3131 */
    3232
     
    3636 */
    3737
    38 #ifndef __NET_NIL_LOCAL_H__
    39 #define __NET_NIL_LOCAL_H__
     38#ifndef LIBNET_NIL_LOCAL_H_
     39#define LIBNET_NIL_LOCAL_H_
    4040
    4141#include <ipc/ipc.h>
     
    4545 * Is called by the module_start() function.
    4646 *
    47  * @param[in] net_phone The networking moduel phone.
    48  *
    49  * @return EOK on success.
    50  * @return Other error codes as defined for each specific module initialize function.
    51  *
     47 * @param[in] net_phone The networking moduel phone.
     48 * @return              EOK on success.
     49 * @return              Other error codes as defined for each specific module
     50 *                      initialize function.
    5251 */
    5352extern int nil_initialize(int);
    5453
     54/** Notify the network interface layer about the device state change.
     55 *
     56 * @param[in] nil_phone The network interface layer phone.
     57 * @param[in] device_id The device identifier.
     58 * @param[in] state     The new device state.
     59 * @return              EOK on success.
     60 * @return              Other error codes as defined for each specific module
     61 *                      device state function.
     62 */
    5563extern int nil_device_state_msg_local(int, device_id_t, int);
     64
     65
     66/** Pass the packet queue to the network interface layer.
     67 *
     68 * Process and redistribute the received packet queue to the registered
     69 * upper layers.
     70 *
     71 * @param[in] nil_phone The network interface layer phone.
     72 * @param[in] device_id The source device identifier.
     73 * @param[in] packet    The received packet or the received packet queue.
     74 * @param target        The target service. Ignored parameter.
     75 * @return              EOK on success.
     76 * @return              Other error codes as defined for each specific module
     77 *                      received function.
     78 */
    5679extern int nil_received_msg_local(int, device_id_t, packet_t, services_t);
    5780
    5881/** Message processing function.
    5982 *
    60  * @param[in]  name         Module name.
    61  * @param[in]  callid       The message identifier.
    62  * @param[in]  call         The message parameters.
    63  * @param[out] answer       The message answer parameters.
    64  * @param[out] answer_count The last parameter for the actual answer
    65  *                          in the answer parameter.
    66  *
    67  * @return EOK on success.
    68  * @return ENOTSUP if the message is not known.
    69  * @return Other error codes as defined for each specific
    70  *         module message function.
     83 * @param[in] name      Module name.
     84 * @param[in] callid    The message identifier.
     85 * @param[in] call      The message parameters.
     86 * @param[out] answer   The message answer parameters.
     87 * @param[out] answer_count The last parameter for the actual answer in the
     88 *                      answer parameter.
     89 * @return              EOK on success.
     90 * @return              ENOTSUP if the message is not known.
     91 * @return              Other error codes as defined for each specific module
     92 *                      message function.
    7193 *
    7294 * @see nil_interface.h
    7395 * @see IS_NET_NIL_MESSAGE()
     96 */
     97extern int nil_message_standalone(const char *, ipc_callid_t, ipc_call_t *,
     98    ipc_call_t *, int *);
     99
     100/** Pass the parameters to the module specific nil_message() function.
    74101 *
     102 * @param[in] name      Module name.
     103 * @param[in] callid    The message identifier.
     104 * @param[in] call      The message parameters.
     105 * @param[out] answer   The message answer parameters.
     106 * @param[out] answer_count The last parameter for the actual answer in the
     107 *                      answer parameter.
     108 * @return              EOK on success.
     109 * @return              ENOTSUP if the message is not known.
     110 * @return              Other error codes as defined for each specific module
     111 *                      message function.
    75112 */
    76 extern int nil_message_standalone(const char *, ipc_callid_t, ipc_call_t *, ipc_call_t *,
    77     int *);
    78 
    79113extern int nil_module_message_standalone(const char *, ipc_callid_t,
    80114    ipc_call_t *, ipc_call_t *, int *);
     115
     116/** Start the standalone nil layer module.
     117 *
     118 * Initialize the client connection serving function, initialize
     119 * the module, register the module service and start the async
     120 * manager, processing IPC messages in an infinite loop.
     121 *
     122 * @param[in] client_connection The client connection processing function.
     123 *                      The module skeleton propagates its own one.
     124 * @return              EOK on success.
     125 * @return              Other error codes as defined for the pm_init() function.
     126 * @return              Other error codes as defined for the nil_initialize()
     127 *                      function.
     128 * @return              Other error codes as defined for the REGISTER_ME() macro
     129 *                      function.
     130 */
    81131extern int nil_module_start_standalone(async_client_conn_t);
    82132
  • uspace/lib/net/include/nil_remote.h

    raab02fb refedee77  
    3434#define __NET_NIL_REMOTE_H__
    3535
    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>
    3939
    4040extern int nil_device_state_msg_remote(int, device_id_t, int);
  • uspace/lib/net/include/packet_remote.h

    raab02fb refedee77  
    2727 */
    2828
    29 /** @addtogroup packet
     29/** @addtogroup libnet
    3030 * @{
    3131 */
    3232
    33 #ifndef __NET_PACKET_REMOTE_H__
    34 #define __NET_PACKET_REMOTE_H__
     33#ifndef LIBNET_PACKET_REMOTE_H_
     34#define LIBNET_PACKET_REMOTE_H_
    3535
    36 #include <packet/packet.h>
     36#include <net/packet.h>
     37#include <sys/types.h>
    3738
    3839extern int packet_translate_remote(int, packet_ref, packet_id_t);
  • uspace/lib/net/include/protocol_map.h

    raab02fb refedee77  
    2727 */
    2828
    29 /** @addtogroup net_nil
    30  *  @{
     29/** @addtogroup libnet
     30 * @{
    3131 */
    3232
    3333/** @file
    34  *  Internetwork layer services - network interface layer service type translation.
     34 * Internetwork layer services - network interface layer service type
     35 * translation.
    3536 */
    3637
    37 #ifndef __NET_PROTOCOL_MAP_H__
    38 #define __NET_PROTOCOL_MAP_H__
    39 
    40 #include <ipc/services.h>
     38#ifndef LIBNET_PROTOCOL_MAP_H_
     39#define LIBNET_PROTOCOL_MAP_H_
    4140
    4241#include <ethernet_lsap.h>
     
    4443#include <net_hardware.h>
    4544
    46 /** Maps the internetwork layer service to the network interface layer type.
    47  *  @param[in] nil Network interface layer service.
    48  *  @param[in] il Internetwork layer service.
    49  *  @returns Network interface layer type of the internetworking layer service.
    50  *  @returns 0 if mapping is not found.
    51  */
    52 static inline eth_type_t protocol_map(services_t nil, services_t il){
    53         switch(nil){
    54                 case SERVICE_ETHERNET:
    55                 case SERVICE_DP8390:
    56                         switch(il){
    57                                 case SERVICE_IP:
    58                                         return ETH_P_IP;
    59                                 case SERVICE_ARP:
    60                                         return ETH_P_ARP;
    61                                 default:
    62                                         return 0;
    63                         }
    64                 default:
    65                         return 0;
    66         }
    67 }
     45#include <ipc/services.h>
    6846
    69 /** Maps the network interface layer type to the internetwork layer service.
    70  *  @param[in] nil Network interface layer service.
    71  *  @param[in] protocol Network interface layer type.
    72  *  @returns Internetwork layer service of the network interface layer type.
    73  *  @returns 0 if mapping is not found.
    74  */
    75 static inline services_t protocol_unmap(services_t nil, int protocol){
    76         switch(nil){
    77                 case SERVICE_ETHERNET:
    78                 case SERVICE_DP8390:
    79                         switch(protocol){
    80                                 case ETH_P_IP:
    81                                         return SERVICE_IP;
    82                                 case ETH_P_ARP:
    83                                         return SERVICE_ARP;
    84                                 default:
    85                                         return 0;
    86                         }
    87                 default:
    88                         return 0;
    89         }
    90 }
    91 
    92 /** Maps the link service access point identifier to the Ethernet protocol identifier.
    93  *  @param[in] lsap Link service access point identifier.
    94  *  @returns Ethernet protocol identifier of the link service access point identifier.
    95  *  @returns ETH_LSAP_NULL if mapping is not found.
    96  */
    97 static inline eth_type_t lsap_map(eth_lsap_t lsap){
    98         switch(lsap){
    99                 case ETH_LSAP_IP:
    100                         return ETH_P_IP;
    101                 case ETH_LSAP_ARP:
    102                         return ETH_P_ARP;
    103                 default:
    104                         return ETH_LSAP_NULL;
    105         }
    106 }
    107 
    108 /** Maps the Ethernet protocol identifier to the link service access point identifier.
    109  *  @param[in] ethertype Ethernet protocol identifier.
    110  *  @returns Link service access point identifier.
    111  *  @returns 0 if mapping is not found.
    112  */
    113 static inline eth_lsap_t lsap_unmap(eth_type_t ethertype){
    114         switch(ethertype){
    115                 case ETH_P_IP:
    116                         return ETH_LSAP_IP;
    117                 case ETH_P_ARP:
    118                         return ETH_LSAP_ARP;
    119                 default:
    120                         return 0;
    121         }
    122 }
    123 
    124 /** Maps the network interface layer services to the hardware types.
    125  *  @param[in] nil The network interface service.
    126  *  @returns The hardware type of the network interface service.
    127  *  @returns 0 if mapping is not found.
    128  */
    129 static inline hw_type_t hardware_map(services_t nil){
    130         switch(nil){
    131                 case SERVICE_ETHERNET:
    132                 case SERVICE_DP8390:
    133                         return HW_ETHER;
    134                 default:
    135                         return 0;
    136         }
    137 }
     47extern eth_type_t protocol_map(services_t, services_t);
     48extern services_t protocol_unmap(services_t, int);
     49extern eth_type_t lsap_map(eth_lsap_t);
     50extern eth_lsap_t lsap_unmap(eth_type_t);
     51extern hw_type_t hardware_map(services_t);
    13852
    13953#endif
  • uspace/lib/net/include/tl_common.h

    raab02fb refedee77  
    2727 */
    2828
    29 /** @addtogroup net_tl
    30  *  @{
     29/** @addtogroup libnet
     30 * @{
    3131 */
    3232
    3333/** @file
    34  *  Transport layer common functions.
     34 * Transport layer common functions.
    3535 */
    3636
    37 #ifndef __NET_TL_COMMON_H__
    38 #define __NET_TL_COMMON_H__
     37#ifndef LIBNET_TL_COMMON_H_
     38#define LIBNET_TL_COMMON_H_
    3939
    40 #include <packet/packet.h>
    41 #include <net_device.h>
    42 #include <inet.h>
    43 #include <socket_codes.h>
     40#include <ipc/services.h>
     41
     42#include <net/socket_codes.h>
     43#include <net/packet.h>
     44#include <net/device.h>
     45#include <net/inet.h>
    4446
    4547/** Device packet dimensions.
    46  *  Maps devices to the packet dimensions.
    47  *  @see device.h
     48 * Maps devices to the packet dimensions.
     49 * @see device.h
    4850 */
    4951DEVICE_MAP_DECLARE(packet_dimensions, packet_dimension_t);
     
    5153extern int tl_get_ip_packet_dimension(int, packet_dimensions_ref,
    5254    device_id_t, packet_dimension_ref *);
    53 
    54 /** Gets the address port.
    55  *  Supports AF_INET and AF_INET6 address families.
    56  *  @param[in,out] addr The address to be updated.
    57  *  @param[in] addrlen The address length.
    58  *  @param[out] port The set port.
    59  *  @returns EOK on success.
    60  *  @returns EINVAL if the address length does not match the address family.
    61  *  @returns EAFNOSUPPORT if the address family is not supported.
    62  */
    63 extern int tl_get_address_port(const struct sockaddr * addr, int addrlen, uint16_t * port);
    64 
    65 /** Updates IP device packet dimensions cache.
    66  *  @param[in,out] packet_dimensions The packet dimensions cache.
    67  *  @param[in] device_id The device identifier.
    68  *  @param[in] content The new maximum content size.
    69  *  @returns EOK on success.
    70  *  @returns ENOENT if the packet dimension is not cached.
    71  */
    72 extern int tl_update_ip_packet_dimension(packet_dimensions_ref packet_dimensions, device_id_t device_id, size_t content);
    73 
    74 /** Sets the address port.
    75  *  Supports AF_INET and AF_INET6 address families.
    76  *  @param[in,out] addr The address to be updated.
    77  *  @param[in] addrlen The address length.
    78  *  @param[in] port The port to be set.
    79  *  @returns EOK on success.
    80  *  @returns EINVAL if the address length does not match the address family.
    81  *  @returns EAFNOSUPPORT if the address family is not supported.
    82  */
    83 extern int tl_set_address_port(struct sockaddr * addr, int addrlen, uint16_t port);
    84 
    85 /** Prepares the packet for ICMP error notification.
    86  *  Keeps the first packet and releases all the others.
    87  *  Releases all the packets on error.
    88  *  @param[in] packet_phone The packet server module phone.
    89  *  @param[in] icmp_phone The ICMP module phone.
    90  *  @param[in] packet The packet to be send.
    91  *  @param[in] error The packet error reporting service. Prefixes the received packet.
    92  *  @returns EOK on success.
    93  *  @returns ENOENT if no packet may be sent.
    94  */
    95 extern int tl_prepare_icmp_packet(int packet_phone, int icmp_phone, packet_t packet, services_t error);
    96 
    97 /** Receives data from the socket into a packet.
    98  *  @param[in] packet_phone The packet server module phone.
    99  *  @param[out] packet The new created packet.
    100  *  @param[in] prefix Reserved packet data prefix length.
    101  *  @param[in] dimension The packet dimension.
    102  *  @param[in] addr The destination address.
    103  *  @param[in] addrlen The address length.
    104  *  @returns Number of bytes received.
    105  *  @returns EINVAL if the client does not send data.
    106  *  @returns ENOMEM if there is not enough memory left.
    107  *  @returns Other error codes as defined for the async_data_read_finalize() function.
    108  */
    109 extern 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);
     55extern int tl_get_address_port(const struct sockaddr *, int, uint16_t *);
     56extern int tl_update_ip_packet_dimension(packet_dimensions_ref, device_id_t,
     57    size_t);
     58extern int tl_set_address_port(struct sockaddr *, int, uint16_t);
     59extern int tl_prepare_icmp_packet(int, int, packet_t, services_t);
     60extern int tl_socket_read_packet_data(int, packet_ref, size_t,
     61    const packet_dimension_ref, const struct sockaddr *, socklen_t);
    11062
    11163#endif
  • uspace/lib/net/include/tl_interface.h

    raab02fb refedee77  
    2727 */
    2828
    29 /** @addtogroup net_tl
    30  *  @{
     29/** @addtogroup libnet
     30 * @{
    3131 */
    3232
     
    3535 */
    3636
    37 #ifndef __NET_TL_INTERFACE_H__
    38 #define __NET_TL_INTERFACE_H__
     37#ifndef LIBNET_TL_INTERFACE_H_
     38#define LIBNET_TL_INTERFACE_H_
    3939
    4040#include <async.h>
    4141#include <ipc/services.h>
     42#include <ipc/tl.h>
    4243
    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>
    4848
    4949/** @name Transport layer module interface
     
    5252/*@{*/
    5353
    54 /** Notify the remote transport layer modules about the received packet/s.
    55  *
    56  * @param[in] tl_phone  The transport layer module phone used for remote calls.
    57  * @param[in] device_id The device identifier.
    58  * @param[in] packet    The received packet or the received packet queue.
    59  *                      The packet queue is used to carry a fragmented
    60  *                      datagram. The first packet contains the headers,
    61  *                      the others contain only data.
    62  * @param[in] target    The target transport layer module service to be
    63  *                      delivered to.
    64  * @param[in] error     The packet error reporting service. Prefixes the
    65  *                      received packet.
    66  *
    67  * @return EOK on success.
    68  *
    69  */
    70 inline static int tl_received_msg(int tl_phone, device_id_t device_id,
    71     packet_t packet, services_t target, services_t error)
    72 {
    73         return generic_received_msg_remote(tl_phone, NET_TL_RECEIVED, device_id,
    74             packet_get_id(packet), target, error);
    75 }
     54extern int tl_received_msg(int, device_id_t, packet_t, services_t, services_t);
    7655
    7756/*@}*/
  • uspace/lib/net/include/tl_local.h

    raab02fb refedee77  
    2727 */
    2828
    29 /** @addtogroup tl_local
    30  *  @{
     29/** @addtogroup libnet
     30 * @{
    3131 */
    3232
    33 #ifndef __TL_LOCAL_H__
    34 #define __TL_LOCAL_H__
     33#ifndef LIBNET_TL_LOCAL_H_
     34#define LIBNET_TL_LOCAL_H_
    3535
    3636#include <ipc/ipc.h>
  • uspace/lib/net/netif/netif_local.c

    raab02fb refedee77  
    2727 */
    2828
    29 /** @addtogroup netif
     29/** @addtogroup libnet
    3030 * @{
    3131 */
     
    4242#include <ipc/ipc.h>
    4343#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>
    5151#include <packet_remote.h>
    5252#include <adt/measured_strings.h>
    53 #include <net_device.h>
     53#include <net/device.h>
    5454#include <nil_interface.h>
    5555#include <netif_local.h>
    56 #include <netif_messages.h>
    5756#include <netif_interface.h>
    5857
    5958DEVICE_MAP_IMPLEMENT(netif_device_map, netif_device_t);
    6059
    61 /** Network interface global data.
    62  */
     60/** Network interface global data. */
    6361netif_globals_t netif_globals;
    6462
     
    6664 *
    6765 * @param[in] netif_phone The network interface phone.
    68  * @param[in] device_id   The device identifier.
    69  * @param[in] irq         The device interrupt number.
    70  * @param[in] io          The device input/output address.
    71  *
    72  * @return EOK on success.
    73  * @return Other errro codes as defined for the netif_probe_message().
    74  *
    75  */
    76 int netif_probe_req_local(int netif_phone, device_id_t device_id, int irq, int io)
     66 * @param[in] device_id The device identifier.
     67 * @param[in] irq       The device interrupt number.
     68 * @param[in] io        The device input/output address.
     69 * @return              EOK on success.
     70 * @return              Other error codes as defined for the
     71 *                      netif_probe_message().
     72 */
     73int
     74netif_probe_req_local(int netif_phone, device_id_t device_id, int irq, int io)
    7775{
    7876        fibril_rwlock_write_lock(&netif_globals.lock);
     
    8684 *
    8785 * @param[in] netif_phone The network interface phone.
    88  * @param[in] device_id   The device identifier.
    89  * @param[in] packet      The packet queue.
    90  * @param[in] sender      The sending module service.
    91  *
    92  * @return EOK on success.
    93  * @return Other error codes as defined for the generic_send_msg() function.
    94  *
     86 * @param[in] device_id The device identifier.
     87 * @param[in] packet    The packet queue.
     88 * @param[in] sender    The sending module service.
     89 * @return              EOK on success.
     90 * @return              Other error codes as defined for the generic_send_msg()
     91 *                      function.
    9592 */
    9693int netif_send_msg_local(int netif_phone, device_id_t device_id,
     
    107104 *
    108105 * @param[in] netif_phone The network interface phone.
    109  * @param[in] device_id   The device identifier.
    110  *
    111  * @return EOK on success.
    112  * @return Other error codes as defined for the find_device() function.
    113  * @return Other error codes as defined for the netif_start_message() function.
    114  *
     106 * @param[in] device_id The device identifier.
     107 * @return              EOK on success.
     108 * @return              Other error codes as defined for the find_device()
     109 *                      function.
     110 * @return              Other error codes as defined for the
     111 *                      netif_start_message() function.
    115112 */
    116113int netif_start_req_local(int netif_phone, device_id_t device_id)
     
    142139 *
    143140 * @param[in] netif_phone The network interface phone.
    144  * @param[in] device_id   The device identifier.
    145  *
    146  * @return EOK on success.
    147  * @return Other error codes as defined for the find_device() function.
    148  * @return Other error codes as defined for the netif_stop_message() function.
    149  *
     141 * @param[in] device_id The device identifier.
     142 * @return              EOK on success.
     143 * @return              Other error codes as defined for the find_device()
     144 *                      function.
     145 * @return              Other error codes as defined for the
     146 *                      netif_stop_message() function.
    150147 */
    151148int netif_stop_req_local(int netif_phone, device_id_t device_id)
     
    176173/** Return the device usage statistics.
    177174 *
    178  * @param[in]  netif_phone The network interface phone.
    179  * @param[in]  device_id   The device identifier.
    180  * @param[out] stats       The device usage statistics.
    181  *
     175 * @param[in] netif_phone The network interface phone.
     176 * @param[in] device_id The device identifier.
     177 * @param[out] stats    The device usage statistics.
    182178 * @return EOK on success.
    183  *
    184179 */
    185180int netif_stats_req_local(int netif_phone, device_id_t device_id,
     
    195190/** Return the device local hardware address.
    196191 *
    197  * @param[in]  netif_phone The network interface phone.
    198  * @param[in]  device_id   The device identifier.
    199  * @param[out] address     The device local hardware address.
    200  * @param[out] data        The address data.
    201  *
    202  * @return EOK on success.
    203  * @return EBADMEM if the address parameter is NULL.
    204  * @return ENOENT if there no such device.
    205  * @return Other error codes as defined for the netif_get_addr_message()
    206  *         function.
    207  *
     192 * @param[in] netif_phone The network interface phone.
     193 * @param[in] device_id The device identifier.
     194 * @param[out] address  The device local hardware address.
     195 * @param[out] data     The address data.
     196 * @return              EOK on success.
     197 * @return              EBADMEM if the address parameter is NULL.
     198 * @return              ENOENT if there no such device.
     199 * @return              Other error codes as defined for the
     200 *                      netif_get_addr_message() function.
    208201 */
    209202int netif_get_addr_req_local(int netif_phone, device_id_t device_id,
     
    212205        ERROR_DECLARE;
    213206       
    214         if ((!address) || (!data))
     207        if (!address || !data)
    215208                return EBADMEM;
    216209       
     
    230223}
    231224
    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 }
    249 
    250225/** Find the device specific data.
    251226 *
    252  * @param[in]  device_id The device identifier.
    253  * @param[out] device    The device specific data.
    254  *
    255  * @return EOK on success.
    256  * @return ENOENT if device is not found.
    257  * @return EPERM if the device is not initialized.
    258  *
     227 * @param[in] device_id The device identifier.
     228 * @param[out] device   The device specific data.
     229 * @return              EOK on success.
     230 * @return              ENOENT if device is not found.
     231 * @return              EPERM if the device is not initialized.
    259232 */
    260233int find_device(device_id_t device_id, netif_device_t **device)
     
    275248/** Clear the usage statistics.
    276249 *
    277  * @param[in] stats The usage statistics.
    278  *
     250 * @param[in] stats     The usage statistics.
    279251 */
    280252void null_device_stats(device_stats_ref stats)
     
    285257/** Initialize the netif module.
    286258 *
    287  *  @param[in] client_connection The client connection functio to be
    288  *                               registered.
    289  *
    290  *  @return EOK on success.
    291  *  @return Other error codes as defined for each specific module
    292  *          message function.
    293  *
     259 * @param[in] client_connection The client connection functio to be registered.
     260 * @return              EOK on success.
     261 * @return              Other error codes as defined for each specific module
     262 *                      message function.
    294263 */
    295264int netif_init_module(async_client_conn_t client_connection)
     
    317286 * Prepared for future optimization.
    318287 *
    319  * @param[in] packet_id The packet identifier.
    320  *
     288 * @param[in] packet_id The packet identifier.
    321289 */
    322290void netif_pq_release(packet_id_t packet_id)
     
    327295/** Allocate new packet to handle the given content size.
    328296 *
    329  * @param[in] content The minimum content size.
    330  *
    331  * @return The allocated packet.
    332  * @return NULL if there is an error.
     297 * @param[in] content   The minimum content size.
     298 * @return              The allocated packet.
     299 * @return              NULL if there is an error.
    333300 *
    334301 */
     
    338305}
    339306
    340 /** Register the device notification receiver, the network interface layer module.
    341  *
    342  * @param[in] name      Module name.
    343  * @param[in] device_id The device identifier.
    344  * @param[in] phone     The network interface layer module phone.
    345  *
    346  * @return EOK on success.
    347  * @return ENOENT if there is no such device.
    348  * @return ELIMIT if there is another module registered.
    349  *
     307/** Register the device notification receiver, the network interface layer
     308 * module.
     309 *
     310 * @param[in] name      Module name.
     311 * @param[in] device_id The device identifier.
     312 * @param[in] phone     The network interface layer module phone.
     313 * @return              EOK on success.
     314 * @return              ENOENT if there is no such device.
     315 * @return              ELIMIT if there is another module registered.
    350316 */
    351317static int register_message(const char *name, device_id_t device_id, int phone)
     
    366332/** Process the netif module messages.
    367333 *
    368  * @param[in]  name         Module name.
    369  * @param[in]  callid       The message identifier.
    370  * @param[in]  call         The message parameters.
    371  * @param[out] answer       The message answer parameters.
    372  * @param[out] answer_count The last parameter for the actual answer
    373  *                          in the answer parameter.
    374  *
    375  * @return EOK on success.
    376  * @return ENOTSUP if the message is not known.
    377  * @return Other error codes as defined for each specific module message function.
     334 * @param[in] name      Module name.
     335 * @param[in] callid    The message identifier.
     336 * @param[in] call      The message parameters.
     337 * @param[out] answer   The message answer parameters.
     338 * @param[out] answer_count The last parameter for the actual answer in the
     339 *                      answer parameter.
     340 * @return              EOK on success.
     341 * @return              ENOTSUP if the message is not known.
     342 * @return              Other error codes as defined for each specific module
     343 *                      message function.
    378344 *
    379345 * @see IS_NET_NETIF_MESSAGE()
     
    392358        *answer_count = 0;
    393359        switch (IPC_GET_METHOD(*call)) {
    394                 case IPC_M_PHONE_HUNGUP:
    395                         return EOK;
    396                 case NET_NETIF_PROBE:
    397                         return netif_probe_req_local(0, IPC_GET_DEVICE(call),
    398                             NETIF_GET_IRQ(call), NETIF_GET_IO(call));
    399                 case IPC_M_CONNECT_TO_ME:
    400                         fibril_rwlock_write_lock(&netif_globals.lock);
    401                         ERROR_CODE = register_message(name, IPC_GET_DEVICE(call),
    402                             IPC_GET_PHONE(call));
    403                         fibril_rwlock_write_unlock(&netif_globals.lock);
    404                         return ERROR_CODE;
    405                 case NET_NETIF_SEND:
    406                         ERROR_PROPAGATE(packet_translate_remote(netif_globals.net_phone,
    407                             &packet, IPC_GET_PACKET(call)));
    408                         return netif_send_msg_local(0, IPC_GET_DEVICE(call), packet,
    409                             IPC_GET_SENDER(call));
    410                 case NET_NETIF_START:
    411                         return netif_start_req_local(0, IPC_GET_DEVICE(call));
    412                 case NET_NETIF_STATS:
    413                         fibril_rwlock_read_lock(&netif_globals.lock);
    414                         if (!ERROR_OCCURRED(async_data_read_receive(&callid, &length))) {
    415                                 if (length < sizeof(device_stats_t))
    416                                         ERROR_CODE = EOVERFLOW;
    417                                 else {
    418                                         if (!ERROR_OCCURRED(netif_get_device_stats(
    419                                             IPC_GET_DEVICE(call), &stats)))
    420                                                 ERROR_CODE = async_data_read_finalize(callid, &stats,
    421                                                     sizeof(device_stats_t));
    422                                 }
    423                         }
     360        case IPC_M_PHONE_HUNGUP:
     361                return EOK;
     362       
     363        case NET_NETIF_PROBE:
     364                return netif_probe_req_local(0, IPC_GET_DEVICE(call),
     365                    NETIF_GET_IRQ(call), NETIF_GET_IO(call));
     366                   
     367        case IPC_M_CONNECT_TO_ME:
     368                fibril_rwlock_write_lock(&netif_globals.lock);
     369                ERROR_CODE = register_message(name, IPC_GET_DEVICE(call),
     370                    IPC_GET_PHONE(call));
     371                fibril_rwlock_write_unlock(&netif_globals.lock);
     372                return ERROR_CODE;
     373               
     374        case NET_NETIF_SEND:
     375                ERROR_PROPAGATE(packet_translate_remote(netif_globals.net_phone,
     376                    &packet, IPC_GET_PACKET(call)));
     377                return netif_send_msg_local(0, IPC_GET_DEVICE(call), packet,
     378                    IPC_GET_SENDER(call));
     379                   
     380        case NET_NETIF_START:
     381                return netif_start_req_local(0, IPC_GET_DEVICE(call));
     382               
     383        case NET_NETIF_STATS:
     384                fibril_rwlock_read_lock(&netif_globals.lock);
     385
     386                if (ERROR_OCCURRED(async_data_read_receive(&callid, &length))) {
    424387                        fibril_rwlock_read_unlock(&netif_globals.lock);
    425388                        return ERROR_CODE;
    426                 case NET_NETIF_STOP:
    427                         return netif_stop_req_local(0, IPC_GET_DEVICE(call));
    428                 case NET_NETIF_GET_ADDR:
    429                         fibril_rwlock_read_lock(&netif_globals.lock);
    430                         if (!ERROR_OCCURRED(netif_get_addr_message(IPC_GET_DEVICE(call),
    431                             &address)))
    432                                 ERROR_CODE = measured_strings_reply(&address, 1);
     389                }
     390                if (length < sizeof(device_stats_t)) {
    433391                        fibril_rwlock_read_unlock(&netif_globals.lock);
    434                         return ERROR_CODE;
     392                        return EOVERFLOW;
     393                }
     394
     395                if (ERROR_NONE(netif_get_device_stats(IPC_GET_DEVICE(call),
     396                    &stats))) {
     397                        ERROR_CODE = async_data_read_finalize(callid, &stats,
     398                            sizeof(device_stats_t));
     399                }
     400
     401                fibril_rwlock_read_unlock(&netif_globals.lock);
     402                return ERROR_CODE;
     403
     404        case NET_NETIF_STOP:
     405                return netif_stop_req_local(0, IPC_GET_DEVICE(call));
     406               
     407        case NET_NETIF_GET_ADDR:
     408                fibril_rwlock_read_lock(&netif_globals.lock);
     409                if (ERROR_NONE(netif_get_addr_message(IPC_GET_DEVICE(call),
     410                    &address)))
     411                        ERROR_CODE = measured_strings_reply(&address, 1);
     412                fibril_rwlock_read_unlock(&netif_globals.lock);
     413                return ERROR_CODE;
    435414        }
    436415       
     
    440419/** Start the network interface module.
    441420 *
    442  * Initialize the client connection serving function, initialize
    443  * the module, registers the module service and start the async
    444  * manager, processing IPC messages in an infinite loop.
    445  *
    446  * @param[in] client_connection The client connection processing
    447  *                              function. The module skeleton propagates
    448  *                              its own one.
    449  *
    450  * @return EOK on success.
    451  * @return Other error codes as defined for each specific module message
    452  *         function.
    453  *
     421 * Initialize the client connection serving function, initialize the module,
     422 * registers the module service and start the async manager, processing IPC
     423 * messages in an infinite loop.
     424 *
     425 * @param[in] client_connection The client connection processing function.
     426 *                      The module skeleton propagates its own one.
     427 * @return              EOK on success.
     428 * @return              Other error codes as defined for each specific module
     429 *                      message function.
    454430 */
    455431int netif_module_start_standalone(async_client_conn_t client_connection)
  • uspace/lib/net/netif/netif_remote.c

    raab02fb refedee77  
    2727 */
    2828
    29 /** @addtogroup netif
     29/** @addtogroup libnet
    3030 * @{
    3131 */
     
    3535 */
    3636
     37#include <netif_remote.h>
     38#include <packet_client.h>
     39#include <generic.h>
     40
    3741#include <ipc/services.h>
     42#include <ipc/netif.h>
    3843
    39 #include <net_modules.h>
     44#include <net/modules.h>
    4045#include <adt/measured_strings.h>
    41 #include <packet/packet.h>
    42 #include <packet/packet_client.h>
    43 #include <net_device.h>
    44 #include <netif_remote.h>
    45 #include <netif_messages.h>
     46#include <net/packet.h>
     47#include <net/device.h>
    4648
     49/** Return the device local hardware address.
     50 *
     51 * @param[in] netif_phone The network interface phone.
     52 * @param[in] device_id The device identifier.
     53 * @param[out] address  The device local hardware address.
     54 * @param[out] data     The address data.
     55 * @return              EOK on success.
     56 * @return              EBADMEM if the address parameter is NULL.
     57 * @return              ENOENT if there no such device.
     58 * @return              Other error codes as defined for the
     59 *                      netif_get_addr_message() function.
     60 */
    4761int netif_get_addr_req_remote(int netif_phone, device_id_t device_id,
    4862    measured_string_ref *address, char **data)
     
    5266}
    5367
    54 int netif_probe_req_remote(int netif_phone, device_id_t device_id, int irq, int io)
     68/** Probe the existence of the device.
     69 *
     70 * @param[in] netif_phone The network interface phone.
     71 * @param[in] device_id The device identifier.
     72 * @param[in] irq       The device interrupt number.
     73 * @param[in] io        The device input/output address.
     74 * @return              EOK on success.
     75 * @return              Other error codes as defined for the
     76 *                      netif_probe_message().
     77 */
     78int
     79netif_probe_req_remote(int netif_phone, device_id_t device_id, int irq, int io)
    5580{
    5681        return async_req_3_0(netif_phone, NET_NETIF_PROBE, device_id, irq, io);
    5782}
    5883
    59 int netif_send_msg_remote(int netif_phone, device_id_t device_id, packet_t packet,
     84/** Send the packet queue.
     85 *
     86 * @param[in] netif_phone The network interface phone.
     87 * @param[in] device_id The device identifier.
     88 * @param[in] packet    The packet queue.
     89 * @param[in] sender    The sending module service.
     90 * @return              EOK on success.
     91 * @return              Other error codes as defined for the generic_send_msg()
     92 *                      function.
     93 */
     94int
     95netif_send_msg_remote(int netif_phone, device_id_t device_id, packet_t packet,
    6096    services_t sender)
    6197{
     
    64100}
    65101
     102/** Start the device.
     103 *
     104 * @param[in] netif_phone The network interface phone.
     105 * @param[in] device_id The device identifier.
     106 * @return              EOK on success.
     107 * @return              Other error codes as defined for the find_device()
     108 *                      function.
     109 * @return              Other error codes as defined for the
     110 *                      netif_start_message() function.
     111 */
    66112int netif_start_req_remote(int netif_phone, device_id_t device_id)
    67113{
     
    69115}
    70116
     117/** Stop the device.
     118 *
     119 * @param[in] netif_phone The network interface phone.
     120 * @param[in] device_id The device identifier.
     121 * @return              EOK on success.
     122 * @return              Other error codes as defined for the find_device()
     123 *                      function.
     124 * @return              Other error codes as defined for the
     125 *                      netif_stop_message() function.
     126 */
    71127int netif_stop_req_remote(int netif_phone, device_id_t device_id)
    72128{
     
    74130}
    75131
     132/** Return the device usage statistics.
     133 *
     134 * @param[in] netif_phone The network interface phone.
     135 * @param[in] device_id The device identifier.
     136 * @param[out] stats    The device usage statistics.
     137 * @return EOK on success.
     138 */
    76139int netif_stats_req_remote(int netif_phone, device_id_t device_id,
    77140    device_stats_ref stats)
     
    90153}
    91154
    92 int netif_bind_service_remote(services_t service, device_id_t device_id, services_t me,
    93     async_client_conn_t receiver)
     155/** Create bidirectional connection with the network interface module and
     156 * registers the message receiver.
     157 *
     158 * @param[in] service   The network interface module service.
     159 * @param[in] device_id The device identifier.
     160 * @param[in] me        The requesting module service.
     161 * @param[in] receiver  The message receiver.
     162 *
     163 * @return              The phone of the needed service.
     164 * @return              EOK on success.
     165 * @return              Other error codes as defined for the bind_service()
     166 *                      function.
     167 */
     168int
     169netif_bind_service_remote(services_t service, device_id_t device_id,
     170    services_t me, async_client_conn_t receiver)
    94171{
    95172        return bind_service(service, device_id, me, 0, receiver);
  • uspace/lib/net/nil/nil_remote.c

    raab02fb refedee77  
    2727 */
    2828
    29 /** @addtogroup net_nil
     29/** @addtogroup libnet
    3030 * @{
    3131 */
     
    3636 */
    3737
    38 #include <net_messages.h>
    39 #include <net_device.h>
     38#include <nil_remote.h>
    4039#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>
    4546
    4647/** Notify the network interface layer about the device state change.
    4748 *
    48  * @param[in] nil_phone The network interface layer phone.
    49  * @param[in] device_id The device identifier.
    50  * @param[in] state     The new device state.
    51  *
    52  * @return EOK on success.
    53  * @return Other error codes as defined for each specific module device
    54  *         state function.
    55  *
     49 * @param[in] nil_phone The network interface layer phone.
     50 * @param[in] device_id The device identifier.
     51 * @param[in] state     The new device state.
     52 * @return              EOK on success.
     53 * @return              Other error codes as defined for each specific module
     54 *                      device state function.
    5655 */
    5756int nil_device_state_msg_remote(int nil_phone, device_id_t device_id, int state)
     
    6665 * upper layers.
    6766 *
    68  * @param[in] nil_phone The network interface layer phone.
    69  * @param[in] device_id The source device identifier.
    70  * @param[in] packet    The received packet or the received packet queue.
    71  * @param     target    The target service. Ignored parameter.
    72  *
    73  * @return EOK on success.
    74  * @return Other error codes as defined for each specific module
    75  *         received function.
    76  *
     67 * @param[in] nil_phone The network interface layer phone.
     68 * @param[in] device_id The source device identifier.
     69 * @param[in] packet    The received packet or the received packet queue.
     70 * @param target        The target service. Ignored parameter.
     71 * @return              EOK on success.
     72 * @return              Other error codes as defined for each specific module
     73 *                      received function.
    7774 */
    7875int nil_received_msg_remote(int nil_phone, device_id_t device_id,
    7976    packet_t packet, services_t target)
    8077{
    81         return generic_received_msg_remote(nil_phone, NET_NIL_RECEIVED, device_id,
    82             packet_get_id(packet), target, 0);
     78        return generic_received_msg_remote(nil_phone, NET_NIL_RECEIVED,
     79            device_id, packet_get_id(packet), target, 0);
    8380}
    8481
  • uspace/lib/net/tl/icmp_client.c

    raab02fb refedee77  
    2727 */
    2828
    29 /** @addtogroup icmp
    30  *  @{
     29/** @addtogroup libnet
     30 * @{
    3131 */
    3232
    3333/** @file
    34  *  ICMP client interface implementation.
    35  *  @see icmp_client.h
     34 * ICMP client interface implementation.
     35 * @see icmp_client.h
    3636 */
    3737
     38#include <icmp_client.h>
     39#include <icmp_header.h>
     40#include <packet_client.h>
     41
    3842#ifdef CONFIG_DEBUG
    39         #include <stdio.h>
     43#include <stdio.h>
    4044#endif
    4145
     
    4347#include <sys/types.h>
    4448
    45 #include <icmp_codes.h>
    46 #include <icmp_client.h>
    47 #include <packet/packet.h>
    48 #include <packet/packet_client.h>
    49 #include <icmp_header.h>
     49#include <net/icmp_codes.h>
     50#include <net/packet.h>
    5051
    51 int icmp_client_process_packet(packet_t packet, icmp_type_t * type, icmp_code_t * code, icmp_param_t * pointer, icmp_param_t * mtu){
     52/** Processes the received packet prefixed with an ICMP header.
     53 *
     54 * @param[in] packet    The received packet.
     55 * @param[out] type     The ICMP header type.
     56 * @param[out] code     The ICMP header code.
     57 * @param[out] pointer  The ICMP header pointer.
     58 * @param[out] mtu      The ICMP header MTU.
     59 * @returns             The ICMP header length.
     60 * @returns             Zero if the packet contains no data.
     61 */
     62int
     63icmp_client_process_packet(packet_t packet, icmp_type_t *type,
     64    icmp_code_t *code, icmp_param_t *pointer, icmp_param_t *mtu)
     65{
    5266        icmp_header_ref header;
    5367
    5468        header = (icmp_header_ref) packet_get_data(packet);
    55         if((! header)
    56                 || (packet_get_data_length(packet) < sizeof(icmp_header_t))){
     69        if (!header ||
     70            (packet_get_data_length(packet) < sizeof(icmp_header_t))) {
    5771                return 0;
    5872        }
    59         if(type){
     73
     74        if (type)
    6075                *type = header->type;
    61         }
    62         if(code){
     76        if (code)
    6377                *code = header->code;
    64         }
    65         if(pointer){
     78        if (pointer)
    6679                *pointer = header->un.param.pointer;
    67         }
    68         if(mtu){
     80        if (mtu)
    6981                *mtu = header->un.frag.mtu;
    70         }
     82
    7183        // remove debug dump
    7284#ifdef CONFIG_DEBUG
    73         printf("ICMP error %d (%d) in packet %d\n", header->type, header->code, packet_get_id(packet));
     85        printf("ICMP error %d (%d) in packet %d\n", header->type, header->code,
     86            packet_get_id(packet));
    7487#endif
    7588        return sizeof(icmp_header_t);
    7689}
    7790
    78 size_t icmp_client_header_length(packet_t packet){
    79         if(packet_get_data_length(packet) < sizeof(icmp_header_t)){
     91/** Returns the ICMP header length.
     92 *
     93 * @param[in] packet    The packet.
     94 * @returns             The ICMP header length in bytes.
     95 */
     96size_t icmp_client_header_length(packet_t packet)
     97{
     98        if (packet_get_data_length(packet) < sizeof(icmp_header_t))
    8099                return 0;
    81         }
     100
    82101        return sizeof(icmp_header_t);
    83102}
  • uspace/lib/net/tl/icmp_remote.c

    raab02fb refedee77  
    2727 */
    2828
    29 /** @addtogroup icmp
     29/** @addtogroup libnet
    3030 *  @{
    3131 */
    3232
    3333/** @file
    34  *  ICMP interface implementation for remote modules.
    35  *  @see icmp_interface.h
     34 * ICMP interface implementation for remote modules.
     35 * @see icmp_interface.h
    3636 */
     37
     38#include <icmp_interface.h>
     39#include <net/modules.h>
     40#include <packet_client.h>
    3741
    3842#include <async.h>
     
    4044#include <ipc/ipc.h>
    4145#include <ipc/services.h>
     46#include <ipc/icmp.h>
    4247#include <sys/types.h>
    4348
    44 #include <net_messages.h>
    45 #include <net_modules.h>
    46 #include <icmp_interface.h>
    47 #include <packet/packet_client.h>
    48 #include <icmp_messages.h>
    49 
    50 int icmp_destination_unreachable_msg(int icmp_phone, icmp_code_t code, icmp_param_t mtu, packet_t packet){
    51         async_msg_3(icmp_phone, NET_ICMP_DEST_UNREACH, (ipcarg_t) code, (ipcarg_t) packet_get_id(packet), (ipcarg_t) mtu);
     49/** Sends the Destination Unreachable error notification packet.
     50 *
     51 * Beginning of the packet is sent as the notification packet data.
     52 * The source and the destination addresses should be set in the original
     53 * packet.
     54 *
     55 * @param[in] icmp_phone The ICMP module phone used for (semi)remote calls.
     56 * @param[in] code      The error specific code.
     57 * @param[in] mtu       The error MTU value.
     58 * @param[in] packet    The original packet.
     59 * @returns             EOK on success.
     60 * @returns             EPERM if the ICMP error notifications are disabled.
     61 * @returns             ENOMEM if there is not enough memory left.
     62 */
     63int
     64icmp_destination_unreachable_msg(int icmp_phone, icmp_code_t code,
     65    icmp_param_t mtu, packet_t packet)
     66{
     67        async_msg_3(icmp_phone, NET_ICMP_DEST_UNREACH, (ipcarg_t) code,
     68            (ipcarg_t) packet_get_id(packet), (ipcarg_t) mtu);
    5269        return EOK;
    5370}
    5471
    55 int icmp_source_quench_msg(int icmp_phone, packet_t packet){
    56         async_msg_2(icmp_phone, NET_ICMP_SOURCE_QUENCH, 0, (ipcarg_t) packet_get_id(packet));
     72/** Sends the Source Quench error notification packet.
     73 *
     74 * Beginning of the packet is sent as the notification packet data.
     75 * The source and the destination addresses should be set in the original
     76 * packet.
     77 *
     78 * @param[in] icmp_phone The ICMP module phone used for (semi)remote calls.
     79 * @param[in] packet    The original packet.
     80 * @returns             EOK on success.
     81 * @returns             EPERM if the ICMP error notifications are disabled.
     82 * @returns             ENOMEM if there is not enough memory left.
     83 */
     84int icmp_source_quench_msg(int icmp_phone, packet_t packet)
     85{
     86        async_msg_2(icmp_phone, NET_ICMP_SOURCE_QUENCH, 0,
     87            (ipcarg_t) packet_get_id(packet));
    5788        return EOK;
    5889}
    5990
    60 int icmp_time_exceeded_msg(int icmp_phone, icmp_code_t code, packet_t packet){
    61         async_msg_2(icmp_phone, NET_ICMP_TIME_EXCEEDED, (ipcarg_t) code, (ipcarg_t) packet_get_id(packet));
     91/** Sends the Time Exceeded error notification packet.
     92 *
     93 * Beginning of the packet is sent as the notification packet data.
     94 * The source and the destination addresses should be set in the original
     95 * packet.
     96 *
     97 * @param[in] icmp_phone The ICMP module phone used for (semi)remote calls.
     98 * @param[in] code      The error specific code.
     99 * @param[in] packet    The original packet.
     100 * @returns             EOK on success.
     101 * @returns             EPERM if the ICMP error notifications are disabled.
     102 * @returns             ENOMEM if there is not enough memory left.
     103 */
     104int icmp_time_exceeded_msg(int icmp_phone, icmp_code_t code, packet_t packet)
     105{
     106        async_msg_2(icmp_phone, NET_ICMP_TIME_EXCEEDED, (ipcarg_t) code,
     107            (ipcarg_t) packet_get_id(packet));
    62108        return EOK;
    63109}
    64110
    65 int icmp_parameter_problem_msg(int icmp_phone, icmp_code_t code, icmp_param_t pointer, packet_t packet){
    66         async_msg_3(icmp_phone, NET_ICMP_PARAMETERPROB, (ipcarg_t) code, (ipcarg_t) packet_get_id(packet), (ipcarg_t) pointer);
     111/** Sends the Parameter Problem error notification packet.
     112 *
     113 * Beginning of the packet is sent as the notification packet data.
     114 * The source and the destination addresses should be set in the original
     115 * packet.
     116 *
     117 * @param[in] icmp_phone The ICMP module phone used for (semi)remote calls.
     118 * @param[in] code      The error specific code.
     119 * @param[in] pointer   The problematic parameter offset.
     120 * @param[in] packet    The original packet.
     121 * @returns             EOK on success.
     122 * @returns             EPERM if the ICMP error notifications are disabled.
     123 * @returns             ENOMEM if there is not enough memory left.
     124 */
     125int icmp_parameter_problem_msg(int icmp_phone, icmp_code_t code,
     126    icmp_param_t pointer, packet_t packet)
     127{
     128        async_msg_3(icmp_phone, NET_ICMP_PARAMETERPROB, (ipcarg_t) code,
     129            (ipcarg_t) packet_get_id(packet), (ipcarg_t) pointer);
    67130        return EOK;
    68131}
     
    70133/** @}
    71134 */
     135
  • uspace/lib/net/tl/tl_common.c

    raab02fb refedee77  
    2727 */
    2828
    29 /** @addtogroup net_tl
    30  *  @{
     29/** @addtogroup libnet
     30 * @{
    3131 */
    3232
    3333/** @file
    34  *  Transport layer common functions implementation.
    35  *  @see tl_common.h
    36  */
     34 * Transport layer common functions implementation.
     35 * @see tl_common.h
     36 */
     37
     38#include <tl_common.h>
     39#include <packet_client.h>
     40#include <packet_remote.h>
     41#include <icmp_interface.h>
     42#include <ip_remote.h>
     43#include <ip_interface.h>
     44#include <tl_interface.h>
     45
     46#include <net/socket_codes.h>
     47#include <net/in.h>
     48#include <net/in6.h>
     49#include <net/inet.h>
     50#include <net/device.h>
     51#include <net/packet.h>
    3752
    3853#include <async.h>
    3954#include <ipc/services.h>
    40 
    41 #include <net_err.h>
    42 #include <packet/packet.h>
    43 #include <packet/packet_client.h>
    44 #include <packet_remote.h>
    45 #include <net_device.h>
    46 #include <icmp_interface.h>
    47 #include <in.h>
    48 #include <in6.h>
    49 #include <inet.h>
    50 #include <ip_local.h>
    51 #include <ip_remote.h>
    52 #include <socket_codes.h>
    53 #include <socket_errno.h>
    54 #include <ip_interface.h>
    55 #include <tl_interface.h>
    56 #include <tl_common.h>
     55#include <errno.h>
     56#include <err.h>
    5757
    5858DEVICE_MAP_IMPLEMENT(packet_dimensions, packet_dimension_t);
    5959
    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)){
    70                                 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         }
     60/** Gets the address port.
     61 *
     62 * Supports AF_INET and AF_INET6 address families.
     63 *
     64 * @param[in,out] addr  The address to be updated.
     65 * @param[in] addrlen   The address length.
     66 * @param[out] port     The set port.
     67 * @returns             EOK on success.
     68 * @returns             EINVAL if the address length does not match the address
     69 *                      family.
     70 * @returns             EAFNOSUPPORT if the address family is not supported.
     71 */
     72int
     73tl_get_address_port(const struct sockaddr *addr, int addrlen, uint16_t *port)
     74{
     75        const struct sockaddr_in *address_in;
     76        const struct sockaddr_in6 *address_in6;
     77
     78        if ((addrlen <= 0) || ((size_t) addrlen < sizeof(struct sockaddr)))
     79                return EINVAL;
     80
     81        switch (addr->sa_family) {
     82        case AF_INET:
     83                if (addrlen != sizeof(struct sockaddr_in))
     84                        return EINVAL;
     85
     86                address_in = (struct sockaddr_in *) addr;
     87                *port = ntohs(address_in->sin_port);
     88                break;
     89       
     90        case AF_INET6:
     91                if (addrlen != sizeof(struct sockaddr_in6))
     92                        return EINVAL;
     93
     94                address_in6 = (struct sockaddr_in6 *) addr;
     95                *port = ntohs(address_in6->sin6_port);
     96                break;
     97       
     98        default:
     99                return EAFNOSUPPORT;
     100        }
     101
    85102        return EOK;
    86103}
     
    91108 * The reply is cached then.
    92109 *
    93  * @param[in]  ip_phone          The IP moduel phone for (semi)remote calls.
    94  * @param[in]  packet_dimensions The packet dimensions cache.
    95  * @param[in]  device_id         The device identifier.
    96  * @param[out] packet_dimension  The IP packet dimensions.
    97  *
    98  * @return EOK on success.
    99  * @return EBADMEM if the packet_dimension parameter is NULL.
    100  * @return ENOMEM if there is not enough memory left.
    101  * @return EINVAL if the packet_dimensions cache is not valid.
    102  * @return Other codes as defined for the ip_packet_size_req() function.
    103  *
    104  */
    105 int tl_get_ip_packet_dimension(int ip_phone,
     110 * @param[in] ip_phone  The IP moduel phone for (semi)remote calls.
     111 * @param[in] packet_dimensions The packet dimensions cache.
     112 * @param[in] device_id The device identifier.
     113 * @param[out] packet_dimension The IP packet dimensions.
     114 * @return              EOK on success.
     115 * @return              EBADMEM if the packet_dimension parameter is NULL.
     116 * @return              ENOMEM if there is not enough memory left.
     117 * @return              EINVAL if the packet_dimensions cache is not valid.
     118 * @return              Other codes as defined for the ip_packet_size_req()
     119 *                      function.
     120 */
     121int
     122tl_get_ip_packet_dimension(int ip_phone,
    106123    packet_dimensions_ref packet_dimensions, device_id_t device_id,
    107124    packet_dimension_ref *packet_dimension)
     
    112129                return EBADMEM;
    113130       
    114         *packet_dimension = packet_dimensions_find(packet_dimensions, device_id);
     131        *packet_dimension = packet_dimensions_find(packet_dimensions,
     132            device_id);
    115133        if (!*packet_dimension) {
    116134                /* Ask for and remember them if not found */
     
    136154}
    137155
    138 int tl_update_ip_packet_dimension(packet_dimensions_ref packet_dimensions, device_id_t device_id, size_t content){
     156/** Updates IP device packet dimensions cache.
     157 *
     158 * @param[in,out] packet_dimensions The packet dimensions cache.
     159 * @param[in] device_id The device identifier.
     160 * @param[in] content   The new maximum content size.
     161 * @returns             EOK on success.
     162 * @return              ENOENT if the packet dimension is not cached.
     163 */
     164int
     165tl_update_ip_packet_dimension(packet_dimensions_ref packet_dimensions,
     166    device_id_t device_id, size_t content)
     167{
    139168        packet_dimension_ref packet_dimension;
    140169
    141170        packet_dimension = packet_dimensions_find(packet_dimensions, device_id);
    142         if(! packet_dimension){
     171        if (!packet_dimension)
    143172                return ENOENT;
    144         }
     173
    145174        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){
     175
     176        if (device_id != DEVICE_INVALID_ID) {
     177                packet_dimension = packet_dimensions_find(packet_dimensions,
     178                    DEVICE_INVALID_ID);
     179
     180                if (packet_dimension) {
     181                        if (packet_dimension->content >= content)
    150182                                packet_dimension->content = content;
    151                         }else{
    152                                 packet_dimensions_exclude(packet_dimensions, DEVICE_INVALID_ID);
    153                         }
     183                        else
     184                                packet_dimensions_exclude(packet_dimensions,
     185                                    DEVICE_INVALID_ID);
    154186                }
    155187        }
     188
    156189        return EOK;
    157190}
    158191
    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;
     192/** Sets the address port.
     193 *
     194 * Supports AF_INET and AF_INET6 address families.
     195 *
     196 * @param[in,out] addr  The address to be updated.
     197 * @param[in] addrlen   The address length.
     198 * @param[in] port      The port to be set.
     199 * @returns             EOK on success.
     200 * @returns             EINVAL if the address length does not match the address
     201 *                      family.
     202 * @returns             EAFNOSUPPORT if the address family is not supported.
     203 */
     204int tl_set_address_port(struct sockaddr * addr, int addrlen, uint16_t port)
     205{
     206        struct sockaddr_in *address_in;
     207        struct sockaddr_in6 *address_in6;
    162208        size_t length;
    163209
    164         if(addrlen < 0){
    165                 return EINVAL;
    166         }
     210        if (addrlen < 0)
     211                return EINVAL;
     212       
    167213        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)){
     214        if (length < sizeof(struct sockaddr))
     215                return EINVAL;
     216
     217        switch (addr->sa_family) {
     218        case AF_INET:
     219                if (length != sizeof(struct sockaddr_in))
     220                        return EINVAL;
     221                address_in = (struct sockaddr_in *) addr;
     222                address_in->sin_port = htons(port);
     223                return EOK;
     224       
     225        case AF_INET6:
     226                if (length != sizeof(struct sockaddr_in6))
    174227                                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){
     228                address_in6 = (struct sockaddr_in6 *) addr;
     229                address_in6->sin6_port = htons(port);
     230                return EOK;
     231       
     232        default:
     233                return EAFNOSUPPORT;
     234        }
     235}
     236
     237/** Prepares the packet for ICMP error notification.
     238 *
     239 * Keeps the first packet and releases all the others.
     240 * Releases all the packets on error.
     241 *
     242 * @param[in] packet_phone The packet server module phone.
     243 * @param[in] icmp_phone The ICMP module phone.
     244 * @param[in] packet    The packet to be send.
     245 * @param[in] error     The packet error reporting service. Prefixes the
     246 *                      received packet.
     247 * @returns             EOK on success.
     248 * @returns             ENOENT if no packet may be sent.
     249 */
     250int
     251tl_prepare_icmp_packet(int packet_phone, int icmp_phone, packet_t packet,
     252    services_t error)
     253{
    192254        packet_t next;
    193         uint8_t * src;
     255        uint8_t *src;
    194256        int length;
    195257
     
    200262       
    201263        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)){
     264        if ((length > 0) && (!error) && (icmp_phone >= 0) &&
     265            // set both addresses to the source one (avoids the source address
     266            // deletion before setting the destination one)
     267            (packet_set_addr(packet, src, src, (size_t) length) == EOK)) {
    207268                return EOK;
    208         }else{
     269        } else
    209270                pq_release_remote(packet_phone, packet_get_id(packet));
    210         }
     271
    211272        return ENOENT;
    212273}
    213274
    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){
     275/** Receives data from the socket into a packet.
     276 *
     277 * @param[in] packet_phone The packet server module phone.
     278 * @param[out] packet   The new created packet.
     279 * @param[in] prefix    Reserved packet data prefix length.
     280 * @param[in] dimension The packet dimension.
     281 * @param[in] addr      The destination address.
     282 * @param[in] addrlen   The address length.
     283 * @returns             Number of bytes received.
     284 * @returns             EINVAL if the client does not send data.
     285 * @returns             ENOMEM if there is not enough memory left.
     286 * @returns             Other error codes as defined for the
     287 *                      async_data_read_finalize() function.
     288 */
     289int
     290tl_socket_read_packet_data(int packet_phone, packet_ref packet, size_t prefix,
     291    const packet_dimension_ref dimension, const struct sockaddr *addr,
     292    socklen_t addrlen)
     293{
    215294        ERROR_DECLARE;
    216295
     
    219298        void * data;
    220299
    221         if(! dimension){
    222                 return EINVAL;
    223         }
     300        if (!dimension)
     301                return EINVAL;
     302
    224303        // get the data length
    225         if(! async_data_write_receive(&callid, &length)){
    226                 return EINVAL;
    227         }
     304        if (!async_data_write_receive(&callid, &length))
     305                return EINVAL;
     306
    228307        // get a new packet
    229         *packet = packet_get_4_remote(packet_phone, length, dimension->addr_len, prefix + dimension->prefix, dimension->suffix);
    230         if(! packet){
     308        *packet = packet_get_4_remote(packet_phone, length, dimension->addr_len,
     309            prefix + dimension->prefix, dimension->suffix);
     310        if (!packet)
    231311                return ENOMEM;
    232         }
     312
    233313        // allocate space in the packet
    234314        data = packet_suffix(*packet, length);
    235         if(! data){
     315        if (!data) {
    236316                pq_release_remote(packet_phone, packet_get_id(*packet));
    237317                return ENOMEM;
    238318        }
     319
    239320        // 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))){
     321        if (ERROR_OCCURRED(async_data_write_finalize(callid, data, length)) ||
     322            // set the packet destination address
     323            ERROR_OCCURRED(packet_set_addr(*packet, NULL, (uint8_t *) addr,
     324            addrlen))) {
    243325                pq_release_remote(packet_phone, packet_get_id(*packet));
    244326                return ERROR_CODE;
    245327        }
     328
    246329        return (int) length;
    247330}
  • uspace/lib/packet/Makefile

    raab02fb refedee77  
    2828#
    2929
    30 USPACE_PREFIX = ../../../..
    31 LIBS = $(LIBPCI_PREFIX)/libpci.a
    32 EXTRA_CFLAGS = -I$(LIBPCI_PREFIX)
    33 BINARY = pci
     30USPACE_PREFIX = ../..
     31EXTRA_CFLAGS = -Iinclude
     32LIBRARY = libpacket
    3433
    3534SOURCES = \
    36         pci.c
     35        generic/packet_server.c
    3736
    3837include $(USPACE_PREFIX)/Makefile.common
Note: See TracChangeset for help on using the changeset viewer.