Ignore:
File:
1 edited

Legend:

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

    r1bbc6dc r3e6bca8  
    11/*
    2  * Copyright (c) 2024 Jiri Svoboda
     2 * Copyright (c) 2021 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    4747#include <io/log.h>
    4848#include <loc.h>
    49 #include <rndgen.h>
    5049#include <stdio.h>
    5150#include <stdlib.h>
     
    7069/** List of registered links (of dhcp_link_t) */
    7170static list_t dhcp_links;
    72 
    73 bool inetcfg_inited = false;
    7471
    7572static void dhcpsrv_discover_timeout(void *);
     
    9895        /** DNS server */
    9996        inet_addr_t dns_server;
    100         /** Transaction ID */
    101         uint32_t xid;
    10297} dhcp_offer_t;
    10398
     
    119114        /** Last received offer */
    120115        dhcp_offer_t offer;
    121         /** Random number generator */
    122         rndgen_t *rndgen;
    123116} dhcp_link_t;
    124117
     
    161154        dhcp_hdr_t *hdr = (dhcp_hdr_t *)msgbuf;
    162155        uint8_t *opt = msgbuf + sizeof(dhcp_hdr_t);
    163         uint32_t xid;
    164         errno_t rc;
    165         size_t i;
    166 
    167         rc = rndgen_uint32(dlink->rndgen, &xid);
    168         if (rc != EOK)
    169                 return rc;
    170156
    171157        memset(msgbuf, 0, MAX_MSG_SIZE);
     
    173159        hdr->htype = 1; /* AHRD_ETHERNET */
    174160        hdr->hlen = ETH_ADDR_SIZE;
    175         hdr->xid = host2uint32_t_be(xid);
    176         hdr->flags = host2uint16_t_be(flag_broadcast);
     161        hdr->xid = host2uint32_t_be(42);
     162        hdr->flags = flag_broadcast;
    177163
    178164        eth_addr_encode(&dlink->link_info.mac_addr, hdr->chaddr);
    179165        hdr->opt_magic = host2uint32_t_be(dhcp_opt_magic);
    180166
    181         i = 0;
    182 
    183         opt[i++] = opt_msg_type;
    184         opt[i++] = 1;
    185         opt[i++] = msg_dhcpdiscover;
    186 
    187         opt[i++] = opt_param_req_list;
    188         opt[i++] = 3;
    189         opt[i++] = 1; /* subnet mask */
    190         opt[i++] = 6; /* DNS server */
    191         opt[i++] = 3; /* router */
    192 
    193         opt[i++] = opt_end;
    194 
    195         return dhcp_send(&dlink->dt, msgbuf, sizeof(dhcp_hdr_t) + i);
     167        opt[0] = opt_msg_type;
     168        opt[1] = 1;
     169        opt[2] = msg_dhcpdiscover;
     170        opt[3] = opt_end;
     171
     172        return dhcp_send(&dlink->dt, msgbuf, sizeof(dhcp_hdr_t) + 4);
    196173}
    197174
     
    206183        hdr->htype = 1; /* AHRD_ETHERNET */
    207184        hdr->hlen = 6;
    208         hdr->xid = host2uint32_t_be(offer->xid);
    209         hdr->flags = host2uint16_t_be(flag_broadcast);
     185        hdr->xid = host2uint32_t_be(42);
     186        hdr->flags = flag_broadcast;
     187        hdr->ciaddr = host2uint32_t_be(offer->oaddr.addr);
    210188        eth_addr_encode(&dlink->link_info.mac_addr, hdr->chaddr);
    211189        hdr->opt_magic = host2uint32_t_be(dhcp_opt_magic);
     
    280258
    281259        inet_naddr_set(yiaddr.addr, 0, &offer->oaddr);
    282         offer->xid = uint32_t_be2host(hdr->xid);
    283260
    284261        msgb = (uint8_t *)msg;
     
    470447        log_msg(LOG_DEFAULT, LVL_DEBUG, "dhcpsrv_link_add(%zu)", link_id);
    471448
    472         if (!inetcfg_inited) {
    473                 rc = inetcfg_init();
    474                 if (rc != EOK) {
    475                         log_msg(LOG_DEFAULT, LVL_ERROR, "Error contacting "
    476                             "inet configuration service.\n");
    477                         return EIO;
    478                 }
    479 
    480                 inetcfg_inited = true;
    481         }
    482 
    483449        if (dhcpsrv_link_find(link_id) != NULL) {
    484450                log_msg(LOG_DEFAULT, LVL_NOTE, "Link %zu already added",
     
    490456        if (dlink == NULL)
    491457                return ENOMEM;
    492 
    493         rc = rndgen_create(&dlink->rndgen);
    494         if (rc != EOK)
    495                 goto error;
    496458
    497459        dlink->link_id = link_id;
     
    532494        return EOK;
    533495error:
    534         if (dlink != NULL && dlink->rndgen != NULL)
    535                 rndgen_destroy(dlink->rndgen);
    536496        if (dlink != NULL && dlink->timeout != NULL)
    537497                fibril_timer_destroy(dlink->timeout);
Note: See TracChangeset for help on using the changeset viewer.