Ignore:
File:
1 edited

Legend:

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

    rb7155d7 r8d58fca  
    11/*
    2  * Copyright (c) 2022 Jiri Svoboda
     2 * Copyright (c) 2013 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    4242#include <fibril_synch.h>
    4343#include <inet/addr.h>
    44 #include <inet/eth_addr.h>
    4544#include <inet/dnsr.h>
    4645#include <inet/inetcfg.h>
    4746#include <io/log.h>
    4847#include <loc.h>
    49 #include <rndgen.h>
    5048#include <stdio.h>
    5149#include <stdlib.h>
     
    9694        /** DNS server */
    9795        inet_addr_t dns_server;
    98         /** Transaction ID */
    99         uint32_t xid;
    10096} dhcp_offer_t;
    10197
     
    117113        /** Last received offer */
    118114        dhcp_offer_t offer;
    119         /** Random number generator */
    120         rndgen_t *rndgen;
    121115} dhcp_link_t;
    122116
     
    159153        dhcp_hdr_t *hdr = (dhcp_hdr_t *)msgbuf;
    160154        uint8_t *opt = msgbuf + sizeof(dhcp_hdr_t);
    161         uint32_t xid;
    162         errno_t rc;
    163         size_t i;
    164 
    165         rc = rndgen_uint32(dlink->rndgen, &xid);
    166         if (rc != EOK)
    167                 return rc;
    168155
    169156        memset(msgbuf, 0, MAX_MSG_SIZE);
    170157        hdr->op = op_bootrequest;
    171158        hdr->htype = 1; /* AHRD_ETHERNET */
    172         hdr->hlen = ETH_ADDR_SIZE;
    173         hdr->xid = host2uint32_t_be(xid);
    174         hdr->flags = host2uint16_t_be(flag_broadcast);
    175 
    176         eth_addr_encode(&dlink->link_info.mac_addr, hdr->chaddr);
     159        hdr->hlen = sizeof(addr48_t);
     160        hdr->xid = host2uint32_t_be(42);
     161        hdr->flags = flag_broadcast;
     162
     163        addr48(dlink->link_info.mac_addr, hdr->chaddr);
    177164        hdr->opt_magic = host2uint32_t_be(dhcp_opt_magic);
    178165
    179         i = 0;
    180 
    181         opt[i++] = opt_msg_type;
    182         opt[i++] = 1;
    183         opt[i++] = msg_dhcpdiscover;
    184 
    185         opt[i++] = opt_param_req_list;
    186         opt[i++] = 3;
    187         opt[i++] = 1; /* subnet mask */
    188         opt[i++] = 6; /* DNS server */
    189         opt[i++] = 3; /* router */
    190 
    191         opt[i++] = opt_end;
    192 
    193         return dhcp_send(&dlink->dt, msgbuf, sizeof(dhcp_hdr_t) + i);
     166        opt[0] = opt_msg_type;
     167        opt[1] = 1;
     168        opt[2] = msg_dhcpdiscover;
     169        opt[3] = opt_end;
     170
     171        return dhcp_send(&dlink->dt, msgbuf, sizeof(dhcp_hdr_t) + 4);
    194172}
    195173
     
    204182        hdr->htype = 1; /* AHRD_ETHERNET */
    205183        hdr->hlen = 6;
    206         hdr->xid = host2uint32_t_be(offer->xid);
    207         hdr->flags = host2uint16_t_be(flag_broadcast);
    208         eth_addr_encode(&dlink->link_info.mac_addr, hdr->chaddr);
     184        hdr->xid = host2uint32_t_be(42);
     185        hdr->flags = flag_broadcast;
     186        hdr->ciaddr = host2uint32_t_be(offer->oaddr.addr);
     187        addr48(dlink->link_info.mac_addr, hdr->chaddr);
    209188        hdr->opt_magic = host2uint32_t_be(dhcp_opt_magic);
    210189
     
    278257
    279258        inet_naddr_set(yiaddr.addr, 0, &offer->oaddr);
    280         offer->xid = uint32_t_be2host(hdr->xid);
    281259
    282260        msgb = (uint8_t *)msg;
     
    478456                return ENOMEM;
    479457
    480         rc = rndgen_create(&dlink->rndgen);
    481         if (rc != EOK)
    482                 goto error;
    483 
    484458        dlink->link_id = link_id;
    485459        dlink->timeout = fibril_timer_create(NULL);
     
    519493        return EOK;
    520494error:
    521         if (dlink != NULL && dlink->rndgen != NULL)
    522                 rndgen_destroy(dlink->rndgen);
    523495        if (dlink != NULL && dlink->timeout != NULL)
    524496                fibril_timer_destroy(dlink->timeout);
Note: See TracChangeset for help on using the changeset viewer.