Changeset ecff3d9 in mainline for uspace/lib/c/generic/inet.c


Ignore:
Timestamp:
2012-02-01T22:06:05Z (12 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
59157eb
Parents:
c76e926
Message:

Implement inet client IPC communication. Fix bug in inet_init().

File:
1 edited

Legend:

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

    rc76e926 recff3d9  
    7575{
    7676        service_id_t inet_svc;
     77        int rc;
    7778
    7879        assert(inet_sess == NULL);
     
    8081        assert(inet_protocol == 0);
    8182
    82         inet_svc = loc_service_get_id(SERVICE_NAME_INET, &inet_svc,
     83        rc = loc_service_get_id(SERVICE_NAME_INET, &inet_svc,
    8384            IPC_FLAG_BLOCKING);
     85        if (rc != EOK)
     86                return ENOENT;
     87
    8488        inet_sess = loc_service_connect(EXCHANGE_SERIALIZE, inet_svc,
    8589            IPC_FLAG_BLOCKING);
     
    107111int inet_send(inet_dgram_t *dgram, uint8_t ttl, inet_df_t df)
    108112{
    109         return ENOTSUP;
     113        async_exch_t *exch = async_exchange_begin(inet_sess);
     114
     115        ipc_call_t answer;
     116        aid_t req = async_send_5(exch, INET_SEND, dgram->src.ipv4,
     117            dgram->dest.ipv4, dgram->tos, ttl, df, &answer);
     118        int rc = async_data_write_start(exch, dgram->data, dgram->size);
     119        async_exchange_end(exch);
     120
     121        if (rc != EOK) {
     122                async_wait_for(req, NULL);
     123                return rc;
     124        }
     125
     126        sysarg_t retval;
     127        async_wait_for(req, &retval);
     128        if (retval != EOK)
     129                return retval;
     130
     131        return EOK;
    110132}
    111133
    112134int inet_get_srcaddr(inet_addr_t *remote, uint8_t tos, inet_addr_t *local)
    113135{
    114         return ENOTSUP;
     136        sysarg_t local_addr;
     137        async_exch_t *exch = async_exchange_begin(inet_sess);
     138
     139        int rc = async_req_1_1(exch, INET_GET_SRCADDR, remote->ipv4,
     140            &local_addr);
     141        async_exchange_end(exch);
     142
     143        if (rc != EOK)
     144                return rc;
     145
     146        local->ipv4 = local_addr;
     147        return EOK;
    115148}
    116149
Note: See TracChangeset for help on using the changeset viewer.