Changeset ceba4bed in mainline for uspace/srv/inet/inet.c


Ignore:
Timestamp:
2012-02-06T17:38:50Z (12 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
e767dbf
Parents:
bc38578
Message:

Introduce address object. Sketch sending outgoing datagrams to directly
reachable destinations.

File:
1 edited

Legend:

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

    rbc38578 rceba4bed  
    4747#include <sys/types.h>
    4848
     49#include "addrobj.h"
    4950#include "inet.h"
    5051#include "inet_link.h"
     
    8586}
    8687
    87 static void inet_callback_create(inet_client_t *client, ipc_callid_t callid,
    88     ipc_call_t *call)
    89 {
    90         log_msg(LVL_DEBUG, "inet_callback_create()");
     88static void inet_callback_create_srv(inet_client_t *client, ipc_callid_t callid,
     89    ipc_call_t *call)
     90{
     91        log_msg(LVL_DEBUG, "inet_callback_create_srv()");
    9192
    9293        async_sess_t *sess = async_callback_receive(EXCHANGE_SERIALIZE);
     
    100101}
    101102
    102 static void inet_get_srcaddr(inet_client_t *client, ipc_callid_t callid,
    103     ipc_call_t *call)
    104 {
    105         log_msg(LVL_DEBUG, "inet_get_srcaddr()");
     103static int inet_send(inet_client_t *client, inet_dgram_t *dgram,
     104    uint8_t ttl, int df)
     105{
     106        inet_addrobj_t *addr;
     107
     108        addr = inet_addrobj_find(&dgram->dest);
     109        if (addr != NULL) {
     110                /* Destination is directly accessible */
     111                return inet_addrobj_send_dgram(addr, dgram, ttl, df);
     112        }
     113
     114        /* TODO: Gateways */
     115        log_msg(LVL_DEBUG, "inet_send: No route to destination.");
     116        return ENOENT;
     117}
     118
     119static void inet_get_srcaddr_srv(inet_client_t *client, ipc_callid_t callid,
     120    ipc_call_t *call)
     121{
     122        log_msg(LVL_DEBUG, "inet_get_srcaddr_srv()");
    106123
    107124        async_answer_0(callid, ENOTSUP);
    108125}
    109126
    110 static void inet_send(inet_client_t *client, ipc_callid_t callid,
     127static void inet_send_srv(inet_client_t *client, ipc_callid_t callid,
    111128    ipc_call_t *call)
    112129{
     
    116133        int rc;
    117134
    118         log_msg(LVL_DEBUG, "inet_send()");
     135        log_msg(LVL_DEBUG, "inet_send_srv()");
    119136
    120137        dgram.src.ipv4 = IPC_GET_ARG1(*call);
     
    124141        df = IPC_GET_ARG5(*call);
    125142
    126         (void)ttl;
    127         (void)df;
    128 
    129143        rc = async_data_write_accept(&dgram.data, false, 0, 0, 0, &dgram.size);
    130144        if (rc != EOK) {
     
    133147        }
    134148
     149        rc = inet_send(client, &dgram, ttl, df);
     150
    135151        free(dgram.data);
    136         async_answer_0(callid, ENOTSUP);
    137 }
    138 
    139 static void inet_set_proto(inet_client_t *client, ipc_callid_t callid,
     152        async_answer_0(callid, rc);
     153}
     154
     155static void inet_set_proto_srv(inet_client_t *client, ipc_callid_t callid,
    140156    ipc_call_t *call)
    141157{
     
    143159
    144160        proto = IPC_GET_ARG1(*call);
    145         log_msg(LVL_DEBUG, "inet_set_proto(%lu)", (unsigned long) proto);
     161        log_msg(LVL_DEBUG, "inet_set_proto_srv(%lu)", (unsigned long) proto);
    146162
    147163        if (proto > UINT8_MAX) {
     
    197213                switch (method) {
    198214                case INET_CALLBACK_CREATE:
    199                         inet_callback_create(&client, callid, &call);
     215                        inet_callback_create_srv(&client, callid, &call);
    200216                        break;
    201217                case INET_GET_SRCADDR:
    202                         inet_get_srcaddr(&client, callid, &call);
     218                        inet_get_srcaddr_srv(&client, callid, &call);
    203219                        break;
    204220                case INET_SEND:
    205                         inet_send(&client, callid, &call);
     221                        inet_send_srv(&client, callid, &call);
    206222                        break;
    207223                case INET_SET_PROTO:
    208                         inet_set_proto(&client, callid, &call);
     224                        inet_set_proto_srv(&client, callid, &call);
    209225                        break;
    210226                default:
Note: See TracChangeset for help on using the changeset viewer.