Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/net/il/arp/arp.c

    rffa2c8ef r6b82009  
    157157                       
    158158                        arp_clear_addr(&proto->addresses);
    159                         arp_addr_destroy(&proto->addresses);
    160                 }
    161         }
    162        
    163         arp_protos_clear(&device->protos);
    164 }
    165 
    166 static int arp_clean_cache_req(int arp_phone)
     159                        arp_addr_destroy(&proto->addresses, free);
     160                }
     161        }
     162       
     163        arp_protos_clear(&device->protos, free);
     164}
     165
     166static int arp_clean_cache_req(void)
    167167{
    168168        int count;
     
    184184        }
    185185       
    186         arp_cache_clear(&arp_globals.cache);
     186        arp_cache_clear(&arp_globals.cache, free);
    187187        fibril_mutex_unlock(&arp_globals.lock);
    188188       
     
    190190}
    191191
    192 static int arp_clear_address_req(int arp_phone, device_id_t device_id,
    193     services_t protocol, measured_string_t *address)
     192static int arp_clear_address_req(device_id_t device_id, services_t protocol,
     193    measured_string_t *address)
    194194{
    195195        fibril_mutex_lock(&arp_globals.lock);
     
    212212                arp_clear_trans(trans);
    213213       
    214         arp_addr_exclude(&proto->addresses, address->value, address->length);
     214        arp_addr_exclude(&proto->addresses, address->value, address->length, free);
    215215       
    216216        fibril_mutex_unlock(&arp_globals.lock);
     
    218218}
    219219
    220 static int arp_clear_device_req(int arp_phone, device_id_t device_id)
     220static int arp_clear_device_req(device_id_t device_id)
    221221{
    222222        fibril_mutex_lock(&arp_globals.lock);
     
    345345                            header->protocol_length, trans);
    346346                        if (rc != EOK) {
    347                                 /* The generic char map has already freed trans! */
     347                                free(trans);
    348348                                return rc;
    349349                        }
     
    375375                                return rc;
    376376                       
    377                         nil_send_msg(device->phone, device_id, packet,
     377                        nil_send_msg(device->sess, device_id, packet,
    378378                            SERVICE_ARP);
    379379                        return 1;
     
    416416 * @param[in]     iid   Message identifier.
    417417 * @param[in,out] icall Message parameters.
    418  *
    419  */
    420 static void arp_receiver(ipc_callid_t iid, ipc_call_t *icall)
     418 * @param[in]     arg   Local argument.
     419 *
     420 */
     421static void arp_receiver(ipc_callid_t iid, ipc_call_t *icall, void *arg)
    421422{
    422423        packet_t *packet;
     
    431432               
    432433                case NET_IL_RECEIVED:
    433                         rc = packet_translate_remote(arp_globals.net_phone, &packet,
     434                        rc = packet_translate_remote(arp_globals.net_sess, &packet,
    434435                            IPC_GET_PACKET(*icall));
    435436                        if (rc == EOK) {
     
    439440                                        rc = arp_receive_message(IPC_GET_DEVICE(*icall), packet);
    440441                                        if (rc != 1) {
    441                                                 pq_release_remote(arp_globals.net_phone,
     442                                                pq_release_remote(arp_globals.net_sess,
    442443                                                    packet_get_id(packet));
    443444                                        }
     
    556557                if (index < 0) {
    557558                        fibril_mutex_unlock(&arp_globals.lock);
    558                         arp_protos_destroy(&device->protos);
     559                        arp_protos_destroy(&device->protos, free);
    559560                        free(device);
    560561                        return index;
     
    564565               
    565566                /* Bind */
    566                 device->phone = nil_bind_service(device->service,
     567                device->sess = nil_bind_service(device->service,
    567568                    (sysarg_t) device->device_id, SERVICE_ARP,
    568569                    arp_receiver);
    569                 if (device->phone < 0) {
    570                         fibril_mutex_unlock(&arp_globals.lock);
    571                         arp_protos_destroy(&device->protos);
     570                if (device->sess == NULL) {
     571                        fibril_mutex_unlock(&arp_globals.lock);
     572                        arp_protos_destroy(&device->protos, free);
    572573                        free(device);
    573574                        return EREFUSED;
     
    575576               
    576577                /* Get packet dimensions */
    577                 rc = nil_packet_size_req(device->phone, device_id,
     578                rc = nil_packet_size_req(device->sess, device_id,
    578579                    &device->packet_dimension);
    579580                if (rc != EOK) {
    580581                        fibril_mutex_unlock(&arp_globals.lock);
    581                         arp_protos_destroy(&device->protos);
     582                        arp_protos_destroy(&device->protos, free);
    582583                        free(device);
    583584                        return rc;
     
    585586               
    586587                /* Get hardware address */
    587                 rc = nil_get_addr_req(device->phone, device_id, &device->addr,
     588                rc = nil_get_addr_req(device->sess, device_id, &device->addr,
    588589                    &device->addr_data);
    589590                if (rc != EOK) {
    590591                        fibril_mutex_unlock(&arp_globals.lock);
    591                         arp_protos_destroy(&device->protos);
     592                        arp_protos_destroy(&device->protos, free);
    592593                        free(device);
    593594                        return rc;
     
    595596               
    596597                /* Get broadcast address */
    597                 rc = nil_get_broadcast_addr_req(device->phone, device_id,
     598                rc = nil_get_broadcast_addr_req(device->sess, device_id,
    598599                    &device->broadcast_addr, &device->broadcast_data);
    599600                if (rc != EOK) {
     
    601602                        free(device->addr);
    602603                        free(device->addr_data);
    603                         arp_protos_destroy(&device->protos);
     604                        arp_protos_destroy(&device->protos, free);
    604605                        free(device);
    605606                        return rc;
     
    614615                        free(device->broadcast_addr);
    615616                        free(device->broadcast_data);
    616                         arp_protos_destroy(&device->protos);
     617                        arp_protos_destroy(&device->protos, free);
    617618                        free(device);
    618619                        return rc;
     
    627628}
    628629
    629 int il_initialize(int net_phone)
     630int il_initialize(async_sess_t *net_sess)
    630631{
    631632        fibril_mutex_initialize(&arp_globals.lock);
    632633       
    633634        fibril_mutex_lock(&arp_globals.lock);
    634         arp_globals.net_phone = net_phone;
     635        arp_globals.net_sess = net_sess;
    635636        int rc = arp_cache_initialize(&arp_globals.cache);
    636637        fibril_mutex_unlock(&arp_globals.lock);
     
    647648                return ELIMIT;
    648649       
    649         packet_t *packet = packet_get_4_remote(arp_globals.net_phone,
     650        packet_t *packet = packet_get_4_remote(arp_globals.net_sess,
    650651            device->packet_dimension.addr_len, device->packet_dimension.prefix,
    651652            length, device->packet_dimension.suffix);
     
    655656        arp_header_t *header = (arp_header_t *) packet_suffix(packet, length);
    656657        if (!header) {
    657                 pq_release_remote(arp_globals.net_phone, packet_get_id(packet));
     658                pq_release_remote(arp_globals.net_sess, packet_get_id(packet));
    658659                return ENOMEM;
    659660        }
     
    680681            (uint8_t *) device->broadcast_addr->value, device->addr->length);
    681682        if (rc != EOK) {
    682                 pq_release_remote(arp_globals.net_phone, packet_get_id(packet));
     683                pq_release_remote(arp_globals.net_sess, packet_get_id(packet));
    683684                return rc;
    684685        }
    685686       
    686         nil_send_msg(device->phone, device_id, packet, SERVICE_ARP);
     687        nil_send_msg(device->sess, device_id, packet, SERVICE_ARP);
    687688        return EOK;
    688689}
     
    746747                        arp_clear_trans(trans);
    747748                        arp_addr_exclude(&proto->addresses, target->value,
    748                             target->length);
     749                            target->length, free);
    749750                        return EAGAIN;
    750751                }
     
    794795            trans);
    795796        if (rc != EOK) {
    796                 /* The generic char map has already freed trans! */
     797                free(trans);
    797798                return rc;
    798799        }
     
    807808                arp_clear_trans(trans);
    808809                arp_addr_exclude(&proto->addresses, target->value,
    809                     target->length);
     810                    target->length, free);
    810811                return ENOENT;
    811812        }
     
    845846       
    846847        *count = 0;
     848       
     849        if (!IPC_GET_IMETHOD(*call))
     850                return EOK;
     851       
    847852        switch (IPC_GET_IMETHOD(*call)) {
    848         case IPC_M_PHONE_HUNGUP:
    849                 return EOK;
    850        
    851853        case NET_ARP_DEVICE:
    852854                rc = measured_strings_receive(&address, &data, 1);
     
    889891       
    890892        case NET_ARP_CLEAR_DEVICE:
    891                 return arp_clear_device_req(0, IPC_GET_DEVICE(*call));
     893                return arp_clear_device_req(IPC_GET_DEVICE(*call));
    892894       
    893895        case NET_ARP_CLEAR_ADDRESS:
     
    896898                        return rc;
    897899               
    898                 arp_clear_address_req(0, IPC_GET_DEVICE(*call),
     900                arp_clear_address_req(IPC_GET_DEVICE(*call),
    899901                    IPC_GET_SERVICE(*call), address);
    900902                free(address);
     
    903905       
    904906        case NET_ARP_CLEAN_CACHE:
    905                 return arp_clean_cache_req(0);
     907                return arp_clean_cache_req();
    906908        }
    907909       
Note: See TracChangeset for help on using the changeset viewer.