Changes in / [e7f6389:e503d3a9] in mainline


Ignore:
Location:
uspace/srv/net
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/net/netif/lo/lo.c

    re7f6389 re503d3a9  
    2828
    2929/** @addtogroup lo
    30  * @{
     30 *  @{
    3131 */
    3232
    3333/** @file
    34  * Loopback network interface implementation.
     34 *  Loopback network interface implementation.
    3535 */
    3636
     
    5353#include <netif_local.h>
    5454
    55 /** Default hardware address. */
     55/** Default hardware address.
     56 */
    5657#define DEFAULT_ADDR            "\0\0\0\0\0\0"
    5758
    58 /** Default address length. */
     59/** Default address length.
     60 */
    5961#define DEFAULT_ADDR_LEN        (sizeof(DEFAULT_ADDR) / sizeof(char))
    6062
    61 /** Loopback module name. */
     63/** Loopback module name.
     64 */
    6265#define NAME  "lo"
    6366
    64 /** Network interface global data. */
     67/** Network interface global data.
     68 */
    6569netif_globals_t netif_globals;
    6670
    67 int
    68 netif_specific_message(ipc_callid_t callid, ipc_call_t *call,
    69     ipc_call_t *answer, int *answer_count)
    70 {
     71/** Changes the loopback state.
     72 *  @param[in] device The device structure.
     73 *  @param[in] state The new device state.
     74 *  @returns The new state if changed.
     75 *  @returns EOK otherwise.
     76 */
     77int change_state_message(netif_device_t * device, device_state_t state);
     78
     79/** Creates and returns the loopback network interface structure.
     80 *  @param[in] device_id The new devce identifier.
     81 *  @param[out] device The device structure.
     82 *  @returns EOK on success.
     83 *  @returns EXDEV if one loopback network interface already exists.
     84 *  @returns ENOMEM if there is not enough memory left.
     85 */
     86int create(device_id_t device_id, netif_device_t * * device);
     87
     88int netif_specific_message(ipc_callid_t callid, ipc_call_t * call, ipc_call_t * answer, int * answer_count){
    7189        return ENOTSUP;
    7290}
    7391
    74 int netif_get_addr_message(device_id_t device_id, measured_string_ref address)
    75 {
    76         if (!address)
     92int netif_get_addr_message(device_id_t device_id, measured_string_ref address){
     93        if(! address){
    7794                return EBADMEM;
     95        }
    7896        address->value = str_dup(DEFAULT_ADDR);
    7997        address->length = DEFAULT_ADDR_LEN;
     
    8199}
    82100
    83 int netif_get_device_stats(device_id_t device_id, device_stats_ref stats)
    84 {
    85         ERROR_DECLARE;
    86 
    87         netif_device_t *device;
    88 
    89         if (!stats)
     101int netif_get_device_stats(device_id_t device_id, device_stats_ref stats){
     102        ERROR_DECLARE;
     103
     104        netif_device_t * device;
     105
     106        if(! stats){
    90107                return EBADMEM;
     108        }
    91109        ERROR_PROPAGATE(find_device(device_id, &device));
    92         memcpy(stats, (device_stats_ref) device->specific,
    93             sizeof(device_stats_t));
    94         return EOK;
    95 }
    96 
    97 /** Changes the loopback state.
    98  *
    99  * @param[in] device    The device structure.
    100  * @param[in] state     The new device state.
    101  * @returns             The new state if changed.
    102  * @returns             EOK otherwise.
    103  */
    104 static int change_state_message(netif_device_t *device, device_state_t state)
     110        memcpy(stats, (device_stats_ref) device->specific, sizeof(device_stats_t));
     111        return EOK;
     112}
     113
     114int change_state_message(netif_device_t * device, device_state_t state)
    105115{
    106116        if (device->state != state) {
     
    116126}
    117127
    118 /** Creates and returns the loopback network interface structure.
    119  *
    120  * @param[in] device_id The new devce identifier.
    121  * @param[out] device   The device structure.
    122  * @returns             EOK on success.
    123  * @returns             EXDEV if one loopback network interface already exists.
    124  * @returns             ENOMEM if there is not enough memory left.
    125  */
    126 static int create(device_id_t device_id, netif_device_t **device)
    127 {
     128int create(device_id_t device_id, netif_device_t * * device){
    128129        int index;
    129130
    130         if (netif_device_map_count(&netif_globals.device_map) > 0)
     131        if(netif_device_map_count(&netif_globals.device_map) > 0){
    131132                return EXDEV;
    132 
    133         *device = (netif_device_t *) malloc(sizeof(netif_device_t));
    134         if (!*device)
    135                 return ENOMEM;
    136         (*device)->specific = (device_stats_t *) malloc(sizeof(device_stats_t));
    137         if (!(*device)->specific) {
    138                 free(*device);
    139                 return ENOMEM;
    140         }
    141         null_device_stats((device_stats_ref) (*device)->specific);
    142         (*device)->device_id = device_id;
    143         (*device)->nil_phone = -1;
    144         (*device)->state = NETIF_STOPPED;
    145         index = netif_device_map_add(&netif_globals.device_map,
    146             (*device)->device_id, *device);
    147         if (index < 0) {
    148                 free(*device);
    149                 free((*device)->specific);
    150                 *device = NULL;
    151                 return index;
    152         }
    153        
    154         return EOK;
    155 }
    156 
    157 int netif_initialize(void)
    158 {
     133        }else{
     134                *device = (netif_device_t *) malloc(sizeof(netif_device_t));
     135                if(!(*device)){
     136                        return ENOMEM;
     137                }
     138                (** device).specific = malloc(sizeof(device_stats_t));
     139                if(! (** device).specific){
     140                        free(*device);
     141                        return ENOMEM;
     142                }
     143                null_device_stats((device_stats_ref)(** device).specific);
     144                (** device).device_id = device_id;
     145                (** device).nil_phone = -1;
     146                (** device).state = NETIF_STOPPED;
     147                index = netif_device_map_add(&netif_globals.device_map, (** device).device_id, * device);
     148                if(index < 0){
     149                        free(*device);
     150                        free((** device).specific);
     151                        *device = NULL;
     152                        return index;
     153                }
     154        }
     155        return EOK;
     156}
     157
     158int netif_initialize(void){
    159159        ipcarg_t phonehash;
    160160
     
    162162}
    163163
    164 int netif_probe_message(device_id_t device_id, int irq, uintptr_t io)
    165 {
    166         ERROR_DECLARE;
    167 
    168         netif_device_t *device;
     164int netif_probe_message(device_id_t device_id, int irq, uintptr_t io){
     165        ERROR_DECLARE;
     166
     167        netif_device_t * device;
    169168
    170169        // create a new device
     
    175174}
    176175
    177 int netif_send_message(device_id_t device_id, packet_t packet, services_t sender)
    178 {
    179         ERROR_DECLARE;
    180 
    181         netif_device_t *device;
     176int netif_send_message(device_id_t device_id, packet_t packet, services_t sender){
     177        ERROR_DECLARE;
     178
     179        netif_device_t * device;
    182180        size_t length;
    183181        packet_t next;
     
    185183
    186184        ERROR_PROPAGATE(find_device(device_id, &device));
    187         if (device->state != NETIF_ACTIVE) {
     185        if(device->state != NETIF_ACTIVE){
    188186                netif_pq_release(packet_get_id(packet));
    189187                return EFORWARD;
    190188        }
    191189        next = packet;
    192         do {
    193                 ((device_stats_ref) device->specific)->send_packets++;
    194                 ((device_stats_ref) device->specific)->receive_packets++;
     190        do{
     191                ++ ((device_stats_ref) device->specific)->send_packets;
     192                ++ ((device_stats_ref) device->specific)->receive_packets;
    195193                length = packet_get_data_length(next);
    196194                ((device_stats_ref) device->specific)->send_bytes += length;
    197195                ((device_stats_ref) device->specific)->receive_bytes += length;
    198196                next = pq_next(next);
    199         } while(next);
     197        }while(next);
    200198        phone = device->nil_phone;
    201199        fibril_rwlock_write_unlock(&netif_globals.lock);
    202200        nil_received_msg(phone, device_id, packet, sender);
    203201        fibril_rwlock_write_lock(&netif_globals.lock);
    204        
    205         return EOK;
    206 }
    207 
    208 int netif_start_message(netif_device_t *device)
    209 {
     202        return EOK;
     203}
     204
     205int netif_start_message(netif_device_t * device){
    210206        return change_state_message(device, NETIF_ACTIVE);
    211207}
    212208
    213 int netif_stop_message(netif_device_t *device)
    214 {
     209int netif_stop_message(netif_device_t * device){
    215210        return change_state_message(device, NETIF_STOPPED);
    216211}
     
    218213/** Default thread for new connections.
    219214 *
    220  * @param[in] iid       The initial message identifier.
    221  * @param[in] icall     The initial message call structure.
     215 * @param[in] iid The initial message identifier.
     216 * @param[in] icall The initial message call structure.
     217 *
    222218 */
    223219static void netif_client_connection(ipc_callid_t iid, ipc_call_t *icall)
     
    229225        ipc_answer_0(iid, EOK);
    230226       
    231         while (true) {
     227        while(true) {
    232228                ipc_call_t answer;
    233229                int answer_count;
     
    244240                    &answer_count);
    245241               
    246                 /*
    247                  * End if told to either by the message or the processing
    248                  * result.
    249                  */
    250                 if ((IPC_GET_METHOD(call) == IPC_M_PHONE_HUNGUP) ||
    251                     (res == EHANGUP))
     242                /* End if said to either by the message or the processing result */
     243                if ((IPC_GET_METHOD(call) == IPC_M_PHONE_HUNGUP) || (res == EHANGUP))
    252244                        return;
    253245               
     
    262254       
    263255        /* Start the module */
    264         ERROR_PROPAGATE(netif_module_start(netif_client_connection));
     256        if (ERROR_OCCURRED(netif_module_start(netif_client_connection)))
     257                return ERROR_CODE;
     258       
    265259        return EOK;
    266260}
  • uspace/srv/net/nil/nildummy/nildummy.c

    re7f6389 re503d3a9  
    5858#include "nildummy.h"
    5959
    60 /** The module name. */
     60/** The module name.
     61 *
     62 */
    6163#define NAME  "nildummy"
    6264
    63 /** Default maximum transmission unit. */
     65/** Default maximum transmission unit.
     66 *
     67 */
    6468#define NET_DEFAULT_MTU  1500
    6569
    66 /** Network interface layer module global data. */
     70/** Network interface layer module global data.
     71 *
     72 */
    6773nildummy_globals_t nildummy_globals;
    6874
     
    7278{
    7379        fibril_rwlock_read_lock(&nildummy_globals.protos_lock);
     80       
    7481        if (nildummy_globals.proto.phone)
    75                 il_device_state_msg(nildummy_globals.proto.phone, device_id,
    76                     state, nildummy_globals.proto.service);
     82                il_device_state_msg(nildummy_globals.proto.phone, device_id, state,
     83                    nildummy_globals.proto.service);
     84       
    7785        fibril_rwlock_read_unlock(&nildummy_globals.protos_lock);
    7886       
     
    9199        nildummy_globals.net_phone = net_phone;
    92100        nildummy_globals.proto.phone = 0;
    93         ERROR_CODE = nildummy_devices_initialize(&nildummy_globals.devices);
     101        ERROR_PROPAGATE(nildummy_devices_initialize(&nildummy_globals.devices));
    94102       
    95103        fibril_rwlock_write_unlock(&nildummy_globals.protos_lock);
    96104        fibril_rwlock_write_unlock(&nildummy_globals.devices_lock);
    97105       
    98         return ERROR_CODE;
    99 }
    100 
    101 /** Process IPC messages from the registered device driver modules in an
    102  * infinite loop.
    103  *
    104  * @param[in] iid       The message identifier.
    105  * @param[in,out]       icall The message parameters.
    106  */
    107 static void nildummy_receiver(ipc_callid_t iid, ipc_call_t *icall)
    108 {
     106        return EOK;
     107}
     108
     109/** Process IPC messages from the registered device driver modules in an infinite loop.
     110 *
     111 * @param[in]     iid   The message identifier.
     112 * @param[in,out] icall The message parameters.
     113 *
     114 */
     115static void nildummy_receiver(ipc_callid_t iid, ipc_call_t * icall){
    109116        ERROR_DECLARE;
    110117
    111118        packet_t packet;
    112119
    113         while (true) {
    114                 switch (IPC_GET_METHOD(*icall)) {
    115                 case NET_NIL_DEVICE_STATE:
    116                         ERROR_CODE = nil_device_state_msg_local(0,
    117                             IPC_GET_DEVICE(icall), IPC_GET_STATE(icall));
    118                         ipc_answer_0(iid, (ipcarg_t) ERROR_CODE);
    119                         break;
    120                
    121                 case NET_NIL_RECEIVED:
    122                         if (ERROR_NONE(packet_translate_remote(
    123                             nildummy_globals.net_phone, &packet,
    124                             IPC_GET_PACKET(icall)))) {
    125                                 ERROR_CODE = nil_received_msg_local(0,
    126                                     IPC_GET_DEVICE(icall), packet, 0);
    127                         }
    128                         ipc_answer_0(iid, (ipcarg_t) ERROR_CODE);
    129                         break;
    130                
    131                 default:
    132                         ipc_answer_0(iid, (ipcarg_t) ENOTSUP);
    133                 }
    134                
     120        while(true){
     121                switch(IPC_GET_METHOD(*icall)){
     122                        case NET_NIL_DEVICE_STATE:
     123                                ERROR_CODE = nil_device_state_msg_local(0, IPC_GET_DEVICE(icall), IPC_GET_STATE(icall));
     124                                ipc_answer_0(iid, (ipcarg_t) ERROR_CODE);
     125                                break;
     126                        case NET_NIL_RECEIVED:
     127                                if(! ERROR_OCCURRED(packet_translate_remote(nildummy_globals.net_phone, &packet, IPC_GET_PACKET(icall)))){
     128                                        ERROR_CODE = nil_received_msg_local(0, IPC_GET_DEVICE(icall), packet, 0);
     129                                }
     130                                ipc_answer_0(iid, (ipcarg_t) ERROR_CODE);
     131                                break;
     132                        default:
     133                                ipc_answer_0(iid, (ipcarg_t) ENOTSUP);
     134                }
    135135                iid = async_get_call(icall);
    136136        }
     
    141141 * Determine the device local hardware address.
    142142 *
    143  * @param[in] device_id The new device identifier.
    144  * @param[in] service   The device driver service.
    145  * @param[in] mtu       The device maximum transmission unit.
    146  * @returns             EOK on success.
    147  * @returns             EEXIST if the device with the different service exists.
    148  * @returns             ENOMEM if there is not enough memory left.
    149  * @returns             Other error codes as defined for the
    150  *                      netif_bind_service() function.
    151  * @returns             Other error codes as defined for the
    152  *                      netif_get_addr_req() function.
    153  */
    154 static int
    155 nildummy_device_message(device_id_t device_id, services_t service, size_t mtu)
     143 * @param[in] device_id The new device identifier.
     144 * @param[in] service   The device driver service.
     145 * @param[in] mtu       The device maximum transmission unit.
     146 *
     147 * @returns EOK on success.
     148 * @returns EEXIST if the device with the different service exists.
     149 * @returns ENOMEM if there is not enough memory left.
     150 * @returns Other error codes as defined for the netif_bind_service() function.
     151 * @returns Other error codes as defined for the netif_get_addr_req() function.
     152 *
     153 */
     154static int nildummy_device_message(device_id_t device_id, services_t service,
     155    size_t mtu)
    156156{
    157157        ERROR_DECLARE;
     
    161161
    162162        fibril_rwlock_write_lock(&nildummy_globals.devices_lock);
    163 
    164163        // an existing device?
    165164        device = nildummy_devices_find(&nildummy_globals.devices, device_id);
    166         if (device) {
    167                 if (device->service != service) {
     165        if(device){
     166                if(device->service != service){
    168167                        printf("Device %d already exists\n", device->device_id);
    169                         fibril_rwlock_write_unlock(
    170                             &nildummy_globals.devices_lock);
     168                        fibril_rwlock_write_unlock(&nildummy_globals.devices_lock);
    171169                        return EEXIST;
    172                 }
    173                
    174                 // update mtu
    175                 if (mtu > 0)
     170                }else{
     171                        // update mtu
     172                        if(mtu > 0){
     173                                device->mtu = mtu;
     174                        }else{
     175                                device->mtu = NET_DEFAULT_MTU;
     176                        }
     177                        printf("Device %d already exists:\tMTU\t= %d\n", device->device_id, device->mtu);
     178                        fibril_rwlock_write_unlock(&nildummy_globals.devices_lock);
     179                        // notify the upper layer module
     180                        fibril_rwlock_read_lock(&nildummy_globals.protos_lock);
     181                        if(nildummy_globals.proto.phone){
     182                                il_mtu_changed_msg(nildummy_globals.proto.phone, device->device_id, device->mtu, nildummy_globals.proto.service);
     183                        }
     184                        fibril_rwlock_read_unlock(&nildummy_globals.protos_lock);
     185                        return EOK;
     186                }
     187        }else{
     188                // create a new device
     189                device = (nildummy_device_ref) malloc(sizeof(nildummy_device_t));
     190                if(! device){
     191                        return ENOMEM;
     192                }
     193                device->device_id = device_id;
     194                device->service = service;
     195                if(mtu > 0){
    176196                        device->mtu = mtu;
    177                 else
     197                }else{
    178198                        device->mtu = NET_DEFAULT_MTU;
    179                
    180                 printf("Device %d already exists:\tMTU\t= %d\n",
    181                     device->device_id, device->mtu);
    182                 fibril_rwlock_write_unlock(&nildummy_globals.devices_lock);
    183                
    184                 // notify the upper layer module
    185                 fibril_rwlock_read_lock(&nildummy_globals.protos_lock);
    186                 if (nildummy_globals.proto.phone) {
    187                         il_mtu_changed_msg(nildummy_globals.proto.phone,
    188                             device->device_id, device->mtu,
    189                             nildummy_globals.proto.service);
    190                 }
    191                 fibril_rwlock_read_unlock(&nildummy_globals.protos_lock);
    192                
    193                 return EOK;
    194         }
    195        
    196         // create a new device
    197         device = (nildummy_device_ref) malloc(sizeof(nildummy_device_t));
    198         if (!device)
    199                 return ENOMEM;
    200        
    201         device->device_id = device_id;
    202         device->service = service;
    203         if (mtu > 0)
    204                 device->mtu = mtu;
    205         else
    206                 device->mtu = NET_DEFAULT_MTU;
    207 
    208         // bind the device driver
    209         device->phone = netif_bind_service(device->service, device->device_id,
    210             SERVICE_ETHERNET, nildummy_receiver);
    211         if (device->phone < 0) {
    212                 fibril_rwlock_write_unlock(&nildummy_globals.devices_lock);
    213                 free(device);
    214                 return device->phone;
    215         }
    216        
    217         // get hardware address
    218         if (ERROR_OCCURRED(netif_get_addr_req(device->phone, device->device_id,
    219             &device->addr, &device->addr_data))) {
    220                 fibril_rwlock_write_unlock(&nildummy_globals.devices_lock);
    221                 free(device);
    222                 return ERROR_CODE;
    223         }
    224        
    225         // add to the cache
    226         index = nildummy_devices_add(&nildummy_globals.devices,
    227             device->device_id, device);
    228         if (index < 0) {
    229                 fibril_rwlock_write_unlock(&nildummy_globals.devices_lock);
    230                 free(device->addr);
    231                 free(device->addr_data);
    232                 free(device);
    233                 return index;
    234         }
    235        
    236         printf("%s: Device registered (id: %d, service: %d, mtu: %d)\n",
    237             NAME, device->device_id, device->service, device->mtu);
     199                }
     200                // bind the device driver
     201                device->phone = netif_bind_service(device->service, device->device_id, SERVICE_ETHERNET, nildummy_receiver);
     202                if(device->phone < 0){
     203                        fibril_rwlock_write_unlock(&nildummy_globals.devices_lock);
     204                        free(device);
     205                        return device->phone;
     206                }
     207                // get hardware address
     208                if(ERROR_OCCURRED(netif_get_addr_req(device->phone, device->device_id, &device->addr, &device->addr_data))){
     209                        fibril_rwlock_write_unlock(&nildummy_globals.devices_lock);
     210                        free(device);
     211                        return ERROR_CODE;
     212                }
     213                // add to the cache
     214                index = nildummy_devices_add(&nildummy_globals.devices, device->device_id, device);
     215                if(index < 0){
     216                        fibril_rwlock_write_unlock(&nildummy_globals.devices_lock);
     217                        free(device->addr);
     218                        free(device->addr_data);
     219                        free(device);
     220                        return index;
     221                }
     222                printf("%s: Device registered (id: %d, service: %d, mtu: %d)\n",
     223                    NAME, device->device_id, device->service, device->mtu);
     224        }
    238225        fibril_rwlock_write_unlock(&nildummy_globals.devices_lock);
    239226        return EOK;
     
    242229/** Return the device hardware address.
    243230 *
    244  * @param[in] device_id The device identifier.
    245  * @param[out] address  The device hardware address.
    246  * @return               EOK on success.
    247  * @return              EBADMEM if the address parameter is NULL.
    248  * @return              ENOENT if there no such device.
    249  *
    250  */
    251 static int
    252 nildummy_addr_message(device_id_t device_id, measured_string_ref *address)
     231 * @param[in]  device_id The device identifier.
     232 * @param[out] address   The device hardware address.
     233 *
     234 * @return EOK on success.
     235 * @return EBADMEM if the address parameter is NULL.
     236 * @return ENOENT if there no such device.
     237 *
     238 */
     239static int nildummy_addr_message(device_id_t device_id,
     240    measured_string_ref *address)
    253241{
    254242        nildummy_device_ref device;
    255243
    256         if (!address)
     244        if(! address){
    257245                return EBADMEM;
    258        
     246        }
    259247        fibril_rwlock_read_lock(&nildummy_globals.devices_lock);
    260248        device = nildummy_devices_find(&nildummy_globals.devices, device_id);
    261         if (!device) {
     249        if(! device){
    262250                fibril_rwlock_read_unlock(&nildummy_globals.devices_lock);
    263251                return ENOENT;
     
    265253        *address = device->addr;
    266254        fibril_rwlock_read_unlock(&nildummy_globals.devices_lock);
    267        
    268255        return (*address) ? EOK : ENOENT;
    269256}
     
    271258/** Return the device packet dimensions for sending.
    272259 *
    273  * @param[in] device_id The device identifier.
    274  * @param[out] addr_len The minimum reserved address length.
    275  * @param[out] prefix   The minimum reserved prefix size.
    276  * @param[out] content  The maximum content size.
    277  * @param[out] suffix   The minimum reserved suffix size.
    278  * @return              EOK on success.
    279  * @return              EBADMEM if either one of the parameters is NULL.
    280  * @return              ENOENT if there is no such device.
    281  *
    282  */
    283 static int
    284 nildummy_packet_space_message(device_id_t device_id, size_t *addr_len,
    285     size_t *prefix, size_t *content, size_t *suffix)
     260 * @param[in]  device_id The device identifier.
     261 * @param[out] addr_len  The minimum reserved address length.
     262 * @param[out] prefix    The minimum reserved prefix size.
     263 * @param[out] content   The maximum content size.
     264 * @param[out] suffix    The minimum reserved suffix size.
     265 *
     266 * @return EOK on success.
     267 * @return EBADMEM if either one of the parameters is NULL.
     268 * @return ENOENT if there is no such device.
     269 *
     270 */
     271static int nildummy_packet_space_message(device_id_t device_id,
     272    size_t *addr_len, size_t *prefix, size_t *content, size_t *suffix)
    286273{
    287274        nildummy_device_ref device;
    288275
    289         if (!addr_len || !prefix || !content || !suffix)
     276        if(!(addr_len && prefix && content && suffix)){
    290277                return EBADMEM;
    291        
     278        }
    292279        fibril_rwlock_read_lock(&nildummy_globals.devices_lock);
    293280        device = nildummy_devices_find(&nildummy_globals.devices, device_id);
    294         if (!device) {
     281        if(! device){
    295282                fibril_rwlock_read_unlock(&nildummy_globals.devices_lock);
    296283                return ENOENT;
     
    298285        *content = device->mtu;
    299286        fibril_rwlock_read_unlock(&nildummy_globals.devices_lock);
    300        
    301287        *addr_len = 0;
    302288        *prefix = 0;
     
    305291}
    306292
    307 int
    308 nil_received_msg_local(int nil_phone, device_id_t device_id, packet_t packet,
    309     services_t target)
    310 {
     293int nil_received_msg_local(int nil_phone, device_id_t device_id, packet_t packet, services_t target){
    311294        packet_t next;
    312295
    313296        fibril_rwlock_read_lock(&nildummy_globals.protos_lock);
    314         if (nildummy_globals.proto.phone) {
    315                 do {
     297        if(nildummy_globals.proto.phone){
     298                do{
    316299                        next = pq_detach(packet);
    317                         il_received_msg(nildummy_globals.proto.phone, device_id,
    318                             packet, nildummy_globals.proto.service);
     300                        il_received_msg(nildummy_globals.proto.phone, device_id, packet, nildummy_globals.proto.service);
    319301                        packet = next;
    320                 } while(packet);
     302                }while(packet);
    321303        }
    322304        fibril_rwlock_read_unlock(&nildummy_globals.protos_lock);
    323        
    324305        return EOK;
    325306}
     
    329310 * Pass received packets for this service.
    330311 *
    331  * @param[in] service   The module service.
    332  * @param[in] phone     The service phone.
    333  * @return              EOK on success.
    334  * @return              ENOENT if the service is not known.
    335  * @return              ENOMEM if there is not enough memory left.
     312 * @param[in] service The module service.
     313 * @param[in] phone   The service phone.
     314 *
     315 * @return EOK on success.
     316 * @return ENOENT if the service is not known.
     317 * @return ENOMEM if there is not enough memory left.
     318 *
    336319 */
    337320static int nildummy_register_message(services_t service, int phone)
     
    350333/** Send the packet queue.
    351334 *
    352  * @param[in] device_id The device identifier.
    353  * @param[in] packet    The packet queue.
    354  * @param[in] sender    The sending module service.
    355  * @return              EOK on success.
    356  * @return              ENOENT if there no such device.
    357  * @return              EINVAL if the service parameter is not known.
    358  */
    359 static int
    360 nildummy_send_message(device_id_t device_id, packet_t packet, services_t sender)
     335 * @param[in] device_id The device identifier.
     336 * @param[in] packet    The packet queue.
     337 * @param[in] sender    The sending module service.
     338 *
     339 * @return EOK on success.
     340 * @return ENOENT if there no such device.
     341 * @return EINVAL if the service parameter is not known.
     342 *
     343 */
     344static int nildummy_send_message(device_id_t device_id, packet_t packet,
     345    services_t sender)
    361346{
    362347        nildummy_device_ref device;
     
    364349        fibril_rwlock_read_lock(&nildummy_globals.devices_lock);
    365350        device = nildummy_devices_find(&nildummy_globals.devices, device_id);
    366         if (!device) {
     351        if(! device){
    367352                fibril_rwlock_read_unlock(&nildummy_globals.devices_lock);
    368353                return ENOENT;
    369354        }
    370355        // send packet queue
    371         if (packet)
    372                 netif_send_msg(device->phone, device_id, packet,
    373                     SERVICE_NILDUMMY);
     356        if(packet){
     357                netif_send_msg(device->phone, device_id, packet, SERVICE_NILDUMMY);
     358        }
    374359        fibril_rwlock_read_unlock(&nildummy_globals.devices_lock);
    375360        return EOK;
    376361}
    377362
    378 int
    379 nil_message_standalone(const char *name, ipc_callid_t callid, ipc_call_t *call,
     363int nil_message_standalone(const char *name, ipc_callid_t callid, ipc_call_t *call,
    380364    ipc_call_t *answer, int *answer_count)
    381365{
     
    391375        *answer_count = 0;
    392376        switch (IPC_GET_METHOD(*call)) {
    393         case IPC_M_PHONE_HUNGUP:
    394                 return EOK;
    395        
    396         case NET_NIL_DEVICE:
    397                 return nildummy_device_message(IPC_GET_DEVICE(call),
    398                     IPC_GET_SERVICE(call), IPC_GET_MTU(call));
    399        
    400         case NET_NIL_SEND:
    401                 ERROR_PROPAGATE(packet_translate_remote(
    402                     nildummy_globals.net_phone, &packet, IPC_GET_PACKET(call)));
    403                 return nildummy_send_message(IPC_GET_DEVICE(call), packet,
    404                     IPC_GET_SERVICE(call));
    405        
    406         case NET_NIL_PACKET_SPACE:
    407                 ERROR_PROPAGATE(nildummy_packet_space_message(
    408                     IPC_GET_DEVICE(call), &addrlen, &prefix, &content,
    409                     &suffix));
    410                 IPC_SET_ADDR(answer, addrlen);
    411                 IPC_SET_PREFIX(answer, prefix);
    412                 IPC_SET_CONTENT(answer, content);
    413                 IPC_SET_SUFFIX(answer, suffix);
    414                 *answer_count = 4;
    415                 return EOK;
    416        
    417         case NET_NIL_ADDR:
    418                 ERROR_PROPAGATE(nildummy_addr_message(IPC_GET_DEVICE(call),
    419                     &address));
    420                 return measured_strings_reply(address, 1);
    421        
    422         case NET_NIL_BROADCAST_ADDR:
    423                 ERROR_PROPAGATE(nildummy_addr_message(IPC_GET_DEVICE(call),
    424                     &address));
    425                 return measured_strings_reply(address, 1);
    426        
    427         case IPC_M_CONNECT_TO_ME:
    428                 return nildummy_register_message(NIL_GET_PROTO(call),
    429                     IPC_GET_PHONE(call));
     377                case IPC_M_PHONE_HUNGUP:
     378                        return EOK;
     379                case NET_NIL_DEVICE:
     380                        return nildummy_device_message(IPC_GET_DEVICE(call),
     381                            IPC_GET_SERVICE(call), IPC_GET_MTU(call));
     382                case NET_NIL_SEND:
     383                        ERROR_PROPAGATE(packet_translate_remote(nildummy_globals.net_phone,
     384                            &packet, IPC_GET_PACKET(call)));
     385                        return nildummy_send_message(IPC_GET_DEVICE(call), packet,
     386                            IPC_GET_SERVICE(call));
     387                case NET_NIL_PACKET_SPACE:
     388                        ERROR_PROPAGATE(nildummy_packet_space_message(IPC_GET_DEVICE(call),
     389                            &addrlen, &prefix, &content, &suffix));
     390                        IPC_SET_ADDR(answer, addrlen);
     391                        IPC_SET_PREFIX(answer, prefix);
     392                        IPC_SET_CONTENT(answer, content);
     393                        IPC_SET_SUFFIX(answer, suffix);
     394                        *answer_count = 4;
     395                        return EOK;
     396                case NET_NIL_ADDR:
     397                        ERROR_PROPAGATE(nildummy_addr_message(IPC_GET_DEVICE(call),
     398                            &address));
     399                        return measured_strings_reply(address, 1);
     400                case NET_NIL_BROADCAST_ADDR:
     401                        ERROR_PROPAGATE(nildummy_addr_message(IPC_GET_DEVICE(call),
     402                            &address));
     403                        return measured_strings_reply(address, 1);
     404                case IPC_M_CONNECT_TO_ME:
     405                        return nildummy_register_message(NIL_GET_PROTO(call),
     406                            IPC_GET_PHONE(call));
    430407        }
    431408       
     
    435412/** Default thread for new connections.
    436413 *
    437  * @param[in] iid       The initial message identifier.
    438  * @param[in] icall     The initial message call structure.
     414 * @param[in] iid   The initial message identifier.
     415 * @param[in] icall The initial message call structure.
     416 *
    439417 */
    440418static void nil_client_connection(ipc_callid_t iid, ipc_call_t *icall)
     
    446424        ipc_answer_0(iid, EOK);
    447425       
    448         while (true) {
     426        while(true) {
    449427                ipc_call_t answer;
    450428                int answer_count;
     
    458436               
    459437                /* Process the message */
    460                 int res = nil_module_message_standalone(NAME, callid, &call,
    461                     &answer, &answer_count);
     438                int res = nil_module_message_standalone(NAME, callid, &call, &answer,
     439                    &answer_count);
    462440               
    463                 /*
    464                  * End if told to either by the message or the processing
    465                  * result.
    466                  */
    467                 if ((IPC_GET_METHOD(call) == IPC_M_PHONE_HUNGUP) ||
    468                     (res == EHANGUP))
     441                /* End if said to either by the message or the processing result */
     442                if ((IPC_GET_METHOD(call) == IPC_M_PHONE_HUNGUP) || (res == EHANGUP))
    469443                        return;
    470444               
     
    479453       
    480454        /* Start the module */
    481         ERROR_PROPAGATE(nil_module_start_standalone(nil_client_connection));
     455        if (ERROR_OCCURRED(nil_module_start_standalone(nil_client_connection)))
     456                return ERROR_CODE;
     457       
    482458        return EOK;
    483459}
Note: See TracChangeset for help on using the changeset viewer.