Changeset 321 for EcnlProtoTool/trunk/asp3_dcre/tinet/net/ppp_lcp.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_lcp.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$ … … 112 100 113 101 /* 114 * é¢æ°102 * 関数 115 103 */ 116 104 … … 130 118 131 119 /* 132 * FSM ããå¼åºãããã³ã¼ã«ããã¯é¢æ° 133 */ 134 135 static void lcp_resetci(T_PPP_FSM *fsm); /* èªæ§ææ 136 å ±ããªã»ããããã */ 137 static int_t lcp_cilen (T_PPP_FSM *fsm); /* æ§ææ 138 å ±ã®é·ããè¿ãã */ 120 * FSM から呼出されるコールバック関数 121 */ 122 123 static void lcp_resetci(T_PPP_FSM *fsm); /* 自構成情報をリセットする。 */ 124 static int_t lcp_cilen (T_PPP_FSM *fsm); /* 構成情報の長さを返す。 */ 139 125 static void lcp_addci (T_PPP_FSM *fsm, T_NET_BUF *output); 140 /* èªæ§ææ 141 å ±ã追å ããã */ 126 /* 自構成情報を追加する。 */ 142 127 static bool_t lcp_ackci (T_PPP_FSM *fsm, T_NET_BUF *input); 143 /* ACK ãåä¿¡ããã¨ãã®å¦ç*/128 /* ACK を受信したときの処理 */ 144 129 static bool_t lcp_nakci (T_PPP_FSM *fsm, T_NET_BUF *input); 145 /* NAK ãåä¿¡ããã¨ãã®å¦ç*/130 /* NAK を受信したときの処理 */ 146 131 static bool_t lcp_rejci (T_PPP_FSM *fsm, T_NET_BUF *input); 147 /* REJ ãåä¿¡ããã¨ãã®å¦ç*/132 /* REJ を受信したときの処理 */ 148 133 static int_t lcp_reqci (T_PPP_FSM *fsm, T_NET_BUF *input, T_NET_BUF *output); 149 /* ç¸æã®æ§ææ 150 å ±ã確èªããã */ 151 static void lcp_up (T_PPP_FSM *fsm); /* ãªã³ã¯æ¥ç¶ã確ç«ããã */ 152 static void lcp_starting(T_PPP_FSM *fsm); /* ä¸ä½å±¤ãéå§ããã */ 134 /* 相手の構成情報を確認する。 */ 135 static void lcp_up (T_PPP_FSM *fsm); /* リンク接続を確立する。 */ 136 static void lcp_starting(T_PPP_FSM *fsm); /* 下位層を開始する。 */ 153 137 static bool_t lcp_extcode (T_PPP_FSM *fsm, uint8_t code, uint8_t id, T_NET_BUF *input); 154 /* ä¸æ㪠CP ãåä¿¡ããã¨ãã®å¦ç*/138 /* 不明な CP を受信したときの処理 */ 155 139 static void lcp_rprotrej(T_PPP_FSM *fsm, T_NET_BUF *input); 156 /* Proto-REJ ãåä¿¡ããã¨ãã®å¦ç */ 157 /* 158 * å¤æ° 159 */ 160 161 static T_LCP_CONFIGS lcp_def_cfg = { /* æ§ææ 162 å ±ã®åæè¨å®å¤ */ 140 /* Proto-REJ を受信したときの処理 */ 141 /* 142 * 変数 143 */ 144 145 static T_LCP_CONFIGS lcp_def_cfg = { /* 構成情報の初期設定値 */ 163 146 DEF_REMOTE_ACCM, /* ACCM */ 164 147 165 148 #ifdef LCP_CFG_MAGIC 166 149 167 ULONG_C(0), /* ãã¸ãã¯çªå·*/150 ULONG_C(0), /* マジック番号 */ 168 151 169 152 #endif /* of #ifdef LCP_CFG_MAGIC */ 170 153 171 154 DEF_PPP_MTU, /* MRU */ 172 UINT_C(0), /* ãªãã·ã§ã³ãã©ã°*/155 UINT_C(0), /* オプションフラグ */ 173 156 }; 174 157 175 static T_LCP_CONFIGS lcp_local_def_cfg = { /* èªæ§ææ 176 å ±ã®è¦å®å¤ */ 158 static T_LCP_CONFIGS lcp_local_def_cfg = { /* 自構成情報の規定値 */ 177 159 DEF_LOCAL_ACCM, /* ACCM */ 178 160 179 161 #ifdef LCP_CFG_MAGIC 180 162 181 ULONG_C(0), /* ãã¸ãã¯çªå·*/163 ULONG_C(0), /* マジック番号 */ 182 164 183 165 #endif /* of #ifdef LCP_CFG_MAGIC */ 184 166 185 167 DEF_PPP_MTU, /* MRU */ 186 DEF_LCP_LOCAL_CFGS, /* ãªãã·ã§ã³ãã©ã°*/168 DEF_LCP_LOCAL_CFGS, /* オプションフラグ */ 187 169 }; 188 170 189 static T_LCP_CONFIGS lcp_local_neg_cfg; /* ãã´ä¸ã®èªæ§ææ 190 å ± */ 191 192 static T_LCP_CONFIGS lcp_remote_neg_cfg; /* ãã´ä¸ã®ç¸æã®æ§ææ 193 å ± */ 171 static T_LCP_CONFIGS lcp_local_neg_cfg; /* ネゴ中の自構成情報 */ 172 173 static T_LCP_CONFIGS lcp_remote_neg_cfg; /* ネゴ中の相手の構成情報 */ 194 174 195 175 #if DEF_LCP_LOCAL_CFGS & LCP_CFG_MAGIC … … 202 182 203 183 /* 204 * å 205 ¨åå¤æ° 184 * 全域変数 206 185 */ 207 186 208 187 T_PPP_FSM_CALLBACKS lcp_callbacks = { 209 lcp_resetci, /* èªæ§ææ 210 å ±ããªã»ããããã */ 211 lcp_cilen, /* æ§ææ 212 å ±ã®é·ããè¿ãã */ 213 lcp_addci, /* èªæ§ææ 214 å ±ã追å ããã */ 215 lcp_ackci, /* ACK ãåä¿¡ããã¨ãã®å¦ç */ 216 lcp_nakci, /* NAK ãåä¿¡ããã¨ãã®å¦ç */ 217 lcp_rejci, /* REJ ãåä¿¡ããã¨ãã®å¦ç */ 218 lcp_reqci, /* ç¸æã®æ§ææ 219 å ±ã確èªããã */ 220 lcp_up, /* ãªã³ã¯æ¥ç¶ã確ç«ããã */ 221 lcp_down, /* ãªã³ã¯æ¥ç¶ã解æ¾ããã */ 222 lcp_starting, /* ä¸ä½å±¤ãéå§ããã */ 223 lcp_finished, /* ä¸ä½å±¤ãçµäºããã */ 224 NULL, /* åéããã */ 225 lcp_extcode, /* ä¸æ㪠CP ãåä¿¡ããã¨ãã®å¦ç */ 188 lcp_resetci, /* 自構成情報をリセットする。 */ 189 lcp_cilen, /* 構成情報の長さを返す。 */ 190 lcp_addci, /* 自構成情報を追加する。 */ 191 lcp_ackci, /* ACK を受信したときの処理 */ 192 lcp_nakci, /* NAK を受信したときの処理 */ 193 lcp_rejci, /* REJ を受信したときの処理 */ 194 lcp_reqci, /* 相手の構成情報を確認する。 */ 195 lcp_up, /* リンク接続を確立する。 */ 196 lcp_down, /* リンク接続を解放する。 */ 197 lcp_starting, /* 下位層を開始する。 */ 198 lcp_finished, /* 下位層を終了する。 */ 199 NULL, /* 再送する。 */ 200 lcp_extcode, /* 不明な CP を受信したときの処理 */ 226 201 }; 227 202 228 203 T_PPP_FSM lcp_fsm = { 229 &lcp_callbacks, /* ã³ã¼ã«ããã¯é¢æ°*/230 PPP_LCP, /* ãããã³ã«*/204 &lcp_callbacks, /* コールバック関数 */ 205 PPP_LCP, /* プロトコル */ 231 206 }; 232 207 233 208 T_PPP_PROTENT lcp_protent = { 234 209 PPP_LCP, 235 lcp_init, /* åæå */ 236 lcp_input, /* å 237 ¥å */ 238 lcp_protrej, /* Proto-REJ åä¿¡å¦ç */ 239 NULL, /* ä¸ä½å±¤ãèµ·åãã */ 240 lcp_lowerdown, /* ä¸ä½å±¤ãåæ¢ãã */ 241 NULL, /* ãªã¼ãã³ãã */ 242 lcp_close, /* ã¯ãã¼ãºãã */ 243 NULL, /* ãã¼ã¿å 244 ¥å */ 210 lcp_init, /* 初期化 */ 211 lcp_input, /* 入力 */ 212 lcp_protrej, /* Proto-REJ 受信処理 */ 213 NULL, /* 下位層を起動する */ 214 lcp_lowerdown, /* 下位層を停止する */ 215 NULL, /* オープンする */ 216 lcp_close, /* クローズする */ 217 NULL, /* データ入力 */ 245 218 }; 246 219 247 T_LCP_CONFIGS lcp_local_ack_cfg; /* ç¸æã«è¨±å¯ãããã®èªæ§ææ 248 å ± */ 249 T_LCP_CONFIGS lcp_remote_ack_cfg; /* ç¸æã«è¨±å¯ããæ§ææ 250 å ± */ 251 252 /* 253 * lcp_init -- LCP ã¢ã¸ã¥ã¼ã«ã®åæå 220 T_LCP_CONFIGS lcp_local_ack_cfg; /* 相手に許可されたの自構成情報 */ 221 T_LCP_CONFIGS lcp_remote_ack_cfg; /* 相手に許可した構成情報 */ 222 223 /* 224 * lcp_init -- LCP モジュールの初期化 254 225 */ 255 226 … … 261 232 262 233 /* 263 * lcp_input -- LCP å 264 ¥å 234 * lcp_input -- LCP 入力 265 235 */ 266 236 … … 274 244 275 245 /* 276 * lcp_resetci -- LCPã®æ§ææ 277 å ±ããªã»ããããã 246 * lcp_resetci -- LCPの構成情報をリセットする。 278 247 */ 279 248 … … 287 256 #endif /* of #ifdef LCP_CFG_MAGIC */ 288 257 289 /* èªæ§ææ 290 å ±ã®åæè¨å® */ 258 /* 自構成情報の初期設定 */ 291 259 lcp_local_neg_cfg = lcp_local_def_cfg; 292 260 lcp_local_ack_cfg = lcp_def_cfg; 293 261 294 /* ç¸æã®æ§ææ 295 å ±ã®åæè¨å® */ 262 /* 相手の構成情報の初期設定 */ 296 263 lcp_remote_neg_cfg = lcp_def_cfg; 297 264 lcp_remote_ack_cfg = lcp_def_cfg; … … 309 276 310 277 /* 311 * lcp_cilen -- æ§ææ 312 å ±ã®é·ããè¿ãã 278 * lcp_cilen -- 構成情報の長さを返す。 313 279 */ 314 280 … … 341 307 342 308 if (lcp_local_neg_cfg.options & LCP_CFG_PCOMP) 343 cilen += sizeof(T_PPP_CI_HDR); /* ãããã³ã«å§ç¸®*/309 cilen += sizeof(T_PPP_CI_HDR); /* プロトコル圧縮 */ 344 310 345 311 #endif /* of #ifdef LCP_CFG_PCOMP */ … … 348 314 349 315 if (lcp_local_neg_cfg.options & LCP_CFG_ACCOMP) 350 cilen += sizeof(T_PPP_CI_HDR); /* ã¢ãã¬ã¹ã»å¶å¾¡å§ç¸®*/316 cilen += sizeof(T_PPP_CI_HDR); /* アドレス・制御圧縮 */ 351 317 352 318 #endif /* of #ifdef LCP_CFG_ACCOMP */ … … 356 322 357 323 /* 358 * lcp_addci -- LCPã®æ§ææ 359 å ±ã追å ããã 324 * lcp_addci -- LCPの構成情報を追加する。 360 325 */ 361 326 … … 367 332 buf = output->buf + sizeof(T_PPP_HDR) + sizeof(T_PPP_CP_HDR); 368 333 369 /* MRU ãªãã·ã§ã³ã追å ããã*/334 /* MRU オプションを追加する。 */ 370 335 if (lcp_local_neg_cfg.options & LCP_CFG_MRU) { 371 336 *buf ++ = LCP_CIT_MRU; … … 375 340 } 376 341 377 /* ACCM ãªãã·ã§ã³ã追å ããã*/342 /* ACCM オプションを追加する。 */ 378 343 if (lcp_local_neg_cfg.options & LCP_CFG_ACCM) { 379 344 *buf ++ = LCP_CIT_ACCM; … … 385 350 #ifdef LCP_CFG_MAGIC 386 351 387 /* Magic Number ãªãã·ã§ã³ã追å ããã*/352 /* Magic Number オプションを追加する。 */ 388 353 if (lcp_local_neg_cfg.options & LCP_CFG_MAGIC) { 389 354 *buf ++ = LCP_CIT_MAGIC; … … 397 362 #ifdef LCP_CFG_PAP 398 363 399 /* èªè¨¼ãããã³ã«ãªãã·ã§ã³ã追å ããã*/364 /* 認証プロトコルオプションを追加する。 */ 400 365 if (lcp_local_neg_cfg.options & LCP_CFG_PAP) { 401 366 *buf ++ = LCP_CIT_AUTH; … … 409 374 #ifdef LCP_CFG_PCOMP 410 375 411 /* ãããã³ã«å§ç¸®ãªãã·ã§ã³ã追å ããã*/376 /* プロトコル圧縮オプションを追加する。 */ 412 377 if (lcp_local_neg_cfg.options & LCP_CFG_PCOMP) { 413 378 *buf ++ = LCP_CIT_PCOMP; … … 419 384 #ifdef LCP_CFG_ACCOMP 420 385 421 /* ã¢ãã¬ã¹ã»å¶å¾¡å§ç¸®ãªãã·ã§ã³ã追å ããã*/386 /* アドレス・制御圧縮オプションを追加する。 */ 422 387 if (lcp_local_neg_cfg.options & LCP_CFG_ACCOMP) { 423 388 *buf ++ = LCP_CIT_ACCOMP; … … 429 394 430 395 /* 431 * lcp_ackci -- ACK ãåä¿¡ããã¨ãã®å¦ç396 * lcp_ackci -- ACK を受信したときの処理 432 397 * 433 * æ»ãå¤: TURE ACK ã¯æ£å¸¸434 * false ACK ã¯ç°å¸¸398 * 戻り値: TURE ACK は正常 399 * false ACK は異常 435 400 */ 436 401 … … 445 410 446 411 /* 447 * æ§ææ 448 å ±ã¯éä¿¡ããé ã«å®å 449 ¨ã«ä¸è´ããªããã°ãªããªãã 450 * å¾ã£ã¦ãlcp_addci ã§ä½æããé ã«è§£æããã 412 * 構成情報は送信した順に完全に一致しなければならない。 413 * 従って、lcp_addci で作成した順に解析する。 451 414 */ 452 415 453 /* MRU ãªãã·ã§ã³ã解æããã*/416 /* MRU オプションを解析する。 */ 454 417 if (lcp_local_neg_cfg.options & LCP_CFG_MRU) { 455 418 if (len < sizeof(T_PPP_CI_HDR) + sizeof(uint16_t) || … … 462 425 } 463 426 464 /* ACCM ãªãã·ã§ã³ã解æããã*/427 /* ACCM オプションを解析する。 */ 465 428 if (lcp_local_neg_cfg.options & LCP_CFG_ACCM) { 466 429 if (len < sizeof(T_PPP_CI_HDR) + sizeof(uint32_t) || … … 475 438 #ifdef LCP_CFG_MAGIC 476 439 477 /* Magic Number ãªãã·ã§ã³ã解æããã*/440 /* Magic Number オプションを解析する。 */ 478 441 if (lcp_local_neg_cfg.options & LCP_CFG_MAGIC) { 479 442 if (len < sizeof(T_PPP_CI_HDR) + sizeof(uint32_t) || … … 490 453 #ifdef LCP_CFG_PAP 491 454 492 /* èªè¨¼ãããã³ã«ãªãã·ã§ã³ã解æããã*/455 /* 認証プロトコルオプションを解析する。 */ 493 456 if (lcp_local_neg_cfg.options & LCP_CFG_PAP) { 494 457 if (len < sizeof(T_PPP_CI_HDR) + sizeof(uint16_t) || … … 505 468 #ifdef LCP_CFG_PCOMP 506 469 507 /* ãããã³ã«å§ç¸®ãªãã·ã§ã³ã解æããã*/470 /* プロトコル圧縮オプションを解析する。 */ 508 471 if (lcp_local_neg_cfg.options & LCP_CFG_PCOMP) { 509 472 if (len < sizeof(T_PPP_CI_HDR) || … … 518 481 #ifdef LCP_CFG_ACCOMP 519 482 520 /* ã¢ãã¬ã¹ã»å¶å¾¡å§ç¸®ãªãã·ã§ã³ã解æããã*/483 /* アドレス・制御圧縮オプションを解析する。 */ 521 484 if (lcp_local_neg_cfg.options & LCP_CFG_ACCOMP) { 522 485 if (len < sizeof(T_PPP_CI_HDR) || … … 532 495 533 496 /* 534 * lcp_nakci -- NAK ãåä¿¡ããã¨ãã®å¦ç497 * lcp_nakci -- NAK を受信したときの処理 535 498 * 536 * æ»ãå¤: 1 NAK ã¯æ£å¸¸537 * 0 NAK ã¯ç°å¸¸499 * 戻り値: 1 NAK は正常 500 * 0 NAK は異常 538 501 */ 539 502 … … 542 505 { 543 506 T_LCP_CONFIGS new_cfg; 544 bool_t loop = false; /* ã«ã¼ãããã¯ããã§ãã¯*/507 bool_t loop = false; /* ループバックをチェック */ 545 508 uint32_t cilong; 546 509 uint16_t cishort, len; … … 552 515 new_cfg = lcp_local_neg_cfg; 553 516 554 /* MRU ãªãã·ã§ã³ã解æããã*/517 /* MRU オプションを解析する。 */ 555 518 if (len >= sizeof(T_PPP_CI_HDR) + sizeof(uint16_t) && 556 519 * buf == LCP_CIT_MRU && … … 564 527 } 565 528 566 /* ACCM ãªãã·ã§ã³ã解æããã*/529 /* ACCM オプションを解析する。 */ 567 530 if (len >= sizeof(T_PPP_CI_HDR) + sizeof(uint32_t) && 568 531 * buf == LCP_CIT_ACCM && … … 577 540 #ifdef LCP_CFG_MAGIC 578 541 579 /* Magic Number ãªãã·ã§ã³ã解æããã*/542 /* Magic Number オプションを解析する。 */ 580 543 if (len >= sizeof(T_PPP_CI_HDR) + sizeof(uint32_t) && 581 544 * buf == LCP_CIT_MAGIC && … … 593 556 #ifdef LCP_CFG_PAP 594 557 595 /* èªè¨¼ãããã³ã«ãªãã·ã§ã³ã解æããã*/558 /* 認証プロトコルオプションを解析する。 */ 596 559 if (len >= sizeof(T_PPP_CI_HDR) + sizeof(uint16_t) && 597 560 * buf == LCP_CIT_AUTH && … … 611 574 #ifdef LCP_CFG_PCOMP 612 575 613 /* ãããã³ã«å§ç¸®ãªãã·ã§ã³ã解æããã*/576 /* プロトコル圧縮オプションを解析する。 */ 614 577 if (len >= sizeof(T_PPP_CI_HDR) && 615 578 * buf == LCP_CIT_PCOMP && … … 625 588 #ifdef LCP_CFG_ACCOMP 626 589 627 /* ã¢ãã¬ã¹ã»å¶å¾¡å§ç¸®ãªãã·ã§ã³ã解æããã*/590 /* アドレス・制御圧縮オプションを解析する。 */ 628 591 if (len >= sizeof(T_PPP_CI_HDR) && 629 592 * buf == LCP_CIT_ACCOMP && … … 637 600 #endif /* of #ifdef LCP_CFG_ACCOMP */ 638 601 639 /* å¾ã¯ç¡è¦ããã*/602 /* 後は無視する。*/ 640 603 while (len > sizeof(T_PPP_CI_HDR)) { 641 604 cilen = *(buf + 1); … … 646 609 } 647 610 648 /* é·ãã 0 ã§ãªããã°ã¨ã©ã¼*/611 /* 長さが 0 でなければエラー */ 649 612 if (len != 0) 650 613 return 0; 651 614 652 /* æ°ãããªãã·ã§ã³ãè¨å®ããã*/615 /* 新しいオプションを設定する。*/ 653 616 if (fsm->state != PPP_FSM_OPENED) { 654 617 if (loop) { … … 662 625 663 626 /* 664 * lcp_rejci -- REJ ãåä¿¡ããã¨ãã®å¦ç627 * lcp_rejci -- REJ を受信したときの処理 665 628 * 666 * æ»ãå¤: 1 REJ ã¯æ£å¸¸667 * 0 REJ ã¯ç°å¸¸629 * 戻り値: 1 REJ は正常 630 * 0 REJ は異常 668 631 */ 669 632 … … 681 644 new_cfg = lcp_local_neg_cfg; 682 645 683 /* MRU ãªãã·ã§ã³ã解æããã*/646 /* MRU オプションを解析する。 */ 684 647 if (len >= sizeof(T_PPP_CI_HDR) + sizeof(uint16_t) && 685 648 * buf == LCP_CIT_MRU && … … 695 658 } 696 659 697 /* ACCM ãªãã·ã§ã³ã解æããã*/660 /* ACCM オプションを解析する。 */ 698 661 if (len >= sizeof(T_PPP_CI_HDR) + sizeof(uint32_t) && 699 662 * buf == LCP_CIT_ACCM && … … 711 674 #ifdef LCP_CFG_MAGIC 712 675 713 /* Magic Number ãªãã·ã§ã³ã解æããã*/676 /* Magic Number オプションを解析する。 */ 714 677 if (len >= sizeof(T_PPP_CI_HDR) + sizeof(uint32_t) && 715 678 * buf == LCP_CIT_MAGIC && … … 729 692 #ifdef LCP_CFG_PAP 730 693 731 /* èªè¨¼ãããã³ã«ãªãã·ã§ã³ã解æããã*/694 /* 認証プロトコルオプションを解析する。 */ 732 695 if (len >= sizeof(T_PPP_CI_HDR) + sizeof(uint16_t) && 733 696 * buf == LCP_CIT_AUTH && … … 747 710 #ifdef LCP_CFG_PCOMP 748 711 749 /* ãããã³ã«å§ç¸®ãªãã·ã§ã³ã解æããã*/712 /* プロトコル圧縮オプションを解析する。 */ 750 713 if (len >= sizeof(T_PPP_CI_HDR) && 751 714 * buf == LCP_CIT_PCOMP && … … 761 724 #ifdef LCP_CFG_ACCOMP 762 725 763 /* ã¢ãã¬ã¹ã»å¶å¾¡å§ç¸®ãªãã·ã§ã³ã解æããã*/726 /* アドレス・制御圧縮オプションを解析する。 */ 764 727 if (len >= sizeof(T_PPP_CI_HDR) && 765 728 * buf == LCP_CIT_ACCOMP && … … 773 736 #endif /* of #ifdef LCP_CFG_ACCOMP */ 774 737 775 /* é·ãã 0 ã§ãªããã°ã¨ã©ã¼*/738 /* 長さが 0 でなければエラー */ 776 739 if (len != 0) 777 740 return 0; 778 741 779 /* æ°ãããªãã·ã§ã³ãè¨å®ããã*/742 /* 新しいオプションを設定する。*/ 780 743 if (fsm->state != PPP_FSM_OPENED) 781 744 lcp_local_neg_cfg = new_cfg; … … 785 748 786 749 /* 787 * lcp_reqci -- ç¸æã®æ§ææ 788 å ±ã解æããã 750 * lcp_reqci -- 相手の構成情報を解析する。 789 751 */ 790 752 … … 802 764 803 765 rp = ap = input->buf + sizeof(T_PPP_HDR) + sizeof(T_PPP_CP_HDR); 804 /* rp: REJ ãap: ACK ãã CI ã®ãã¤ã³ã¿*/805 /* æå¦ããå ´åã¯ãå¼æ° input ã«ä¸æ¸ãããã*/766 /* rp: REJ、ap: ACK する CI のポインタ */ 767 /* 拒否する場合は、引数 input に上書きする。 */ 806 768 len = input->len - (sizeof(T_PPP_HDR) + sizeof(T_PPP_CP_HDR)); 807 769 np = output->buf + sizeof(T_PPP_HDR) + sizeof(T_PPP_CP_HDR); 808 final = PPP_CONFACK; /* æçµçã«éä¿¡ããã³ã¼ã*/770 final = PPP_CONFACK; /* 最終的に送信するコード */ 809 771 while (len > 0) { 810 772 code = PPP_CONFACK; 811 cp = ap; /* cp: ç¾å¨å¦çä¸ã®CI */773 cp = ap; /* cp: 現在処理中の CI */ 812 774 813 775 if (len < sizeof(T_PPP_CI_HDR)) { 814 776 815 /* æ®ãã CI ãããããçã*/777 /* 残りが CI ヘッダより短い */ 816 778 syslog(LOG_WARNING, "[PPP/LCP] bad CI len: %d.", len); 817 cilen = len; /* ãã¼ã¿é·ãç°å¸¸ã®å ´åã®å¦ç½®*/818 len = 0; /* ã«ã¼ãããæããã*/779 cilen = len; /* データ長が異常の場合の処置 */ 780 len = 0; /* ループから抜ける。 */ 819 781 code = PPP_CONFREJ; 820 782 goto endswitch; 821 783 } 822 784 823 type = *ap ++; /* CI ã®å*/824 cilen = *ap ++; /* CI ã®é·ã*/785 type = *ap ++; /* CI の型 */ 786 cilen = *ap ++; /* CI の長さ */ 825 787 if (len < cilen) { 826 788 827 /* æ®ãã CI é·ããçã*/789 /* 残りが CI 長より短い */ 828 790 syslog(LOG_WARNING, "[PPP/LCP] bad CI len: %d.", cilen); 829 cilen = len; /* ãã¼ã¿é·ãç°å¸¸ã®å ´åã®å¦ç½®*/830 len = 0; /* ã«ã¼ãããæããã*/791 cilen = len; /* データ長が異常の場合の処置 */ 792 len = 0; /* ループから抜ける。 */ 831 793 code = PPP_CONFREJ; 832 794 goto endswitch; … … 834 796 len -= sizeof(T_PPP_CI_HDR); 835 797 836 /* CI ã®åã«ããåå²ããã*/798 /* CI の型により分岐する。*/ 837 799 switch (type) { 838 800 839 case LCP_CIT_MRU: /* æ大åä¿¡é(Maximum Receive Unit) */801 case LCP_CIT_MRU: /* 最大受信量 (Maximum Receive Unit) */ 840 802 841 803 #if (DEF_LCP_REMOTE_CFGS & LCP_CFG_MRU) == 0 … … 845 807 #else /* of #if (DEF_LCP_REMOTE_CFGS & LCP_CFG_MRU) == 0 */ 846 808 847 /* CI é·ããããã + 2 ãªã¯ãããã§ãªããã°REJ */809 /* CI 長が、ヘッダ + 2 オクテットでなければ REJ */ 848 810 if (cilen != sizeof(T_PPP_CI_HDR) + sizeof(uint16_t)) 849 811 code = PPP_CONFREJ; … … 851 813 cishort = ntohs(*(uint16_t*)ap); 852 814 853 /* æå°åä¿¡éããå°ãããã°NAK */815 /* 最小受信量より小さければ NAK */ 854 816 if (cishort < MIN_PPP_MTU) { 855 817 *np ++ = LCP_CIT_MRU; … … 877 839 #else /* of #if (DEF_LCP_REMOTE_CFGS & LCP_CFG_ACCM) == 0 */ 878 840 879 /* CI é·ããããã + 4 ãªã¯ãããã§ãªããã°REJ */841 /* CI 長が、ヘッダ + 4 オクテットでなければ REJ */ 880 842 if (cilen != sizeof(T_PPP_CI_HDR) + sizeof(uint32_t)) 881 843 code = PPP_CONFREJ; … … 889 851 break; 890 852 891 case LCP_CIT_MAGIC: /* ãã¸ãã¯çªå·*/853 case LCP_CIT_MAGIC: /* マジック番号 */ 892 854 893 855 #if (DEF_LCP_REMOTE_CFGS & LCP_CFG_MAGIC) == 0 … … 897 859 #else /* of #if (DEF_LCP_REMOTE_CFGS & LCP_CFG_MAGIC) == 0 */ 898 860 899 /* CI é·ããããã + 4 ãªã¯ãããã§ãªããã°REJ */861 /* CI 長が、ヘッダ + 4 オクテットでなければ REJ */ 900 862 if (cilen != sizeof(T_PPP_CI_HDR) + sizeof(uint32_t)) 901 863 code = PPP_CONFREJ; … … 903 865 ntoahl(cilong, ap); 904 866 905 /* çªå·ãèªåã¨åããªãNAK */867 /* 番号が自分と同じなら NAK */ 906 868 if (cilong == lcp_local_neg_cfg.magic) { 907 869 cilong = net_rand(); … … 923 885 924 886 #ifdef LCP_CFG_PAP 925 /* CHAP ã¯å®è£ 926 äºå® */ 927 928 case LCP_CIT_AUTH: /* èªè¨¼ãããã³ã« */ 929 930 /* CI é·ããããã + 2 ãªã¯ãããããçãã¨ãã¯ã¨ã©ã¼ */ 887 /* CHAP は実装予定 */ 888 889 case LCP_CIT_AUTH: /* 認証プロトコル */ 890 891 /* CI 長が、ヘッダ + 2 オクテットより短いときはエラー */ 931 892 if (cilen < sizeof(T_PPP_CI_HDR) + sizeof(uint16_t)) 932 893 code = PPP_CONFREJ; … … 934 895 cishort = ntohs(*(uint16_t*)ap); 935 896 936 /* èªè¨¼ãããã³ã«ã«ããåå²ãã*/897 /* 認証プロトコルにより分岐する */ 937 898 if (cishort == PPP_PAP && 938 899 cilen == sizeof(T_PPP_CI_HDR) + sizeof(uint16_t) && … … 948 909 #ifdef LCP_CFG_PCOMP 949 910 950 case LCP_CIT_PCOMP: /* ãããã³ã«é¨å§ç¸®ã¯å®è£ 951 äºå® */ 911 case LCP_CIT_PCOMP: /* プロトコル部圧縮は実装予定 */ 952 912 953 913 #if (DEF_LCP_REMOTE_CFGS & LCP_CFG_PCOMP) == 0 … … 957 917 #else /* of #if (DEF_LCP_REMOTE_CFGS & LCP_CFG_PCOMP) == 0 */ 958 918 959 /* CI é·ãããããé·ã ãã§ãªããã°REJ */919 /* CI 長が、ヘッダ長だけでなければ REJ */ 960 920 if (cilen != sizeof(T_PPP_CI_HDR)) 961 921 code = PPP_CONFREJ; … … 971 931 #ifdef LCP_CFG_ACCOMP 972 932 973 case LCP_CIT_ACCOMP: /* ã¢ãã¬ã¹ã»å¶å¾¡é¨å§ç¸®*/933 case LCP_CIT_ACCOMP: /* アドレス・制御部圧縮 */ 974 934 975 935 #if (DEF_LCP_REMOTE_CFGS & LCP_CFG_ACCOMP) == 0 … … 979 939 #else /* of #if (DEF_LCP_REMOTE_CFGS & LCP_CFG_ACCOMP) == 0 */ 980 940 981 /* CI é·ãããããé·ã ãã§ãªããã°REJ */941 /* CI 長が、ヘッダ長だけでなければ REJ */ 982 942 if (cilen != sizeof(T_PPP_CI_HDR)) 983 943 code = PPP_CONFREJ; … … 998 958 endswitch: 999 959 if (code == PPP_CONFNAK) { 1000 /* CI ã®åã Magic Number ã®å ´åãé¤ãã¦ãNAK ã®åæ°ã */ 1001 /* æå¤§å¤ MAX_PPP_FAILURES ãè¶ 1002 ãããæå¦ããã */ 960 /* CI の型が Magic Number の場合を除いて、NAK の回数が */ 961 /* 最大値 MAX_PPP_FAILURES を超えたら拒否する。 */ 1003 962 if (fsm->failures >= MAX_PPP_FAILURES && type != LCP_CIT_MAGIC) 1004 963 code = PPP_CONFREJ; … … 1007 966 } 1008 967 1009 /* ãã® CI ãæå¦ãã*/968 /* この CI を拒否する */ 1010 969 if (code == PPP_CONFREJ) { 1011 if (rp < cp) /* åã«è©°ããã*/970 if (rp < cp) /* 前に詰める。*/ 1012 971 memcpy(rp, cp, cilen); 1013 972 rp += cilen; … … 1019 978 } 1020 979 1021 /* æçµçãªé·ãã調æ´ããã*/980 /* 最終的な長さを調整する。*/ 1022 981 switch (final) { 1023 982 case PPP_CONFNAK: … … 1036 995 1037 996 /* 1038 * lcp_up -- ãªã³ã¯æ¥ç¶ã確ç«ãã (Phase: Establish ã«ç§»è¡ãã)ã997 * lcp_up -- リンク接続を確立する (Phase: Establish に移行する)。 1039 998 */ 1040 999 … … 1042 1001 lcp_up (T_PPP_FSM *fsm) 1043 1002 { 1044 /* èªæ§ææ 1045 å ±ã®è¨å® */ 1003 /* 自構成情報の設定 */ 1046 1004 lcp_local_ack_cfg = lcp_local_neg_cfg; 1047 1005 1048 /* ç¸æã®æ§ææ 1049 å ±ã®è¨å® */ 1006 /* 相手の構成情報の設定 */ 1050 1007 lcp_remote_ack_cfg = lcp_remote_neg_cfg; 1051 1008 … … 1060 1017 1061 1018 /* 1062 * lcp_starting -- ä¸ä½å±¤ãéå§ããã1019 * lcp_starting -- 下位層を開始する。 1063 1020 */ 1064 1021 … … 1070 1027 1071 1028 /* 1072 * lcp_extcode -- LCP ç¹æã® CP ãåä¿¡ããã¨ãã®å¦ç1029 * lcp_extcode -- LCP 特有の CP を受信したときの処理 1073 1030 */ 1074 1031 … … 1127 1084 1128 1085 /* 1129 * lcp_rprotrej -- Proto-REJ ãåä¿¡ããã¨ãã®å¦ç1086 * lcp_rprotrej -- Proto-REJ を受信したときの処理 1130 1087 */ 1131 1088 … … 1148 1105 } 1149 1106 1150 /* ä¸ä½ãããã³ã«ãåæåãã*/1107 /* 上位プロトコルを初期化する */ 1151 1108 for (ix = 0; (entry = protocols[ix]) != NULL; ix ++) 1152 1109 if (entry->proto == proto) { … … 1159 1116 1160 1117 /* 1161 * lcp_protrej -- Proto-REJ ãåä¿¡ããã¨ãã®å¦ç1118 * lcp_protrej -- Proto-REJ を受信したときの処理 1162 1119 */ 1163 1120 … … 1169 1126 1170 1127 /* 1171 * lcp_lowerup -- LCP ä¸ä½å±¤ãèµ·åããã1128 * lcp_lowerup -- LCP 下位層を起動する。 1172 1129 */ 1173 1130 … … 1179 1136 1180 1137 /* 1181 * lcp_lowerdown -- LCP ä¸ä½å±¤ãåæ¢ããã1138 * lcp_lowerdown -- LCP 下位層を停止する。 1182 1139 */ 1183 1140 … … 1189 1146 1190 1147 /* 1191 * lcp_open -- LCP ã®ãªã¼ã1148 * lcp_open -- LCP のオープ 1192 1149 */ 1193 1150 … … 1195 1152 lcp_open (uint8_t open_mode) 1196 1153 { 1197 ppp_open_mode = open_mode; /* ãªã¼ãã³æã®åä½ã¢ã¼ã*/1154 ppp_open_mode = open_mode; /* オープン時の動作モード */ 1198 1155 fsm_open(&lcp_fsm); 1199 1156 } 1200 1157 1201 1158 /* 1202 * lcp_close -- LCP ã®ã¯ãã¼ãº1159 * lcp_close -- LCP のクローズ 1203 1160 */ 1204 1161 … … 1218 1175 1219 1176 /* 1220 * lcp_sprotrej -- èªèã§ããªããããã³ã«ãéããã¦ããã¨ãã®å¦ç1177 * lcp_sprotrej -- 認識できないプロトコルが送られてきたときの処理 1221 1178 */ 1222 1179 … … 1226 1183 T_NET_BUF *output; 1227 1184 /* 1228 * Protocol-Reject ãéãè¿ãã1185 * Protocol-Reject を送り返す。 1229 1186 */ 1230 1187 … … 1239 1196 1240 1197 /* 1241 * lcp_down -- ãªã³ã¯æ¥ç¶ã解æ¾ãã (Phase: Dead ã«ç§»è¡ãã)ã1198 * lcp_down -- リンク接続を解放する (Phase: Dead に移行する)。 1242 1199 */ 1243 1200 … … 1256 1213 1257 1214 /* 1258 * lcp_finished -- ä¸ä½å±¤ãçµäºããã1215 * lcp_finished -- 下位層を終了する。 1259 1216 */ 1260 1217 … … 1268 1225 1269 1226 /* 1270 * recv_echo_rep -- ECHOREP ãåä¿¡ããã¨ãã®å¦ç1227 * recv_echo_rep -- ECHOREP を受信したときの処理 1271 1228 */ 1272 1229 … … 1279 1236 hdr = GET_PPP_CP_HDR(input); 1280 1237 1281 /* Magic Number ã®é·ã以ä¸ãªãã¨ã©ã¼*/1238 /* Magic Number の長さ以下ならエラー */ 1282 1239 if (hdr->len < sizeof(T_PPP_CP_HDR) + sizeof(uint32_t)) { 1283 1240 syslog(LOG_WARNING, "[PPP/LCP] bad ECHOREP len: %d.", hdr->len); … … 1287 1244 ntoahl(magic, input->buf + sizeof(T_PPP_HDR) + sizeof(T_PPP_CP_HDR)); 1288 1245 1289 /* åä¿¡ãã Magic Number ãèªåã¨åããªãã«ã¼ããã¦ããã*/1246 /* 受信した Magic Number が自分と同じならループしている。*/ 1290 1247 if ((lcp_local_ack_cfg.options & LCP_CFG_MAGIC) && magic == lcp_local_ack_cfg.magic) { 1291 1248 syslog(LOG_WARNING, "[PPP/LCP] ECHOREP looped."); … … 1297 1254 1298 1255 /* 1299 * echo_timeout -- ECHO REQ/REP ã®ã¿ã¤ã ã¢ã¦ãå¦ç1256 * echo_timeout -- ECHO REQ/REP のタイムアウト処理 1300 1257 */ 1301 1258 … … 1310 1267 1311 1268 /* 1312 * send_echo_req -- ECHO REQ ãéä¿¡ããã1269 * send_echo_req -- ECHO REQ を送信する。 1313 1270 */ 1314 1271 … … 1330 1287 if (fsm->state == PPP_FSM_OPENED) { 1331 1288 1332 /* ECHOREQ ãéä¿¡ããã*/1289 /* ECHOREQ を送信する。*/ 1333 1290 syscall(get_net_buf(&input, sizeof(T_PPP_HDR) + sizeof(T_PPP_CP_HDR) + sizeof(uint32_t))); 1334 1291 *(uint32_t*)(input->buf + sizeof(T_PPP_HDR) + sizeof(T_PPP_CP_HDR)) = lcp_local_ack_cfg.magic; … … 1337 1294 echo_pending ++; 1338 1295 1339 /* ã¿ã¤ãã¼ãã¹ã¿ã¼ãããã*/1296 /* タイマーをスタートする。*/ 1340 1297 timeout((FP)echo_timeout, fsm, LCP_ECHO_INTERVAL); 1341 1298 timer_running = true; … … 1344 1301 1345 1302 /* 1346 * echo_lowerup -- ECHO REQ/REP ã®èµ·å1303 * echo_lowerup -- ECHO REQ/REP の起動 1347 1304 */ 1348 1305 … … 1358 1315 1359 1316 /* 1360 * echo_lowerdown -- ECHO REQ/REP ã®åæ¢1317 * echo_lowerdown -- ECHO REQ/REP の停止 1361 1318 */ 1362 1319
Note:
See TracChangeset
for help on using the changeset viewer.