Changeset 7af0cc5 in mainline


Ignore:
Timestamp:
2013-09-20T16:46:56Z (11 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
bd88bee
Parents:
947e2ef
Message:

Move IP link discovery to a separate network configuration server.

Files:
5 added
11 edited

Legend:

Unmodified
Added
Removed
  • .bzrignore

    r947e2ef r7af0cc5  
    269269uspace/dist/srv/dhcp
    270270uspace/srv/net/dhcp/dhcp
     271uspace/dist/srv/nconfsrv
     272uspace/srv/net/nconfsrv/nconfsrv
  • boot/Makefile.common

    r947e2ef r7af0cc5  
    118118        $(USPACE_PATH)/srv/net/inetsrv/inetsrv \
    119119        $(USPACE_PATH)/srv/net/loopip/loopip \
     120        $(USPACE_PATH)/srv/net/nconfsrv/nconfsrv \
    120121        $(USPACE_PATH)/srv/net/slip/slip \
    121122        $(USPACE_PATH)/srv/net/tcp/tcp \
  • uspace/Makefile

    r947e2ef r7af0cc5  
    9595        srv/net/inetsrv \
    9696        srv/net/loopip \
     97        srv/net/nconfsrv \
    9798        srv/net/slip \
    9899        srv/net/tcp \
  • uspace/lib/c/generic/inetcfg.c

    r947e2ef r7af0cc5  
    267267}
    268268
     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);
     274        async_exchange_end(exch);
     275
     276        return rc;
     277}
     278
    269279int inetcfg_link_get(sysarg_t link_id, inet_link_info_t *linfo)
    270280{
     
    305315}
    306316
     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
    307327int inetcfg_sroute_create(const char *name, inet_naddr_t *dest,
    308328    inet_addr_t *router, sysarg_t *sroute_id)
  • uspace/lib/c/include/inet/inetcfg.h

    r947e2ef r7af0cc5  
    4848extern int inetcfg_get_link_list(sysarg_t **, size_t *);
    4949extern int inetcfg_get_sroute_list(sysarg_t **, size_t *);
     50extern int inetcfg_link_add(sysarg_t);
    5051extern int inetcfg_link_get(sysarg_t, inet_link_info_t *);
     52extern int inetcfg_link_remove(sysarg_t);
    5153extern int inetcfg_sroute_get(sysarg_t, inet_sroute_info_t *);
    5254extern int inetcfg_sroute_get_id(const char *, sysarg_t *);
  • uspace/lib/c/include/ipc/inet.h

    r947e2ef r7af0cc5  
    7272        INETCFG_GET_LINK_LIST,
    7373        INETCFG_GET_SROUTE_LIST,
     74        INETCFG_LINK_ADD,
    7475        INETCFG_LINK_GET,
     76        INETCFG_LINK_REMOVE,
    7577        INETCFG_SROUTE_CREATE,
    7678        INETCFG_SROUTE_DELETE,
  • uspace/lib/c/include/ipc/services.h

    r947e2ef r7af0cc5  
    5959#define SERVICE_NAME_INETPING   "net/inetping"
    6060#define SERVICE_NAME_INETPING6  "net/inetping6"
     61#define SERVICE_NAME_NETCONF    "net/netconf"
    6162
    6263#endif
  • uspace/srv/net/inetsrv/inet_link.c

    r947e2ef r7af0cc5  
    5555static uint16_t ip_ident = 0;
    5656
    57 static int inet_link_open(service_id_t);
    5857static int inet_iplink_recv(iplink_t *, iplink_recv_sdu_t *, uint16_t);
    5958
     
    6261};
    6362
    64 static LIST_INITIALIZE(inet_link_list);
    65 static FIBRIL_MUTEX_INITIALIZE(inet_discovery_lock);
     63static LIST_INITIALIZE(inet_links);
     64static FIBRIL_MUTEX_INITIALIZE(inet_links_lock);
    6665
    6766static addr128_t link_local_node_ip =
     
    113112}
    114113
    115 static int inet_link_check_new(void)
    116 {
    117         bool already_known;
    118         category_id_t iplink_cat;
    119         service_id_t *svcs;
    120         size_t count, i;
    121         int rc;
    122 
    123         fibril_mutex_lock(&inet_discovery_lock);
    124 
    125         rc = loc_category_get_id("iplink", &iplink_cat, IPC_FLAG_BLOCKING);
    126         if (rc != EOK) {
    127                 log_msg(LOG_DEFAULT, LVL_ERROR, "Failed resolving category 'iplink'.");
    128                 fibril_mutex_unlock(&inet_discovery_lock);
    129                 return ENOENT;
    130         }
    131 
    132         rc = loc_category_get_svcs(iplink_cat, &svcs, &count);
    133         if (rc != EOK) {
    134                 log_msg(LOG_DEFAULT, LVL_ERROR, "Failed getting list of IP links.");
    135                 fibril_mutex_unlock(&inet_discovery_lock);
    136                 return EIO;
    137         }
    138 
    139         for (i = 0; i < count; i++) {
    140                 already_known = false;
    141 
    142                 list_foreach(inet_link_list, link_list, inet_link_t, ilink) {
    143                         if (ilink->svc_id == svcs[i]) {
    144                                 already_known = true;
    145                                 break;
    146                         }
    147                 }
    148 
    149                 if (!already_known) {
    150                         log_msg(LOG_DEFAULT, LVL_DEBUG, "Found IP link '%lu'",
    151                             (unsigned long) svcs[i]);
    152                         rc = inet_link_open(svcs[i]);
    153                         if (rc != EOK)
    154                                 log_msg(LOG_DEFAULT, LVL_ERROR, "Could not open IP link.");
    155                 }
    156         }
    157 
    158         fibril_mutex_unlock(&inet_discovery_lock);
    159         return EOK;
    160 }
    161 
    162114static inet_link_t *inet_link_new(void)
    163115{
     
    183135}
    184136
    185 static int inet_link_open(service_id_t sid)
     137int inet_link_open(service_id_t sid)
    186138{
    187139        inet_link_t *ilink;
     
    231183
    232184        log_msg(LOG_DEFAULT, LVL_DEBUG, "Opened IP link '%s'", ilink->svc_name);
    233         list_append(&ilink->link_list, &inet_link_list);
     185        list_append(&ilink->link_list, &inet_links);
    234186
    235187        inet_addrobj_t *addr = NULL;
     
    309261}
    310262
    311 static void inet_link_cat_change_cb(void)
    312 {
    313         (void) inet_link_check_new();
    314 }
    315 
    316 int inet_link_discovery_start(void)
    317 {
    318         int rc;
    319 
    320         rc = loc_register_cat_change_cb(inet_link_cat_change_cb);
    321         if (rc != EOK) {
    322                 log_msg(LOG_DEFAULT, LVL_ERROR, "Failed registering callback for IP link "
    323                     "discovery (%d).", rc);
    324                 return rc;
    325         }
    326 
    327         return inet_link_check_new();
    328 }
    329 
    330263/** Send IPv4 datagram over Internet link
    331264 *
     
    480413inet_link_t *inet_link_get_by_id(sysarg_t link_id)
    481414{
    482         fibril_mutex_lock(&inet_discovery_lock);
    483 
    484         list_foreach(inet_link_list, link_list, inet_link_t, ilink) {
     415        fibril_mutex_lock(&inet_links_lock);
     416
     417        list_foreach(inet_links, link_list, inet_link_t, ilink) {
    485418                if (ilink->svc_id == link_id) {
    486                         fibril_mutex_unlock(&inet_discovery_lock);
     419                        fibril_mutex_unlock(&inet_links_lock);
    487420                        return ilink;
    488421                }
    489422        }
    490423
    491         fibril_mutex_unlock(&inet_discovery_lock);
     424        fibril_mutex_unlock(&inet_links_lock);
    492425        return NULL;
    493426}
     
    499432        size_t count, i;
    500433
    501         fibril_mutex_lock(&inet_discovery_lock);
    502         count = list_count(&inet_link_list);
     434        fibril_mutex_lock(&inet_links_lock);
     435        count = list_count(&inet_links);
    503436
    504437        id_list = calloc(count, sizeof(sysarg_t));
    505438        if (id_list == NULL) {
    506                 fibril_mutex_unlock(&inet_discovery_lock);
     439                fibril_mutex_unlock(&inet_links_lock);
    507440                return ENOMEM;
    508441        }
    509442
    510443        i = 0;
    511         list_foreach(inet_link_list, link_list, inet_link_t, ilink) {
     444        list_foreach(inet_links, link_list, inet_link_t, ilink) {
    512445                id_list[i++] = ilink->svc_id;
    513446                log_msg(LOG_DEFAULT, LVL_NOTE, "add link to list");
    514447        }
    515448
    516         fibril_mutex_unlock(&inet_discovery_lock);
     449        fibril_mutex_unlock(&inet_links_lock);
    517450
    518451        log_msg(LOG_DEFAULT, LVL_NOTE, "return %zu links", count);
  • uspace/srv/net/inetsrv/inet_link.h

    r947e2ef r7af0cc5  
    4141#include "inetsrv.h"
    4242
    43 extern int inet_link_discovery_start(void);
     43extern int inet_link_open(service_id_t);
    4444extern int inet_link_send_dgram(inet_link_t *, addr32_t,
    4545    addr32_t, inet_dgram_t *, uint8_t, uint8_t, int);
  • uspace/srv/net/inetsrv/inetcfg.c

    r947e2ef r7af0cc5  
    11/*
    2  * Copyright (c) 2012 Jiri Svoboda
     2 * Copyright (c) 2013 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    160160}
    161161
     162static int inetcfg_link_add(sysarg_t link_id)
     163{
     164        return inet_link_open(link_id);
     165}
     166
    162167static int inetcfg_link_get(sysarg_t link_id, inet_link_info_t *linfo)
    163168{
     
    180185}
    181186
     187static int inetcfg_link_remove(sysarg_t link_id)
     188{
     189        return ENOTSUP;
     190}
     191
    182192static int inetcfg_sroute_create(char *name, inet_naddr_t *dest,
    183193    inet_addr_t *router, sysarg_t *sroute_id)
     
    483493}
    484494
     495static void inetcfg_link_add_srv(ipc_callid_t callid, ipc_call_t *call)
     496{
     497        sysarg_t link_id;
     498        int rc;
     499
     500        log_msg(LOG_DEFAULT, LVL_DEBUG, "inetcfg_link_add_srv()");
     501
     502        link_id = IPC_GET_ARG1(*call);
     503
     504        rc = inetcfg_link_add(link_id);
     505        async_answer_0(callid, rc);
     506}
     507
    485508static void inetcfg_link_get_srv(ipc_callid_t callid, ipc_call_t *call)
    486509{
     
    536559}
    537560
     561static void inetcfg_link_remove_srv(ipc_callid_t callid, ipc_call_t *call)
     562{
     563        sysarg_t link_id;
     564        int rc;
     565
     566        log_msg(LOG_DEFAULT, LVL_DEBUG, "inetcfg_link_remove_srv()");
     567
     568        link_id = IPC_GET_ARG1(*call);
     569
     570        rc = inetcfg_link_remove(link_id);
     571        async_answer_0(callid, rc);
     572}
     573
    538574static void inetcfg_sroute_create_srv(ipc_callid_t iid,
    539575    ipc_call_t *icall)
     
    742778                        inetcfg_get_sroute_list_srv(callid, &call);
    743779                        break;
     780                case INETCFG_LINK_ADD:
     781                        inetcfg_link_add_srv(callid, &call);
     782                        break;
    744783                case INETCFG_LINK_GET:
    745784                        inetcfg_link_get_srv(callid, &call);
     785                        break;
     786                case INETCFG_LINK_REMOVE:
     787                        inetcfg_link_remove_srv(callid, &call);
    746788                        break;
    747789                case INETCFG_SROUTE_CREATE:
  • uspace/srv/net/inetsrv/inetsrv.c

    r947e2ef r7af0cc5  
    124124        }
    125125       
    126         rc = inet_link_discovery_start();
    127         if (rc != EOK)
    128                 return EEXIST;
    129        
    130126        return EOK;
    131127}
Note: See TracChangeset for help on using the changeset viewer.