Changeset 389 for azure_iot_hub/trunk/asp3_dcre/tinet/net/ppp_ipv6cp.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_ipv6cp.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 ipv6cp_resetci(T_PPP_FSM *fsm); /* èªæ§ææ 142 å ±ããªã»ããããã */ 143 static int_t ipv6cp_cilen (T_PPP_FSM *fsm); /* æ§ææ 144 å ±ã®é·ããè¿ãã */ 126 * FSM から呼出されるコールバック関 127 */ 128 129 static void ipv6cp_resetci(T_PPP_FSM *fsm); /* 自構成情報をリセットする。 */ 130 static int_t ipv6cp_cilen (T_PPP_FSM *fsm); /* 構成情報の長さを返す。 */ 145 131 static void ipv6cp_addci (T_PPP_FSM *fsm, T_NET_BUF *output); 146 /* èªæ§ææ 147 å ±ã追å ããã */ 132 /* 自構成情報を追加する。 */ 148 133 static bool_t ipv6cp_ackci (T_PPP_FSM *fsm, T_NET_BUF *input); 149 /* ACK ãåä¿¡ããã¨ãã®å¦ç*/134 /* ACK を受信したときの処理 */ 150 135 static bool_t ipv6cp_nakci (T_PPP_FSM *fsm, T_NET_BUF *input); 151 /* NAK ãåä¿¡ããã¨ãã®å¦ç*/136 /* NAK を受信したときの処理 */ 152 137 static bool_t ipv6cp_rejci (T_PPP_FSM *fsm, T_NET_BUF *input); 153 /* REJ ãåä¿¡ããã¨ãã®å¦ç*/138 /* REJ を受信したときの処理 */ 154 139 static int_t ipv6cp_reqci (T_PPP_FSM *fsm, T_NET_BUF *input, T_NET_BUF *output); 155 /* ç¸æã®æ§ææ 156 å ±ã確èªããã */ 157 static void ipv6cp_up (T_PPP_FSM *fsm); /* ãªã³ã¯æ¥ç¶ã確ç«ããã */ 158 static void ipv6cp_down (T_PPP_FSM *fsm); /* ãªã³ã¯æ¥ç¶ã解æ¾ããã */ 159 static void ipv6cp_finished(T_PPP_FSM *fsm); /* ä¸ä½å±¤ãçµäºããã */ 160 161 /* 162 * å¤æ° 163 */ 164 165 static T_IFNET ipv6cp_local_def_cfg = { /* èªæ§ææ 166 å ±ã®è¦å®å¤ */ 167 NULL, /* ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ã®ã½ããã¦ã§ã¢æ 168 å ± */ 169 {}, /* IPv6 ã¢ãã¬ã¹æ 170 å ± */ 171 {}, /* ãã«ããã£ã¹ã IPv6 ã¢ãã¬ã¹ */ 172 0, /* ãã©ã° */ 140 /* 相手の構成情報を確認する。 */ 141 static void ipv6cp_up (T_PPP_FSM *fsm); /* リンク接続を確立する。 */ 142 static void ipv6cp_down (T_PPP_FSM *fsm); /* リンク接続を解放する。 */ 143 static void ipv6cp_finished(T_PPP_FSM *fsm); /* 下位層を終了する。 */ 144 145 /* 146 * 変数 147 */ 148 149 static T_IFNET ipv6cp_local_def_cfg = { /* 自構成情報の規定値 */ 150 NULL, /* ネットワークインタフェースのソフトウェア情報 */ 151 {}, /* IPv6 アドレス情報 */ 152 {}, /* マルチキャスト IPv6 アドレス */ 153 0, /* フラグ */ 173 154 }; 174 155 175 static T_IFNET ipv6cp_remote_def_cfg = { /* ç¸æã®æ§ææ 176 å ±ã®è¦å®å¤ */ 177 NULL, /* ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹ã®ã½ããã¦ã§ã¢æ 178 å ± */ 179 {}, /* IPv6 ã¢ãã¬ã¹æ 180 å ± */ 181 {}, /* ãã«ããã£ã¹ã IPv6 ã¢ãã¬ã¹ */ 182 0, /* ãã©ã° */ 156 static T_IFNET ipv6cp_remote_def_cfg = { /* 相手の構成情報の規定値 */ 157 NULL, /* ネットワークインタフェースのソフトウェア情報 */ 158 {}, /* IPv6 アドレス情報 */ 159 {}, /* マルチキャスト IPv6 アドレス */ 160 0, /* フラグ */ 183 161 }; 184 162 185 static T_IFNET ipv6cp_local_neg_cfg; /* ãã´ä¸ã®èªæ§ææ 186 å ± */ 187 188 static T_IFNET ipv6cp_remote_neg_cfg; /* ãã´ä¸ã®ç¸æã®æ§ææ 189 å ± */ 190 191 /* 192 * å 193 ¨åå¤æ° 163 static T_IFNET ipv6cp_local_neg_cfg; /* ネゴ中の自構成情報 */ 164 165 static T_IFNET ipv6cp_remote_neg_cfg; /* ネゴ中の相手の構成情報 */ 166 167 /* 168 * 全域変数 194 169 */ 195 170 196 171 T_PPP_FSM_CALLBACKS ipv6cp_callbacks = { 197 ipv6cp_resetci, /* èªæ§ææ 198 å ±ããªã»ããããã */ 199 ipv6cp_cilen, /* æ§ææ 200 å ±ã®é·ããè¿ãã */ 201 ipv6cp_addci, /* èªæ§ææ 202 å ±ã追å ããã */ 203 ipv6cp_ackci, /* ACK ãåä¿¡ããã¨ãã®å¦ç */ 204 ipv6cp_nakci, /* NAK ãåä¿¡ããã¨ãã®å¦ç */ 205 ipv6cp_rejci, /* REJ ãåä¿¡ããã¨ãã®å¦ç */ 206 ipv6cp_reqci, /* ç¸æã®æ§ææ 207 å ±ã確èªããã */ 208 ipv6cp_up, /* ãªã³ã¯æ¥ç¶ã確ç«ããã */ 209 ipv6cp_down, /* ãªã³ã¯æ¥ç¶ã解æ¾ããã */ 210 NULL, /* ä¸ä½å±¤ãéå§ããã */ 211 ipv6cp_finished, /* ä¸ä½å±¤ãçµäºããã */ 212 NULL, /* åéããã */ 213 NULL, /* ä¸æ㪠CP ãåä¿¡ããã¨ãã®å¦ç */ 172 ipv6cp_resetci, /* 自構成情報をリセットする。 */ 173 ipv6cp_cilen, /* 構成情報の長さを返す。 */ 174 ipv6cp_addci, /* 自構成情報を追加する。 */ 175 ipv6cp_ackci, /* ACK を受信したときの処理 */ 176 ipv6cp_nakci, /* NAK を受信したときの処理 */ 177 ipv6cp_rejci, /* REJ を受信したときの処理 */ 178 ipv6cp_reqci, /* 相手の構成情報を確認する。 */ 179 ipv6cp_up, /* リンク接続を確立する。 */ 180 ipv6cp_down, /* リンク接続を解放する。 */ 181 NULL, /* 下位層を開始する。 */ 182 ipv6cp_finished, /* 下位層を終了する。 */ 183 NULL, /* 再送する。 */ 184 NULL, /* 不明な CP を受信したときの処理 */ 214 185 }; 215 186 216 187 T_PPP_FSM ipv6cp_fsm = { 217 &ipv6cp_callbacks, /* ã³ã¼ã«ããã¯é¢æ°*/218 PPP_IPV6CP, /* ãããã³ã«*/188 &ipv6cp_callbacks, /* コールバック関数 */ 189 PPP_IPV6CP, /* プロトコル */ 219 190 }; 220 191 221 192 T_PPP_PROTENT ipv6cp_protent = { 222 193 PPP_IPV6CP, 223 ipv6cp_init, /* åæå */ 224 ipv6cp_input, /* å 225 ¥å */ 226 ipv6cp_protrej, /* Proto-REJ åä¿¡å¦ç */ 227 ipv6cp_lowerup, /* ä¸ä½å±¤ãèµ·åãã */ 228 ipv6cp_lowerdown, /* ä¸ä½å±¤ãåæ¢ãã */ 229 ipv6cp_open, /* ãªã¼ãã³ãã */ 230 ipv6cp_close, /* ã¯ãã¼ãºãã */ 231 ip6_input, /* ãã¼ã¿å 232 ¥åãIPv6 å 233 ¥å */ 194 ipv6cp_init, /* 初期化 */ 195 ipv6cp_input, /* 入力 */ 196 ipv6cp_protrej, /* Proto-REJ 受信処理 */ 197 ipv6cp_lowerup, /* 下位層を起動する */ 198 ipv6cp_lowerdown, /* 下位層を停止する */ 199 ipv6cp_open, /* オープンする */ 200 ipv6cp_close, /* クローズする */ 201 ip6_input, /* データ入力、IPv6 入力 */ 234 202 }; 235 203 236 T_IFNET ipv6cp_local_ack_cfg; /* ç¸æã«è¨±å¯ãããã®èªæ§ææ 237 å ± */ 238 T_IFNET ipv6cp_remote_ack_cfg; /* ç¸æã«è¨±å¯ããæ§ææ 239 å ± */ 240 241 /* 242 * ppp_get_ifnet -- ãããã¯ã¼ã¯ã¤ã³ã¿ãã§ã¼ã¹æ§é ä½ãè¿ãã 204 T_IFNET ipv6cp_local_ack_cfg; /* 相手に許可されたの自構成情報 */ 205 T_IFNET ipv6cp_remote_ack_cfg; /* 相手に許可した構成情報 */ 206 207 /* 208 * ppp_get_ifnet -- ネットワークインタフェース構造体を返す。 243 209 */ 244 210 … … 250 216 251 217 /* 252 * wait_ipv6cp -- IP æ¥ç¶å®äºã¾ã§å¾ 253 ã¤ã 254 * 255 * æ»ãå¤: æ¥ç¶ã«å¤±æããã E_OBJ ãè¿ãã 218 * wait_ipv6cp -- IP 接続完了まで待つ。 219 * 220 * 戻り値: 接続に失敗したら E_OBJ を返す。 256 221 */ 257 222 … … 267 232 #ifdef PPP_CFG_MODEM 268 233 269 /* ã¢ãã ã®æ¥ç¶å®äºã¾ã§å¾ 270 ã¤ã*/ 234 /* モデムの接続完了まで待つ。*/ 271 235 if ((error = wait_modem()) != E_OK) 272 236 return error; … … 275 239 276 240 /* 277 * ååãªã¼ãã³ããç¸æããã®æ¥ç¶å¾ 278 ã¡ãªã LCP ãä¸åº¦ã¯ãã¼ãºãã 279 * è½åãªã¼ãã³ç¶æ 280 ã§ãåãªã¼ãã³ããã 241 * 受動オープンし、相手からの接続待ちなら LCP を一度クローズし、 242 * 能動オープン状態で、再オープンする。 281 243 */ 282 244 lcp_close(); … … 288 250 289 251 if (ipv6cp_fsm.state != PPP_FSM_OPENED) { 290 /* IP æ¥ç¶å®äºã¾ã§å¾ 291 ã¤ã*/ 252 /* IP 接続完了まで待つ。*/ 292 253 wai_sem(SEM_IPV6CP_READY); 293 254 if (ipv6cp_fsm.state != PPP_FSM_OPENED) … … 299 260 300 261 /* 301 * ipv6cp_init -- IPV6CP ã¢ã¸ã¥ã¼ã«ã®åæå262 * ipv6cp_init -- IPV6CP モジュールの初期化 302 263 */ 303 264 … … 309 270 310 271 /* 311 * ipv6cp_input -- IPV6CP å 312 ¥å 272 * ipv6cp_input -- IPV6CP 入力 313 273 */ 314 274 … … 322 282 323 283 /* 324 * ipv6cp_resetci -- IPV6CPã®æ§ææ 325 å ±ããªã»ããããã 284 * ipv6cp_resetci -- IPV6CPの構成情報をリセットする。 326 285 */ 327 286 … … 329 288 ipv6cp_resetci (T_PPP_FSM *fsm) 330 289 { 331 /* èªæ§ææ 332 å ±ã®åæè¨å® */ 290 /* 自構成情報の初期設定 */ 333 291 ipv6cp_local_neg_cfg = ipv6cp_local_def_cfg; 334 292 memset((void*)&ipv6cp_local_ack_cfg, 0, sizeof(T_IFNET)); 335 293 336 /* ç¸æã®æ§ææ 337 å ±ã®åæè¨å® */ 294 /* 相手の構成情報の初期設定 */ 338 295 ipv6cp_remote_neg_cfg = ipv6cp_remote_def_cfg; 339 296 memset((void*)&ipv6cp_remote_ack_cfg, 0, sizeof(T_IFNET)); … … 341 298 342 299 /* 343 * ipv6cp_cilen -- æ§ææ 344 å ±ã®é·ããè¿ãã 300 * ipv6cp_cilen -- 構成情報の長さを返す。 345 301 */ 346 302 … … 350 306 int_t cilen = 0; 351 307 352 cilen += sizeof(T_PPP_CI_HDR) + sizeof(uint32_t); /* IPv6 ã¢ãã¬ã¹*/308 cilen += sizeof(T_PPP_CI_HDR) + sizeof(uint32_t); /* IPv6 アドレス */ 353 309 354 310 return cilen; … … 356 312 357 313 /* 358 * ipv6cp_addci -- IPV6CPã®æ§ææ 359 å ±ã追å ããã 314 * ipv6cp_addci -- IPV6CPの構成情報を追加する。 360 315 */ 361 316 … … 367 322 buf = output->buf + sizeof(T_PPP_HDR) + sizeof(T_PPP_CP_HDR); 368 323 369 /* IPv6 ã¢ãã¬ã¹ãªãã·ã§ã³ã追å ããã*/324 /* IPv6 アドレスオプションを追加する。 */ 370 325 *buf ++ = IPV6CP_CIT_ADDR; 371 326 *buf ++ = sizeof(T_PPP_CI_HDR) + sizeof(uint32_t); … … 375 330 376 331 /* 377 * ipv6cp_ackci -- ACK ãåä¿¡ããã¨ãã®å¦ç378 * 379 * æ»ãå¤: true ACK ã¯æ£å¸¸380 * false ACK ã¯ç°å¸¸332 * ipv6cp_ackci -- ACK を受信したときの処理 333 * 334 * 戻り値: true ACK は正常 335 * false ACK は異常 381 336 */ 382 337 … … 391 346 392 347 /* 393 * æ§ææ 394 å ±ã¯éä¿¡ããé ã«å®å 395 ¨ã«ä¸è´ããªããã°ãªããªãã 396 * å¾ã£ã¦ãipv6cp_addci ã§ä½æããé ã«è§£æããã 348 * 構成情報は送信した順に完全に一致しなければならない。 349 * 従って、ipv6cp_addci で作成した順に解析する。 397 350 */ 398 351 399 /* ADDR ãªãã·ã§ã³ã解æããã*/352 /* ADDR オプションを解析する。 */ 400 353 if (len < sizeof(T_PPP_CI_HDR) + sizeof(uint32_t) || 401 354 *buf ++ != IPV6CP_CIT_ADDR || … … 410 363 411 364 /* 412 * ipv6cp_nakci -- NAK ãåä¿¡ããã¨ãã®å¦ç413 * 414 * æ»ãå¤: 1 NAK ã¯æ£å¸¸415 * 0 NAK ã¯ç°å¸¸365 * ipv6cp_nakci -- NAK を受信したときの処理 366 * 367 * 戻り値: 1 NAK は正常 368 * 0 NAK は異常 416 369 */ 417 370 … … 429 382 new_cfg = ipv6cp_local_neg_cfg; 430 383 431 /* ADDR ãªãã·ã§ã³ã解æããã*/384 /* ADDR オプションを解析する。 */ 432 385 if (len >= sizeof(T_PPP_CI_HDR) + sizeof(addr) && 433 386 * buf == IPV6CP_CIT_ADDR && … … 438 391 } 439 392 440 /* å¾ã¯ç¡è¦ããã*/393 /* 後は無視する。*/ 441 394 while (len > sizeof(T_PPP_CI_HDR)) { 442 395 cilen = *(buf + 1); … … 447 400 } 448 401 449 /* é·ãã 0 ã§ãªããã°ã¨ã©ã¼*/402 /* 長さが 0 でなければエラー */ 450 403 if (len != 0) 451 404 return 0; 452 405 453 /* æ°ãããªãã·ã§ã³ãè¨å®ããã*/406 /* 新しいオプションを設定する。*/ 454 407 if (fsm->state != PPP_FSM_OPENED) 455 408 ipv6cp_local_neg_cfg = new_cfg; … … 459 412 460 413 /* 461 * ipv6cp_rejci -- REJ ãåä¿¡ããã¨ãã®å¦ç462 * 463 * æ»ãå¤: 1 REJ ã¯æ£å¸¸464 * 0 REJ ã¯ç°å¸¸414 * ipv6cp_rejci -- REJ を受信したときの処理 415 * 416 * 戻り値: 1 REJ は正常 417 * 0 REJ は異常 465 418 */ 466 419 … … 477 430 new_cfg = ipv6cp_local_neg_cfg; 478 431 479 /* ADDR ãªãã·ã§ã³ã解æããã*/432 /* ADDR オプションを解析する。 */ 480 433 if (len >= sizeof(T_PPP_CI_HDR) + sizeof(new_cfg.in6_ifaddrs[0].addr) && 481 434 * buf == IPV6CP_CIT_ADDR && … … 487 440 } 488 441 489 /* é·ãã 0 ã§ãªããã°ã¨ã©ã¼*/442 /* 長さが 0 でなければエラー */ 490 443 if (len != 0) 491 444 return 0; 492 445 493 /* æ°ãããªãã·ã§ã³ãè¨å®ããã*/446 /* 新しいオプションを設定する。*/ 494 447 if (fsm->state != PPP_FSM_OPENED) 495 448 ipv6cp_local_neg_cfg = new_cfg; … … 499 452 500 453 /* 501 * ipv6cp_reqci -- ç¸æã®æ§ææ 502 å ±ã解æããã 454 * ipv6cp_reqci -- 相手の構成情報を解析する。 503 455 */ 504 456 … … 511 463 512 464 rp = ap = input->buf + sizeof(T_PPP_HDR) + sizeof(T_PPP_CP_HDR); 513 /* rp: REJ ãap: ACK ãã CI ã®ãã¤ã³ã¿*/514 /* æå¦ããå ´åã¯ãå¼æ° buf ã«ä¸æ¸ãããã*/465 /* rp: REJ、ap: ACK する CI のポインタ */ 466 /* 拒否する場合は、引数 buf に上書きする。 */ 515 467 len = input->len - (sizeof(T_PPP_HDR) + sizeof(T_PPP_CP_HDR)); 516 468 np = output->buf + sizeof(T_PPP_HDR) + sizeof(T_PPP_CP_HDR); 517 final = PPP_CONFACK; /* æçµçã«éä¿¡ããã³ã¼ã*/469 final = PPP_CONFACK; /* 最終的に送信するコード */ 518 470 while (len > 0) { 519 471 code = PPP_CONFACK; 520 cp = ap; /* cp: ç¾å¨å¦çä¸ã®CI */472 cp = ap; /* cp: 現在処理中の CI */ 521 473 522 474 if (len < sizeof(T_PPP_CI_HDR)) { 523 475 524 /* æ®ãã CI ãããããçã*/476 /* 残りが CI ヘッダより短い */ 525 477 syslog(LOG_NOTICE, "[PPP/IPV6CP] bad CI len: %d.", len); 526 cilen = len; /* ãã¼ã¿é·ãç°å¸¸ã®å ´åã®å¦ç½®*/527 len = 0; /* ã«ã¼ãããæããã*/478 cilen = len; /* データ長が異常の場合の処置 */ 479 len = 0; /* ループから抜ける。 */ 528 480 code = PPP_CONFREJ; 529 481 goto endswitch; 530 482 } 531 483 532 type = *ap ++; /* CI ã®å*/533 cilen = *ap ++; /* CI ã®é·ã*/484 type = *ap ++; /* CI の型 */ 485 cilen = *ap ++; /* CI の長さ */ 534 486 if (len < cilen) { 535 487 536 /* æ®ãã CI é·ããçã*/488 /* 残りが CI 長より短い */ 537 489 syslog(LOG_NOTICE, "[PPP/IPV6CP] bad CI len: %d.", cilen); 538 cilen = len; /* ãã¼ã¿é·ãç°å¸¸ã®å ´åã®å¦ç½®*/539 len = 0; /* ã«ã¼ãããæããã*/490 cilen = len; /* データ長が異常の場合の処置 */ 491 len = 0; /* ループから抜ける。 */ 540 492 code = PPP_CONFREJ; 541 493 goto endswitch; … … 543 495 len -= sizeof(T_PPP_CI_HDR); 544 496 545 /* CI ã®åã«ããåå²ããã*/497 /* CI の型により分岐する。*/ 546 498 switch (type) { 547 499 548 case IPV6CP_CIT_ADDR: /* IPv6 ã¢ãã¬ã¹*/549 550 /* CI é·ããããã + 4 ãªã¯ãããã§ãªããã°ã¨ã©ã¼*/500 case IPV6CP_CIT_ADDR: /* IPv6 アドレス */ 501 502 /* CI 長が、ヘッダ + 4 オクテットでなければエラー */ 551 503 if (cilen != sizeof(T_PPP_CI_HDR) + sizeof(addr)) 552 504 code = PPP_CONFREJ; … … 564 516 code = PPP_CONFNAK; 565 517 } 566 #if 1 /* è¦ç¢ºèª*/518 #if 1 /* 要確認 */ 567 519 else if (IN6_IS_ADDR_UNSPECIFIED(&addr) && 568 520 IN6_IS_ADDR_UNSPECIFIED(&ipv6cp_remote_neg_cfg.in6_ifaddrs[0])) … … 585 537 586 538 if (code == PPP_CONFNAK) { 587 /* CI ã®åã Magic Number ã®å ´åãé¤ãã¦ãNAK ã®åæ°ã */ 588 /* æå¤§å¤ MAX_PPP_FAILURES ãè¶ 589 ãããæå¦ããã */ 539 /* CI の型が Magic Number の場合を除いて、NAK の回数が */ 540 /* 最大値 MAX_PPP_FAILURES を超えたら拒否する。 */ 590 541 if (fsm->failures >= MAX_PPP_FAILURES) 591 542 code = PPP_CONFREJ; … … 594 545 } 595 546 596 /* ãã® CI ãæå¦ãã*/547 /* この CI を拒否する */ 597 548 if (code == PPP_CONFREJ) { 598 if (rp < cp) /* åã«è©°ããã*/549 if (rp < cp) /* 前に詰める。*/ 599 550 memcpy(rp, cp, cilen); 600 551 rp += cilen; … … 606 557 } 607 558 608 /* æçµçãªé·ãã調æ´ããã*/559 /* 最終的な長さを調整する。*/ 609 560 switch (final) { 610 561 case PPP_CONFNAK: … … 624 575 625 576 /* 626 * ipv6cp_up -- ãªã³ã¯æ¥ç¶ã確ç«ããã577 * ipv6cp_up -- リンク接続を確立する。 627 578 */ 628 579 … … 630 581 ipv6cp_up (T_PPP_FSM *fsm) 631 582 { 632 /* èªæ§ææ 633 å ±ã®åæè¨å® */ 583 /* 自構成情報の初期設定 */ 634 584 ipv6cp_local_ack_cfg = ipv6cp_local_neg_cfg; 635 585 … … 642 592 643 593 /* 644 * ipv6cp_down -- ãªã³ã¯æ¥ç¶ã解æ¾ããã594 * ipv6cp_down -- リンク接続を解放する。 645 595 */ 646 596 … … 653 603 654 604 /* 655 * ipv6cp_finished -- ä¸ä½å±¤ãçµäºããã605 * ipv6cp_finished -- 下位層を終了する。 656 606 */ 657 607 … … 662 612 663 613 /* 664 * ipv6cp_protrej -- Proto-REJ ãåä¿¡ããã¨ãã®å¦ç614 * ipv6cp_protrej -- Proto-REJ を受信したときの処理 665 615 */ 666 616 … … 672 622 673 623 /* 674 * ipv6cp_lowerup -- IPV6CP ä¸ä½å±¤ãèµ·åããã624 * ipv6cp_lowerup -- IPV6CP 下位層を起動する。 675 625 */ 676 626 … … 682 632 683 633 /* 684 * ipv6cp_lowerdown -- IPV6CP ä¸ä½å±¤ãåæ¢ããã634 * ipv6cp_lowerdown -- IPV6CP 下位層を停止する。 685 635 */ 686 636 … … 692 642 693 643 /* 694 * ipv6cp_open -- IPV6CP ã®ãªã¼ãã³644 * ipv6cp_open -- IPV6CP のオープン 695 645 */ 696 646 … … 702 652 703 653 /* 704 * ipv6cp_close -- IPV6CP ã®ã¯ãã¼ãº654 * ipv6cp_close -- IPV6CP のクローズ 705 655 */ 706 656
Note:
See TracChangeset
for help on using the changeset viewer.