Changeset 321 for EcnlProtoTool/trunk/asp3_dcre/tinet/net/ppp_fsm.c
- Timestamp:
- Aug 23, 2017, 9:27:43 AM (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
EcnlProtoTool/trunk/asp3_dcre/tinet/net/ppp_fsm.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$ … … 111 99 112 100 /* 113 * å 114 ¨åå¤æ° 115 */ 116 117 uint8_t ppp_open_mode = PPP_OPEN_PASSIVE; /* ãªã¼ãã³æã®åä½ã¢ã¼ã */ 118 119 /* 120 * é¢æ° 101 * 全域変数 102 */ 103 104 uint8_t ppp_open_mode = PPP_OPEN_PASSIVE; /* オープン時の動作モード */ 105 106 /* 107 * 関数 121 108 */ 122 109 … … 132 119 133 120 /* 134 * fsm_sconfreq -- Configure-Request ãéä¿¡ããã121 * fsm_sconfreq -- Configure-Request を送信する。 135 122 */ 136 123 … … 144 131 fsm->state == PPP_FSM_ACKRCVD || 145 132 fsm->state == PPP_FSM_ACKSENT)) { 146 /* ã¾ã ãã´ããã¦ããªãããªãã·ã§ã³ããªã»ããããã*/133 /* まだネゴをしていない。オプションをリセットする。 */ 147 134 if (fsm->callbacks->resetci) 148 135 (*fsm->callbacks->resetci)(fsm); … … 150 137 } 151 138 if (retransmit == 0) { 152 /* æ°ãããªã¯ã¨ã¹ããåéã«ã¦ã³ã¿ããªã»ããããæ°ãã ID ãè¨å®ããã*/139 /* 新しいリクエスト。再送カウンタをリセットし、新しい ID を設定する。 */ 153 140 fsm->retrans = MAX_PPP_CONFIGURES; 154 141 fsm->reqid = ++ fsm->id; … … 158 145 159 146 if (fsm->callbacks->cilen && fsm->callbacks->addci) { 160 /* æ§ææ 161 å ±ãã±ãããä½ãã */ 147 /* 構成情報パケットを作る。 */ 162 148 len = (*fsm->callbacks->cilen)(fsm); 163 149 … … 165 151 (*fsm->callbacks->addci)(fsm, output); 166 152 167 /* æ§ææ 168 å ±ãã±ãããéä¿¡ããã */ 153 /* 構成情報パケットを送信する。 */ 169 154 IF_SET_PROTO(output, fsm->proto); 170 155 ppp_cp_output(PPP_CONFREQ, fsm->reqid, output); … … 176 161 177 162 /* 178 * fsm_rconfreq -- Configure-Request ãåä¿¡ããã¨ãã®å¦ç163 * fsm_rconfreq -- Configure-Request を受信したときの処理 179 164 */ 180 165 … … 199 184 200 185 case PPP_FSM_OPENED: 201 /* ä¸ä½å±¤ãåæ¢ãã¦ããã´ã«ç§»ãã*/186 /* 上位層を停止して、ネゴに移る。 */ 202 187 if (fsm->callbacks->down != NULL) 203 188 (*fsm->callbacks->down)(fsm); 204 fsm_sconfreq(fsm, 0); /* æåã® Configure-Request ãéãã*/189 fsm_sconfreq(fsm, 0); /* 最初の Configure-Request を送る。 */ 205 190 break; 206 191 207 192 case PPP_FSM_STOPPED: 208 /* ç¸æãããã´ãéå§ããã*/209 fsm_sconfreq(fsm, 0); /* æåã® Configure-Request ãéãã*/193 /* 相手からネゴが開始された */ 194 fsm_sconfreq(fsm, 0); /* 最初の Configure-Request を送る。 */ 210 195 fsm->state = PPP_FSM_REQSENT; 211 196 break; … … 215 200 syscall(get_net_buf(&output, input->len)); 216 201 217 /* ä¸ä½ãããã³ã«ã«è¦æ±ããã Configure-Request ãéãã */ 218 if (fsm->callbacks->reqci != NULL) /* æ§ææ 219 å ±ããã§ãã¯ããã */ 202 /* 上位プロトコルに要求された Configure-Request を送る。 */ 203 if (fsm->callbacks->reqci != NULL) /* 構成情報をチェックする。 */ 220 204 code = (*fsm->callbacks->reqci)(fsm, input, output); 221 205 else if (output->len > sizeof(T_PPP_HDR) + sizeof(T_PPP_CP_HDR)) … … 224 208 code = PPP_CONFACK; 225 209 226 /* ç¸æã« ACK, NAK ã¾ã㯠REJ ãéä¿¡ããã*/210 /* 相手に ACK, NAK または REJ を送信する。 */ 227 211 ppp_cp_output(code, id, output); 228 212 … … 239 223 } 240 224 else { 241 /* ACK ã REJ ãéã*/225 /* ACK か REJ を送る */ 242 226 if (fsm->state != PPP_FSM_ACKRCVD) 243 227 fsm->state = PPP_FSM_REQSENT; … … 248 232 249 233 /* 250 * fsm_rconfnakrej -- Configure-NAK/REJ ãåä¿¡ããã¨ãã®å¦ç234 * fsm_rconfnakrej -- Configure-NAK/REJ を受信したときの処理 251 235 */ 252 236 … … 257 241 T_NET_BUF *output; 258 242 259 /* äºæãã ID ã§ãªãããNAK/REJ ãäºæãã¦ããªãã¨ãã¯çµäºããã*/243 /* 予期した ID でないか、NAK/REJ を予期していないときは終了する。*/ 260 244 if (id != fsm->reqid || fsm->seen_ack) { 261 245 syslog(LOG_WARNING, "[PPP/FSM] bad ID or unexp NAK/REJ."); … … 290 274 case PPP_FSM_ACKSENT: 291 275 untimeout((FP)fsm_timeout, fsm); 292 if (ret < 0) /* éä¿¡ãã Conf-Req ãç ´æã空㮠NAK/REJ ãå±ããã*/276 if (ret < 0) /* 送信した Conf-Req が破損し空の NAK/REJ が届いた。*/ 293 277 fsm->state = PPP_FSM_STOPPED; 294 278 else … … 303 287 304 288 case PPP_FSM_OPENED: 305 /* åèµ·åãããã´ãããç´ãã*/289 /* 再起動し、ネゴをやり直す。*/ 306 290 if (fsm->callbacks->down != NULL) 307 291 (*fsm->callbacks->down)(fsm); … … 313 297 314 298 /* 315 * fsm_rconfack -- Configure-ACK ãåä¿¡ããã¨ãã®å¦ç299 * fsm_rconfack -- Configure-ACK を受信したときの処理 316 300 */ 317 301 … … 321 305 T_NET_BUF *output; 322 306 323 /* äºæãã ID ã§ãªãããACK ãäºæãã¦ããªãã¨ãã¯çµäºããã*/307 /* 予期した ID でないか、ACK を予期していないときは終了する。*/ 324 308 if (id != fsm->reqid || fsm->seen_ack) { 325 309 syslog(LOG_WARNING, "[PPP/FSM] bad ID or unexp ACK."); … … 368 352 369 353 case PPP_FSM_OPENED: 370 /* åèµ·åãããã´ãããç´ãã*/354 /* 再起動し、ネゴをやり直す。*/ 371 355 if (fsm->callbacks->down != NULL) 372 356 (*fsm->callbacks->down)(fsm); … … 383 367 384 368 /* 385 * fsm_rtermreq -- Terminate-Request ãåä¿¡ããã¨ãã®å¦ç369 * fsm_rtermreq -- Terminate-Request を受信したときの処理 386 370 */ 387 371 … … 411 395 412 396 /* 413 * fsm_rtermack -- Terminate-ACK ãåä¿¡ããã¨ãã®å¦ç397 * fsm_rtermack -- Terminate-ACK を受信したときの処理 414 398 */ 415 399 … … 420 404 case PPP_FSM_CLOSING: 421 405 untimeout((FP)fsm_timeout, fsm); 422 #if 0 /* æ¬æ¥ã®åä½ã¯ CLOSED ã«é·ç§»ããã*/406 #if 0 /* 本来の動作は CLOSED に遷移する。*/ 423 407 fsm->state = PPP_FSM_CLOSED; 424 408 #else /* of #if 0 */ … … 449 433 450 434 /* 451 * fsm_rcoderej -- Code-REJ ãåä¿¡ããã¨ãã®å¦ç435 * fsm_rcoderej -- Code-REJ を受信したときの処理 452 436 */ 453 437 … … 457 441 T_PPP_CP_HDR *hdr; 458 442 459 /* PPP ãªã³ã¯å¶å¾¡ (CP) ãããããçããã°ã¨ã©ã¼*/443 /* PPP リンク制御 (CP) ヘッダより短ければエラー */ 460 444 if (input->len < sizeof(T_PPP_HDR) + sizeof(T_PPP_CP_HDR)) { 461 445 syslog(LOG_WARNING, "[PPP/FSM] bad len: %d in recv Code-REJ.", input->len); … … 472 456 473 457 /* 474 * fsm_timeout -- ã¿ã¤ã ã¢ã¦ãå¦ç458 * fsm_timeout -- タイムアウト処理 475 459 */ 476 460 … … 484 468 case PPP_FSM_STOPPING: 485 469 if (fsm->retrans <= 0) { 486 /* æ大åéåæ°ãè¶ 487 ããã¨ãã®å¦ç */ 488 #if 0 /* æ¬æ¥ã®åä½ã¯ CLOSED ã«é·ç§»ããã*/ 470 /* 最大再送回数を超えたときの処理 */ 471 #if 0 /* 本来の動作は CLOSED に遷移する。*/ 489 472 fsm->state = (fsm->state == PPP_FSM_CLOSING) ? PPP_FSM_CLOSED : PPP_FSM_STOPPED; 490 473 #else /* of #if 0 */ … … 495 478 } 496 479 else { 497 /* Terminate-Request ãéä¿¡ããã*/480 /* Terminate-Request を送信する。*/ 498 481 fsm_stermreq(fsm, ++ fsm->id); 499 482 } … … 503 486 case PPP_FSM_ACKSENT: 504 487 if (fsm->retrans <= 0) { 505 /* æ大åéåæ°ãè¶ 506 ããã¨ãã®å¦ç */ 488 /* 最大再送回数を超えたときの処理 */ 507 489 syslog(LOG_WARNING, "[PPP/FSM] retrans Conf-Req."); 508 490 fsm->state = PPP_FSM_STOPPED; … … 511 493 } 512 494 else { 513 /* Configure-Request ãåéããã*/495 /* Configure-Request を再送する。*/ 514 496 if (fsm->callbacks->retrans != NULL) 515 497 (*fsm->callbacks->retrans)(fsm); … … 528 510 529 511 /* 530 * fsm_stermreq -- Terminate-Request ãéä¿¡ããã512 * fsm_stermreq -- Terminate-Request を送信する。 531 513 */ 532 514 … … 545 527 546 528 /* 547 * fsm_init -- FSM ã¢ã¸ã¥ã¼ã«ã®åæå529 * fsm_init -- FSM モジュールの初期化 548 530 */ 549 531 … … 556 538 557 539 /* 558 * fsm_lowerup -- FSM ä¸ä½å±¤ãèµ·åããã540 * fsm_lowerup -- FSM 下位層を起動する。 559 541 */ 560 542 … … 583 565 584 566 /* 585 * fsm_lowerdown -- FSM ä¸ä½å±¤ãåæ¢ããã567 * fsm_lowerdown -- FSM 下位層を停止する。 586 568 */ 587 569 … … 626 608 627 609 /* 628 * fsm_open -- FSM ã®ãªã¼ãã³610 * fsm_open -- FSM のオープン 629 611 */ 630 612 … … 650 632 case PPP_FSM_CLOSING: 651 633 fsm->state = PPP_FSM_STOPPING; 652 /* nobreak; ä¸ã«è½ã¡ã*/634 /* nobreak; 下に落ちる */ 653 635 654 636 case PPP_FSM_STOPPED: … … 661 643 662 644 /* 663 * fsm_close -- ãªã³ã¯ã®åæãéå§ããã645 * fsm_close -- リンクの切断を開始する。 664 646 */ 665 647 … … 672 654 break; 673 655 674 #if 0 /* æ¬æ¥ã®åä½ã¯ CLOSED ã«é·ç§»ããã*/656 #if 0 /* 本来の動作は CLOSED に遷移する。*/ 675 657 case PPP_FSM_STOPPED: 676 658 fsm->state = PPP_FSM_CLOSED; … … 691 673 (*fsm->callbacks->down)(fsm); 692 674 693 /* ã¿ã¤ã ã¢ã¦ããè¨å®ããTerminate-Request ãéä¿¡ããã*/675 /* タイムアウトを設定し、Terminate-Request を送信する。*/ 694 676 fsm->retrans = MAX_PPP_TERMINATES; 695 677 fsm_stermreq(fsm, fsm->reqid = ++ fsm->id); … … 700 682 701 683 /* 702 * fsm_input -- å 703 ¥åãPPP ãªã³ã¯å¶å¾¡ (CP) ã®å¶å¾¡ã³ã¼ãã«ããé©å½ãªé¢æ°ãå¼åºã 684 * fsm_input -- 入力、PPP リンク制御 (CP) の制御コードにより適当な関数を呼出す 704 685 */ 705 686 … … 710 691 T_NET_BUF *output; 711 692 712 /* PPP ãªã³ã¯å¶å¾¡ (CP) ãããããçããã°ã¨ã©ã¼*/693 /* PPP リンク制御 (CP) ヘッダより短ければエラー */ 713 694 if (input->len < (sizeof(T_PPP_HDR) + sizeof(T_PPP_CP_HDR))) { 714 695 syslog(LOG_WARNING, "[PPP/FSM] short hdr: %d.", input->len); … … 718 699 hdr = GET_PPP_CP_HDR(input); 719 700 720 /* ãããã®é·ãã¨å 721 ¥åãã¼ã¿ãµã¤ãºãä¸è´ããªããã°ã¨ã©ã¼ */ 701 /* ヘッダの長さと入力データサイズが一致しなければエラー */ 722 702 if (hdr->len != input->len - sizeof(T_PPP_HDR)) { 723 703 syslog(LOG_WARNING, "[PPP/FSM] bad len: %d.", hdr->len); … … 725 705 } 726 706 727 /* ç¶æ 728 ã INITIAL ã STARTING ãªãã¨ã©ã¼ */ 707 /* 状態が INITIAL か STARTING ならエラー */ 729 708 if (fsm->state == PPP_FSM_INITIAL || fsm->state == PPP_FSM_STARTING) { 730 709 syslog(LOG_WARNING, "[PPP/FSM] unexp state: %d in input.", fsm->state); … … 733 712 734 713 /* 735 * å¶å¾¡ã³ã¼ãã«ããé©å½ãªé¢æ°ãå¼åºã714 * 制御コードにより適当な関数を呼出す 736 715 */ 737 716 … … 774 753 775 754 /* 776 * fsm_protoreject -- Proto-REJ ãåä¿¡ããã¨ãã®å¦ç755 * fsm_protoreject -- Proto-REJ を受信したときの処理 777 756 */ 778 757 … … 784 763 untimeout((FP)fsm_timeout, fsm); 785 764 786 #if 0 /* æ¬æ¥ã®åä½ã¯ CLOSED ã«é·ç§»ããã*/787 /* ä¸ã«è½ã¡ã*/765 #if 0 /* 本来の動作は CLOSED に遷移する。*/ 766 /* 下に落ちる */ 788 767 #else /* of #if 0 */ 789 768 fsm->state = PPP_FSM_STOPPED; … … 804 783 case PPP_FSM_ACKSENT: 805 784 untimeout((FP)fsm_timeout, fsm); 806 /* ä¸ã«è½ã¡ã*/785 /* 下に落ちる */ 807 786 808 787 case PPP_FSM_STOPPED: … … 816 795 (*fsm->callbacks->down)(fsm); 817 796 818 /* ã¿ã¤ã ã¢ã¦ããè¨å®ããTerminate-Request ãéä¿¡ããã*/797 /* タイムアウトを設定し、Terminate-Request を送信する。*/ 819 798 fsm->retrans = MAX_PPP_TERMINATES; 820 799 fsm_stermreq(fsm, fsm->reqid = ++ fsm->id);
Note:
See TracChangeset
for help on using the changeset viewer.