Changeset 0e94b979 in mainline for uspace/srv/inet/inetcfg.c


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

Listing configured addresses.

File:
1 edited

Legend:

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

    ra88a6eac r0e94b979  
    4242#include <loc.h>
    4343#include <stdlib.h>
     44#include <str.h>
    4445#include <sys/types.h>
    4546
     
    6768        addr->naddr = *naddr;
    6869        addr->ilink = ilink;
     70        addr->name = str_dup("foo");
    6971        inet_addrobj_add(addr);
    7072
     
    8890static int inetcfg_addr_get(sysarg_t addr_id, inet_addr_info_t *ainfo)
    8991{
     92        inet_addrobj_t *addr;
     93
     94        addr = inet_addrobj_get_by_id(addr_id);
     95        if (addr == NULL)
     96                return ENOENT;
     97
     98        ainfo->naddr = addr->naddr;
     99        ainfo->ilink = addr->ilink->svc_id;
     100        ainfo->name = str_dup(addr->name);
     101
     102        return EOK;
     103}
     104
     105static int inetcfg_get_addr_list(sysarg_t **addrs, size_t *count)
     106{
     107        return inet_addrobj_get_id_list(addrs, count);
     108}
     109
     110static int inetcfg_get_link_list(sysarg_t **addrs, size_t *count)
     111{
    90112        return ENOTSUP;
    91113}
    92114
    93 static int inetcfg_get_addr_list(sysarg_t **addrs, size_t *count)
    94 {
    95         return ENOTSUP;
    96 }
    97 
    98 static int inetcfg_get_link_list(sysarg_t **addrs, size_t *count)
    99 {
    100         return ENOTSUP;
    101 }
    102 
    103 static int inetcfg_link_get(sysarg_t addr_id, inet_link_info_t *ainfo)
    104 {
    105         return ENOTSUP;
     115static int inetcfg_link_get(sysarg_t link_id, inet_link_info_t *linfo)
     116{
     117        inet_link_t *ilink;
     118
     119        ilink = inet_link_get_by_id(link_id);
     120        if (ilink == NULL) {
     121                return ENOENT;
     122        }
     123
     124        linfo->name = str_dup(ilink->svc_name);
     125        return EOK;
    106126}
    107127
     
    140160static void inetcfg_addr_get_srv(ipc_callid_t callid, ipc_call_t *call)
    141161{
     162        ipc_callid_t rcallid;
     163        size_t max_size;
     164
    142165        sysarg_t addr_id;
    143166        inet_addr_info_t ainfo;
     
    147170        log_msg(LVL_DEBUG, "inetcfg_addr_get_srv()");
    148171
     172        ainfo.naddr.ipv4 = 0;
     173        ainfo.naddr.bits = 0;
     174        ainfo.ilink = 0;
     175        ainfo.name = NULL;
     176
     177        if (!async_data_read_receive(&rcallid, &max_size)) {
     178                async_answer_0(rcallid, EREFUSED);
     179                async_answer_0(callid, EREFUSED);
     180                return;
     181        }
     182
    149183        rc = inetcfg_addr_get(addr_id, &ainfo);
    150         async_answer_2(callid, rc, ainfo.naddr.ipv4, ainfo.naddr.bits);
     184        if (rc != EOK) {
     185                async_answer_0(callid, rc);
     186                return;
     187        }
     188
     189        sysarg_t retval = async_data_read_finalize(rcallid, ainfo.name,
     190            min(max_size, str_size(ainfo.name)));
     191        free(ainfo.name);
     192
     193        async_answer_3(callid, retval, ainfo.naddr.ipv4, ainfo.naddr.bits,
     194            ainfo.ilink);
    151195}
    152196
    153197
    154198static void inetcfg_get_addr_list_srv(ipc_callid_t callid, ipc_call_t *call)
     199{
     200        ipc_callid_t rcallid;
     201        size_t count;
     202        size_t max_size;
     203        size_t act_size;
     204        size_t size;
     205        sysarg_t *id_buf;
     206        int rc;
     207
     208        log_msg(LVL_DEBUG, "inetcfg_get_addr_list_srv()");
     209
     210        if (!async_data_read_receive(&rcallid, &max_size)) {
     211                async_answer_0(rcallid, EREFUSED);
     212                async_answer_0(callid, EREFUSED);
     213                return;
     214        }
     215
     216        rc = inetcfg_get_addr_list(&id_buf, &count);
     217        if (rc != EOK) {
     218                async_answer_0(rcallid, rc);
     219                async_answer_0(callid, rc);
     220                return;
     221        }
     222
     223        act_size = count * sizeof(sysarg_t);
     224        size = min(act_size, max_size);
     225
     226        sysarg_t retval = async_data_read_finalize(rcallid, id_buf, size);
     227        free(id_buf);
     228
     229        async_answer_1(callid, retval, act_size);
     230}
     231
     232static void inetcfg_link_get_srv(ipc_callid_t callid, ipc_call_t *call)
     233{
     234        ipc_callid_t rcallid;
     235        size_t max_size;
     236
     237        sysarg_t link_id;
     238        inet_link_info_t linfo;
     239        int rc;
     240
     241        link_id = IPC_GET_ARG1(*call);
     242        log_msg(LVL_DEBUG, "inetcfg_link_get_srv()");
     243
     244        linfo.name = NULL;
     245
     246        if (!async_data_read_receive(&rcallid, &max_size)) {
     247                async_answer_0(rcallid, EREFUSED);
     248                async_answer_0(callid, EREFUSED);
     249                return;
     250        }
     251
     252        rc = inetcfg_link_get(link_id, &linfo);
     253        if (rc != EOK) {
     254                async_answer_0(rcallid, rc);
     255                async_answer_0(callid, rc);
     256                return;
     257        }
     258
     259        sysarg_t retval = async_data_read_finalize(rcallid, linfo.name,
     260            min(max_size, str_size(linfo.name)));
     261        free(linfo.name);
     262
     263        async_answer_0(callid, retval);
     264}
     265
     266static void inetcfg_get_link_list_srv(ipc_callid_t callid, ipc_call_t *call)
    155267{
    156268        ipc_callid_t rcallid;
     
    161273        int rc;
    162274
    163         log_msg(LVL_DEBUG, "inetcfg_get_addr_list_srv()");
    164 
    165         if (!async_data_read_receive(&rcallid, &max_size)) {
    166                 async_answer_0(rcallid, EREFUSED);
    167                 async_answer_0(callid, EREFUSED);
    168                 return;
    169         }
    170 
    171         rc = inetcfg_get_addr_list(&id_buf, &act_size);
    172         if (rc != EOK) {
    173                 async_answer_0(rcallid, rc);
    174                 async_answer_0(callid, rc);
    175                 return;
    176         }
    177 
    178         size = min(act_size, max_size);
    179 
    180         sysarg_t retval = async_data_read_finalize(rcallid, id_buf, size);
    181         free(id_buf);
    182 
    183         async_answer_1(callid, retval, act_size);
    184 }
    185 
    186 static void inetcfg_link_get_srv(ipc_callid_t callid, ipc_call_t *call)
    187 {
    188         sysarg_t link_id;
    189         inet_link_info_t linfo;
    190         int rc;
    191 
    192         link_id = IPC_GET_ARG1(*call);
    193         log_msg(LVL_DEBUG, "inetcfg_link_get_srv()");
    194 
    195         rc = inetcfg_link_get(link_id, &linfo);
    196         async_answer_0(callid, rc);
    197 }
    198 
    199 static void inetcfg_get_link_list_srv(ipc_callid_t callid, ipc_call_t *call)
    200 {
    201         ipc_callid_t rcallid;
    202         size_t max_size;
    203         size_t act_size;
    204         size_t size;
    205         sysarg_t *id_buf;
    206         int rc;
    207 
    208275        log_msg(LVL_DEBUG, "inetcfg_get_link_list_srv()");
    209276
Note: See TracChangeset for help on using the changeset viewer.