Changeset fa101c4 in mainline for uspace/srv/inet/inetcfg.c


Ignore:
Timestamp:
2012-03-08T22:30:19Z (12 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
637a3b4
Parents:
291c792
Message:

Address deletion (needs better synchronization).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/inet/inetcfg.c

    r291c792 rfa101c4  
    8585static int inetcfg_addr_delete(sysarg_t addr_id)
    8686{
    87         return ENOTSUP;
     87        inet_addrobj_t *addr;
     88
     89        addr = inet_addrobj_get_by_id(addr_id);
     90        if (addr == NULL)
     91                return ENOENT;
     92
     93        inet_addrobj_remove(addr);
     94        inet_addrobj_delete(addr);
     95
     96        return EOK;
    8897}
    8998
     
    100109        ainfo->name = str_dup(addr->name);
    101110
     111        return EOK;
     112}
     113
     114static int inetcfg_addr_get_id(char *name, sysarg_t link_id, sysarg_t *addr_id)
     115{
     116        inet_link_t *ilink;
     117        inet_addrobj_t *addr;
     118
     119        ilink = inet_link_get_by_id(link_id);
     120        if (ilink == NULL) {
     121                log_msg(LVL_DEBUG, "Link %zu not found.", (size_t) link_id);
     122                return ENOENT;
     123        }
     124
     125        addr = inet_addrobj_find_by_name(name, ilink);
     126        if (addr == NULL) {
     127                log_msg(LVL_DEBUG, "Address '%s' not found.", name);
     128                return ENOENT;
     129        }
     130
     131        *addr_id = addr->id;
    102132        return EOK;
    103133}
     
    202232        async_answer_3(callid, retval, ainfo.naddr.ipv4, ainfo.naddr.bits,
    203233            ainfo.ilink);
     234}
     235
     236static void inetcfg_addr_get_id_srv(ipc_callid_t callid, ipc_call_t *call)
     237{
     238        char *name;
     239        sysarg_t link_id;
     240        sysarg_t addr_id;
     241        int rc;
     242
     243        log_msg(LVL_DEBUG, "inetcfg_addr_get_id_srv()");
     244
     245        link_id = IPC_GET_ARG1(*call);
     246
     247        rc = async_data_write_accept((void **) &name, true, 0, LOC_NAME_MAXLEN,
     248            0, NULL);
     249        if (rc != EOK) {
     250                async_answer_0(callid, rc);
     251                return;
     252        }
     253
     254        addr_id = 0;
     255        rc = inetcfg_addr_get_id(name, link_id, &addr_id);
     256        free(name);
     257        async_answer_1(callid, rc, addr_id);
    204258}
    205259
     
    333387                        inetcfg_addr_get_srv(callid, &call);
    334388                        break;
     389                case INETCFG_ADDR_GET_ID:
     390                        inetcfg_addr_get_id_srv(callid, &call);
     391                        break;
    335392                case INETCFG_GET_ADDR_LIST:
    336393                        inetcfg_get_addr_list_srv(callid, &call);
Note: See TracChangeset for help on using the changeset viewer.