Ignore:
Timestamp:
Aug 23, 2017, 9:27:43 AM (7 years ago)
Author:
coas-nagasima
Message:

文字コードを設定

File:
1 edited

Legend:

Unmodified
Added
Removed
  • EcnlProtoTool/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
    r270 r321  
    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$
     
    126114
    127115/*
    128  *  局所関数
     116 *  局所関数
    129117 */
    130118
     
    136124
    137125/*
    138  *  nd6_dad_duplicated -- 重複アドレスを検出した時の処理
     126 *  nd6_dad_duplicated -- 重複アドレスを検出した時の処理
    139127 */
    140128
     
    149137                ifa->flags |=  IN6_IFF_DUPLICATED;
    150138
    151                 /* タイマーを停止する。*/
     139                /* タイマーを停止する。*/
    152140                untimeout((callout_func)nd6_dad_timer, ifa);
    153141
    154142                /*
    155                  *  もし IPv6 アドレスが、ユニークに割り当てらた
    156                  * (イーサネット用の EUI-64)ハードウェアアドレスをベースとした
    157                  *  インタフェース ID で生成されたのであれば、
    158                  *  このインタフェースでの IPv6 の動作は無効にすべきである
    159                  * (RFC2462bis-03 セクション 5.4.5)。
     143                 *  もし IPv6 アドレスが、ユニークに割り当てらた
     144                 * (イーサネット用の EUI-64)ハードウェアアドレスをベースとした
     145                 *  インタフェース ID で生成されたのであれば、
     146                 *  このインタフェースでの IPv6 の動作は無効にすべきである
     147                 * (RFC2462bis-03 セクション 5.4.5)。
    160148                 */
    161149                if (IN6_IS_ADDR_LINKLOCAL(&ifa->addr))
     
    165153
    166154/*
    167  *  nd6_dad_ns_output -- 重複アドレス検出 (DAD) 要請を出力する。
     155 *  nd6_dad_ns_output -- 重複アドレス検出 (DAD) 要請を出力する。
    168156 */
    169157
     
    178166
    179167/*
    180  *  nd6_dad_ns_input -- 重複アドレス検出 (DAD) 要請å
    181 ¥åŠ›
     168 *  nd6_dad_ns_input -- 重複アドレス検出 (DAD) 要請入力
    182169 */
    183170
     
    188175
    189176        /*
    190          *  まだ、重複アドレス検出要請を出力していない場合
     177         *  まだ、重複アドレス検出要請を出力していない場合
    191178         */
    192179        if (ifa->ns_ocount == 0)
     
    197184
    198185/*
    199  *  nd6_dad_na_input -- 重複アドレス検出 (DAD) 通知å
    200 ¥åŠ›
     186 *  nd6_dad_na_input -- 重複アドレス検出 (DAD) 通知入力
    201187 */
    202188
     
    210196
    211197/*
    212  *  nd6_dad_timer -- 重複アドレス検出 (DAD) タイマー
     198 *  nd6_dad_timer -- 重複アドレス検出 (DAD) タイマー
    213199 */
    214200
     
    231217                nd6_dad_ns_output(ifp, ifa);
    232218
    233                 /* タイムアウトを近隣探索の送信間隔に設定する。*/
     219                /* タイムアウトを近隣探索の送信間隔に設定する。*/
    234220                timeout((callout_func)nd6_dad_timer, ifa, ND6_RETRANS_TIME * NET_TIMER_HZ / SYSTIM_HZ);
    235221                }
     
    243229
    244230/*
    245  *  nd6_ns_input -- 近隣要請のå
    246 ¥åŠ›å‡¦ç†ã€‚
     231 *  nd6_ns_input -- 近隣要請の入力処理。
    247232 */
    248233
     
    266251
    267252        /*
    268          *  ヘッダのチェック、以下の場合は破棄する。
    269          *    ・ホップリミットが IPV6_MAXHLIM (255) 以外
    270          *    ・ヘッダ長が短い
     253         *  ヘッダのチェック、以下の場合は破棄する。
     254         *    ・ホップリミットが IPV6_MAXHLIM (255) 以外
     255         *    ・ヘッダ長が短い
    271256         */
    272257        if (ip6h->hlim != IPV6_MAXHLIM || input->len - off < NEIGHBOR_SOLICIT_HDR_SIZE)
     
    277262        if (IN6_IS_ADDR_UNSPECIFIED(&ip6h->src)) {
    278263                /*
    279                  *  始点アドレスが無指定なら、重複アドレス検出
    280                  *  あてå
    281 ˆã‚¢ãƒ‰ãƒ¬ã‚¹ã¯ã€è¦è«‹ãƒžãƒ«ãƒã‚­ãƒ£ã‚¹ãƒˆã§ãªã‘ればならない。
     264                 *  始点アドレスが無指定なら、重複アドレス検出
     265                 *  あて先アドレスは、要請マルチキャストでなければならない。
    282266                 */
    283267                if (!IN6_IS_ADDR_NS_MULTICAST(&ip6h->dst))
     
    285269                }
    286270
    287         /* 目的アドレスがマルチキャストならエラー */
     271        /* 目的アドレスがマルチキャストならエラー */
    288272        if (IN6_IS_ADDR_MULTICAST(&nsh->target))
    289273                goto err_ret;
    290274
    291         /* 近隣探索オプションのオフセットを記録する。*/
     275        /* 近隣探索オプションのオフセットを記録する。*/
    292276        if (nd6_options(nd_opt_off, input->buf + (off + NEIGHBOR_SOLICIT_HDR_SIZE),
    293277                                    input->len - (off + NEIGHBOR_SOLICIT_HDR_SIZE)) != E_OK)
    294278                goto err_ret;
    295279
    296         /* 近隣探索オプション (始点リンクアドレス) */
     280        /* 近隣探索オプション (始点リンクアドレス) */
    297281        if (nd_opt_off[ND_OPT_OFF_ARRAY_IX(ND_OPT_SOURCE_LINKADDR)]) {
    298282                opth = (T_ND_OPT_HDR *)((uint8_t *)(input->buf + off + NEIGHBOR_SOLICIT_HDR_SIZE) +
    299283                                        nd_opt_off[ND_OPT_OFF_ARRAY_IX(ND_OPT_SOURCE_LINKADDR)] - 8);
    300                 /* 注意: オプションオフセットé
    301 åˆ—には、オフセット + 8 が設定されている。*/
     284                /* 注意: オプションオフセット配列には、オフセット + 8 が設定されている。*/
    302285                lladdr     = (uint8_t *)(opth + 1);
    303286                lladdr_len = (opth->len << 3);
     
    307290                goto err_ret;
    308291
    309         /* 宛å
    310 ˆã‚¢ãƒ‰ãƒ¬ã‚¹ãŒãƒžãƒ«ãƒã‚­ãƒ£ã‚¹ãƒˆãªã‚‰è¿‘隣通知にデータリンク層のアドレスを付ける。*/
     292        /* 宛先アドレスがマルチキャストなら近隣通知にデータリンク層のアドレスを付ける。*/
    311293        if (IN6_IS_ADDR_MULTICAST(&ip6h->dst))
    312294                tlladdr = true;
     
    315297
    316298        /*
    317          *  目的アドレスが、自分のネットワークインタフェースに
    318          *  割り当てられているアドレスか調べる。
    319          *  なお、代理サービスは実è£
    320 ã—ていない。
     299         *  目的アドレスが、自分のネットワークインタフェースに
     300         *  割り当てられているアドレスか調べる。
     301         *  なお、代理サービスは実装していない。
    321302         */
    322303        ifa = in6_lookup_ifaddr(ifp, &nsh->target);
     
    325306                goto free_ret;
    326307
    327         /* 探索結果アドレスが重複していれば応答しないで終了する。*/
     308        /* 探索結果アドレスが重複していれば応答しないで終了する。*/
    328309        if (ifa->flags & IN6_IFF_DUPLICATED)
    329310                goto err_ret;
    330311
    331312        /*
    332          *  ネットワークインタフェースのアドレス長が一致しなければエラー
     313         *  ネットワークインタフェースのアドレス長が一致しなければエラー
    333314         */
    334315        if (lladdr && lladdr_len != ((sizeof(T_IF_ADDR) + sizeof(T_ND_OPT_HDR) + 7) & ~7))
     
    336317
    337318        /*
    338          *  始点アドレスが自分のアドレスと一致すれば重複している。
     319         *  始点アドレスが自分のアドレスと一致すれば重複している。
    339320         */
    340321        if (IN6_ARE_ADDR_EQUAL(&ifa->addr, &ip6h->src))
    341322                goto free_ret;
    342323
    343         /* 重複検出中に、近隣要請を受信したときの処理 */
     324        /* 重複検出中に、近隣要請を受信したときの処理 */
    344325        if (ifa->flags & IN6_IFF_TENTATIVE) {
    345326                if (IN6_IS_ADDR_UNSPECIFIED(&ip6h->src))
     
    354335
    355336        /*
    356          *  始点アドレスが無指定なら、送信相手は重複アドレス検出中で、
    357          *  直接送信することはできないので、å
    358 ¨ãƒŽãƒ¼ãƒ‰ãƒžãƒ«ãƒã‚­ãƒ£ã‚¹ãƒˆ
    359          *  アドレスに送信する。
     337         *  始点アドレスが無指定なら、送信相手は重複アドレス検出中で、
     338         *  直接送信することはできないので、全ノードマルチキャスト
     339         *  アドレスに送信する。
    360340         */
    361341        if (IN6_IS_ADDR_UNSPECIFIED(&ip6h->src)) {
     
    364344                }
    365345
    366         /* 近隣キャッシュに登録する。*/
     346        /* 近隣キャッシュに登録する。*/
    367347        nd6_cache_lladdr(ifp, &ip6h->src, (T_IF_ADDR *)lladdr, ND_NEIGHBOR_SOLICIT, 0);
    368348
     
    379359
    380360/*
    381  *  nd6_ns_output -- 近隣要請を出力する。
     361 *  nd6_ns_output -- 近隣要請を出力する。
    382362 */
    383363
     
    398378                return;
    399379
    400         /* 近隣要請ペイロード長を計算する。*/
     380        /* 近隣要請ペイロード長を計算する。*/
    401381        if (!dad && IF_SOFTC_TO_IFADDR(ifp->ic))
    402382                len = (NEIGHBOR_SOLICIT_HDR_SIZE + ND_OPT_HDR_SIZE + sizeof(T_IF_ADDR) + 7) >> 3 << 3;
     
    405385
    406386        /*
    407          *  要請マルチキャスト・アドレス宛の近隣探索では、
    408          *  他のリンクからの偽造されたデータグラムを
    409          *  排除するため、ホップリミットに IPV6_MAXHLIM (255) を設定する。
     387         *  要請マルチキャスト・アドレス宛の近隣探索では、
     388         *  他のリンクからの偽造されたデータグラムを
     389         *  排除するため、ホップリミットに IPV6_MAXHLIM (255) を設定する。
    410390         */
    411391        if (IN6_IS_ADDR_UNSPECIFIED(daddr) || IN6_IS_ADDR_MULTICAST(daddr))
    412392                ipflags = IPV6_OUT_SET_HOP_LIMIT(IPV6_OUT_FLG_HOP_LIMIT, IPV6_MAXHLIM);
    413393
    414         /* ネットワークバッファを獲得し、IPv6 ヘッダを設定する。*/
     394        /* ネットワークバッファを獲得し、IPv6 ヘッダを設定する。*/
    415395        if (in6_get_datagram(&output, len, 0, daddr, NULL,
    416396                             IPPROTO_ICMPV6, IPV6_MAXHLIM,
     
    422402        if (IN6_IS_ADDR_UNSPECIFIED(daddr)) {
    423403
    424                 /* 宛å
    425 ˆã‚¢ãƒ‰ãƒ¬ã‚¹ãŒç„¡æŒ‡å®šã®å ´åˆã¯ã€è¦è«‹ãƒžãƒ«ãƒã‚­ãƒ£ã‚¹ãƒˆã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’設定する。*/
     404                /* 宛先アドレスが無指定の場合は、要請マルチキャストアドレスを設定する。*/
    426405                ip6h->dst.s6_addr32[0] = IPV6_ADDR_INT32_MLL;
    427406                ip6h->dst.s6_addr32[2] = IPV6_ADDR_INT32_ONE;
     
    430409                }
    431410
    432         /* 送信å
    433 ƒã‚¢ãƒ‰ãƒ¬ã‚¹ã®è¨­å®š */
     411        /* 送信元アドレスの設定 */
    434412        if (!dad) {
    435413
    436                 /* 重複アドレス検出ではない時の送信å
    437 ƒã‚¢ãƒ‰ãƒ¬ã‚¹æ±ºå®šå‡¦ç†ã€‚*/
     414                /* 重複アドレス検出ではない時の送信元アドレス決定処理。*/
    438415                T_IN6_ADDR *saddr;
    439416
    440417                if (ln && ln->hold) {
    441418                        /*
    442                          * 送信がペンディングされているデータグラムの
    443                          * 送信å
    444 ƒã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’利用する。
     419                         * 送信がペンディングされているデータグラムの
     420                         * 送信元アドレスを利用する。
    445421                         */
    446422                        if (ln->hold->len > IF_IP6_HDR_SIZE)
     
    456432                else {
    457433                        /*
    458                          *  宛å
    459 ˆã‚¢ãƒ‰ãƒ¬ã‚¹ã«ãµã•ã‚ã—い送信å
    460 ƒã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’、
    461                          *  ネットワークインタフェースから探索して利用する。
     434                         *  宛先アドレスにふさわしい送信元アドレスを、
     435                         *  ネットワークインタフェースから探索して利用する。
    462436                         */
    463437                        T_IN6_IFADDR *ifa;
     
    472446        else {
    473447
    474                 /* 重複アドレス検出時の送信å
    475 ƒã‚¢ãƒ‰ãƒ¬ã‚¹ã¯ç„¡æŒ‡å®šã€‚*/
     448                /* 重複アドレス検出時の送信元アドレスは無指定。*/
    476449                memset(&ip6h->src, 0, sizeof(T_IN6_ADDR));
    477450                }
    478451
    479         /* 近隣要請ヘッダを設定する。*/
     452        /* 近隣要請ヘッダを設定する。*/
    480453        nsh = GET_NEIGHBOR_SOLICIT_HDR(output, IF_IP6_NEIGHBOR_SOLICIT_HDR_OFFSET);
    481454        nsh->hdr.type        = ND_NEIGHBOR_SOLICIT;
     
    486459        if (!dad && (mac = IF_SOFTC_TO_IFADDR(ifp->ic)) != NULL) {
    487460
    488                 /* 近隣探索オプションとして、探索目標の MAC アドレスを設定する。*/
     461                /* 近隣探索オプションとして、探索目標の MAC アドレスを設定する。*/
    489462                T_ND_OPT_HDR    *opth;
    490463                uint_t          optlen;
     
    498471                }
    499472
    500         /* チェックサムを計算する。*/
     473        /* チェックサムを計算する。*/
    501474        nsh->hdr.sum = 0;
    502475        nsh->hdr.sum = in6_cksum(output, IPPROTO_ICMPV6, (uint8_t*)nsh - output->buf, len);
    503476
    504         /* 送信する。*/
     477        /* 送信する。*/
    505478        NET_COUNT_ICMP6(net_count_nd6[NC_ICMP6_OUT_OCTETS],
    506479                       output->len - GET_IF_IP6_HDR_SIZE(output));
     
    512485
    513486/*
    514  *  nd6_na_input -- 近隣通知のå
    515 ¥åŠ›å‡¦ç†ã€‚
     487 *  nd6_na_input -- 近隣通知の入力処理。
    516488 */
    517489
     
    536508
    537509        /*
    538          *  ヘッダのチェック、以下の場合は破棄する。
    539          *    ・ホップリミットが IPV6_MAXHLIM (255) 以外
    540          *    ・ヘッダ長が短い
     510         *  ヘッダのチェック、以下の場合は破棄する。
     511         *    ・ホップリミットが IPV6_MAXHLIM (255) 以外
     512         *    ・ヘッダ長が短い
    541513         */
    542514        if (ip6h->hlim != IPV6_MAXHLIM || input->len - off < NEIGHBOR_ADVERT_HDR_SIZE)
     
    545517        nah  = (T_NEIGHBOR_ADVERT_HDR *)(input->buf + off);
    546518
    547         /* 目的アドレスがマルチキャストならエラー */
     519        /* 目的アドレスがマルチキャストならエラー */
    548520        if (IN6_IS_ADDR_MULTICAST(&nah->target))
    549521                goto err_ret;
    550522
    551         /* 近隣要請への応答で、宛å
    552 ˆã‚¢ãƒ‰ãƒ¬ã‚¹ãŒãƒžãƒ«ãƒã‚­ãƒ£ã‚¹ãƒˆãªã‚‰ã‚¨ãƒ©ãƒ¼ */
     523        /* 近隣要請への応答で、宛先アドレスがマルチキャストならエラー */
    553524        if ((nah->nd_na_flags_reserved & ND_NA_FLG_SOLICITED) &&
    554525            IN6_IS_ADDR_MULTICAST(&ip6h->dst))
    555526                goto err_ret;
    556527
    557         /* 近隣探索オプションのオフセットを記録する。*/
     528        /* 近隣探索オプションのオフセットを記録する。*/
    558529        if (nd6_options(nd_opt_off, input->buf + (off + NEIGHBOR_ADVERT_HDR_SIZE),
    559530                                    input->len - (off + NEIGHBOR_ADVERT_HDR_SIZE)) != E_OK)
    560531                goto err_ret;
    561532
    562         /* 近隣探索オプション (目的リンクアドレス) */
     533        /* 近隣探索オプション (目的リンクアドレス) */
    563534        if (nd_opt_off[ND_OPT_OFF_ARRAY_IX(ND_OPT_TARGET_LINKADDR)]) {
    564535                opth = (T_ND_OPT_HDR *)((uint8_t *)(input->buf + off + NEIGHBOR_ADVERT_HDR_SIZE) +
    565536                                        nd_opt_off[ND_OPT_OFF_ARRAY_IX(ND_OPT_TARGET_LINKADDR)] - 8);
    566                 /* 注意: オプションオフセットé
    567 åˆ—には、オフセット + 8 が設定されている。*/
     537                /* 注意: オプションオフセット配列には、オフセット + 8 が設定されている。*/
    568538                lladdr     = (uint8_t *)(opth + 1);
    569539                lladdr_len = (opth->len << 3);
     
    573543
    574544        /*
    575          *  目的アドレスが自分のネットワークインタフェースに割り当てられているアドレスの
    576          *  いずれかに一致したときは、重複していることを意味している。
     545         *  目的アドレスが自分のネットワークインタフェースに割り当てられているアドレスの
     546         *  いずれかに一致したときは、重複していることを意味している。
    577547         */
    578548        if (ifa) {
     
    585555
    586556        /*
    587          *  ネットワークインタフェースのアドレス長が一致しなければエラー
     557         *  ネットワークインタフェースのアドレス長が一致しなければエラー
    588558         */
    589559        if (lladdr && lladdr_len != ((sizeof(T_IF_ADDR) + sizeof(T_ND_OPT_HDR) + 7) & ~7))
    590560                goto err_ret;
    591561
    592         /* 近隣キャッシュを探索する。*/
     562        /* 近隣キャッシュを探索する。*/
    593563        syscall(wai_sem(SEM_ND6_CACHE));
    594564        if ((ln = nd6_lookup(&nah->target, false)) == NULL)
    595565                goto free_ret;
    596566
    597         /* 近隣キャッシュの状æ
    598 ‹ãŒã€ãƒ‡ãƒ¼ã‚¿ãƒªãƒ³ã‚¯å±¤ã®ã‚¢ãƒ‰ãƒ¬ã‚¹æœªè§£æ±ºã®å ´åˆ */
     567        /* 近隣キャッシュの状態が、データリンク層のアドレス未解決の場合 */
    599568        if (ln->state == ND6_LLINFO_INCOMPLETE) {
    600                 /* 通知されたデータリンク層のアドレスの長さが 0 の場合 */
     569                /* 通知されたデータリンク層のアドレスの長さが 0 の場合 */
    601570                if (lladdr == NULL)
    602571                        goto free_ret;
     
    633602
    634603                /*
    635                  *  状æ
    636 ‹é·ç§»è¡¨
     604                 *  状態遷移表
    637605                 *
    638606                 *  nd_na_flags_reserved
    639                  *  OVERRIDE    SOLICTED lladdr llchange 処理 (L: lladdr を登録する)
     607                 *  OVERRIDE    SOLICTED lladdr llchange 処理 (L: lladdr を登録する)
    640608                 *
    641609                 *      F           F       N      -    (2c)
     
    653621                 */
    654622                if ((nah->nd_na_flags_reserved & ND_NA_FLG_OVERRIDE) == 0 && (lladdr != NULL && llchange)) {    /* (1) */
    655                         /* 状æ
    656 ‹ãŒ REACHABLE なら STALE に遷移する。*/
     623                        /* 状態が REACHABLE なら STALE に遷移する。*/
    657624                        if (ln->state == ND6_LLINFO_REACHABLE) {
    658625                                syscall(get_tim(&now));
     
    666633                         lladdr == NULL) {                                                                              /* (2c) */
    667634
    668                         /* データリンク層のアドレスが通知されていれば更新する。*/
     635                        /* データリンク層のアドレスが通知されていれば更新する。*/
    669636                        if (lladdr != NULL)
    670637                                ln->ifaddr = *(T_IF_ADDR *)lladdr;
    671638
    672                         /* 近隣要請への応答なら REACHABLE に遷移する。*/
     639                        /* 近隣要請への応答なら REACHABLE に遷移する。*/
    673640                        if (nah->nd_na_flags_reserved & ND_NA_FLG_SOLICITED) {
    674641                                ln->state = ND6_LLINFO_REACHABLE;
     
    680647                                }
    681648                        /*
    682                          *  データリンク層のアドレスが通知され、
    683                          *  異なるアドレスなら更新する。
     649                         *  データリンク層のアドレスが通知され、
     650                         *  異なるアドレスなら更新する。
    684651                         */
    685652                        else if (lladdr != NULL && llchange) {
     
    690657                        }
    691658
    692                 /* ルータ通知フラグの処理 */
     659                /* ルータ通知フラグの処理 */
    693660                if ((ln->flags        & ND6_LLIF_ROUTER ) != 0 &&
    694661                    (nah->nd_na_flags_reserved & ND_NA_FLG_ROUTER) == 0) {
    695662                        /*
    696                          *  送信相手がルータ通知フラグを無効にした場合。
    697                          *  ディフォルト・ルータリストから対象のルータを削除し、
    698                          *  近隣探索キャッシュを更新する。
     663                         *  送信相手がルータ通知フラグを無効にした場合。
     664                         *  ディフォルト・ルータリストから対象のルータを削除し、
     665                         *  近隣探索キャッシュを更新する。
    699666                         */
    700667                        T_DEF_ROUTER    *dr = NULL;
     
    714681        ln->asked = 0;
    715682
    716         /* アドレス解決å¾
    717 ã¡ã®ãƒ‡ãƒ¼ã‚¿ã‚°ãƒ©ãƒ ãŒã‚れば送信する。*/
     683        /* アドレス解決待ちのデータグラムがあれば送信する。*/
    718684        nd6_output_hold(ifp, ln);
    719685
     
    729695
    730696/*
    731  *  nd6_na_output -- 近隣通知を出力する。
     697 *  nd6_na_output -- 近隣通知を出力する。
    732698 */
    733699
     
    747713
    748714        /*
    749          *  近隣通知ペイロード長を計算する。
    750          *  tlladdr が真ならネットワークインタフェースのアドレスを追加する。
     715         *  近隣通知ペイロード長を計算する。
     716         *  tlladdr が真ならネットワークインタフェースのアドレスを追加する。
    751717         */
    752718        if (tlladdr && IF_SOFTC_TO_IFADDR(ifp->ic))
     
    756722
    757723        /*
    758          *  他のリンクからの偽造されたデータグラムを
    759          *  排除するため、ホップリミットに IPV6_MAXHLIM (255) を設定する。
     724         *  他のリンクからの偽造されたデータグラムを
     725         *  排除するため、ホップリミットに IPV6_MAXHLIM (255) を設定する。
    760726         */
    761727        ipflags = IPV6_OUT_SET_HOP_LIMIT(IPV6_OUT_FLG_HOP_LIMIT, IPV6_MAXHLIM);
    762728
    763         /* ネットワークバッファを獲得し、IPv6 ヘッダを設定する。*/
     729        /* ネットワークバッファを獲得し、IPv6 ヘッダを設定する。*/
    764730        if (in6_get_datagram(&output, len, 0, daddr, NULL,
    765731                             IPPROTO_ICMPV6, IPV6_MAXHLIM,
     
    771737        if (IN6_IS_ADDR_UNSPECIFIED(daddr)) {
    772738                /*
    773                  *  宛å
    774 ˆã‚¢ãƒ‰ãƒ¬ã‚¹ãŒç„¡æŒ‡å®šã®å ´åˆã¯ã€
    775                  *  リンクローカルå
    776 ¨ãƒŽãƒ¼ãƒ‰ãƒ»ãƒžãƒ«ãƒã‚­ãƒ£ã‚¹ãƒˆã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’設定する。
     739                 *  宛先アドレスが無指定の場合は、
     740                 *  リンクローカル全ノード・マルチキャストアドレスを設定する。
    777741                 */
    778742                ip6h->dst.s6_addr32[0] = IPV6_ADDR_INT32_MLL;
     
    786750
    787751        /*
    788          *  宛å
    789 ˆã‚¢ãƒ‰ãƒ¬ã‚¹ã«ãµã•ã‚ã—い送信å
    790 ƒã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’、
    791          *  ネットワークインタフェースから探索して利用する。
     752         *  宛先アドレスにふさわしい送信元アドレスを、
     753         *  ネットワークインタフェースから探索して利用する。
    792754         */
    793755        if ((ifa = in6_ifawithifp(ifp, &ip6h->dst)) == NULL) {
     
    797759        ip6h->src = ifa->addr;
    798760
    799         /* 近隣通知ヘッダを設定する。*/
     761        /* 近隣通知ヘッダを設定する。*/
    800762        nah = GET_NEIGHBOR_ADVERT_HDR(output, IF_IP6_NEIGHBOR_ADVERT_HDR_OFFSET);
    801763        nah->hdr.type        = ND_NEIGHBOR_ADVERT;
     
    803765        nah->target          = *taddr;
    804766
    805         /* tlladdr が真ならネットワークインタフェースのアドレスを追加する。*/
     767        /* tlladdr が真ならネットワークインタフェースのアドレスを追加する。*/
    806768        if (tlladdr && (mac = IF_SOFTC_TO_IFADDR(ifp->ic)) != NULL) {
    807769
     
    821783        nah->nd_na_flags_reserved = flags;
    822784
    823         /* チェックサムを計算する。*/
     785        /* チェックサムを計算する。*/
    824786        nah->hdr.sum = 0;
    825787        nah->hdr.sum = in6_cksum(output, IPPROTO_ICMPV6, (uint8_t*)nah - output->buf, len);
    826788
    827         /* 送信する。*/
     789        /* 送信する。*/
    828790        NET_COUNT_ICMP6(net_count_nd6[NC_ICMP6_OUT_OCTETS],
    829791                       output->len - GET_IF_IP6_HDR_SIZE(output));
     
    835797
    836798/*
    837  *  nd6_dad_start -- 重複アドレス検出 (DAD) を開始する。
     799 *  nd6_dad_start -- 重複アドレス検出 (DAD) を開始する。
    838800 *
    839  *    第3引数のtick は、インタフェースが起動されてから、重複検出を
    840  *    送信するまでの最小é
    841 å»¶å€¤ã§ã‚る。
     801 *    第3引数のtick は、インタフェースが起動されてから、重複検出を
     802 *    送信するまでの最小遅延値である。
    842803 */
    843804
     
    845806nd6_dad_start (T_IFNET *ifp, T_IN6_IFADDR *ifa, int_t *tick)
    846807{
    847         /* フラグをチェックする。*/
     808        /* フラグをチェックする。*/
    848809        if (!(ifa->flags & IN6_IFF_TENTATIVE))
    849810                return;
     
    862823                return;
    863824
    864         /* 重複アドレス検出カウンタをリセットする。*/
     825        /* 重複アドレス検出カウンタをリセットする。*/
    865826        ifa->ns_icount = ifa->na_icount = ifa->ns_ocount = 0;
    866827
    867828        /*
    868          *  重複アドレス検出要請を送信する。ただし、インタフェースを
    869          *  初期化した直後に、最初に送信する場合は、ランダムなé
    870 å»¶ã‚’行う。
     829         *  重複アドレス検出要請を送信する。ただし、インタフェースを
     830         *  初期化した直後に、最初に送信する場合は、ランダムな遅延を行う。
    871831         */
    872832        if (tick == NULL) {
    873833                nd6_dad_ns_output(ifp, ifa);
    874834
    875                 /* タイムアウトを近隣探索の送信間隔に設定する。*/
     835                /* タイムアウトを近隣探索の送信間隔に設定する。*/
    876836                timeout((callout_func)nd6_dad_timer, ifa, ND6_RETRANS_TIME * NET_TIMER_HZ / SYSTIM_HZ);
    877837                }
     
    879839                int_t ntick;
    880840
    881                 if (*tick == 0) /* 最初の送信 */
     841                if (*tick == 0) /* 最初の送信 */
    882842                        ntick = net_rand() % (ND6_FIRST_DAD_DELAY_TIME * NET_TIMER_HZ / SYSTIM_HZ);
    883843                else
Note: See TracChangeset for help on using the changeset viewer.