⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dhcpc_8c-source.html

📁 Freescale mcu OpenTCP-1.0.4.doc.html.zip 文档
💻 HTML
📖 第 1 页 / 共 5 页
字号:
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&lt;<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&gt;&gt;24);00429                 *buf_ptr++=(UINT8)(localmachine.localip&gt;&gt;16);00430                 *buf_ptr++=(UINT8)(localmachine.localip&gt;&gt;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                                 &amp;&amp;(<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>&gt;&gt;24);00476                                 *buf_ptr++=(UINT8)(<a class="code" href="dhcpc_8c.html#a7">dhcpc_requested_ip</a>&gt;&gt;16);00477                                 *buf_ptr++=(UINT8)(<a class="code" href="dhcpc_8c.html#a7">dhcpc_requested_ip</a>&gt;&gt;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                                 &amp;&amp;(<a class="code" href="dhcpc_8c.html#a0">dhcpc_state</a>!=DHCP_STATE_REBOOTING)   <span class="comment">/* for retransmissions */</span>                       00486                                 &amp;&amp;(<a class="code" href="dhcpc_8c.html#a0">dhcpc_state</a>!=DHCP_STATE_RENEWING)00487                                 &amp;&amp;(<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>&gt;&gt;24);00491                                 *buf_ptr++=(UINT8)(<a class="code" href="dhcpc_8c.html#a6">dhcpc_server_identifier</a>&gt;&gt;16);00492                                 *buf_ptr++=(UINT8)(<a class="code" href="dhcpc_8c.html#a6">dhcpc_server_identifier</a>&gt;&gt;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 + -