Changes in uspace/srv/net/dhcp/dhcp.c [1bbc6dc:8d58fca] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/net/dhcp/dhcp.c
r1bbc6dc r8d58fca 1 1 /* 2 * Copyright (c) 20 24Jiri Svoboda2 * Copyright (c) 2013 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>45 44 #include <inet/dnsr.h> 46 45 #include <inet/inetcfg.h> 47 46 #include <io/log.h> 48 47 #include <loc.h> 49 #include <rndgen.h>50 48 #include <stdio.h> 51 49 #include <stdlib.h> … … 70 68 /** List of registered links (of dhcp_link_t) */ 71 69 static list_t dhcp_links; 72 73 bool inetcfg_inited = false;74 70 75 71 static void dhcpsrv_discover_timeout(void *); … … 98 94 /** DNS server */ 99 95 inet_addr_t dns_server; 100 /** Transaction ID */101 uint32_t xid;102 96 } dhcp_offer_t; 103 97 … … 119 113 /** Last received offer */ 120 114 dhcp_offer_t offer; 121 /** Random number generator */122 rndgen_t *rndgen;123 115 } dhcp_link_t; 124 116 … … 161 153 dhcp_hdr_t *hdr = (dhcp_hdr_t *)msgbuf; 162 154 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;170 155 171 156 memset(msgbuf, 0, MAX_MSG_SIZE); 172 157 hdr->op = op_bootrequest; 173 158 hdr->htype = 1; /* AHRD_ETHERNET */ 174 hdr->hlen = ETH_ADDR_SIZE;175 hdr->xid = host2uint32_t_be( xid);176 hdr->flags = host2uint16_t_be(flag_broadcast);177 178 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); 179 164 hdr->opt_magic = host2uint32_t_be(dhcp_opt_magic); 180 165 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); 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); 196 172 } 197 173 … … 206 182 hdr->htype = 1; /* AHRD_ETHERNET */ 207 183 hdr->hlen = 6; 208 hdr->xid = host2uint32_t_be(offer->xid); 209 hdr->flags = host2uint16_t_be(flag_broadcast); 210 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); 211 188 hdr->opt_magic = host2uint32_t_be(dhcp_opt_magic); 212 189 … … 280 257 281 258 inet_naddr_set(yiaddr.addr, 0, &offer->oaddr); 282 offer->xid = uint32_t_be2host(hdr->xid);283 259 284 260 msgb = (uint8_t *)msg; … … 470 446 log_msg(LOG_DEFAULT, LVL_DEBUG, "dhcpsrv_link_add(%zu)", link_id); 471 447 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 483 448 if (dhcpsrv_link_find(link_id) != NULL) { 484 449 log_msg(LOG_DEFAULT, LVL_NOTE, "Link %zu already added", … … 490 455 if (dlink == NULL) 491 456 return ENOMEM; 492 493 rc = rndgen_create(&dlink->rndgen);494 if (rc != EOK)495 goto error;496 457 497 458 dlink->link_id = link_id; … … 532 493 return EOK; 533 494 error: 534 if (dlink != NULL && dlink->rndgen != NULL)535 rndgen_destroy(dlink->rndgen);536 495 if (dlink != NULL && dlink->timeout != NULL) 537 496 fibril_timer_destroy(dlink->timeout);
Note:
See TracChangeset
for help on using the changeset viewer.