Changeset 315 for rubycfg_asp/trunk/asp_dcre/tinet/netinet/tcp_timer.c
- Timestamp:
- Jul 23, 2017, 2:29:40 PM (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
rubycfg_asp/trunk/asp_dcre/tinet/netinet/tcp_timer.c
-
Property svn:mime-type
changed from
text/x-csrc
totext/x-csrc; charset=UTF-8
r313 r315 5 5 * Tomakomai National College of Technology, JAPAN 6 6 * 7 * ä¸è¨èä½æ¨©è 8 ã¯ï¼ä»¥ä¸ã® (1)ï½(4) ã®æ¡ä»¶ãï¼Free Software Foundation 9 * ã«ãã£ã¦å 10 ¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨ 11 * è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢ 12 * ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹å¤ã»åé 13 å¸ï¼ä»¥ä¸ï¼ 14 * å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 15 * (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 16 * 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 17 * ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 18 * (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 19 * ç¨ã§ããå½¢ã§åé 20 å¸ããå ´åã«ã¯ï¼åé 21 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 22 * è 23 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 24 * ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 25 * (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 26 * ç¨ã§ããªãå½¢ã§åé 27 å¸ããå ´åã«ã¯ï¼æ¬¡ã®æ¡ä»¶ãæºãããã¨ï¼ 28 * (a) åé 29 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 30 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 31 * ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 32 * (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 33 * 害ãããï¼ä¸è¨èä½æ¨©è 34 ããã³TOPPERSããã¸ã§ã¯ããå 35 責ãããã¨ï¼ 7 * 上記著作権者は,以下の (1)~(4) の条件か,Free Software Foundation 8 * によって公表されている GNU General Public License の Version 2 に記 9 * 述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア 10 * を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下, 11 * 利用と呼ぶ)することを無償で許諾する. 12 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 13 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー 14 * スコード中に含まれていること. 15 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 16 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 17 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 18 * の無保証規定を掲載すること. 19 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 20 * 用できない形で再配布する場合には,次の条件を満たすこと. 21 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 22 * 作権表示,この利用条件および下記の無保証規定を掲載すること. 23 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 24 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. 36 25 * 37 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 38 ã 39 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã 40 * å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´ 41 * æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼ 26 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 27 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も 28 * 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直 29 * 接的または間接的に生じたいかなる損害に関しても,その責任を負わない. 42 30 * 43 31 * @(#) $Id$ … … 119 107 120 108 /* 121 * å±æé¢æ°109 * 局所関数 122 110 */ 123 111 … … 131 119 132 120 /* 133 * ããã¯ãªãæé121 * バックオフ時間 134 122 * 135 * åéãè¡ããã³ã«ãã¿ã¤ã ã¢ã¦ãã®æéã延é·ããã123 * 再送を行うたびに、タイムアウトの時間を延長する。 136 124 */ 137 125 … … 143 131 }; 144 132 145 #define TCP_TOTAL_BACK_OFF 511 /* ããã¯ãªãæéã®åè¨*/146 147 /* 148 * tcp_timers -- ã¿ã¤ã ã¢ã¦ãå¦ç133 #define TCP_TOTAL_BACK_OFF 511 /* バックオフ時間の合計 */ 134 135 /* 136 * tcp_timers -- タイムアウト処理 149 137 */ 150 138 … … 158 146 159 147 /* 160 * åéã¿ã¤ã148 * 再送タイマ 161 149 */ 162 150 case TCP_TIM_REXMT: 163 151 164 152 /* 165 * æ大åéåæ° (TCP_MAX_REXMT_SHIFTãæ¨æº 12 å) ã«ãªã£ãã¨ãã¯ã166 * ã³ãã¯ã·ã§ã³ãåæããã153 * 最大再送回数 (TCP_MAX_REXMT_SHIFT、標準 12 回) になったときは、 154 * コネクションを切断する。 167 155 */ 168 156 if (++ cep->rxtshift > TCP_MAX_REXMT_SHIFT) { … … 174 162 175 163 /* 176 * åéã¿ã¤ã ã¢ã¦ããè¨ç®ããã164 * 再送タイムアウトを計算する。 177 165 */ 178 166 cep->rxtcur = tcp_range_set((T_TCP_TIME)(tcp_rexmt_val(cep) * tcp_back_off[cep->rxtshift]), … … 182 170 183 171 /* 184 * srtt: å¹³æ»åãããRTT185 * rttvar: å¹³æ»åãããåæ£172 * srtt: 平滑化された RTT 173 * rttvar: 平滑化された分散 186 174 * 187 * åéåæ°ãæ大åéåæ°ã® 1/4 ã«ãªã£ãã¨ãã¯ã188 * å¹³æ»åãããåæ£ (rttvar) ã« srtt ãå ç®ãã189 * å¹³æ»åããã RTT ã 0 ã«ããã175 * 再送回数が最大再送回数の 1/4 になったときは、 176 * 平滑化された分散 (rttvar) に srtt を加算し、 177 * 平滑化された RTT を 0 にする。 190 178 * 191 179 */ … … 196 184 197 185 /* 198 * snd_nxt: 次ã«éä¿¡ãã SEQããã®æç¹ã§ã¯ãååéä¿¡ããSEQ199 * snd_una: æªç¢ºèªã®æå°éä¿¡ SEQ ã¾ãã¯ã確èªãããæ大éä¿¡SEQ186 * snd_nxt: 次に送信する SEQ、この時点では、前回送信した SEQ 187 * snd_una: 未確認の最小送信 SEQ または、確認された最大送信 SEQ 200 188 * 201 * ååéä¿¡ãã SEQ (snd_nxt) ã202 * 確èªãããæ大éä¿¡ SEQ (snd_una) ã¾ã§æ»ãã189 * 前回送信した SEQ (snd_nxt) を 190 * 確認された最大送信 SEQ (snd_una) まで戻す。 203 191 */ 204 192 cep->snd_nxt = cep->snd_una; … … 206 194 207 195 /* 208 * rtt: å¾å¾©æéã®è¨æ¸¬ãä¸æ¢ããã196 * rtt: 往復時間の計測を中止する。 209 197 */ 210 198 cep->rtt = 0; 211 199 212 200 /* 213 * éä¿¡ã¦ã¤ã³ãã®è¨å®201 * 送信ウインドの設定 214 202 * 215 * snd_wnd: ç¸æã®åä¿¡å¯è½ã¦ã£ã³ããµã¤ãº216 * snd_cwnd: 輻輳ã¦ã£ã³ããµã¤ãº217 * maxseg : ç¸æã®æ大åä¿¡ã»ã°ã¡ã³ããµã¤ãº203 * snd_wnd: 相手の受信可能ウィンドサイズ 204 * snd_cwnd: 輻輳ウィンドサイズ 205 * maxseg : 相手の最大受信セグメントサイズ 218 206 * 219 * ç¸æã®åä¿¡å¯è½ã¦ã£ã³ããµã¤ãº (snd_wnd) ãã220 * 輻輳ã¦ã£ã³ããµã¤ãº (snd_cwnd) ã®221 * ã©ã¡ããå°ãããµã¤ãºã® 1/2 ããæ´ã«222 * ç¸æã®æ大åä¿¡ã»ã°ã¡ã³ããµã¤ãº (maxseg) ã§å²ã£ãå¤ã223 * ãã ãã2 以ä¸207 * 相手の受信可能ウィンドサイズ (snd_wnd) か、 208 * 輻輳ウィンドサイズ (snd_cwnd) の 209 * どちらか小さいサイズの 1/2 を、更に 210 * 相手の最大受信セグメントサイズ (maxseg) で割った値。 211 * ただし、2 以上 224 212 */ 225 213 if (cep->snd_wnd < cep->snd_cwnd) … … 232 220 233 221 /* 234 * 輻輳ã¦ã£ã³ããµã¤ãº (snd_cwnd) ã¯235 * ç¸æã®åä¿¡å¯è½ã¦ã£ã³ããµã¤ãº (snd_wnd) ã«ã236 * 輻輳ã¦ã£ã³ããµã¤ãºã®ãããå¤ (snd_ssthresh) ã¯237 * ç¸æã®åä¿¡å¯è½ã¦ã£ã³ããµã¤ãº (snd_wnd) ã® win åã«238 * è¨å®ããã222 * 輻輳ウィンドサイズ (snd_cwnd) は 223 * 相手の受信可能ウィンドサイズ (snd_wnd) に、 224 * 輻輳ウィンドサイズのしきい値 (snd_ssthresh) は 225 * 相手の受信可能ウィンドサイズ (snd_wnd) の win 倍に 226 * 設定する。 239 227 */ 240 228 cep->snd_cwnd = cep->maxseg; … … 242 230 cep->dupacks = 0; 243 231 244 /* åºåããã¹ãããã*/232 /* 出力をポストする。*/ 245 233 cep->flags |= TCP_CEP_FLG_POST_OUTPUT; 246 234 sig_sem(SEM_TCP_POST_OUTPUT); … … 248 236 249 237 /* 250 * æç¶ã¿ã¤ã238 * 持続タイマ 251 239 */ 252 240 case TCP_TIM_PERSIST: 253 241 254 242 /* 255 * æ大åéåæ° (TCP_MAX_REXMT_SHIFTãæ¨æº 12 å) ãè¶ 256 ãã¦ãã¦ã 257 * ã¢ã¤ãã«æéããä¿çã¿ã¤ãã®æ¨æºå¤ (TCP_TVAL_KEEP_IDLEã 258 * æ¨æº 2 * 60 * 60 ç§) 以ä¸ãã 259 * åéã¿ã¤ã ã¢ã¦ãå¤ * ããã¯ãªãæéã®åè¨ä»¥ä¸ãªã 260 * ã³ãã¯ã·ã§ã³ãåæããã 243 * 最大再送回数 (TCP_MAX_REXMT_SHIFT、標準 12 回) を超えていて、 244 * アイドル時間が、保留タイマの標準値 (TCP_TVAL_KEEP_IDLE、 245 * 標準 2 * 60 * 60 秒) 以上か、 246 * 再送タイムアウト値 * バックオフ時間の合計以上なら 247 * コネクションを切断する。 261 248 */ 262 249 if (cep->rxtshift > TCP_MAX_REXMT_SHIFT && … … 268 255 } 269 256 270 /* æç¶ã¿ã¤ããåè¨å®ããåºåããã¹ãããã*/257 /* 持続タイマを再設定し、出力をポストする。*/ 271 258 tcp_set_persist_timer(cep); 272 259 … … 276 263 277 264 /* 278 * ä¿ç (keep alive) ã¿ã¤ã265 * 保留 (keep alive) タイマ 279 266 */ 280 267 case TCP_TIM_KEEP: 281 268 282 269 /* 283 * ã³ãã¯ã·ã§ã³ãéè¨ãããã¾ã§ã«ã¿ã¤ã ã¢ã¦ãããã284 * ã³ãã¯ã·ã§ã³ã®éè¨ãä¸æ¢ããã270 * コネクションが開設されるまでにタイムアウトしたら 271 * コネクションの開設を中止する。 285 272 */ 286 273 if (cep->fsm_state < TCP_FSM_ESTABLISHED) { … … 316 303 317 304 /* 318 * 2MSL ã¿ã¤ã305 * 2MSL タイマ 319 306 */ 320 307 case TCP_TIM_2MSL: … … 332 319 333 320 /* 334 * tcp_cancel_timers -- å 335 ¨ã¦ã®ã¿ã¤ãããã£ã³ã»ã«ããã 321 * tcp_cancel_timers -- 全てのタイマをキャンセルする。 336 322 */ 337 323 … … 348 334 349 335 /* 350 * tcp_tw_timo -- Time Wait ç¨ TCP é信端ç¹ã®ã¿ã¤ã ã¢ã¦ãå¦ç336 * tcp_tw_timo -- Time Wait 用 TCP 通信端点のタイムアウト処理 351 337 */ 352 338 … … 360 346 361 347 /* 362 * Time Wait ç¨ TCP é信端ç¹ã§ã¿ã¤ã ã¢ã¦ãã®ã¨ã³ããªãæ¢ç´¢ãã363 * æ¢ç´¢ããã¨ã³ããªã空ãã«ããã348 * Time Wait 用 TCP 通信端点でタイムアウトのエントリを探索し、 349 * 探索したエントリを空きにする。 364 350 */ 365 351 frees = 0; … … 371 357 372 358 /* 373 * Time Wait ç¨ TCP é信端ç¹ã®ç©ºãã¨ã³ããªãçºçããã 374 * æ¨æº TCP é信端ç¹ã§ Time Wait ä¸ã® TCP é信端ç¹ãæ¢ç´¢ãã 375 * å¿ 376 è¦ãªæ 377 å ±ã Time Wait ç¨ TCP é信端ç¹ã«ç§»ãã¦ã 378 * æ¨æºã® TCP é信端ç¹ãéæ¾ããã 359 * Time Wait 用 TCP 通信端点の空きエントリが発生したら 360 * 標準 TCP 通信端点で Time Wait 中の TCP 通信端点を探索し、 361 * 必要な情報を Time Wait 用 TCP 通信端点に移して、 362 * 標準の TCP 通信端点を開放する。 379 363 */ 380 364 if (frees > 0) { … … 387 371 388 372 /* 389 * ãã£ã¨ãé·ãé Time Wait ãã¦ãã TCP é信端ç¹ãéæ¾ããã373 * もっとも長い間 Time Wait している TCP 通信端点を開放する。 390 374 */ 391 375 while (waits > 0) { … … 410 394 411 395 /* 412 * tcp_slow_timo -- 500 [ms] æ¯ã«å¼åºããã TCP ã¿ã¤ã ã¢ã¦ãé¢æ°396 * tcp_slow_timo -- 500 [ms] 毎に呼出される TCP タイムアウト関数 413 397 */ 414 398 … … 452 436 453 437 /* 454 * tcp_fast_timo -- 200 [ms] æ¯ã«å¼åºããã TCP ã¿ã¤ã ã¢ã¦ãé¢æ°438 * tcp_fast_timo -- 200 [ms] 毎に呼出される TCP タイムアウト関数 455 439 */ 456 440 … … 476 460 477 461 /* 478 * tcp_range_set -- æéãæå®ããç¯å²ã«è¨å®ããã462 * tcp_range_set -- 時間を指定した範囲に設定する。 479 463 */ 480 464 … … 491 475 492 476 /* 493 * tcp_set_persist_timer -- æç¶ã¿ã¤ãã®è¨å®477 * tcp_set_persist_timer -- 持続タイマの設定 494 478 */ 495 479 … … 500 484 501 485 /* 502 * srtt: å¹³æ»åãããRTT503 * rttvar: å¹³æ»åãããåæ£486 * srtt: 平滑化された RTT 487 * rttvar: 平滑化された分散 504 488 */ 505 489 time = ((cep->srtt >> 2) + cep->rttvar) >> 1; 506 490 507 491 /* 508 * åéã¿ã¤ããè¨å®ããã¦ããã°å復ä¸è½ã¨ã©ã¼492 * 再送タイマも設定されていれば回復不能エラー 509 493 */ 510 494 if (cep->timer[TCP_TIM_REXMT]) … … 512 496 513 497 /* 514 * æç¶ã¿ã¤ããè¨å®ããã498 * 持続タイマを設定する。 515 499 */ 516 500 cep->timer[TCP_TIM_PERSIST] = tcp_range_set((T_TCP_TIME)(time * tcp_back_off[cep->rxtshift]), … … 519 503 520 504 /* 521 * åéåæ°ãæ´æ°ããã505 * 再送回数を更新する。 522 506 */ 523 507 if (cep->rxtshift < TCP_MAX_REXMT_SHIFT) -
Property svn:mime-type
changed from
Note:
See TracChangeset
for help on using the changeset viewer.