Changes in uspace/srv/net/dhcp/dhcp.c [8d58fca:b7155d7] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/net/dhcp/dhcp.c
r8d58fca rb7155d7 1 1 /* 2 * Copyright (c) 20 13Jiri Svoboda2 * Copyright (c) 2022 Jiri Svoboda 3 3 * All rights reserved. 4 4 * … … 42 42 #include <fibril_synch.h> 43 43 #include <inet/addr.h> 44 #include <inet/eth_addr.h> 44 45 #include <inet/dnsr.h> 45 46 #include <inet/inetcfg.h> 46 47 #include <io/log.h> 47 48 #include <loc.h> 49 #include <rndgen.h> 48 50 #include <stdio.h> 49 51 #include <stdlib.h> … … 94 96 /** DNS server */ 95 97 inet_addr_t dns_server; 98 /** Transaction ID */ 99 uint32_t xid; 96 100 } dhcp_offer_t; 97 101 … … 113 117 /** Last received offer */ 114 118 dhcp_offer_t offer; 119 /** Random number generator */ 120 rndgen_t *rndgen; 115 121 } dhcp_link_t; 116 122 … … 153 159 dhcp_hdr_t *hdr = (dhcp_hdr_t *)msgbuf; 154 160 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; 155 168 156 169 memset(msgbuf, 0, MAX_MSG_SIZE); 157 170 hdr->op = op_bootrequest; 158 171 hdr->htype = 1; /* AHRD_ETHERNET */ 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);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); 164 177 hdr->opt_magic = host2uint32_t_be(dhcp_opt_magic); 165 178 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); 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); 172 194 } 173 195 … … 182 204 hdr->htype = 1; /* AHRD_ETHERNET */ 183 205 hdr->hlen = 6; 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); 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); 188 209 hdr->opt_magic = host2uint32_t_be(dhcp_opt_magic); 189 210 … … 257 278 258 279 inet_naddr_set(yiaddr.addr, 0, &offer->oaddr); 280 offer->xid = uint32_t_be2host(hdr->xid); 259 281 260 282 msgb = (uint8_t *)msg; … … 456 478 return ENOMEM; 457 479 480 rc = rndgen_create(&dlink->rndgen); 481 if (rc != EOK) 482 goto error; 483 458 484 dlink->link_id = link_id; 459 485 dlink->timeout = fibril_timer_create(NULL); … … 493 519 return EOK; 494 520 error: 521 if (dlink != NULL && dlink->rndgen != NULL) 522 rndgen_destroy(dlink->rndgen); 495 523 if (dlink != NULL && dlink->timeout != NULL) 496 524 fibril_timer_destroy(dlink->timeout);
Note:
See TracChangeset
for help on using the changeset viewer.