Changeset b9f7848b in mainline for uspace/srv


Ignore:
Timestamp:
2013-09-16T06:07:42Z (12 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
884c56b, f65d9cc, f9a2831
Parents:
5ed8b72 (diff), 947e2ef (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merge DHCP improvements.

Location:
uspace/srv/net
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/net/dhcp/dhcp.c

    r5ed8b72 rb9f7848b  
    5353
    5454static int transport_fd = -1;
    55 static addr48_t mac_addr;
     55static inet_link_info_t link_info;
    5656static uint8_t msgbuf[MAX_MSG_SIZE];
    5757
     
    132132        hdr->flags = flag_broadcast;
    133133
    134         addr48(mac_addr, hdr->chaddr);
     134        addr48(link_info.mac_addr, hdr->chaddr);
    135135        hdr->opt_magic = host2uint32_t_be(dhcp_opt_magic);
    136136
     
    178178        hdr->flags = flag_broadcast;
    179179        hdr->ciaddr = host2uint32_t_be(offer->oaddr.addr);
    180         addr48(mac_addr, hdr->chaddr);
     180        addr48(link_info.mac_addr, hdr->chaddr);
    181181        hdr->opt_magic = host2uint32_t_be(dhcp_opt_magic);
    182182
     
    387387                rc = dnsr_set_srvaddr(&offer->dns_server);
    388388                if (rc != EOK) {
    389                         printf("%s: Failed setting nameserver address (%d))\n",
     389                        printf("%s: Error setting nameserver address (%d))\n",
    390390                            NAME, rc);
    391391                        return rc;
     
    413413        rc = inetcfg_init();
    414414        if (rc != EOK) {
    415                 printf("Failed contacting inet configuration service.\n");
     415                printf("Error contacting inet configuration service.\n");
    416416                return 1;
    417417        }
     
    419419        rc = loc_service_get_id(argv[1], &iplink, 0);
    420420        if (rc != EOK) {
    421                 printf("Failed resolving service '%s'.\n", argv[1]);
    422                 return 1;
    423         }
    424 
    425         /* XXX Determine MAC address automatically */
    426         mac_addr[0] = 0xaa;
    427         mac_addr[1] = 0xde;
    428         mac_addr[2] = 0xad;
    429         mac_addr[3] = 0xbe;
    430         mac_addr[4] = 0xef;
    431         mac_addr[5] = 0xfe;
     421                printf("Error resolving service '%s'.\n", argv[1]);
     422                return 1;
     423        }
     424
     425        /* Get link hardware address */
     426        rc = inetcfg_link_get(iplink, &link_info);
     427        if (rc != EOK) {
     428                printf("Error getting properties for link '%s'.\n", argv[1]);
     429                return 1;
     430        }
    432431
    433432        laddr.sin_family = AF_INET;
  • uspace/srv/net/inetsrv/inet_link.c

    r5ed8b72 rb9f7848b  
    493493}
    494494
     495/** Get IDs of all links. */
     496int inet_link_get_id_list(sysarg_t **rid_list, size_t *rcount)
     497{
     498        sysarg_t *id_list;
     499        size_t count, i;
     500
     501        fibril_mutex_lock(&inet_discovery_lock);
     502        count = list_count(&inet_link_list);
     503
     504        id_list = calloc(count, sizeof(sysarg_t));
     505        if (id_list == NULL) {
     506                fibril_mutex_unlock(&inet_discovery_lock);
     507                return ENOMEM;
     508        }
     509
     510        i = 0;
     511        list_foreach(inet_link_list, link_list, inet_link_t, ilink) {
     512                id_list[i++] = ilink->svc_id;
     513                log_msg(LOG_DEFAULT, LVL_NOTE, "add link to list");
     514        }
     515
     516        fibril_mutex_unlock(&inet_discovery_lock);
     517
     518        log_msg(LOG_DEFAULT, LVL_NOTE, "return %zu links", count);
     519        *rid_list = id_list;
     520        *rcount = count;
     521
     522        return EOK;
     523}
     524
    495525/** @}
    496526 */
  • uspace/srv/net/inetsrv/inet_link.h

    r5ed8b72 rb9f7848b  
    4747    uint8_t, uint8_t, int);
    4848extern inet_link_t *inet_link_get_by_id(sysarg_t);
     49extern int inet_link_get_id_list(sysarg_t **, size_t *);
    4950
    5051#endif
  • uspace/srv/net/inetsrv/inetcfg.c

    r5ed8b72 rb9f7848b  
    4444#include <str.h>
    4545#include <sys/types.h>
     46#include <types/inetcfg.h>
    4647
    4748#include "addrobj.h"
     
    151152static int inetcfg_get_link_list(sysarg_t **addrs, size_t *count)
    152153{
    153         return ENOTSUP;
     154        return inet_link_get_id_list(addrs, count);
    154155}
    155156
     
    170171        linfo->name = str_dup(ilink->svc_name);
    171172        linfo->def_mtu = ilink->def_mtu;
     173        if (ilink->mac_valid) {
     174                addr48(ilink->mac, linfo->mac_addr);
     175        } else {
     176                memset(linfo->mac_addr, 0, sizeof(linfo->mac_addr));
     177        }
     178
    172179        return EOK;
    173180}
     
    411418{
    412419        ipc_callid_t rcallid;
     420        size_t count;
    413421        size_t max_size;
    414422        size_t act_size;
     
    417425        int rc;
    418426
    419         log_msg(LOG_DEFAULT, LVL_DEBUG, "inetcfg_get_link_list_srv()");
     427        log_msg(LOG_DEFAULT, LVL_DEBUG, "inetcfg_get_addr_list_srv()");
    420428
    421429        if (!async_data_read_receive(&rcallid, &max_size)) {
     
    425433        }
    426434
    427         rc = inetcfg_get_link_list(&id_buf, &act_size);
     435        rc = inetcfg_get_link_list(&id_buf, &count);
    428436        if (rc != EOK) {
    429437                async_answer_0(rcallid, rc);
     
    432440        }
    433441
     442        act_size = count * sizeof(sysarg_t);
    434443        size = min(act_size, max_size);
    435444
     
    476485static void inetcfg_link_get_srv(ipc_callid_t callid, ipc_call_t *call)
    477486{
    478         ipc_callid_t rcallid;
    479         size_t max_size;
     487        ipc_callid_t name_callid;
     488        ipc_callid_t laddr_callid;
     489        size_t name_max_size;
     490        size_t laddr_max_size;
    480491
    481492        sysarg_t link_id;
     
    488499        linfo.name = NULL;
    489500
    490         if (!async_data_read_receive(&rcallid, &max_size)) {
    491                 async_answer_0(rcallid, EREFUSED);
     501        if (!async_data_read_receive(&name_callid, &name_max_size)) {
     502                async_answer_0(name_callid, EREFUSED);
     503                async_answer_0(callid, EREFUSED);
     504                return;
     505        }
     506
     507        if (!async_data_read_receive(&laddr_callid, &laddr_max_size)) {
     508                async_answer_0(name_callid, EREFUSED);
    492509                async_answer_0(callid, EREFUSED);
    493510                return;
     
    496513        rc = inetcfg_link_get(link_id, &linfo);
    497514        if (rc != EOK) {
    498                 async_answer_0(rcallid, rc);
    499                 async_answer_0(callid, rc);
    500                 return;
    501         }
    502 
    503         sysarg_t retval = async_data_read_finalize(rcallid, linfo.name,
    504             min(max_size, str_size(linfo.name)));
     515                async_answer_0(laddr_callid, rc);
     516                async_answer_0(name_callid, rc);
     517                async_answer_0(callid, rc);
     518                return;
     519        }
     520
     521        sysarg_t retval = async_data_read_finalize(name_callid, linfo.name,
     522            min(name_max_size, str_size(linfo.name)));
     523        if (retval != EOK) {
     524                free(linfo.name);
     525                async_answer_0(laddr_callid, retval);
     526                async_answer_0(callid, retval);
     527                return;
     528        }
     529
     530        retval = async_data_read_finalize(laddr_callid, &linfo.mac_addr,
     531            min(laddr_max_size, sizeof(linfo.mac_addr)));
     532
    505533        free(linfo.name);
    506534
  • uspace/srv/net/inetsrv/inetsrv.h

    r5ed8b72 rb9f7848b  
    4444#include <ipc/loc.h>
    4545#include <sys/types.h>
     46#include <types/inet.h>
    4647#include <async.h>
    4748
     
    7374} inetping6_client_t;
    7475
    75 /** Address object info */
    76 typedef struct {
    77         /** Network address */
    78         inet_naddr_t naddr;
    79         /** Link service ID */
    80         sysarg_t ilink;
    81         /** Address object name */
    82         char *name;
    83 } inet_addr_info_t;
    84 
    85 /** IP link info */
    86 typedef struct {
    87         /** Link service name */
    88         char *name;
    89         /** Default MTU */
    90         size_t def_mtu;
    91 } inet_link_info_t;
    92 
    93 /** Static route info */
    94 typedef struct {
    95         /** Destination network address */
    96         inet_naddr_t dest;
    97         /** Router address */
    98         inet_addr_t router;
    99         /** Static route name */
    100         char *name;
    101 } inet_sroute_info_t;
    102 
    10376typedef struct {
    10477        /** Source address */
     
    12598        size_t size;
    12699} inet_packet_t;
    127 
    128 typedef struct {
    129         service_id_t iplink;
    130         inet_addr_t src;
    131         inet_addr_t dest;
    132         uint8_t tos;
    133         void *data;
    134         size_t size;
    135 } inet_dgram_t;
    136100
    137101typedef struct {
Note: See TracChangeset for help on using the changeset viewer.