📄 dhcpc_8c-source.html
字号:
00218 00219 <span class="keywordflow">case</span> DHCP_STATE_REBOOTING:00220 <span class="keywordflow">if</span>(sec)00221 <a class="code" href="dhcpc_8c.html#a4">dhcpc_t1</a>--;00222 00223 <span class="keywordflow">if</span>(!<a class="code" href="dhcpc_8c.html#a4">dhcpc_t1</a>){00224 <span class="keywordflow">if</span>(<a class="code" href="dhcpc_8c.html#a5">dhcpc_t2</a>>=32){00225 <span class="comment">/* we need to restart, we don't want to wait more</span>00226 <span class="comment"> * than 30 secs for retransmissions</span>00227 <span class="comment"> */</span>00228 <a class="code" href="dhcpc_8c.html#a0">dhcpc_state</a>=DHCP_STATE_INIT_REBOOT;00229 }<span class="keywordflow">else</span>{00230 <a class="code" href="dhcpc_8c.html#a4">dhcpc_t1</a>=<a class="code" href="dhcpc_8c.html#a5">dhcpc_t2</a>;00231 <a class="code" href="dhcpc_8c.html#a5">dhcpc_t2</a><<=1; <span class="comment">/* exponential backoff retransmission */</span>00232 <a class="code" href="dhcpc_8c.html#a9">dhcpc_send_message</a>(DHCP_REQUEST);00233 } 00234 } 00235 <span class="keywordflow">break</span>;00236 <span class="keywordflow">case</span> DHCP_STATE_INIT:00237 <span class="comment">/* switch to selecting, send DHCPDISCOVER and initialize</span>00238 <span class="comment"> * timeout timer</span>00239 <span class="comment"> */</span>00240 DEBUGOUT(<span class="stringliteral">"DHCP State=INIT; Sending DHCPDISCOVER message; State INIT-->SELECTING\r\n"</span>);00241 <a class="code" href="dhcpc_8c.html#a0">dhcpc_state</a>=DHCP_STATE_SELECTING;00242 <a class="code" href="dhcpc_8c.html#a9">dhcpc_send_message</a>(DHCP_DISCOVER);00243 <span class="comment">/* T1 will be timeout timer. T2 will hold next timeout value */</span>00244 <a class="code" href="dhcpc_8c.html#a4">dhcpc_t1</a>=4; <span class="comment">/* next retransmission after 4 secs */</span>00245 <a class="code" href="dhcpc_8c.html#a5">dhcpc_t2</a>=8; <span class="comment">/* after 4 secs expire, this will be next timeout */</span>00246 <span class="keywordflow">break</span>;00247 <span class="keywordflow">case</span> DHCP_STATE_SELECTING:00248 <span class="comment">/* one second expired ? */</span>00249 <span class="keywordflow">if</span>(sec)00250 <a class="code" href="dhcpc_8c.html#a4">dhcpc_t1</a>--;00251 00252 <span class="comment">/* timeout expired without receiving DHCPOFFER ? */</span>00253 <span class="keywordflow">if</span>(!<a class="code" href="dhcpc_8c.html#a4">dhcpc_t1</a>){00254 DEBUGOUT(<span class="stringliteral">"DHCP State=SELECTING; "</span>);00255 <span class="comment">/* yes, retransmit or restart the process */</span>00256 <span class="keywordflow">if</span>(<a class="code" href="dhcpc_8c.html#a5">dhcpc_t2</a>>=32){00257 <span class="comment">/* we need to restart, we don't want to wait more</span>00258 <span class="comment"> * than 30 secs for retransmissions</span>00259 <span class="comment"> */</span>00260 <a class="code" href="dhcpc_8c.html#a0">dhcpc_state</a>=DHCP_STATE_INIT;00261 DEBUGOUT(<span class="stringliteral">"Timeout for retransmissions too big; State SELECTING-->INIT\r\n"</span>);00262 }<span class="keywordflow">else</span>{00263 DEBUGOUT(<span class="stringliteral">"Retransmitting DHCPDISCOVER\r\n"</span>);00264 <a class="code" href="dhcpc_8c.html#a4">dhcpc_t1</a>=<a class="code" href="dhcpc_8c.html#a5">dhcpc_t2</a>;00265 <a class="code" href="dhcpc_8c.html#a5">dhcpc_t2</a><<=1; <span class="comment">/* exponential backoff retransmission */</span>00266 <a class="code" href="dhcpc_8c.html#a9">dhcpc_send_message</a>(DHCP_DISCOVER);00267 }00268 }00269 <span class="keywordflow">break</span>;00270 <span class="keywordflow">case</span> DHCP_STATE_REQUESTING:00271 <span class="comment">/* DHCPREQUEST sent, waiting for proper response. Retransmit</span>00272 <span class="comment"> * if necessary</span>00273 <span class="comment"> */</span>00274 <span class="keywordflow">if</span>(sec)00275 <a class="code" href="dhcpc_8c.html#a4">dhcpc_t1</a>--;00276 00277 <span class="keywordflow">if</span>(!<a class="code" href="dhcpc_8c.html#a4">dhcpc_t1</a>){00278 <span class="comment">/* timeout occured without receiving DHCPACK */</span>00279 DEBUGOUT(<span class="stringliteral">"DHCP State=REQUESTING; "</span>);00280 <span class="keywordflow">if</span>(<a class="code" href="dhcpc_8c.html#a5">dhcpc_t2</a>>=32){00281 <span class="comment">/* we need to restart, we don't want to wait more</span>00282 <span class="comment"> * than 30 secs for retransmissions. Restart whole</span>00283 <span class="comment"> * process</span>00284 <span class="comment"> */</span>00285 <a class="code" href="dhcpc_8c.html#a0">dhcpc_state</a>=DHCP_STATE_INIT;00286 DEBUGOUT(<span class="stringliteral">"Timeout for retransmits too big; State REQUESTING-->INIT\r\n"</span>);00287 }<span class="keywordflow">else</span>{00288 DEBUGOUT(<span class="stringliteral">"Retransmitting DHCPREQUEST\r\n"</span>);00289 <a class="code" href="dhcpc_8c.html#a4">dhcpc_t1</a>=<a class="code" href="dhcpc_8c.html#a5">dhcpc_t2</a>;00290 <a class="code" href="dhcpc_8c.html#a5">dhcpc_t2</a><<=1; <span class="comment">/* exponential backoff retransmission */</span>00291 <a class="code" href="dhcpc_8c.html#a9">dhcpc_send_message</a>(DHCP_REQUEST);00292 } 00293 } 00294 <span class="keywordflow">break</span>;00295 <span class="keywordflow">case</span> DHCP_STATE_BOUND:00296 <span class="comment">/* wait for T1 to expire */</span>00297 <span class="keywordflow">if</span>(sec){00298 <a class="code" href="dhcpc_8c.html#a4">dhcpc_t1</a>--;00299 <a class="code" href="dhcpc_8c.html#a5">dhcpc_t2</a>--;00300 }00301 <span class="keywordflow">if</span>(!<a class="code" href="dhcpc_8c.html#a4">dhcpc_t1</a>){00302 DEBUGOUT(<span class="stringliteral">"DHCP State=BOUND; Starting renewing process; State BOUND-->RENEWING\r\n"</span>);00303 <span class="comment">/* T1 expired, start renewing process */</span>00304 <a class="code" href="dhcpc_8c.html#a0">dhcpc_state</a>=DHCP_STATE_RENEWING;00305 00306 <a class="code" href="dhcpc_8c.html#a9">dhcpc_send_message</a>(DHCP_REQUEST);00307 00308 <span class="comment">/* T1 will be used for retransmissions untill we</span>00309 <span class="comment"> * return to BOUND state or reset to INIT state</span>00310 <span class="comment"> */</span>00311 <a class="code" href="dhcpc_8c.html#a4">dhcpc_t1</a>=10; <span class="comment">/* fixed 10sec retransmissions */</span>00312 }00313 <span class="keywordflow">break</span>;00314 <span class="keywordflow">case</span> DHCP_STATE_RENEWING:00315 <span class="keywordflow">if</span>(sec){00316 <a class="code" href="dhcpc_8c.html#a4">dhcpc_t1</a>--;00317 <a class="code" href="dhcpc_8c.html#a5">dhcpc_t2</a>--;00318 }00319 00320 <span class="keywordflow">if</span>(!<a class="code" href="dhcpc_8c.html#a5">dhcpc_t2</a>){00321 DEBUGOUT(<span class="stringliteral">"DHCP State=RENEWING; T2 expired; State RENEWING-->REBINDING\r\n"</span>);00322 <span class="comment">/* oh no, T2 also expired. switch to rebinding state. This</span>00323 <span class="comment"> * is our last attempt to retain this IP address.</span>00324 <span class="comment"> */</span>00325 <a class="code" href="dhcpc_8c.html#a0">dhcpc_state</a>=DHCP_STATE_REBINDING;00326 00327 <a class="code" href="dhcpc_8c.html#a9">dhcpc_send_message</a>(DHCP_REQUEST);00328 00329 <span class="comment">/* dhcpc_t1 will be used for timeouts */</span>00330 <a class="code" href="dhcpc_8c.html#a4">dhcpc_t1</a>=5; <span class="comment">/* 5 second retransmits */</span>00331 00332 <span class="comment">/* dhcpc_t2 will be used for fixed numer of retries. This</span>00333 <span class="comment"> * is a bit different than per RFC, but we don't want </span>00334 <span class="comment"> * another 32-bit timer value for keeping lease time.</span>00335 <span class="comment"> */</span>00336 <a class="code" href="dhcpc_8c.html#a5">dhcpc_t2</a>=10;00337 }<span class="keywordflow">else</span>00338 <span class="keywordflow">if</span>(!<a class="code" href="dhcpc_8c.html#a4">dhcpc_t1</a>){00339 DEBUGOUT(<span class="stringliteral">"DHCP State=RENEWING; Retransmitting DHCPREQUEST\r\n"</span>); 00340 <span class="comment">/* retransmit DHCP REQUEST messages */</span>00341 <a class="code" href="dhcpc_8c.html#a9">dhcpc_send_message</a>(DHCP_REQUEST);00342 <a class="code" href="dhcpc_8c.html#a4">dhcpc_t1</a>=10;00343 }00344 <span class="keywordflow">break</span>;00345 <span class="keywordflow">case</span> DHCP_STATE_REBINDING:00346 <span class="keywordflow">if</span>(sec)00347 <a class="code" href="dhcpc_8c.html#a4">dhcpc_t1</a>--;00348 00349 <span class="keywordflow">if</span>(!<a class="code" href="dhcpc_8c.html#a4">dhcpc_t1</a>){00350 00351 <a class="code" href="dhcpc_8c.html#a4">dhcpc_t1</a>=5; <span class="comment">/* 5 second retransmits */</span>00352 00353 <a class="code" href="dhcpc_8c.html#a5">dhcpc_t2</a>--; <span class="comment">/* retransmit count */</span>00354 00355 <span class="keywordflow">if</span>(!<a class="code" href="dhcpc_8c.html#a5">dhcpc_t2</a>){00356 DEBUGOUT(<span class="stringliteral">"DHCP State=REBINDING; Lease time expired; State REBINDING-->INIT\r\n"</span>);00357 <span class="comment">/* used up retransmission. Assume that lease time</span>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -