Changeset 45aa22c in mainline for uspace/srv


Ignore:
Timestamp:
2012-03-07T23:05:42Z (14 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
a88a6eac
Parents:
0e25780
Message:

Creating static addresses with inetcfg.

Location:
uspace/srv/inet
Files:
4 edited

Legend:

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

    r0e25780 r45aa22c  
    276276        sysarg_t port;
    277277
    278         log_msg(LVL_DEBUG, "inet_client_conn(%d, %d, %d)",
    279         (int)IPC_GET_ARG1(*icall), (int)IPC_GET_ARG2(*icall),
    280         (int)IPC_GET_ARG3(*icall));
    281 
    282278        port = IPC_GET_ARG1(*icall);
    283279
  • uspace/srv/inet/inet_link.c

    r0e25780 r45aa22c  
    159159                return ENOMEM;
    160160
     161        ilink->svc_id = sid;
     162
    161163        rc = loc_service_get_name(sid, &ilink->svc_name);
    162164        if (rc != EOK) {
     
    260262}
    261263
     264inet_link_t *inet_link_get_by_id(sysarg_t link_id)
     265{
     266        fibril_mutex_lock(&inet_discovery_lock);
     267
     268        list_foreach(inet_link_list, elem) {
     269                inet_link_t *ilink = list_get_instance(elem, inet_link_t,
     270                    link_list);
     271
     272                if (ilink->svc_id == link_id) {
     273                        fibril_mutex_unlock(&inet_discovery_lock);
     274                        return ilink;
     275                }
     276        }
     277
     278        fibril_mutex_unlock(&inet_discovery_lock);
     279        return NULL;
     280}
    262281
    263282/** @}
  • uspace/srv/inet/inet_link.h

    r0e25780 r45aa22c  
    3838#define INET_LINK_H_
    3939
     40#include <sys/types.h>
    4041#include "inet.h"
    4142
     
    4344extern int inet_link_send_dgram(inet_link_t *, inet_addr_t *,
    4445    inet_addr_t *, inet_dgram_t *, uint8_t, uint8_t, int);
     46extern inet_link_t *inet_link_get_by_id(sysarg_t);
    4547
    4648#endif
  • uspace/srv/inet/inetcfg.c

    r0e25780 r45aa22c  
    3535 */
    3636
    37 #include <adt/list.h>
    3837#include <async.h>
    3938#include <errno.h>
    4039#include <macros.h>
    41 #include <fibril_synch.h>
    4240#include <io/log.h>
    4341#include <ipc/inet.h>
    44 #include <ipc/services.h>
    4542#include <loc.h>
    46 #include <stdio.h>
    4743#include <stdlib.h>
    4844#include <sys/types.h>
    4945
     46#include "addrobj.h"
    5047#include "inet.h"
     48#include "inet_link.h"
    5149#include "inetcfg.h"
    5250
    53 static int inetcfg_addr_create_static(inet_naddr_t *naddr, sysarg_t *addr_id)
    54 {
    55         return ENOTSUP;
     51static int inetcfg_addr_create_static(inet_naddr_t *naddr, sysarg_t link_id,
     52    sysarg_t *addr_id)
     53{
     54        inet_link_t *ilink;
     55        inet_addrobj_t *addr;
     56        iplink_addr_t iaddr;
     57        int rc;
     58
     59        ilink = inet_link_get_by_id(link_id);
     60        if (ilink == NULL) {
     61                log_msg(LVL_DEBUG, "Link %lu not found.",
     62                    (unsigned long) link_id);
     63                return ENOENT;
     64        }
     65
     66        addr = inet_addrobj_new();
     67        addr->naddr = *naddr;
     68        addr->ilink = ilink;
     69        inet_addrobj_add(addr);
     70
     71        iaddr.ipv4 = addr->naddr.ipv4;
     72        rc = iplink_addr_add(ilink->iplink, &iaddr);
     73        if (rc != EOK) {
     74                log_msg(LVL_ERROR, "Failed setting IP address on internet link.");
     75                inet_addrobj_remove(addr);
     76                inet_addrobj_delete(addr);
     77                return rc;
     78        }
     79
     80        return EOK;
    5681}
    5782
     
    85110{
    86111        inet_naddr_t naddr;
     112        sysarg_t link_id;
    87113        sysarg_t addr_id;
    88114        int rc;
     
    92118        naddr.ipv4 = IPC_GET_ARG1(*call);
    93119        naddr.bits = IPC_GET_ARG2(*call);
     120        link_id    = IPC_GET_ARG3(*call);
    94121
    95122        addr_id = 0;
    96         rc = inetcfg_addr_create_static(&naddr, &addr_id);
     123        rc = inetcfg_addr_create_static(&naddr, link_id, &addr_id);
    97124        async_answer_1(callid, rc, addr_id);
    98125}
Note: See TracChangeset for help on using the changeset viewer.