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