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