Ignore:
Timestamp:
May 22, 2019, 10:03:37 PM (5 years ago)
Author:
coas-nagasima
Message:

ビルドが通るよう更新

File:
1 edited

Legend:

Unmodified
Added
Removed
  • azure_iot_hub/trunk/asp3_dcre/tinet/netinet6/nd6_nbr.c

    • Property svn:keywords deleted
    • Property svn:mime-type changed from text/x-csrc to text/x-csrc;charset=UTF-8
    r388 r389  
    55 *                   Tomakomai National College of Technology, JAPAN
    66 *
    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プロジェクトを免責すること.
    3625 *
    37  *  本ソフトウェアは,無保証で提供されているものである.上記著作権è€
    38 ãŠ
    39  *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
    40  *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
    41  *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
     26 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     27 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
     28 *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
     29 *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
    4230 *
    4331 *  @(#) $Id$
     
    124112
    125113/*
    126  *  局所関数
     114 *  局所関数
    127115 */
    128116
     
    134122
    135123/*
    136  *  nd6_dad_duplicated -- 重複アドレスを検出した時の処理
     124 *  nd6_dad_duplicated -- 重複アドレスを検出した時の処理
    137125 */
    138126
     
    147135                ifa->flags |=  IN6_IFF_DUPLICATED;
    148136
    149                 /* タイマーを停止する。*/
     137                /* タイマーを停止する。*/
    150138                untimeout((callout_func)nd6_dad_timer, ifa);
    151139
    152140                /*
    153                  *  もし IPv6 アドレスが、ユニークに割り当てらた
    154                  * (イーサネット用の EUI-64)ハードウェアアドレスをベースとした
    155                  *  インタフェース ID で生成されたのであれば、
    156                  *  このインタフェースでの IPv6 の動作は無効にすべきである
    157                  * (RFC2462bis-03 セクション 5.4.5)。
     141                 *  もし IPv6 アドレスが、ユニークに割り当てらた
     142                 * (イーサネット用の EUI-64)ハードウェアアドレスをベースとした
     143                 *  インタフェース ID で生成されたのであれば、
     144                 *  このインタフェースでの IPv6 の動作は無効にすべきである
     145                 * (RFC2462bis-03 セクション 5.4.5)。
    158146                 */
    159147                if (IN6_IS_ADDR_LINKLOCAL(&ifa->addr))
     
    163151
    164152/*
    165  *  nd6_dad_ns_output -- 重複アドレス検出 (DAD) 要請を出力する。
     153 *  nd6_dad_ns_output -- 重複アドレス検出 (DAD) 要請を出力する。
    166154 */
    167155
     
    176164
    177165/*
    178  *  nd6_dad_ns_input -- 重複アドレス検出 (DAD) 要請å
    179 ¥åŠ›
     166 *  nd6_dad_ns_input -- 重複アドレス検出 (DAD) 要請入力
    180167 */
    181168
     
    186173
    187174        /*
    188          *  まだ、重複アドレス検出要請を出力していない場合
     175         *  まだ、重複アドレス検出要請を出力していない場合
    189176         */
    190177        if (ifa->ns_ocount == 0)
     
    195182
    196183/*
    197  *  nd6_dad_na_input -- 重複アドレス検出 (DAD) 通知å
    198 ¥åŠ›
     184 *  nd6_dad_na_input -- 重複アドレス検出 (DAD) 通知入力
    199185 */
    200186
     
    208194
    209195/*
    210  *  nd6_dad_timer -- 重複アドレス検出 (DAD) タイマー
     196 *  nd6_dad_timer -- 重複アドレス検出 (DAD) タイマー
    211197 */
    212198
     
    229215                nd6_dad_ns_output(ifp, ifa);
    230216
    231                 /* タイムアウトを近隣探索の送信間隔に設定する。*/
     217                /* タイムアウトを近隣探索の送信間隔に設定する。*/
    232218                timeout((callout_func)nd6_dad_timer, ifa, ND6_RETRANS_TIME * NET_TIMER_HZ / SYSTIM_HZ);
    233219                }
     
    241227
    242228/*
    243  *  nd6_ns_input -- 近隣要請のå
    244 ¥åŠ›å‡¦ç†ã€‚
     229 *  nd6_ns_input -- 近隣要請の入力処理。
    245230 */
    246231
     
    264249
    265250        /*
    266          *  ヘッダのチェック、以下の場合は破棄する。
    267          *    ・ホップリミットが IPV6_MAXHLIM (255) 以外
    268          *    ・ヘッダ長が短い
     251         *  ヘッダのチェック、以下の場合は破棄する。
     252         *    ・ホップリミットが IPV6_MAXHLIM (255) 以外
     253         *    ・ヘッダ長が短い
    269254         */
    270255        if (ip6h->hlim != IPV6_MAXHLIM || input->len - off < NEIGHBOR_SOLICIT_HDR_SIZE)
     
    275260        if (IN6_IS_ADDR_UNSPECIFIED(&ip6h->src)) {
    276261                /*
    277                  *  始点アドレスが無指定なら、重複アドレス検出
    278                  *  あてå
    279 ˆã‚¢ãƒ‰ãƒ¬ã‚¹ã¯ã€è¦è«‹ãƒžãƒ«ãƒã‚­ãƒ£ã‚¹ãƒˆã§ãªã‘ればならない。
     262                 *  始点アドレスが無指定なら、重複アドレス検出
     263                 *  あて先アドレスは、要請マルチキャストでなければならない。
    280264                 */
    281265                if (!IN6_IS_ADDR_NS_MULTICAST(&ip6h->dst))
     
    283267                }
    284268
    285         /* 目的アドレスがマルチキャストならエラー */
     269        /* 目的アドレスがマルチキャストならエラー */
    286270        if (IN6_IS_ADDR_MULTICAST(&nsh->target))
    287271                goto err_ret;
    288272
    289         /* 近隣探索オプションのオフセットを記録する。*/
     273        /* 近隣探索オプションのオフセットを記録する。*/
    290274        if (nd6_options(nd_opt_off, input->buf + (off + NEIGHBOR_SOLICIT_HDR_SIZE),
    291275                                    input->len - (off + NEIGHBOR_SOLICIT_HDR_SIZE)) != E_OK)
    292276                goto err_ret;
    293277
    294         /* 近隣探索オプション (始点リンクアドレス) */
     278        /* 近隣探索オプション (始点リンクアドレス) */
    295279        if (nd_opt_off[ND_OPT_OFF_ARRAY_IX(ND_OPT_SOURCE_LINKADDR)]) {
    296280                opth = (T_ND_OPT_HDR *)((uint8_t *)(input->buf + off + NEIGHBOR_SOLICIT_HDR_SIZE) +
    297281                                        nd_opt_off[ND_OPT_OFF_ARRAY_IX(ND_OPT_SOURCE_LINKADDR)] - 8);
    298                 /* 注意: オプションオフセットé
    299 åˆ—には、オフセット + 8 が設定されている。*/
     282                /* 注意: オプションオフセット配列には、オフセット + 8 が設定されている。*/
    300283                lladdr     = (uint8_t *)(opth + 1);
    301284                lladdr_len = (opth->len << 3);
     
    305288                goto err_ret;
    306289
    307         /* 宛å
    308 ˆã‚¢ãƒ‰ãƒ¬ã‚¹ãŒãƒžãƒ«ãƒã‚­ãƒ£ã‚¹ãƒˆãªã‚‰è¿‘隣通知にデータリンク層のアドレスを付ける。*/
     290        /* 宛先アドレスがマルチキャストなら近隣通知にデータリンク層のアドレスを付ける。*/
    309291        if (IN6_IS_ADDR_MULTICAST(&ip6h->dst))
    310292                tlladdr = true;
     
    313295
    314296        /*
    315          *  目的アドレスが、自分のネットワークインタフェースに
    316          *  割り当てられているアドレスか調べる。
    317          *  なお、代理サービスは実è£
    318 ã—ていない。
     297         *  目的アドレスが、自分のネットワークインタフェースに
     298         *  割り当てられているアドレスか調べる。
     299         *  なお、代理サービスは実装していない。
    319300         */
    320301        ifa = in6_lookup_ifaddr(ifp, &nsh->target);
     
    323304                goto free_ret;
    324305
    325         /* 探索結果アドレスが重複していれば応答しないで終了する。*/
     306        /* 探索結果アドレスが重複していれば応答しないで終了する。*/
    326307        if (ifa->flags & IN6_IFF_DUPLICATED)
    327308                goto err_ret;
    328309
    329310        /*
    330          *  ネットワークインタフェースのアドレス長が一致しなければエラー
     311         *  ネットワークインタフェースのアドレス長が一致しなければエラー
    331312         */
    332313        if (lladdr && lladdr_len != ((sizeof(T_IF_ADDR) + sizeof(T_ND_OPT_HDR) + 7) & ~7))
     
    334315
    335316        /*
    336          *  始点アドレスが自分のアドレスと一致すれば重複している。
     317         *  始点アドレスが自分のアドレスと一致すれば重複している。
    337318         */
    338319        if (IN6_ARE_ADDR_EQUAL(&ifa->addr, &ip6h->src))
    339320                goto free_ret;
    340321
    341         /* 重複検出中に、近隣要請を受信したときの処理 */
     322        /* 重複検出中に、近隣要請を受信したときの処理 */
    342323        if (ifa->flags & IN6_IFF_TENTATIVE) {
    343324                if (IN6_IS_ADDR_UNSPECIFIED(&ip6h->src))
     
    352333
    353334        /*
    354          *  始点アドレスが無指定なら、送信相手は重複アドレス検出中で、
    355          *  直接送信することはできないので、å
    356 ¨ãƒŽãƒ¼ãƒ‰ãƒžãƒ«ãƒã‚­ãƒ£ã‚¹ãƒˆ
    357          *  アドレスに送信する。
     335         *  始点アドレスが無指定なら、送信相手は重複アドレス検出中で、
     336         *  直接送信することはできないので、全ノードマルチキャスト
     337         *  アドレスに送信する。
    358338         */
    359339        if (IN6_IS_ADDR_UNSPECIFIED(&ip6h->src)) {
     
    362342                }
    363343
    364         /* 近隣キャッシュに登録する。*/
     344        /* 近隣キャッシュに登録する。*/
    365345        nd6_cache_lladdr(ifp, &ip6h->src, (T_IF_ADDR *)lladdr, ND_NEIGHBOR_SOLICIT, 0);
    366346
     
    377357
    378358/*
    379  *  nd6_ns_output -- 近隣要請を出力する。
     359 *  nd6_ns_output -- 近隣要請を出力する。
    380360 */
    381361
     
    396376                return;
    397377
    398         /* 近隣要請ペイロード長を計算する。*/
     378        /* 近隣要請ペイロード長を計算する。*/
    399379        if (!dad && IF_SOFTC_TO_IFADDR(ifp->ic))
    400380                len = (NEIGHBOR_SOLICIT_HDR_SIZE + ND_OPT_HDR_SIZE + sizeof(T_IF_ADDR) + 7) >> 3 << 3;
     
    403383
    404384        /*
    405          *  要請マルチキャスト・アドレス宛の近隣探索では、
    406          *  他のリンクからの偽造されたデータグラムを
    407          *  排除するため、ホップリミットに IPV6_MAXHLIM (255) を設定する。
     385         *  要請マルチキャスト・アドレス宛の近隣探索では、
     386         *  他のリンクからの偽造されたデータグラムを
     387         *  排除するため、ホップリミットに IPV6_MAXHLIM (255) を設定する。
    408388         */
    409389        if (IN6_IS_ADDR_UNSPECIFIED(daddr) || IN6_IS_ADDR_MULTICAST(daddr))
    410390                ipflags = IPV6_OUT_SET_HOP_LIMIT(IPV6_OUT_FLG_HOP_LIMIT, IPV6_MAXHLIM);
    411391
    412         /* ネットワークバッファを獲得し、IPv6 ヘッダを設定する。*/
     392        /* ネットワークバッファを獲得し、IPv6 ヘッダを設定する。*/
    413393        if (in6_get_datagram(&output, len, 0, daddr, NULL,
    414394                             IPPROTO_ICMPV6, IPV6_MAXHLIM,
     
    420400        if (IN6_IS_ADDR_UNSPECIFIED(daddr)) {
    421401
    422                 /* 宛å
    423 ˆã‚¢ãƒ‰ãƒ¬ã‚¹ãŒç„¡æŒ‡å®šã®å ´åˆã¯ã€è¦è«‹ãƒžãƒ«ãƒã‚­ãƒ£ã‚¹ãƒˆã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’設定する。*/
     402                /* 宛先アドレスが無指定の場合は、要請マルチキャストアドレスを設定する。*/
    424403                ip6h->dst.s6_addr32[0] = IPV6_ADDR_INT32_MLL;
    425404                ip6h->dst.s6_addr32[2] = IPV6_ADDR_INT32_ONE;
     
    428407                }
    429408
    430         /* 送信å
    431 ƒã‚¢ãƒ‰ãƒ¬ã‚¹ã®è¨­å®š */
     409        /* 送信元アドレスの設定 */
    432410        if (!dad) {
    433411
    434                 /* 重複アドレス検出ではない時の送信å
    435 ƒã‚¢ãƒ‰ãƒ¬ã‚¹æ±ºå®šå‡¦ç†ã€‚*/
     412                /* 重複アドレス検出ではない時の送信元アドレス決定処理。*/
    436413                T_IN6_ADDR *saddr;
    437414
    438415                if (ln && ln->hold) {
    439416                        /*
    440                          * 送信がペンディングされているデータグラムの
    441                          * 送信å
    442 ƒã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’利用する。
     417                         * 送信がペンディングされているデータグラムの
     418                         * 送信元アドレスを利用する。
    443419                         */
    444420                        if (ln->hold->len > IF_IP6_HDR_SIZE)
     
    454430                else {
    455431                        /*
    456                          *  宛å
    457 ˆã‚¢ãƒ‰ãƒ¬ã‚¹ã«ãµã•ã‚ã—い送信å
    458 ƒã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’、
    459                          *  ネットワークインタフェースから探索して利用する。
     432                         *  宛先アドレスにふさわしい送信元アドレスを、
     433                         *  ネットワークインタフェースから探索して利用する。
    460434                         */
    461435                        T_IN6_IFADDR *ifa;
     
    470444        else {
    471445
    472                 /* 重複アドレス検出時の送信å
    473 ƒã‚¢ãƒ‰ãƒ¬ã‚¹ã¯ç„¡æŒ‡å®šã€‚*/
     446                /* 重複アドレス検出時の送信元アドレスは無指定。*/
    474447                memset(&ip6h->src, 0, sizeof(T_IN6_ADDR));
    475448                }
    476449
    477         /* 近隣要請ヘッダを設定する。*/
     450        /* 近隣要請ヘッダを設定する。*/
    478451        nsh = GET_NEIGHBOR_SOLICIT_HDR(output, IF_IP6_NEIGHBOR_SOLICIT_HDR_OFFSET);
    479452        nsh->hdr.type        = ND_NEIGHBOR_SOLICIT;
     
    484457        if (!dad && (mac = IF_SOFTC_TO_IFADDR(ifp->ic)) != NULL) {
    485458
    486                 /* 近隣探索オプションとして、探索目標の MAC アドレスを設定する。*/
     459                /* 近隣探索オプションとして、探索目標の MAC アドレスを設定する。*/
    487460                T_ND_OPT_HDR    *opth;
    488461                uint_t          optlen;
     
    496469                }
    497470
    498         /* チェックサムを計算する。*/
     471        /* チェックサムを計算する。*/
    499472        nsh->hdr.sum = 0;
    500473        nsh->hdr.sum = in6_cksum(output, IPPROTO_ICMPV6, (uint8_t*)nsh - output->buf, len);
    501474
    502         /* 送信する。*/
     475        /* 送信する。*/
    503476        NET_COUNT_ICMP6(net_count_nd6[NC_ICMP6_OUT_OCTETS],
    504477                       output->len - GET_IF_IP6_HDR_SIZE(output));
     
    510483
    511484/*
    512  *  nd6_na_input -- 近隣通知のå
    513 ¥åŠ›å‡¦ç†ã€‚
     485 *  nd6_na_input -- 近隣通知の入力処理。
    514486 */
    515487
     
    534506
    535507        /*
    536          *  ヘッダのチェック、以下の場合は破棄する。
    537          *    ・ホップリミットが IPV6_MAXHLIM (255) 以外
    538          *    ・ヘッダ長が短い
     508         *  ヘッダのチェック、以下の場合は破棄する。
     509         *    ・ホップリミットが IPV6_MAXHLIM (255) 以外
     510         *    ・ヘッダ長が短い
    539511         */
    540512        if (ip6h->hlim != IPV6_MAXHLIM || input->len - off < NEIGHBOR_ADVERT_HDR_SIZE)
     
    543515        nah  = (T_NEIGHBOR_ADVERT_HDR *)(input->buf + off);
    544516
    545         /* 目的アドレスがマルチキャストならエラー */
     517        /* 目的アドレスがマルチキャストならエラー */
    546518        if (IN6_IS_ADDR_MULTICAST(&nah->target))
    547519                goto err_ret;
    548520
    549         /* 近隣要請への応答で、宛å
    550 ˆã‚¢ãƒ‰ãƒ¬ã‚¹ãŒãƒžãƒ«ãƒã‚­ãƒ£ã‚¹ãƒˆãªã‚‰ã‚¨ãƒ©ãƒ¼ */
     521        /* 近隣要請への応答で、宛先アドレスがマルチキャストならエラー */
    551522        if ((nah->nd_na_flags_reserved & ND_NA_FLG_SOLICITED) &&
    552523            IN6_IS_ADDR_MULTICAST(&ip6h->dst))
    553524                goto err_ret;
    554525
    555         /* 近隣探索オプションのオフセットを記録する。*/
     526        /* 近隣探索オプションのオフセットを記録する。*/
    556527        if (nd6_options(nd_opt_off, input->buf + (off + NEIGHBOR_ADVERT_HDR_SIZE),
    557528                                    input->len - (off + NEIGHBOR_ADVERT_HDR_SIZE)) != E_OK)
    558529                goto err_ret;
    559530
    560         /* 近隣探索オプション (目的リンクアドレス) */
     531        /* 近隣探索オプション (目的リンクアドレス) */
    561532        if (nd_opt_off[ND_OPT_OFF_ARRAY_IX(ND_OPT_TARGET_LINKADDR)]) {
    562533                opth = (T_ND_OPT_HDR *)((uint8_t *)(input->buf + off + NEIGHBOR_ADVERT_HDR_SIZE) +
    563534                                        nd_opt_off[ND_OPT_OFF_ARRAY_IX(ND_OPT_TARGET_LINKADDR)] - 8);
    564                 /* 注意: オプションオフセットé
    565 åˆ—には、オフセット + 8 が設定されている。*/
     535                /* 注意: オプションオフセット配列には、オフセット + 8 が設定されている。*/
    566536                lladdr     = (uint8_t *)(opth + 1);
    567537                lladdr_len = (opth->len << 3);
     
    571541
    572542        /*
    573          *  目的アドレスが自分のネットワークインタフェースに割り当てられているアドレスの
    574          *  いずれかに一致したときは、重複していることを意味している。
     543         *  目的アドレスが自分のネットワークインタフェースに割り当てられているアドレスの
     544         *  いずれかに一致したときは、重複していることを意味している。
    575545         */
    576546        if (ifa) {
     
    583553
    584554        /*
    585          *  ネットワークインタフェースのアドレス長が一致しなければエラー
     555         *  ネットワークインタフェースのアドレス長が一致しなければエラー
    586556         */
    587557        if (lladdr && lladdr_len != ((sizeof(T_IF_ADDR) + sizeof(T_ND_OPT_HDR) + 7) & ~7))
    588558                goto err_ret;
    589559
    590         /* 近隣キャッシュを探索する。*/
     560        /* 近隣キャッシュを探索する。*/
    591561        syscall(wai_sem(SEM_ND6_CACHE));
    592562        if ((ln = nd6_lookup(&nah->target, false)) == NULL)
    593563                goto free_ret;
    594564
    595         /* 近隣キャッシュの状æ
    596 ‹ãŒã€ãƒ‡ãƒ¼ã‚¿ãƒªãƒ³ã‚¯å±¤ã®ã‚¢ãƒ‰ãƒ¬ã‚¹æœªè§£æ±ºã®å ´åˆ */
     565        /* 近隣キャッシュの状態が、データリンク層のアドレス未解決の場合 */
    597566        if (ln->state == ND6_LLINFO_INCOMPLETE) {
    598                 /* 通知されたデータリンク層のアドレスの長さが 0 の場合 */
     567                /* 通知されたデータリンク層のアドレスの長さが 0 の場合 */
    599568                if (lladdr == NULL)
    600569                        goto free_ret;
     
    631600
    632601                /*
    633                  *  状æ
    634 ‹é·ç§»è¡¨
     602                 *  状態遷移表
    635603                 *
    636604                 *  nd_na_flags_reserved
    637                  *  OVERRIDE    SOLICTED lladdr llchange 処理 (L: lladdr を登録する)
     605                 *  OVERRIDE    SOLICTED lladdr llchange 処理 (L: lladdr を登録する)
    638606                 *
    639607                 *      F           F       N      -    (2c)
     
    651619                 */
    652620                if ((nah->nd_na_flags_reserved & ND_NA_FLG_OVERRIDE) == 0 && (lladdr != NULL && llchange)) {    /* (1) */
    653                         /* 状æ
    654 ‹ãŒ REACHABLE なら STALE に遷移する。*/
     621                        /* 状態が REACHABLE なら STALE に遷移する。*/
    655622                        if (ln->state == ND6_LLINFO_REACHABLE) {
    656623                                syscall(get_tim(&now));
     
    664631                         lladdr == NULL) {                                                                              /* (2c) */
    665632
    666                         /* データリンク層のアドレスが通知されていれば更新する。*/
     633                        /* データリンク層のアドレスが通知されていれば更新する。*/
    667634                        if (lladdr != NULL)
    668635                                ln->ifaddr = *(T_IF_ADDR *)lladdr;
    669636
    670                         /* 近隣要請への応答なら REACHABLE に遷移する。*/
     637                        /* 近隣要請への応答なら REACHABLE に遷移する。*/
    671638                        if (nah->nd_na_flags_reserved & ND_NA_FLG_SOLICITED) {
    672639                                ln->state = ND6_LLINFO_REACHABLE;
     
    678645                                }
    679646                        /*
    680                          *  データリンク層のアドレスが通知され、
    681                          *  異なるアドレスなら更新する。
     647                         *  データリンク層のアドレスが通知され、
     648                         *  異なるアドレスなら更新する。
    682649                         */
    683650                        else if (lladdr != NULL && llchange) {
     
    688655                        }
    689656
    690                 /* ルータ通知フラグの処理 */
     657                /* ルータ通知フラグの処理 */
    691658                if ((ln->flags        & ND6_LLIF_ROUTER ) != 0 &&
    692659                    (nah->nd_na_flags_reserved & ND_NA_FLG_ROUTER) == 0) {
    693660                        /*
    694                          *  送信相手がルータ通知フラグを無効にした場合。
    695                          *  ディフォルト・ルータリストから対象のルータを削除し、
    696                          *  近隣探索キャッシュを更新する。
     661                         *  送信相手がルータ通知フラグを無効にした場合。
     662                         *  ディフォルト・ルータリストから対象のルータを削除し、
     663                         *  近隣探索キャッシュを更新する。
    697664                         */
    698665                        T_DEF_ROUTER    *dr = NULL;
     
    712679        ln->asked = 0;
    713680
    714         /* アドレス解決å¾
    715 ã¡ã®ãƒ‡ãƒ¼ã‚¿ã‚°ãƒ©ãƒ ãŒã‚れば送信する。*/
     681        /* アドレス解決待ちのデータグラムがあれば送信する。*/
    716682        nd6_output_hold(ifp, ln);
    717683
     
    727693
    728694/*
    729  *  nd6_na_output -- 近隣通知を出力する。
     695 *  nd6_na_output -- 近隣通知を出力する。
    730696 */
    731697
     
    745711
    746712        /*
    747          *  近隣通知ペイロード長を計算する。
    748          *  tlladdr が真ならネットワークインタフェースのアドレスを追加する。
     713         *  近隣通知ペイロード長を計算する。
     714         *  tlladdr が真ならネットワークインタフェースのアドレスを追加する。
    749715         */
    750716        if (tlladdr && IF_SOFTC_TO_IFADDR(ifp->ic))
     
    754720
    755721        /*
    756          *  他のリンクからの偽造されたデータグラムを
    757          *  排除するため、ホップリミットに IPV6_MAXHLIM (255) を設定する。
     722         *  他のリンクからの偽造されたデータグラムを
     723         *  排除するため、ホップリミットに IPV6_MAXHLIM (255) を設定する。
    758724         */
    759725        ipflags = IPV6_OUT_SET_HOP_LIMIT(IPV6_OUT_FLG_HOP_LIMIT, IPV6_MAXHLIM);
    760726
    761         /* ネットワークバッファを獲得し、IPv6 ヘッダを設定する。*/
     727        /* ネットワークバッファを獲得し、IPv6 ヘッダを設定する。*/
    762728        if (in6_get_datagram(&output, len, 0, daddr, NULL,
    763729                             IPPROTO_ICMPV6, IPV6_MAXHLIM,
     
    769735        if (IN6_IS_ADDR_UNSPECIFIED(daddr)) {
    770736                /*
    771                  *  宛å
    772 ˆã‚¢ãƒ‰ãƒ¬ã‚¹ãŒç„¡æŒ‡å®šã®å ´åˆã¯ã€
    773                  *  リンクローカルå
    774 ¨ãƒŽãƒ¼ãƒ‰ãƒ»ãƒžãƒ«ãƒã‚­ãƒ£ã‚¹ãƒˆã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’設定する。
     737                 *  宛先アドレスが無指定の場合は、
     738                 *  リンクローカル全ノード・マルチキャストアドレスを設定する。
    775739                 */
    776740                ip6h->dst.s6_addr32[0] = IPV6_ADDR_INT32_MLL;
     
    784748
    785749        /*
    786          *  宛å
    787 ˆã‚¢ãƒ‰ãƒ¬ã‚¹ã«ãµã•ã‚ã—い送信å
    788 ƒã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’、
    789          *  ネットワークインタフェースから探索して利用する。
     750         *  宛先アドレスにふさわしい送信元アドレスを、
     751         *  ネットワークインタフェースから探索して利用する。
    790752         */
    791753        if ((ifa = in6_ifawithifp(ifp, &ip6h->dst)) == NULL) {
     
    795757        memcpy(&ip6h->src, &ifa->addr, sizeof(T_IN6_ADDR));
    796758
    797         /* 近隣通知ヘッダを設定する。*/
     759        /* 近隣通知ヘッダを設定する。*/
    798760        nah = GET_NEIGHBOR_ADVERT_HDR(output, IF_IP6_NEIGHBOR_ADVERT_HDR_OFFSET);
    799761        nah->hdr.type        = ND_NEIGHBOR_ADVERT;
     
    801763        memcpy(&nah->target, taddr, sizeof(T_IN6_ADDR));
    802764
    803         /* tlladdr が真ならネットワークインタフェースのアドレスを追加する。*/
     765        /* tlladdr が真ならネットワークインタフェースのアドレスを追加する。*/
    804766        if (tlladdr && (mac = IF_SOFTC_TO_IFADDR(ifp->ic)) != NULL) {
    805767
     
    819781        nah->nd_na_flags_reserved = flags;
    820782
    821         /* チェックサムを計算する。*/
     783        /* チェックサムを計算する。*/
    822784        nah->hdr.sum = 0;
    823785        nah->hdr.sum = in6_cksum(output, IPPROTO_ICMPV6, (uint8_t*)nah - output->buf, len);
    824786
    825         /* 送信する。*/
     787        /* 送信する。*/
    826788        NET_COUNT_ICMP6(net_count_nd6[NC_ICMP6_OUT_OCTETS],
    827789                       output->len - GET_IF_IP6_HDR_SIZE(output));
     
    833795
    834796/*
    835  *  nd6_dad_start -- 重複アドレス検出 (DAD) を開始する。
     797 *  nd6_dad_start -- 重複アドレス検出 (DAD) を開始する。
    836798 *
    837  *    第3引数のtick は、インタフェースが起動されてから、重複検出を
    838  *    送信するまでの最小é
    839 å»¶å€¤ã§ã‚る。
     799 *    第3引数のtick は、インタフェースが起動されてから、重複検出を
     800 *    送信するまでの最小遅延値である。
    840801 */
    841802
     
    843804nd6_dad_start (T_IFNET *ifp, T_IN6_IFADDR *ifa, int_t *tick)
    844805{
    845         /* フラグをチェックする。*/
     806        /* フラグをチェックする。*/
    846807        if (!(ifa->flags & IN6_IFF_TENTATIVE))
    847808                return;
     
    860821                return;
    861822
    862         /* 重複アドレス検出カウンタをリセットする。*/
     823        /* 重複アドレス検出カウンタをリセットする。*/
    863824        ifa->ns_icount = ifa->na_icount = ifa->ns_ocount = 0;
    864825
    865826        /*
    866          *  重複アドレス検出要請を送信する。ただし、インタフェースを
    867          *  初期化した直後に、最初に送信する場合は、ランダムなé
    868 å»¶ã‚’行う。
     827         *  重複アドレス検出要請を送信する。ただし、インタフェースを
     828         *  初期化した直後に、最初に送信する場合は、ランダムな遅延を行う。
    869829         */
    870830        if (tick == NULL) {
    871831                nd6_dad_ns_output(ifp, ifa);
    872832
    873                 /* タイムアウトを近隣探索の送信間隔に設定する。*/
     833                /* タイムアウトを近隣探索の送信間隔に設定する。*/
    874834                timeout((callout_func)nd6_dad_timer, ifa, ND6_RETRANS_TIME * NET_TIMER_HZ / SYSTIM_HZ);
    875835                }
     
    877837                int_t ntick;
    878838
    879                 if (*tick == 0) /* 最初の送信 */
     839                if (*tick == 0) /* 最初の送信 */
    880840                        ntick = net_rand() % (ND6_FIRST_DAD_DELAY_TIME * NET_TIMER_HZ / SYSTIM_HZ);
    881841                else
Note: See TracChangeset for help on using the changeset viewer.