Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/c/generic/inetcfg.c

    r77ad86c r7af0cc5  
    137137{
    138138        async_exch_t *exch = async_exchange_begin(inetcfg_sess);
    139 
    140         ipc_call_t answer;
    141         aid_t req = async_send_3(exch, INETCFG_ADDR_CREATE_STATIC, naddr->ipv4,
    142             naddr->bits, link_id, &answer);
     139       
     140        ipc_call_t answer;
     141        aid_t req = async_send_1(exch, INETCFG_ADDR_CREATE_STATIC, link_id,
     142            &answer);
     143       
     144        int rc = async_data_write_start(exch, naddr, sizeof(inet_naddr_t));
     145        if (rc != EOK) {
     146                async_exchange_end(exch);
     147                async_forget(req);
     148                return rc;
     149        }
     150       
     151        rc = async_data_write_start(exch, name, str_size(name));
     152       
     153        async_exchange_end(exch);
     154       
     155        if (rc != EOK) {
     156                async_forget(req);
     157                return rc;
     158        }
     159       
     160        sysarg_t retval;
     161        async_wait_for(req, &retval);
     162       
     163        *addr_id = IPC_GET_ARG1(answer);
     164       
     165        return (int) retval;
     166}
     167
     168int inetcfg_addr_delete(sysarg_t addr_id)
     169{
     170        async_exch_t *exch = async_exchange_begin(inetcfg_sess);
     171
     172        int rc = async_req_1_0(exch, INETCFG_ADDR_DELETE, addr_id);
     173        async_exchange_end(exch);
     174
     175        return rc;
     176}
     177
     178int inetcfg_addr_get(sysarg_t addr_id, inet_addr_info_t *ainfo)
     179{
     180        async_exch_t *exch = async_exchange_begin(inetcfg_sess);
     181       
     182        ipc_call_t answer;
     183        aid_t req = async_send_1(exch, INETCFG_ADDR_GET, addr_id, &answer);
     184       
     185        ipc_call_t answer_naddr;
     186        aid_t req_naddr = async_data_read(exch, &ainfo->naddr,
     187            sizeof(inet_naddr_t), &answer_naddr);
     188       
     189        sysarg_t retval_naddr;
     190        async_wait_for(req_naddr, &retval_naddr);
     191       
     192        if (retval_naddr != EOK) {
     193                async_exchange_end(exch);
     194                async_forget(req);
     195                return (int) retval_naddr;
     196        }
     197       
     198        ipc_call_t answer_name;
     199        char name_buf[LOC_NAME_MAXLEN + 1];
     200        aid_t req_name = async_data_read(exch, name_buf, LOC_NAME_MAXLEN,
     201            &answer_name);
     202       
     203        async_exchange_end(exch);
     204       
     205        sysarg_t retval_name;
     206        async_wait_for(req_name, &retval_name);
     207       
     208        if (retval_name != EOK) {
     209                async_forget(req);
     210                return (int) retval_name;
     211        }
     212       
     213        sysarg_t retval;
     214        async_wait_for(req, &retval);
     215       
     216        if (retval != EOK)
     217                return (int) retval;
     218       
     219        size_t act_size = IPC_GET_ARG2(answer_name);
     220        assert(act_size <= LOC_NAME_MAXLEN);
     221       
     222        name_buf[act_size] = '\0';
     223       
     224        ainfo->ilink = IPC_GET_ARG1(answer);
     225        ainfo->name = str_dup(name_buf);
     226       
     227        return EOK;
     228}
     229
     230int inetcfg_addr_get_id(const char *name, sysarg_t link_id, sysarg_t *addr_id)
     231{
     232        async_exch_t *exch = async_exchange_begin(inetcfg_sess);
     233
     234        ipc_call_t answer;
     235        aid_t req = async_send_1(exch, INETCFG_ADDR_GET_ID, link_id, &answer);
    143236        sysarg_t retval = async_data_write_start(exch, name, str_size(name));
    144237
     
    156249}
    157250
    158 int inetcfg_addr_delete(sysarg_t addr_id)
    159 {
    160         async_exch_t *exch = async_exchange_begin(inetcfg_sess);
    161 
    162         int rc = async_req_1_0(exch, INETCFG_ADDR_DELETE, addr_id);
     251int inetcfg_get_addr_list(sysarg_t **addrs, size_t *count)
     252{
     253        return inetcfg_get_ids_internal(INETCFG_GET_ADDR_LIST,
     254            0, addrs, count);
     255}
     256
     257int inetcfg_get_link_list(sysarg_t **links, size_t *count)
     258{
     259        return inetcfg_get_ids_internal(INETCFG_GET_LINK_LIST,
     260            0, links, count);
     261}
     262
     263int inetcfg_get_sroute_list(sysarg_t **sroutes, size_t *count)
     264{
     265        return inetcfg_get_ids_internal(INETCFG_GET_SROUTE_LIST,
     266            0, sroutes, count);
     267}
     268
     269int inetcfg_link_add(sysarg_t link_id)
     270{
     271        async_exch_t *exch = async_exchange_begin(inetcfg_sess);
     272
     273        int rc = async_req_1_0(exch, INETCFG_LINK_ADD, link_id);
    163274        async_exchange_end(exch);
    164275
     
    166277}
    167278
    168 int inetcfg_addr_get(sysarg_t addr_id, inet_addr_info_t *ainfo)
     279int inetcfg_link_get(sysarg_t link_id, inet_link_info_t *linfo)
    169280{
    170281        ipc_call_t dreply;
     
    176287
    177288        ipc_call_t answer;
    178         aid_t req = async_send_1(exch, INETCFG_ADDR_GET, addr_id, &answer);
     289        aid_t req = async_send_1(exch, INETCFG_LINK_GET, link_id, &answer);
    179290        aid_t dreq = async_data_read(exch, name_buf, LOC_NAME_MAXLEN, &dreply);
     291        int rc = async_data_read_start(exch, &linfo->mac_addr, sizeof(addr48_t));
    180292        async_wait_for(dreq, &dretval);
    181293
    182294        async_exchange_end(exch);
    183295
    184         if (dretval != EOK) {
     296        if (dretval != EOK || rc != EOK) {
    185297                async_forget(req);
    186298                return dretval;
     
    197309        name_buf[act_size] = '\0';
    198310
    199         ainfo->naddr.ipv4 = IPC_GET_ARG1(answer);
    200         ainfo->naddr.bits = IPC_GET_ARG2(answer);
    201         ainfo->ilink = IPC_GET_ARG3(answer);
    202         ainfo->name = str_dup(name_buf);
    203 
    204         return EOK;
    205 }
    206 
    207 int inetcfg_addr_get_id(const char *name, sysarg_t link_id, sysarg_t *addr_id)
    208 {
    209         async_exch_t *exch = async_exchange_begin(inetcfg_sess);
    210 
    211         ipc_call_t answer;
    212         aid_t req = async_send_1(exch, INETCFG_ADDR_GET_ID, link_id, &answer);
    213         sysarg_t retval = async_data_write_start(exch, name, str_size(name));
    214 
    215         async_exchange_end(exch);
    216 
    217         if (retval != EOK) {
    218                 async_forget(req);
    219                 return retval;
    220         }
    221 
    222         async_wait_for(req, &retval);
    223         *addr_id = IPC_GET_ARG1(answer);
    224 
    225         return retval;
    226 }
    227 
    228 int inetcfg_get_addr_list(sysarg_t **addrs, size_t *count)
    229 {
    230         return inetcfg_get_ids_internal(INETCFG_GET_ADDR_LIST,
    231             0, addrs, count);
    232 }
    233 
    234 int inetcfg_get_link_list(sysarg_t **links, size_t *count)
    235 {
    236         return inetcfg_get_ids_internal(INETCFG_GET_LINK_LIST,
    237             0, links, count);
    238 }
    239 
    240 int inetcfg_get_sroute_list(sysarg_t **sroutes, size_t *count)
    241 {
    242         return inetcfg_get_ids_internal(INETCFG_GET_SROUTE_LIST,
    243             0, sroutes, count);
    244 }
    245 
    246 int inetcfg_link_get(sysarg_t link_id, inet_link_info_t *linfo)
    247 {
    248         ipc_call_t dreply;
    249         sysarg_t dretval;
    250         size_t act_size;
    251         char name_buf[LOC_NAME_MAXLEN + 1];
    252 
    253         async_exch_t *exch = async_exchange_begin(inetcfg_sess);
    254 
    255         ipc_call_t answer;
    256         aid_t req = async_send_1(exch, INETCFG_LINK_GET, link_id, &answer);
    257         aid_t dreq = async_data_read(exch, name_buf, LOC_NAME_MAXLEN, &dreply);
    258         async_wait_for(dreq, &dretval);
    259 
    260         async_exchange_end(exch);
    261 
    262         if (dretval != EOK) {
    263                 async_forget(req);
    264                 return dretval;
    265         }
    266 
    267         sysarg_t retval;
    268         async_wait_for(req, &retval);
    269 
    270         if (retval != EOK)
    271                 return retval;
    272 
    273         act_size = IPC_GET_ARG2(dreply);
    274         assert(act_size <= LOC_NAME_MAXLEN);
    275         name_buf[act_size] = '\0';
    276 
    277311        linfo->name = str_dup(name_buf);
    278312        linfo->def_mtu = IPC_GET_ARG1(answer);
     
    281315}
    282316
     317int inetcfg_link_remove(sysarg_t link_id)
     318{
     319        async_exch_t *exch = async_exchange_begin(inetcfg_sess);
     320
     321        int rc = async_req_1_0(exch, INETCFG_LINK_REMOVE, link_id);
     322        async_exchange_end(exch);
     323
     324        return rc;
     325}
     326
    283327int inetcfg_sroute_create(const char *name, inet_naddr_t *dest,
    284328    inet_addr_t *router, sysarg_t *sroute_id)
    285329{
    286330        async_exch_t *exch = async_exchange_begin(inetcfg_sess);
    287 
    288         ipc_call_t answer;
    289         aid_t req = async_send_3(exch, INETCFG_SROUTE_CREATE,
    290             dest->ipv4, dest->bits, router->ipv4, &answer);
    291         sysarg_t retval = async_data_write_start(exch, name, str_size(name));
    292 
    293         async_exchange_end(exch);
    294 
    295         if (retval != EOK) {
    296                 async_forget(req);
    297                 return retval;
    298         }
    299 
    300         async_wait_for(req, &retval);
     331       
     332        ipc_call_t answer;
     333        aid_t req = async_send_0(exch, INETCFG_SROUTE_CREATE, &answer);
     334       
     335        int rc = async_data_write_start(exch, dest, sizeof(inet_naddr_t));
     336        if (rc != EOK) {
     337                async_exchange_end(exch);
     338                async_forget(req);
     339                return rc;
     340        }
     341       
     342        rc = async_data_write_start(exch, router, sizeof(inet_addr_t));
     343        if (rc != EOK) {
     344                async_exchange_end(exch);
     345                async_forget(req);
     346                return rc;
     347        }
     348       
     349        rc = async_data_write_start(exch, name, str_size(name));
     350       
     351        async_exchange_end(exch);
     352       
     353        if (rc != EOK) {
     354                async_forget(req);
     355                return rc;
     356        }
     357       
     358        sysarg_t retval;
     359        async_wait_for(req, &retval);
     360       
    301361        *sroute_id = IPC_GET_ARG1(answer);
    302 
    303         return retval;
     362       
     363        return (int) retval;
    304364}
    305365
     
    316376int inetcfg_sroute_get(sysarg_t sroute_id, inet_sroute_info_t *srinfo)
    317377{
    318         ipc_call_t dreply;
    319         sysarg_t dretval;
    320         size_t act_size;
     378        async_exch_t *exch = async_exchange_begin(inetcfg_sess);
     379       
     380        ipc_call_t answer;
     381        aid_t req = async_send_1(exch, INETCFG_SROUTE_GET, sroute_id, &answer);
     382       
     383        ipc_call_t answer_dest;
     384        aid_t req_dest = async_data_read(exch, &srinfo->dest,
     385            sizeof(inet_naddr_t), &answer_dest);
     386       
     387        sysarg_t retval_dest;
     388        async_wait_for(req_dest, &retval_dest);
     389       
     390        if (retval_dest != EOK) {
     391                async_exchange_end(exch);
     392                async_forget(req);
     393                return (int) retval_dest;
     394        }
     395       
     396        ipc_call_t answer_router;
     397        aid_t req_router = async_data_read(exch, &srinfo->router,
     398            sizeof(inet_addr_t), &answer_router);
     399       
     400        sysarg_t retval_router;
     401        async_wait_for(req_router, &retval_router);
     402       
     403        if (retval_router != EOK) {
     404                async_exchange_end(exch);
     405                async_forget(req);
     406                return (int) retval_router;
     407        }
     408       
     409        ipc_call_t answer_name;
    321410        char name_buf[LOC_NAME_MAXLEN + 1];
    322 
    323         async_exch_t *exch = async_exchange_begin(inetcfg_sess);
    324 
    325         ipc_call_t answer;
    326         aid_t req = async_send_1(exch, INETCFG_SROUTE_GET, sroute_id, &answer);
    327         aid_t dreq = async_data_read(exch, name_buf, LOC_NAME_MAXLEN, &dreply);
    328         async_wait_for(dreq, &dretval);
    329 
    330         async_exchange_end(exch);
    331 
    332         if (dretval != EOK) {
    333                 async_forget(req);
    334                 return dretval;
    335         }
    336 
    337         sysarg_t retval;
    338         async_wait_for(req, &retval);
    339 
     411        aid_t req_name = async_data_read(exch, name_buf, LOC_NAME_MAXLEN,
     412            &answer_name);
     413       
     414        async_exchange_end(exch);
     415       
     416        sysarg_t retval_name;
     417        async_wait_for(req_name, &retval_name);
     418       
     419        if (retval_name != EOK) {
     420                async_forget(req);
     421                return (int) retval_name;
     422        }
     423       
     424        sysarg_t retval;
     425        async_wait_for(req, &retval);
     426       
    340427        if (retval != EOK)
    341                 return retval;
    342 
    343         act_size = IPC_GET_ARG2(dreply);
     428                return (int) retval;
     429       
     430        size_t act_size = IPC_GET_ARG2(answer_name);
    344431        assert(act_size <= LOC_NAME_MAXLEN);
     432       
    345433        name_buf[act_size] = '\0';
    346 
    347         srinfo->dest.ipv4 = IPC_GET_ARG1(answer);
    348         srinfo->dest.bits = IPC_GET_ARG2(answer);
    349         srinfo->router.ipv4 = IPC_GET_ARG3(answer);
     434       
    350435        srinfo->name = str_dup(name_buf);
    351 
     436       
    352437        return EOK;
    353438}
Note: See TracChangeset for help on using the changeset viewer.