📄 dhcpc_8c-source.html
字号:
00358 <span class="comment"> * expired by now. Restart the process</span>00359 <span class="comment"> */</span>00360 <a class="code" href="dhcpc_8c.html#a0">dhcpc_state</a>=DHCP_STATE_INIT;00361 localmachine.localip=0; <span class="comment">/* can't use this any more */</span>00362 }<span class="keywordflow">else</span>{00363 DEBUGOUT(<span class="stringliteral">"DHCP State=REBINDING; Retransmitting DHCPREQUEST\r\n"</span>);00364 <span class="comment">/* still have some time */</span>00365 <a class="code" href="dhcpc_8c.html#a9">dhcpc_send_message</a>(DHCP_REQUEST);00366 }00367 }00368 <span class="keywordflow">break</span>;00369 <span class="keywordflow">default</span>:00370 <span class="keywordflow">break</span>;00371 }00372 00373 <span class="keywordflow">if</span>(sec){00374 <a class="code" href="timers_8c.html#a6">init_timer</a>(<a class="code" href="dhcpc_8c.html#a1">dhcpc_timer_handle</a>,<a class="code" href="timers_8h.html#a1">TIMERTIC</a>*1);00375 }00376 }00377 <a name="l00389"></a><a class="code" href="dhcpc_8c.html#a9">00389</a> INT8 <a class="code" href="dhcpc_8c.html#a9">dhcpc_send_message</a>(UINT8 msg_type)00390 {00391 00392 UINT16 index;00393 UINT8 *buf_ptr; <span class="comment">/* transmit buffer pointer */</span>00394 00395 <span class="comment">/* first clear transmit buffer to all zeroes */</span>00396 <span class="keywordflow">for</span>(index=<a class="code" href="tcp__ip_8h.html#a62">UDP_APP_OFFSET</a>;index<<a class="code" href="group__opentcp__config.html#a4">NETWORK_TX_BUFFER_SIZE</a>;index++)00397 net_buf[index]=0;00398 00399 buf_ptr=net_buf+<a class="code" href="tcp__ip_8h.html#a62">UDP_APP_OFFSET</a>;00400 00401 <span class="comment">/* create DHCP message */</span>00402 00403 *buf_ptr++=BOOT_REQUEST;00404 *buf_ptr++=0x01; <span class="comment">/* htype=ethernet */</span>00405 *buf_ptr++=0x06; <span class="comment">/* hlen=6 for ethernet */</span>00406 *buf_ptr++=0x00; <span class="comment">/* hops=0 by clients */</span>00407 00408 <span class="comment">/* xid, use constant value for all requests (allowed by RFC) */</span>00409 *buf_ptr++=0xAA;00410 *buf_ptr++=0xBB;00411 *buf_ptr++=0xCC;00412 *buf_ptr++=0xDD;00413 00414 <span class="comment">/* seconds from boot. Fixed for now */</span>00415 *buf_ptr++=0x00;00416 *buf_ptr++=0x00;00417 00418 <span class="comment">/* flags, use broadcast */</span>00419 *buf_ptr++=0x80;00420 *buf_ptr++=0x00;00421 00422 <span class="comment">/* ciaddr. Sent only if client is in BOUND, RENEW or REBINDING</span>00423 <span class="comment"> * state (RFC2131)</span>00424 <span class="comment"> */</span>00425 <span class="keywordflow">if</span>((<a class="code" href="dhcpc_8c.html#a0">dhcpc_state</a>==DHCP_STATE_BOUND)00426 ||(<a class="code" href="dhcpc_8c.html#a0">dhcpc_state</a>==DHCP_STATE_RENEWING)00427 ||(<a class="code" href="dhcpc_8c.html#a0">dhcpc_state</a>==DHCP_STATE_REBINDING)){00428 *buf_ptr++=(UINT8)(localmachine.localip>>24);00429 *buf_ptr++=(UINT8)(localmachine.localip>>16);00430 *buf_ptr++=(UINT8)(localmachine.localip>>8);00431 *buf_ptr++=(UINT8)(localmachine.localip); 00432 }<span class="keywordflow">else</span>{00433 buf_ptr+=4; <span class="comment">/* skip 4 bytes, buffer zeroed already */</span>00434 }00435 00436 <span class="comment">/* yiaddr, siaddr, giaddr, skip */</span>00437 buf_ptr+=12;00438 00439 <span class="comment">/* chaddr */</span>00440 *buf_ptr++=localmachine.localHW[5];00441 *buf_ptr++=localmachine.localHW[4];00442 *buf_ptr++=localmachine.localHW[3];00443 *buf_ptr++=localmachine.localHW[2];00444 *buf_ptr++=localmachine.localHW[1];00445 *buf_ptr++=localmachine.localHW[0];00446 buf_ptr+=10;00447 00448 <span class="comment">/* sname and file, skip */</span>00449 buf_ptr+=192;00450 00451 <span class="comment">/* options field. First magic cookie */</span>00452 *buf_ptr++=99;00453 *buf_ptr++=130;00454 *buf_ptr++=83;00455 *buf_ptr++=99;00456 00457 <span class="comment">/* message type */</span>00458 *buf_ptr++=DHCP_OPT_MSG_TYPE;00459 *buf_ptr++=1;00460 *buf_ptr++=msg_type;00461 00462 <span class="comment">/* next depends on what state we're in and message type */</span>00463 <span class="keywordflow">switch</span>(msg_type){00464 00465 <span class="keywordflow">case</span> DHCP_REQUEST:00466 <span class="keywordflow">case</span> DHCP_DECLINE: <span class="comment">/* sent only from REQUESTING state */</span>00467 00468 <span class="comment">/* Requested IP address MUST NOT be sent in RENEWING and</span>00469 <span class="comment"> * REBINDING states (RFC2123 page 31)</span>00470 <span class="comment"> */</span>00471 <span class="keywordflow">if</span>((<a class="code" href="dhcpc_8c.html#a0">dhcpc_state</a>!=DHCP_STATE_RENEWING)00472 &&(<a class="code" href="dhcpc_8c.html#a0">dhcpc_state</a>!=DHCP_STATE_REBINDING)){00473 *buf_ptr++=DHCP_OPT_REQUESTED_IP;00474 *buf_ptr++=4;00475 *buf_ptr++=(UINT8)(<a class="code" href="dhcpc_8c.html#a7">dhcpc_requested_ip</a>>>24);00476 *buf_ptr++=(UINT8)(<a class="code" href="dhcpc_8c.html#a7">dhcpc_requested_ip</a>>>16);00477 *buf_ptr++=(UINT8)(<a class="code" href="dhcpc_8c.html#a7">dhcpc_requested_ip</a>>>8);00478 *buf_ptr++=(UINT8)(dhcpc_requested_ip);00479 } 00480 <span class="comment">/* server identifier, only when not in INIT_REBOOT state </span>00481 <span class="comment"> *(RFC2131, Section 4.3.2) or RENEWING, REBINDING</span>00482 <span class="comment"> * state (RFC2131 page 31)</span>00483 <span class="comment"> */</span>00484 <span class="keywordflow">if</span>((<a class="code" href="dhcpc_8c.html#a0">dhcpc_state</a>!=DHCP_STATE_INIT_REBOOT)00485 &&(<a class="code" href="dhcpc_8c.html#a0">dhcpc_state</a>!=DHCP_STATE_REBOOTING) <span class="comment">/* for retransmissions */</span> 00486 &&(<a class="code" href="dhcpc_8c.html#a0">dhcpc_state</a>!=DHCP_STATE_RENEWING)00487 &&(<a class="code" href="dhcpc_8c.html#a0">dhcpc_state</a>!=DHCP_STATE_REBINDING)){00488 *buf_ptr++=DHCP_OPT_SERV_IDENT;00489 *buf_ptr++=4;00490 *buf_ptr++=(UINT8)(<a class="code" href="dhcpc_8c.html#a6">dhcpc_server_identifier</a>>>24);00491 *buf_ptr++=(UINT8)(<a class="code" href="dhcpc_8c.html#a6">dhcpc_server_identifier</a>>>16);00492 *buf_ptr++=(UINT8)(<a class="code" href="dhcpc_8c.html#a6">dhcpc_server_identifier</a>>>8);00493 *buf_ptr++=(UINT8)(dhcpc_server_identifier);00494 } 00495 <span class="comment">/* go through to request parameters we're interested in, but</span>00496 <span class="comment"> * only if we're not sending DECLINE message (parameter list</span>00497 <span class="comment"> * MUST NOT be sent in such a message)</span>00498 <span class="comment"> */</span>00499 <span class="keywordflow">if</span>(msg_type==DHCP_DECLINE)00500 <span class="keywordflow">break</span>;00501 00502 <span class="keywordflow">case</span> DHCP_DISCOVER: 00503 <span class="comment">/* parameter request list. These also MUST be transmitted</span>00504 <span class="comment"> * with DHCP REQUEST message */</span>00505 *buf_ptr++=DHCP_OPT_PARAM_REQUEST;00506 *buf_ptr++=7; <span class="comment">/* number of parameters we're requesting */</span>00507 *buf_ptr++=DHCP_OPT_SUBNET_MASK;00508 *buf_ptr++=DHCP_OPT_ROUTER;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -