Changeset 321 for EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/tcp_timer.c
- Timestamp:
- Aug 23, 2017, 9:27:43 AM (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/tcp_timer.c
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-csrc
totext/x-csrc;charset=UTF-8
r270 r321 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$ … … 123 111 124 112 /* 125 * å±æé¢æ°113 * 局所関数 126 114 */ 127 115 … … 135 123 136 124 /* 137 * ããã¯ãªãæé125 * バックオフ時間 138 126 * 139 * åéãè¡ããã³ã«ãã¿ã¤ã ã¢ã¦ãã®æéã延é·ããã127 * 再送を行うたびに、タイムアウトの時間を延長する。 140 128 */ 141 129 … … 147 135 }; 148 136 149 #define TCP_TOTAL_BACK_OFF 511 /* ããã¯ãªãæéã®åè¨*/150 151 /* 152 * tcp_timers -- ã¿ã¤ã ã¢ã¦ãå¦ç137 #define TCP_TOTAL_BACK_OFF 511 /* バックオフ時間の合計 */ 138 139 /* 140 * tcp_timers -- タイムアウト処理 153 141 */ 154 142 … … 162 150 163 151 /* 164 * åéã¿ã¤ã152 * 再送タイマ 165 153 */ 166 154 case TCP_TIM_REXMT: 167 155 168 156 /* 169 * æ大åéåæ° (TCP_MAX_REXMT_SHIFTãæ¨æº 12 å) ã«ãªã£ãã¨ãã¯ã170 * ã³ãã¯ã·ã§ã³ãåæããã157 * 最大再送回数 (TCP_MAX_REXMT_SHIFT、標準 12 回) になったときは、 158 * コネクションを切断する。 171 159 */ 172 160 if (++ cep->rxtshift > TCP_MAX_REXMT_SHIFT) { … … 178 166 179 167 /* 180 * åéã¿ã¤ã ã¢ã¦ããè¨ç®ããã168 * 再送タイムアウトを計算する。 181 169 */ 182 170 cep->rxtcur = tcp_range_set((T_TCP_TIME)(tcp_rexmt_val(cep) * tcp_back_off[cep->rxtshift]), … … 186 174 187 175 /* 188 * srtt: å¹³æ»åãããRTT189 * rttvar: å¹³æ»åãããåæ£176 * srtt: 平滑化された RTT 177 * rttvar: 平滑化された分散 190 178 * 191 * åéåæ°ãæ大åéåæ°ã® 1/4 ã«ãªã£ãã¨ãã¯ã192 * å¹³æ»åãããåæ£ (rttvar) ã« srtt ãå ç®ãã193 * å¹³æ»åããã RTT ã 0 ã«ããã179 * 再送回数が最大再送回数の 1/4 になったときは、 180 * 平滑化された分散 (rttvar) に srtt を加算し、 181 * 平滑化された RTT を 0 にする。 194 182 * 195 183 */ … … 200 188 201 189 /* 202 * snd_nxt: 次ã«éä¿¡ãã SEQããã®æç¹ã§ã¯ãååéä¿¡ããSEQ203 * snd_una: æªç¢ºèªã®æå°éä¿¡ SEQ ã¾ãã¯ã確èªãããæ大éä¿¡SEQ190 * snd_nxt: 次に送信する SEQ、この時点では、前回送信した SEQ 191 * snd_una: 未確認の最小送信 SEQ または、確認された最大送信 SEQ 204 192 * 205 * ååéä¿¡ãã SEQ (snd_nxt) ã206 * 確èªãããæ大éä¿¡ SEQ (snd_una) ã¾ã§æ»ãã193 * 前回送信した SEQ (snd_nxt) を 194 * 確認された最大送信 SEQ (snd_una) まで戻す。 207 195 */ 208 196 cep->snd_nxt = cep->snd_una; … … 210 198 211 199 /* 212 * rtt: å¾å¾©æéã®è¨æ¸¬ãä¸æ¢ããã200 * rtt: 往復時間の計測を中止する。 213 201 */ 214 202 cep->rtt = 0; 215 203 216 204 /* 217 * éä¿¡ã¦ã¤ã³ãã®è¨å®205 * 送信ウインドの設定 218 206 * 219 * snd_wnd: ç¸æã®åä¿¡å¯è½ã¦ã£ã³ããµã¤ãº220 * snd_cwnd: 輻輳ã¦ã£ã³ããµã¤ãº221 * maxseg : ç¸æã®æ大åä¿¡ã»ã°ã¡ã³ããµã¤ãº207 * snd_wnd: 相手の受信可能ウィンドサイズ 208 * snd_cwnd: 輻輳ウィンドサイズ 209 * maxseg : 相手の最大受信セグメントサイズ 222 210 * 223 * ç¸æã®åä¿¡å¯è½ã¦ã£ã³ããµã¤ãº (snd_wnd) ãã224 * 輻輳ã¦ã£ã³ããµã¤ãº (snd_cwnd) ã®225 * ã©ã¡ããå°ãããµã¤ãºã® 1/2 ããæ´ã«226 * ç¸æã®æ大åä¿¡ã»ã°ã¡ã³ããµã¤ãº (maxseg) ã§å²ã£ãå¤ã227 * ãã ãã2 以ä¸211 * 相手の受信可能ウィンドサイズ (snd_wnd) か、 212 * 輻輳ウィンドサイズ (snd_cwnd) の 213 * どちらか小さいサイズの 1/2 を、更に 214 * 相手の最大受信セグメントサイズ (maxseg) で割った値。 215 * ただし、2 以上 228 216 */ 229 217 if (cep->snd_wnd < cep->snd_cwnd) … … 236 224 237 225 /* 238 * 輻輳ã¦ã£ã³ããµã¤ãº (snd_cwnd) ã¯239 * ç¸æã®åä¿¡å¯è½ã¦ã£ã³ããµã¤ãº (snd_wnd) ã«ã240 * 輻輳ã¦ã£ã³ããµã¤ãºã®ãããå¤ (snd_ssthresh) ã¯241 * ç¸æã®åä¿¡å¯è½ã¦ã£ã³ããµã¤ãº (snd_wnd) ã® win åã«242 * è¨å®ããã226 * 輻輳ウィンドサイズ (snd_cwnd) は 227 * 相手の受信可能ウィンドサイズ (snd_wnd) に、 228 * 輻輳ウィンドサイズのしきい値 (snd_ssthresh) は 229 * 相手の受信可能ウィンドサイズ (snd_wnd) の win 倍に 230 * 設定する。 243 231 */ 244 232 cep->snd_cwnd = cep->maxseg; … … 246 234 cep->dupacks = 0; 247 235 248 /* åºåããã¹ãããã*/236 /* 出力をポストする。*/ 249 237 cep->flags |= TCP_CEP_FLG_POST_OUTPUT; 250 238 sig_sem(SEM_TCP_POST_OUTPUT); … … 252 240 253 241 /* 254 * æç¶ã¿ã¤ã242 * 持続タイマ 255 243 */ 256 244 case TCP_TIM_PERSIST: 257 245 258 246 /* 259 * æ大åéåæ° (TCP_MAX_REXMT_SHIFTãæ¨æº 12 å) ãè¶ 260 ãã¦ãã¦ã 261 * ã¢ã¤ãã«æéããä¿çã¿ã¤ãã®æ¨æºå¤ (TCP_TVAL_KEEP_IDLEã 262 * æ¨æº 2 * 60 * 60 ç§) 以ä¸ãã 263 * åéã¿ã¤ã ã¢ã¦ãå¤ * ããã¯ãªãæéã®åè¨ä»¥ä¸ãªã 264 * ã³ãã¯ã·ã§ã³ãåæããã 247 * 最大再送回数 (TCP_MAX_REXMT_SHIFT、標準 12 回) を超えていて、 248 * アイドル時間が、保留タイマの標準値 (TCP_TVAL_KEEP_IDLE、 249 * 標準 2 * 60 * 60 秒) 以上か、 250 * 再送タイムアウト値 * バックオフ時間の合計以上なら 251 * コネクションを切断する。 265 252 */ 266 253 if (cep->rxtshift > TCP_MAX_REXMT_SHIFT && … … 272 259 } 273 260 274 /* æç¶ã¿ã¤ããåè¨å®ããåºåããã¹ãããã*/261 /* 持続タイマを再設定し、出力をポストする。*/ 275 262 tcp_set_persist_timer(cep); 276 263 … … 280 267 281 268 /* 282 * ä¿ç (keep alive) ã¿ã¤ã269 * 保留 (keep alive) タイマ 283 270 */ 284 271 case TCP_TIM_KEEP: 285 272 286 273 /* 287 * ã³ãã¯ã·ã§ã³ãéè¨ãããã¾ã§ã«ã¿ã¤ã ã¢ã¦ãããã288 * ã³ãã¯ã·ã§ã³ã®éè¨ãä¸æ¢ããã274 * コネクションが開設されるまでにタイムアウトしたら 275 * コネクションの開設を中止する。 289 276 */ 290 277 if (cep->fsm_state < TCP_FSM_ESTABLISHED) { … … 320 307 321 308 /* 322 * 2MSL ã¿ã¤ã309 * 2MSL タイマ 323 310 */ 324 311 case TCP_TIM_2MSL: … … 336 323 337 324 /* 338 * tcp_cancel_timers -- å 339 ¨ã¦ã®ã¿ã¤ãããã£ã³ã»ã«ããã 325 * tcp_cancel_timers -- 全てのタイマをキャンセルする。 340 326 */ 341 327 … … 352 338 353 339 /* 354 * tcp_tw_timo -- Time Wait ç¨ TCP é信端ç¹ã®ã¿ã¤ã ã¢ã¦ãå¦ç340 * tcp_tw_timo -- Time Wait 用 TCP 通信端点のタイムアウト処理 355 341 */ 356 342 … … 364 350 365 351 /* 366 * Time Wait ç¨ TCP é信端ç¹ã§ã¿ã¤ã ã¢ã¦ãã®ã¨ã³ããªãæ¢ç´¢ãã367 * æ¢ç´¢ããã¨ã³ããªã空ãã«ããã352 * Time Wait 用 TCP 通信端点でタイムアウトのエントリを探索し、 353 * 探索したエントリを空きにする。 368 354 */ 369 355 frees = 0; … … 375 361 376 362 /* 377 * Time Wait ç¨ TCP é信端ç¹ã®ç©ºãã¨ã³ããªãçºçããã 378 * æ¨æº TCP é信端ç¹ã§ Time Wait ä¸ã® TCP é信端ç¹ãæ¢ç´¢ãã 379 * å¿ 380 è¦ãªæ 381 å ±ã Time Wait ç¨ TCP é信端ç¹ã«ç§»ãã¦ã 382 * æ¨æºã® TCP é信端ç¹ãéæ¾ããã 363 * Time Wait 用 TCP 通信端点の空きエントリが発生したら 364 * 標準 TCP 通信端点で Time Wait 中の TCP 通信端点を探索し、 365 * 必要な情報を Time Wait 用 TCP 通信端点に移して、 366 * 標準の TCP 通信端点を開放する。 383 367 */ 384 368 if (frees > 0) { … … 391 375 392 376 /* 393 * ãã£ã¨ãé·ãé Time Wait ãã¦ãã TCP é信端ç¹ãéæ¾ããã377 * もっとも長い間 Time Wait している TCP 通信端点を開放する。 394 378 */ 395 379 while (waits > 0) { … … 414 398 415 399 /* 416 * tcp_slow_timo -- 500 [ms] æ¯ã«å¼åºããã TCP ã¿ã¤ã ã¢ã¦ãé¢æ°400 * tcp_slow_timo -- 500 [ms] 毎に呼出される TCP タイムアウト関数 417 401 */ 418 402 … … 456 440 457 441 /* 458 * tcp_fast_timo -- 200 [ms] æ¯ã«å¼åºããã TCP ã¿ã¤ã ã¢ã¦ãé¢æ°442 * tcp_fast_timo -- 200 [ms] 毎に呼出される TCP タイムアウト関数 459 443 */ 460 444 … … 480 464 481 465 /* 482 * tcp_range_set -- æéãæå®ããç¯å²ã«è¨å®ããã466 * tcp_range_set -- 時間を指定した範囲に設定する。 483 467 */ 484 468 … … 495 479 496 480 /* 497 * tcp_set_persist_timer -- æç¶ã¿ã¤ãã®è¨å®481 * tcp_set_persist_timer -- 持続タイマの設定 498 482 */ 499 483 … … 504 488 505 489 /* 506 * srtt: å¹³æ»åãããRTT507 * rttvar: å¹³æ»åãããåæ£490 * srtt: 平滑化された RTT 491 * rttvar: 平滑化された分散 508 492 */ 509 493 time = ((cep->srtt >> 2) + cep->rttvar) >> 1; 510 494 511 495 /* 512 * åéã¿ã¤ããè¨å®ããã¦ããã°å復ä¸è½ã¨ã©ã¼496 * 再送タイマも設定されていれば回復不能エラー 513 497 */ 514 498 if (cep->timer[TCP_TIM_REXMT]) … … 516 500 517 501 /* 518 * æç¶ã¿ã¤ããè¨å®ããã502 * 持続タイマを設定する。 519 503 */ 520 504 cep->timer[TCP_TIM_PERSIST] = tcp_range_set((T_TCP_TIME)(time * tcp_back_off[cep->rxtshift]), … … 523 507 524 508 /* 525 * åéåæ°ãæ´æ°ããã509 * 再送回数を更新する。 526 510 */ 527 511 if (cep->rxtshift < TCP_MAX_REXMT_SHIFT)
Note:
See TracChangeset
for help on using the changeset viewer.