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