Changeset 321 for EcnlProtoTool/trunk/asp3_dcre/tinet/net/ppp_ipcp.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_ipcp.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 責ãããã¨ï¼ 36 * 37 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 38 ã 39 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã 40 * å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´ 41 * æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼ 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プロジェクトを免責すること. 25 * 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 * FSM ããå¼åºãããã³ã¼ã«ããã¯é¢ 138 */ 139 140 static void ipcp_resetci(T_PPP_FSM *fsm); /* èªæ§ææ 141 å ±ããªã»ããããã */ 142 static int_t ipcp_cilen (T_PPP_FSM *fsm); /* æ§ææ 143 å ±ã®é·ããè¿ãã */ 125 * FSM から呼出されるコールバック関 126 */ 127 128 static void ipcp_resetci(T_PPP_FSM *fsm); /* 自構成情報をリセットする。 */ 129 static int_t ipcp_cilen (T_PPP_FSM *fsm); /* 構成情報の長さを返す。 */ 144 130 static void ipcp_addci (T_PPP_FSM *fsm, T_NET_BUF *output); 145 /* èªæ§ææ 146 å ±ã追å ããã */ 131 /* 自構成情報を追加する。 */ 147 132 static bool_t ipcp_ackci (T_PPP_FSM *fsm, T_NET_BUF *input); 148 /* ACK ãåä¿¡ããã¨ãã®å¦ç*/133 /* ACK を受信したときの処理 */ 149 134 static bool_t ipcp_nakci (T_PPP_FSM *fsm, T_NET_BUF *input); 150 /* NAK ãåä¿¡ããã¨ãã®å¦ç*/135 /* NAK を受信したときの処理 */ 151 136 static bool_t ipcp_rejci (T_PPP_FSM *fsm, T_NET_BUF *input); 152 /* REJ ãåä¿¡ããã¨ãã®å¦ç*/137 /* REJ を受信したときの処理 */ 153 138 static int_t ipcp_reqci (T_PPP_FSM *fsm, T_NET_BUF *input, T_NET_BUF *output); 154 /* ç¸æã®æ§ææ 155 å ±ã確èªããã */ 156 static void ipcp_up (T_PPP_FSM *fsm); /* ãªã³ã¯æ¥ç¶ã確ç«ããã */ 157 static void ipcp_down (T_PPP_FSM *fsm); /* ãªã³ã¯æ¥ç¶ã解æ¾ããã */ 158 static void ipcp_finished(T_PPP_FSM *fsm); /* ä¸ä½å±¤ãçµäºããã */ 159 160 /* 161 * å¤æ° 162 */ 163 164 static T_IFNET ipcp_local_def_cfg = { /* èªæ§ææ 165 å ±ã®è¦å®å¤ */ 139 /* 相手の構成情報を確認する。 */ 140 static void ipcp_up (T_PPP_FSM *fsm); /* リンク接続を確立する。 */ 141 static void ipcp_down (T_PPP_FSM *fsm); /* リンク接続を解放する。 */ 142 static void ipcp_finished(T_PPP_FSM *fsm); /* 下位層を終了する。 */ 143 144 /* 145 * 変数 146 */ 147 148 static T_IFNET ipcp_local_def_cfg = { /* 自構成情報の規定値 */ 166 149 NULL, 167 150 { 168 IPV4_ADDR_LOCAL, /* IP ã¢ãã¬ã¹*/169 UINT_C(0), /* ãµãããããã¹ã¯*/151 IPV4_ADDR_LOCAL, /* IP アドレス */ 152 UINT_C(0), /* サブネットマスク */ 170 153 }, 171 154 }; 172 155 173 static T_IFNET ipcp_remote_def_cfg = { /* ç¸æã®æ§ææ 174 å ±ã®è¦å®å¤ */ 156 static T_IFNET ipcp_remote_def_cfg = { /* 相手の構成情報の規定値 */ 175 157 NULL, 176 158 { 177 IPV4_ADDR_REMOTE, /* IP ã¢ãã¬ã¹*/178 UINT_C(0), /* ãµãããããã¹ã¯*/159 IPV4_ADDR_REMOTE, /* IP アドレス */ 160 UINT_C(0), /* サブネットマスク */ 179 161 } 180 162 }; 181 163 182 static T_IFNET ipcp_local_neg_cfg; /* ãã´ä¸ã®èªæ§ææ 183 å ± */ 184 185 static T_IFNET ipcp_remote_neg_cfg; /* ãã´ä¸ã®ç¸æã®æ§ææ 186 å ± */ 187 188 /* 189 * å 190 ¨åå¤æ° 164 static T_IFNET ipcp_local_neg_cfg; /* ネゴ中の自構成情報 */ 165 166 static T_IFNET ipcp_remote_neg_cfg; /* ネゴ中の相手の構成情報 */ 167 168 /* 169 * 全域変数 191 170 */ 192 171 193 172 T_PPP_FSM_CALLBACKS ipcp_callbacks = { 194 ipcp_resetci, /* èªæ§ææ 195 å ±ããªã»ããããã */ 196 ipcp_cilen, /* æ§ææ 197 å ±ã®é·ããè¿ãã */ 198 ipcp_addci, /* èªæ§ææ 199 å ±ã追å ããã */ 200 ipcp_ackci, /* ACK ãåä¿¡ããã¨ãã®å¦ç */ 201 ipcp_nakci, /* NAK ãåä¿¡ããã¨ãã®å¦ç */ 202 ipcp_rejci, /* REJ ãåä¿¡ããã¨ãã®å¦ç */ 203 ipcp_reqci, /* ç¸æã®æ§ææ 204 å ±ã確èªããã */ 205 ipcp_up, /* ãªã³ã¯æ¥ç¶ã確ç«ããã */ 206 ipcp_down, /* ãªã³ã¯æ¥ç¶ã解æ¾ããã */ 207 NULL, /* ä¸ä½å±¤ãéå§ããã */ 208 ipcp_finished, /* ä¸ä½å±¤ãçµäºããã */ 209 NULL, /* åéããã */ 210 NULL, /* ä¸æ㪠CP ãåä¿¡ããã¨ãã®å¦ç */ 173 ipcp_resetci, /* 自構成情報をリセットする。 */ 174 ipcp_cilen, /* 構成情報の長さを返す。 */ 175 ipcp_addci, /* 自構成情報を追加する。 */ 176 ipcp_ackci, /* ACK を受信したときの処理 */ 177 ipcp_nakci, /* NAK を受信したときの処理 */ 178 ipcp_rejci, /* REJ を受信したときの処理 */ 179 ipcp_reqci, /* 相手の構成情報を確認する。 */ 180 ipcp_up, /* リンク接続を確立する。 */ 181 ipcp_down, /* リンク接続を解放する。 */ 182 NULL, /* 下位層を開始する。 */ 183 ipcp_finished, /* 下位層を終了する。 */ 184 NULL, /* 再送する。 */ 185 NULL, /* 不明な CP を受信したときの処理 */ 211 186 }; 212 187 213 188 T_PPP_FSM ipcp_fsm = { 214 &ipcp_callbacks, /* ã³ã¼ã«ããã¯é¢æ°*/215 PPP_IPCP, /* ãããã³ã«*/189 &ipcp_callbacks, /* コールバック関数 */ 190 PPP_IPCP, /* プロトコル */ 216 191 }; 217 192 218 193 T_PPP_PROTENT ipcp_protent = { 219 194 PPP_IPCP, 220 ipcp_init, /* åæå */ 221 ipcp_input, /* å 222 ¥å */ 223 ipcp_protrej, /* Proto-REJ åä¿¡å¦ç */ 224 ipcp_lowerup, /* ä¸ä½å±¤ãèµ·åãã */ 225 ipcp_lowerdown, /* ä¸ä½å±¤ãåæ¢ãã */ 226 ipcp_open, /* ãªã¼ãã³ãã */ 227 ipcp_close, /* ã¯ãã¼ãºãã */ 228 ip_input, /* ãã¼ã¿å 229 ¥åãIP å 230 ¥å */ 195 ipcp_init, /* 初期化 */ 196 ipcp_input, /* 入力 */ 197 ipcp_protrej, /* Proto-REJ 受信処理 */ 198 ipcp_lowerup, /* 下位層を起動する */ 199 ipcp_lowerdown, /* 下位層を停止する */ 200 ipcp_open, /* オープンする */ 201 ipcp_close, /* クローズする */ 202 ip_input, /* データ入力、IP 入力 */ 231 203 }; 232 204 233 T_IFNET ipcp_local_ack_cfg; /* ç¸æã«è¨±å¯ãããã®èªæ§ææ 234 å ± */ 235 T_IFNET ipcp_remote_ack_cfg; /* ç¸æã«è¨±å¯ããæ§ææ 236 å ± */ 237 238 /* 239 * ppp_get_ifnet -- ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹æ§é ä½ãè¿ãã 205 T_IFNET ipcp_local_ack_cfg; /* 相手に許可されたの自構成情報 */ 206 T_IFNET ipcp_remote_ack_cfg; /* 相手に許可した構成情報 */ 207 208 /* 209 * ppp_get_ifnet -- ネットワークインタフェース構造体を返す。 240 210 */ 241 211 … … 247 217 248 218 /* 249 * wait_ipcp -- IP æ¥ç¶å®äºã¾ã§å¾ 250 ã¤ã 251 * 252 * æ»ãå¤: æ¥ç¶ã«å¤±æããã E_OBJ ãè¿ãã 219 * wait_ipcp -- IP 接続完了まで待つ。 220 * 221 * 戻り値: 接続に失敗したら E_OBJ を返す。 253 222 */ 254 223 … … 264 233 #ifdef PPP_CFG_MODEM 265 234 266 /* ã¢ãã ã®æ¥ç¶å®äºã¾ã§å¾ 267 ã¤ã*/ 235 /* モデムの接続完了まで待つ。*/ 268 236 if ((error = wait_modem()) != E_OK) 269 237 return error; … … 272 240 273 241 /* 274 * ååãªã¼ãã³ããç¸æããã®æ¥ç¶å¾ 275 ã¡ãªã LCP ãä¸åº¦ã¯ãã¼ãºãã 276 * è½åãªã¼ãã³ç¶æ 277 ã§ãåãªã¼ãã³ããã 242 * 受動オープンし、相手からの接続待ちなら LCP を一度クローズし、 243 * 能動オープン状態で、再オープンする。 278 244 */ 279 245 lcp_close(); … … 285 251 286 252 if (ipcp_fsm.state != PPP_FSM_OPENED) { 287 /* IP æ¥ç¶å®äºã¾ã§å¾ 288 ã¤ã*/ 253 /* IP 接続完了まで待つ。*/ 289 254 wai_sem(SEM_IPCP_READY); 290 255 if (ipcp_fsm.state != PPP_FSM_OPENED) … … 296 261 297 262 /* 298 * ipcp_init -- IPCP ã¢ã¸ã¥ã¼ã«ã®åæå263 * ipcp_init -- IPCP モジュールの初期化 299 264 */ 300 265 … … 306 271 307 272 /* 308 * ipcp_input -- IPCP å 309 ¥å 273 * ipcp_input -- IPCP 入力 310 274 */ 311 275 … … 319 283 320 284 /* 321 * ipcp_resetci -- IPCPã®æ§ææ 322 å ±ããªã»ããããã 285 * ipcp_resetci -- IPCPの構成情報をリセットする。 323 286 */ 324 287 … … 326 289 ipcp_resetci (T_PPP_FSM *fsm) 327 290 { 328 /* èªæ§ææ 329 å ±ã®åæè¨å® */ 291 /* 自構成情報の初期設定 */ 330 292 ipcp_local_neg_cfg = ipcp_local_def_cfg; 331 293 memset((void*)&ipcp_local_ack_cfg, 0, sizeof(T_IFNET)); 332 294 333 /* ç¸æã®æ§ææ 334 å ±ã®åæè¨å® */ 295 /* 相手の構成情報の初期設定 */ 335 296 ipcp_remote_neg_cfg = ipcp_remote_def_cfg; 336 297 memset((void*)&ipcp_remote_ack_cfg, 0, sizeof(T_IFNET)); … … 338 299 339 300 /* 340 * ipcp_cilen -- æ§ææ 341 å ±ã®é·ããè¿ãã 301 * ipcp_cilen -- 構成情報の長さを返す。 342 302 */ 343 303 … … 347 307 int_t cilen = 0; 348 308 349 cilen += sizeof(T_PPP_CI_HDR) + sizeof(uint32_t); /* IP ã¢ãã¬ã¹*/309 cilen += sizeof(T_PPP_CI_HDR) + sizeof(uint32_t); /* IP アドレス */ 350 310 351 311 return cilen; … … 353 313 354 314 /* 355 * ipcp_addci -- IPCPã®æ§ææ 356 å ±ã追å ããã 315 * ipcp_addci -- IPCPの構成情報を追加する。 357 316 */ 358 317 … … 364 323 buf = output->buf + sizeof(T_PPP_HDR) + sizeof(T_PPP_CP_HDR); 365 324 366 /* IP ã¢ãã¬ã¹ãªãã·ã§ã³ã追å ããã*/325 /* IP アドレスオプションを追加する。 */ 367 326 *buf ++ = IPCP_CIT_ADDR; 368 327 *buf ++ = sizeof(T_PPP_CI_HDR) + sizeof(uint32_t); … … 372 331 373 332 /* 374 * ipcp_ackci -- ACK ãåä¿¡ããã¨ãã®å¦ç375 * 376 * æ»ãå¤: true ACK ã¯æ£å¸¸377 * false ACK ã¯ç°å¸¸333 * ipcp_ackci -- ACK を受信したときの処理 334 * 335 * 戻り値: true ACK は正常 336 * false ACK は異常 378 337 */ 379 338 … … 388 347 389 348 /* 390 * æ§ææ 391 å ±ã¯éä¿¡ããé ã«å®å 392 ¨ã«ä¸è´ããªããã°ãªããªãã 393 * å¾ã£ã¦ãipcp_addci ã§ä½æããé ã«è§£æããã 349 * 構成情報は送信した順に完全に一致しなければならない。 350 * 従って、ipcp_addci で作成した順に解析する。 394 351 */ 395 352 396 /* ADDR ãªãã·ã§ã³ã解æããã*/353 /* ADDR オプションを解析する。 */ 397 354 if (len < sizeof(T_PPP_CI_HDR) + sizeof(uint32_t) || 398 355 *buf ++ != IPCP_CIT_ADDR || … … 407 364 408 365 /* 409 * ipcp_nakci -- NAK ãåä¿¡ããã¨ãã®å¦ç410 * 411 * æ»ãå¤: 1 NAK ã¯æ£å¸¸412 * 0 NAK ã¯ç°å¸¸366 * ipcp_nakci -- NAK を受信したときの処理 367 * 368 * 戻り値: 1 NAK は正常 369 * 0 NAK は異常 413 370 */ 414 371 … … 426 383 new_cfg = ipcp_local_neg_cfg; 427 384 428 /* ADDR ãªãã·ã§ã³ã解æããã*/385 /* ADDR オプションを解析する。 */ 429 386 if (len >= sizeof(T_PPP_CI_HDR) + sizeof(uint32_t) && 430 387 * buf == IPCP_CIT_ADDR && … … 436 393 } 437 394 438 /* å¾ã¯ç¡è¦ããã*/395 /* 後は無視する。*/ 439 396 while (len > sizeof(T_PPP_CI_HDR)) { 440 397 cilen = *(buf + 1); … … 445 402 } 446 403 447 /* é·ãã 0 ã§ãªããã°ã¨ã©ã¼*/404 /* 長さが 0 でなければエラー */ 448 405 if (len != 0) 449 406 return 0; 450 407 451 /* æ°ãããªãã·ã§ã³ãè¨å®ããã*/408 /* 新しいオプションを設定する。*/ 452 409 if (fsm->state != PPP_FSM_OPENED) 453 410 ipcp_local_neg_cfg = new_cfg; … … 457 414 458 415 /* 459 * ipcp_rejci -- REJ ãåä¿¡ããã¨ãã®å¦ç460 * 461 * æ»ãå¤: 1 REJ ã¯æ£å¸¸462 * 0 REJ ã¯ç°å¸¸416 * ipcp_rejci -- REJ を受信したときの処理 417 * 418 * 戻り値: 1 REJ は正常 419 * 0 REJ は異常 463 420 */ 464 421 … … 475 432 new_cfg = ipcp_local_neg_cfg; 476 433 477 /* ADDR ãªãã·ã§ã³ã解æããã*/434 /* ADDR オプションを解析する。 */ 478 435 if (len >= sizeof(T_PPP_CI_HDR) + sizeof(uint32_t) && 479 436 * buf == IPCP_CIT_ADDR && … … 484 441 } 485 442 486 /* é·ãã 0 ã§ãªããã°ã¨ã©ã¼*/443 /* 長さが 0 でなければエラー */ 487 444 if (len != 0) 488 445 return 0; 489 446 490 /* æ°ãããªãã·ã§ã³ãè¨å®ããã*/447 /* 新しいオプションを設定する。*/ 491 448 if (fsm->state != PPP_FSM_OPENED) 492 449 ipcp_local_neg_cfg = new_cfg; … … 496 453 497 454 /* 498 * ipcp_reqci -- ç¸æã®æ§ææ 499 å ±ã解æããã 455 * ipcp_reqci -- 相手の構成情報を解析する。 500 456 */ 501 457 … … 508 464 509 465 rp = ap = input->buf + sizeof(T_PPP_HDR) + sizeof(T_PPP_CP_HDR); 510 /* rp: REJ ãap: ACK ãã CI ã®ãã¤ã³ã¿*/511 /* æå¦ããå ´åã¯ãå¼æ° buf ã«ä¸æ¸ãããã*/466 /* rp: REJ、ap: ACK する CI のポインタ */ 467 /* 拒否する場合は、引数 buf に上書きする。 */ 512 468 len = input->len - (sizeof(T_PPP_HDR) + sizeof(T_PPP_CP_HDR)); 513 469 np = output->buf + sizeof(T_PPP_HDR) + sizeof(T_PPP_CP_HDR); 514 final = PPP_CONFACK; /* æçµçã«éä¿¡ããã³ã¼ã*/470 final = PPP_CONFACK; /* 最終的に送信するコード */ 515 471 while (len > 0) { 516 472 code = PPP_CONFACK; 517 cp = ap; /* cp: ç¾å¨å¦çä¸ã®CI */473 cp = ap; /* cp: 現在処理中の CI */ 518 474 519 475 if (len < sizeof(T_PPP_CI_HDR)) { 520 476 521 /* æ®ãã CI ãããããçã*/477 /* 残りが CI ヘッダより短い */ 522 478 syslog(LOG_NOTICE, "[PPP/IPCP] bad CI len: %d.", len); 523 cilen = len; /* ãã¼ã¿é·ãç°å¸¸ã®å ´åã®å¦ç½®*/524 len = 0; /* ã«ã¼ãããæããã*/479 cilen = len; /* データ長が異常の場合の処置 */ 480 len = 0; /* ループから抜ける。 */ 525 481 code = PPP_CONFREJ; 526 482 goto endswitch; 527 483 } 528 484 529 type = *ap ++; /* CI ã®å*/530 cilen = *ap ++; /* CI ã®é·ã*/485 type = *ap ++; /* CI の型 */ 486 cilen = *ap ++; /* CI の長さ */ 531 487 if (len < cilen) { 532 488 533 /* æ®ãã CI é·ããçã*/489 /* 残りが CI 長より短い */ 534 490 syslog(LOG_NOTICE, "[PPP/IPCP] bad CI len: %d.", cilen); 535 cilen = len; /* ãã¼ã¿é·ãç°å¸¸ã®å ´åã®å¦ç½®*/536 len = 0; /* ã«ã¼ãããæããã*/491 cilen = len; /* データ長が異常の場合の処置 */ 492 len = 0; /* ループから抜ける。 */ 537 493 code = PPP_CONFREJ; 538 494 goto endswitch; … … 540 496 len -= sizeof(T_PPP_CI_HDR); 541 497 542 /* CI ã®åã«ããåå²ããã*/498 /* CI の型により分岐する。*/ 543 499 switch (type) { 544 500 545 case IPCP_CIT_ADDR: /* IP ã¢ãã¬ã¹*/546 547 /* CI é·ããããã + 4 ãªã¯ãããã§ãªããã°ã¨ã©ã¼*/501 case IPCP_CIT_ADDR: /* IP アドレス */ 502 503 /* CI 長が、ヘッダ + 4 オクテットでなければエラー */ 548 504 if (cilen != sizeof(T_PPP_CI_HDR) + sizeof(uint32_t)) 549 505 code = PPP_CONFREJ; … … 558 514 code = PPP_CONFNAK; 559 515 } 560 #if 1 /* è¦ç¢ºèª*/516 #if 1 /* 要確認 */ 561 517 else if (addr == 0 && ipcp_remote_neg_cfg.in_ifaddr.addr == 0) 562 518 #else … … 577 533 578 534 if (code == PPP_CONFNAK) { 579 /* CI ã®åã Magic Number ã®å ´åãé¤ãã¦ãNAK ã®åæ°ã */ 580 /* æå¤§å¤ MAX_PPP_FAILURES ãè¶ 581 ãããæå¦ããã */ 535 /* CI の型が Magic Number の場合を除いて、NAK の回数が */ 536 /* 最大値 MAX_PPP_FAILURES を超えたら拒否する。 */ 582 537 if (fsm->failures >= MAX_PPP_FAILURES) 583 538 code = PPP_CONFREJ; … … 586 541 } 587 542 588 /* ãã® CI ãæå¦ãã*/543 /* この CI を拒否する */ 589 544 if (code == PPP_CONFREJ) { 590 if (rp < cp) /* åã«è©°ããã*/545 if (rp < cp) /* 前に詰める。*/ 591 546 memcpy(rp, cp, cilen); 592 547 rp += cilen; … … 598 553 } 599 554 600 /* æçµçãªé·ãã調æ´ããã*/555 /* 最終的な長さを調整する。*/ 601 556 switch (final) { 602 557 case PPP_CONFNAK: … … 616 571 617 572 /* 618 * ipcp_up -- ãªã³ã¯æ¥ç¶ã確ç«ããã573 * ipcp_up -- リンク接続を確立する。 619 574 */ 620 575 … … 622 577 ipcp_up (T_PPP_FSM *fsm) 623 578 { 624 /* èªæ§ææ 625 å ±ã®åæè¨å® */ 579 /* 自構成情報の初期設定 */ 626 580 ipcp_local_ack_cfg = ipcp_local_neg_cfg; 627 581 628 582 /* 629 * ãµãããããã¹ã¯ã¨630 * ãã¼ã«ã«ã»ããã¼ããã£ã¹ã IP ã¢ãã¬ã¹ãè¨å®ããã583 * サブネットマスクと 584 * ローカル・ブロードキャスト IP アドレスを設定する。 631 585 */ 632 586 ipcp_local_ack_cfg.in_ifaddr.mask = MAKE_IPV4_LOCAL_MASK(ipcp_local_neg_cfg.in_ifaddr.addr); 633 587 634 /* ç¸æã®æ§ææ 635 å ±ã®åæè¨å® */ 588 /* 相手の構成情報の初期設定 */ 636 589 ipcp_remote_ack_cfg = ipcp_remote_neg_cfg; 637 590 638 591 /* 639 * ãµãããããã¹ã¯ã¨640 * ãã¼ã«ã«ã»ããã¼ããã£ã¹ã IP ã¢ãã¬ã¹ãè¨å®ããã592 * サブネットマスクと 593 * ローカル・ブロードキャスト IP アドレスを設定する。 641 594 */ 642 595 ipcp_remote_ack_cfg.in_ifaddr.mask = MAKE_IPV4_LOCAL_MASK(ipcp_remote_neg_cfg.in_ifaddr.addr); … … 650 603 651 604 /* 652 * ipcp_down -- ãªã³ã¯æ¥ç¶ã解æ¾ããã605 * ipcp_down -- リンク接続を解放する。 653 606 */ 654 607 … … 661 614 662 615 /* 663 * ipcp_finished -- ä¸ä½å±¤ãçµäºããã616 * ipcp_finished -- 下位層を終了する。 664 617 */ 665 618 … … 670 623 671 624 /* 672 * ipcp_protrej -- Proto-REJ ãåä¿¡ããã¨ãã®å¦ç625 * ipcp_protrej -- Proto-REJ を受信したときの処理 673 626 */ 674 627 … … 680 633 681 634 /* 682 * ipcp_lowerup -- IPCP ä¸ä½å±¤ãèµ·åããã635 * ipcp_lowerup -- IPCP 下位層を起動する。 683 636 */ 684 637 … … 690 643 691 644 /* 692 * ipcp_lowerdown -- IPCP ä¸ä½å±¤ãåæ¢ããã645 * ipcp_lowerdown -- IPCP 下位層を停止する。 693 646 */ 694 647 … … 700 653 701 654 /* 702 * ipcp_open -- IPCP ã®ãªã¼ãã³655 * ipcp_open -- IPCP のオープン 703 656 */ 704 657 … … 710 663 711 664 /* 712 * ipcp_close -- IPCP ã®ã¯ãã¼ãº665 * ipcp_close -- IPCP のクローズ 713 666 */ 714 667
Note:
See TracChangeset
for help on using the changeset viewer.