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/netapp/dhcp6_cli.c

    • Property svn:keywords deleted
    • Property svn:mime-type changed from text/x-csrc to text/x-csrc;charset=UTF-8
    r388 r389  
    7070 *                   Tomakomai National College of Technology, JAPAN
    7171 *
    72  *  上記著作権è€
    73 ã¯ï¼Œä»¥ä¸‹ã® (1)~(4) の条件か,Free Software Foundation
    74  *  によってå
    75 ¬è¡¨ã•ã‚Œã¦ã„ã‚‹ GNU General Public License の Version 2 に記
    76  *  述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
    77  *  を改変したものを含む.以下同じ)を使用・複製・改変・再é
    78 å¸ƒï¼ˆä»¥ä¸‹ï¼Œ
    79  *  利用と呼ぶ)することを無償で許諾する.
    80  *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
    81  *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
    82  *      スコード中に含まれていること.
    83  *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
    84  *      用できる形で再é
    85 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é
    86 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
    87  *      è€
    88 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—作権表示,この利用条件および下記
    89  *      の無保証規定を掲載すること.
    90  *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
    91  *      用できない形で再é
    92 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
    93  *      と.
    94  *    (a) 再é
    95 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€
    96 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—
    97  *        作権表示,この利用条件および下記の無保証規定を掲載すること.
    98  *    (b) 再é
    99 å¸ƒã®å½¢æ
    100 ‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
    101  *        報告すること.
    102  *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
    103  *      害からも,上記著作権è€
    104 ãŠã‚ˆã³TOPPERSプロジェクトをå
    105 è²¬ã™ã‚‹ã“と.
     72 *  上記著作権者は,以下の (1)~(4) の条件か,Free Software Foundation
     73 *  によって公表されている GNU General Public License の Version 2 に記
     74 *  述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
     75 *  を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下,
     76 *  利用と呼ぶ)することを無償で許諾する.
     77 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     78 *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     79 *      スコード中に含まれていること.
     80 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     81 *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     82 *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     83 *      の無保証規定を掲載すること.
     84 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     85 *      用できない形で再配布する場合には,次のいずれかの条件を満たすこ
     86 *      と.
     87 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     88 *        作権表示,この利用条件および下記の無保証規定を掲載すること.
     89 *    (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
     90 *        報告すること.
     91 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     92 *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
    10693 *
    107  *  本ソフトウェアは,無保証で提供されているものである.上記著作権è€
    108 ãŠ
    109  *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
    110  *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
    111  *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
     94 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     95 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
     96 *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
     97 *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
    11298 *
    11399 *  @(#) $Id$
     
    156142
    157143/*
    158  *  DHCPv6 クライアントタスク
     144 *  DHCPv6 クライアントタスク
    159145 */
    160146
     
    162148
    163149/*
    164  *  DHCP 動作モード
     150 *  DHCP 動作モード
    165151 *
    166  *    #define DHCP6_CLI_CFG_MODE で指定する。
     152 *    #define DHCP6_CLI_CFG_MODE で指定する。
    167153 *
    168154 */
     
    173159
    174160/*
    175  *  変数
     161 *  変数
    176162 */
    177163
    178164static const T_IN6_ADDR in6_addr_all_DHCP_relay_servers =
    179         IPV6_ADDR_ALL_DHCP_RELAY_SERVERS_INIT;                  /* リレー・サーバの IPv6 アドレス   */
    180 static T_DHCP6_CLI_CONTEXT      context;                        /* クライアントコンテキスト */
     165        IPV6_ADDR_ALL_DHCP_RELAY_SERVERS_INIT;                  /* リレー・サーバの IPv6 アドレス   */
     166static T_DHCP6_CLI_CONTEXT      context;                        /* クライアントコンテキスト */
    181167
    182168#ifdef DHCP6_CLI_CFG_REQUIRED_OLIST
    183 static uint8_t  required_plist[] = DHCP6_CLI_CFG_REQUIRED_OLIST;        /* å¿
    184 é ˆã‚ªãƒ—ションリスト             */
     169static uint8_t  required_plist[] = DHCP6_CLI_CFG_REQUIRED_OLIST;        /* 必須オプションリスト           */
    185170#endif
    186171
    187172#ifdef DHCP6_CLI_CFG_REQUEST_OLIST
    188 static uint8_t  request_plist[] = DHCP6_CLI_CFG_REQUEST_OLIST;          /* 要求オプションリスト               */
     173static uint8_t  request_plist[] = DHCP6_CLI_CFG_REQUEST_OLIST;          /* 要求オプションリスト           */
    189174#endif
    190175
    191176/*
    192  *  dhcp6_rand -- RFC3315 に規定された乱数を発生する。
     177 *  dhcp6_rand -- RFC3315 に規定された乱数を発生する。
    193178 */
    194179
     
    209194
    210195/*
    211  *  init_duid -- クライアントの DUID を設定する。
     196 *  init_duid -- クライアントの DUID を設定する。
    212197 */
    213198
     
    218203#if DHCP6_CLI_CFG_MODE == DHCP6_CLI_CFG_STATELESS
    219204
    220         /* 動作モードに STATELESS が指定された時は LL 形式にする。*/
     205        /* 動作モードに STATELESS が指定された時は LL 形式にする。*/
    221206
    222207        T_DHCP6_DUID_LL_HDR     *ll;
     
    226211        HOST2MSG16(ll->type, DHCP6_HWA_TYPE_ETHER);
    227212        memcpy(&ct->duid[sizeof(*ll)], &ct->sc->ifaddr.lladdr, sizeof(ct->sc->ifaddr.lladdr));
    228         ct->duid_len = sizeof(*ll) + sizeof(ct->sc->ifaddr.lladdr);     /* DIUD 長を記録する。*/
     213        ct->duid_len = sizeof(*ll) + sizeof(ct->sc->ifaddr.lladdr);     /* DIUD 長を記録する。*/
    229214
    230215#elif DHCP6_CLI_CFG_MODE == DHCP6_CLI_CFG_STATEFULL
    231216
    232217        /*
    233          *    動作モードに DHCP6_CLI_CFG_STATEFULL が指定された時は LLT 形式にする。
    234          *    time メンバーには現在の時間[s]を設定する。
    235          *    注意: 暫定的に get_tim() の値を使うが、要検討
     218         *    動作モードに DHCP6_CLI_CFG_STATEFULL が指定された時は LLT 形式にする。
     219         *    time メンバーには現在の時間[s]を設定する。
     220         *    注意: 暫定的に get_tim() の値を使うが、要検討
    236221         */
    237222
     
    246231        HOST2MSG32(llt->time, time);
    247232        memcpy(&ct->duid[sizeof(*llt)], &ct->sc->ifaddr.lladdr, sizeof(ct->sc->ifaddr.lladdr));
    248         ct->duid_len = sizeof(*llt) + sizeof(ct->sc->ifaddr.lladdr);    /* DIUD 長を記録する。*/
     233        ct->duid_len = sizeof(*llt) + sizeof(ct->sc->ifaddr.lladdr);    /* DIUD 長を記録する。*/
    249234
    250235#else   /* of #if DHCP6_CLI_CFG_MODE == DHCP6_CLI_CFG_STATELESS */
     
    255240
    256241/*
    257  *  cancel_all_timers -- å
    258 ¨ã¦ã® TIMER をキャンセルする。
     242 *  cancel_all_timers -- 全ての TIMER をキャンセルする。
    259243 */
    260244
     
    271255
    272256/*
    273  *  dhcpc_timer -- TIMER 管理
     257 *  dhcpc_timer -- TIMER 管理
    274258 */
    275259
     
    291275        syscall(sig_sem(SEM_DHCP6_CLI_TIMER));
    292276
    293         /* 1秒毎にタイムアウトする。*/
     277        /* 1秒毎にタイムアウトする。*/
    294278        timeout((callout_func)dhcpc_timer, ct, NET_TIMER_HZ / DHCP6C_TIMER_HZ);
    295279        }
    296280
    297281/*
    298  *  find_option -- 指定したオプションを探索する。
     282 *  find_option -- 指定したオプションを探索する。
    299283 *
    300  *    注意: 引数 len が 0 の時はオプションサイズを検証しない。
    301  *          引数 len にはオプションå
    302 ¨ä½“のサイズを指定すること。
     284 *    注意: 引数 len が 0 の時はオプションサイズを検証しない。
     285 *          引数 len にはオプション全体のサイズを指定すること。
    303286 */
    304287
     
    321304
    322305/*
    323  *  find_msg_option -- 指定したオプションを探索する。
     306 *  find_msg_option -- 指定したオプションを探索する。
    324307 *
    325  *    注意: 引数 len が 0 の時はオプションサイズを検証しない。
    326  *          引数 len にはオプションå
    327 ¨ä½“のサイズを指定すること。
     308 *    注意: 引数 len が 0 の時はオプションサイズを検証しない。
     309 *          引数 len にはオプション全体のサイズを指定すること。
    328310 */
    329311
     
    335317
    336318/*
    337  *  is_equal_sid -- メッセージå†
    338 ã® SERVER ID を比較する。
     319 *  is_equal_sid -- メッセージ内の SERVER ID を比較する。
    339320 */
    340321
     
    357338
    358339/*
    359  *  validate_iaaddrs -- アドレスæƒ
    360 å ±ï¼ˆIAADDR)を検証する。
     340 *  validate_iaaddrs -- アドレス情報(IAADDR)を検証する。
    361341 */
    362342
     
    366346        T_DHCP6_OPT_IAADDR      *iaa;
    367347
    368         /* オプションが IAADDR であることを検証する。*/
     348        /* オプションが IAADDR であることを検証する。*/
    369349        iaa = (T_DHCP6_OPT_IAADDR*)opt;
    370350        if (MSG2HOST16(iaa->code) != DHCP6_OPT_IAADDR)
     
    372352
    373353        while (len > 0) {
    374                 /* オプション長を検証する。*/
     354                /* オプション長を検証する。*/
    375355                if (len < sizeof(*iaa))
    376356                        return E_PAR;
    377357
    378                 /* オプション長が T_DHCP6_OPT_IAADDR のサイズと一致していなければエラー */
     358                /* オプション長が T_DHCP6_OPT_IAADDR のサイズと一致していなければエラー */
    379359                iaa = (T_DHCP6_OPT_IAADDR*)opt;
    380360                if ((MSG2HOST16(iaa->len) & ~DHCP6C_IAA_FLAG_MASK) < (sizeof(*iaa) - sizeof(T_DHCP6_OPTION)))
     
    382362
    383363                /*
    384                  *  perferred-lifetime と valid-lifetime の値が矛盾しているときはエラー
    385                  *  【RFC3315 (22.6) 参ç
    386 §ã€‘
     364                 *  perferred-lifetime と valid-lifetime の値が矛盾しているときはエラー
     365                 *  【RFC3315 (22.6) 参照】
    387366                 */
    388367                if (MSG2HOST32(iaa->prefer) > MSG2HOST32(iaa->valid))
     
    397376
    398377/*
    399  *  validate_ia_na_pd -- IA_NA/IA_PD オプションを検証する。
     378 *  validate_ia_na_pd -- IA_NA/IA_PD オプションを検証する。
    400379 */
    401380
     
    406385        uint8_t                 *opt;
    407386
    408         /* IA_NA/IA_PD が無ければ検証しない。*/
     387        /* IA_NA/IA_PD が無ければ検証しない。*/
    409388        if ((opt = find_msg_option(msg, code, 0)) == NULL)
    410389                return E_OK;
    411390
    412         /* オプション長を検証する。*/
     391        /* オプション長を検証する。*/
    413392        na = (T_DHCP6_OPT_IA_NA_PD*)opt;
    414393        if (!(msg->len >= (opt - (uint8_t*)&msg->msg) + sizeof(*na) &&
     
    417396
    418397        /*
    419          *  T1 と T2 の値が矛盾している時、またはアドレスæƒ
    420 å ±ãŒèª¤ã£ã¦ã„る時はエラー
    421          *  【RFC3315 (22.4) 参ç
    422 §ã€‘
     398         *  T1 と T2 の値が矛盾している時、またはアドレス情報が誤っている時はエラー
     399         *  【RFC3315 (22.4) 参照】
    423400         */
    424401        if (MSG2HOST32(na->renew) > 0 && MSG2HOST32(na->rebind) > 0 &&
     
    433410
    434411/*
    435  *  validate_ia_ta -- IA_TA オプションを検証する。
     412 *  validate_ia_ta -- IA_TA オプションを検証する。
    436413 */
    437414
     
    442419        uint8_t                 *opt;
    443420
    444         /* IA_TA が無ければ検証しない。*/
     421        /* IA_TA が無ければ検証しない。*/
    445422        if ((opt = find_msg_option(msg, DHCP6_OPT_IA_TA, 0)) == NULL)
    446423                return E_OK;
    447424
    448         /* オプション長を検証する。*/
     425        /* オプション長を検証する。*/
    449426        ta = (T_DHCP6_OPT_IA_TA *)opt;
    450427        if (!(msg->len >= (opt - (uint8_t*)&msg->msg) + sizeof(*ta) &&
     
    453430
    454431        /*
    455          *  アドレスæƒ
    456 å ±ãŒèª¤ã£ã¦ã„る時はエラー【RFC3315 (22.4) 参ç
    457 §ã€‘
     432         *  アドレス情報が誤っている時はエラー【RFC3315 (22.4) 参照】
    458433         */
    459434        if (validate_iaaddrs(opt + sizeof(*ta), (MSG2HOST16(ta->len) & ~DHCP6C_IAA_FLAG_MASK) - (sizeof(*ta) - sizeof(T_DHCP6_OPTION))) != E_OK)
     
    463438        }
    464439/*
    465  *  classify_reply -- 応答メッセージを分類する。
     440 *  classify_reply -- 応答メッセージを分類する。
    466441 */
    467442
     
    471446        ER      error;
    472447
    473         /* IA_NA オプションを検証する。*/
     448        /* IA_NA オプションを検証する。*/
    474449        if ((error = validate_ia_na_pd(msg, DHCP6_OPT_IA_NA)) != E_OK)
    475450                return error;
    476451
    477         /* IA_TA オプションを検証する。*/
     452        /* IA_TA オプションを検証する。*/
    478453        if ((error = validate_ia_ta(msg)) != E_OK)
    479454                return error;
    480455
    481         /* IA_PD オプションを検証する。*/
     456        /* IA_PD オプションを検証する。*/
    482457        if ((error = validate_ia_na_pd(msg, DHCP6_OPT_IA_PD)) != E_OK)
    483458                return error;
    484459
    485         /* サーバ DUID があることを検証する。*/
     460        /* サーバ DUID があることを検証する。*/
    486461        if (find_msg_option(msg, DHCP6_OPT_SERVERID, 0) == NULL)
    487462                return E_PAR;
     
    491466
    492467/*
    493  *  validate_reply -- 応答メッセージを検証する。
     468 *  validate_reply -- 応答メッセージを検証する。
    494469 */
    495470
     
    500475        uint8_t                 *opt;
    501476
    502         /* サーバ DUID があることを検証する。*/
     477        /* サーバ DUID があることを検証する。*/
    503478        if (find_msg_option(msg, DHCP6_OPT_SERVERID, 0) == NULL)
    504479                return E_PAR;
    505480
    506         /* クライアント DUID があり、自分のクライアント DUID と同じことを検証する。*/
     481        /* クライアント DUID があり、自分のクライアント DUID と同じことを検証する。*/
    507482        if ((opt = find_msg_option(msg, DHCP6_OPT_CLIENTID, 0)) == NULL)
    508483                return E_PAR;
     
    518493
    519494/*
    520  *  get_status_code -- STATUS オプションの結果コードを獲得する。
     495 *  get_status_code -- STATUS オプションの結果コードを獲得する。
    521496 */
    522497
     
    527502        uint8_t                 *opt;
    528503
    529         /* STATUS オプションが無ければ検証しない。*/
     504        /* STATUS オプションが無ければ検証しない。*/
    530505        if ((opt = find_option(msg, msg_len, DHCP6_OPT_STATUS_CODE, 0)) == NULL)
    531506                return DHCP6_STAT_SUCCESS;
    532507
    533         /* オプション長を検証する。*/
     508        /* オプション長を検証する。*/
    534509        status = (T_DHCP6_OPT_STATUS_CODE*)opt;
    535510        if (msg_len < sizeof(*status))
     
    542517
    543518/*
    544  *  get_msg_status_code -- STATUS オプションの結果コードを獲得する。
     519 *  get_msg_status_code -- STATUS オプションの結果コードを獲得する。
    545520 */
    546521
     
    598573
    599574/*
    600  *  validate_rcv_msg -- 受信メッセージを検証する。
     575 *  validate_rcv_msg -- 受信メッセージを検証する。
    601576 */
    602577
     
    607582        uint_t  code;
    608583
    609         /* メッセージのタイプが一致していることを検証する。*/
     584        /* メッセージのタイプが一致していることを検証する。*/
    610585        switch (ct->fsm) {
    611586
     
    649624                }
    650625
    651         /* 受信メッセージを検証する。*/
     626        /* 受信メッセージを検証する。*/
    652627        if ((error = validate_reply(ct, msg)) != E_OK)
    653628                return error;
    654629
    655         /* 受信メッセージを分類する。*/
     630        /* 受信メッセージを分類する。*/
    656631        if ((error = classify_reply(msg)) != E_OK)
    657632                return error;
    658633
    659         /* 受信したメッセージå†
    660 ã® STATUS CODE オプションを検証する。*/
     634        /* 受信したメッセージ内の STATUS CODE オプションを検証する。*/
    661635        error = get_msg_status_code(msg, &code);
    662636        if (error != E_OK)
     
    667641
    668642/*
    669  *  eval_ia_prefer -- IA_NA/IA_TA/IA_PD の推奨度を評価する。
     643 *  eval_ia_prefer -- IA_NA/IA_TA/IA_PD の推奨度を評価する。
    670644 */
    671645
     
    680654        uint_t          aoff, asize;
    681655
    682         /* 無効の場合は終了する。*/
     656        /* 無効の場合は終了する。*/
    683657        if (cli_msg == NULL)
    684658                return;
     
    721695
    722696/*
    723  *  eval_prefer -- 受信メッセージの推奨度を評価する。
     697 *  eval_prefer -- 受信メッセージの推奨度を評価する。
    724698 */
    725699
     
    730704        int                     ix;
    731705
    732         /* 無効の場合は終了する。*/
     706        /* 無効の場合は終了する。*/
    733707        if (msg == NULL)
    734708                return;
    735709
    736         /* PREFERENCE オプションを評価する。*/
     710        /* PREFERENCE オプションを評価する。*/
    737711        if ((opt = find_msg_option(msg, DHCP6_OPT_PREFERENCE, sizeof(T_DHCP6_OPT_PREFERENCE))) != NULL)
    738712                msg->prefer = MSG2HOST16(((T_DHCP6_OPT_PREFERENCE*)opt)->prefer) | DHCP6_ClI_MSG_PREFER_OPTION;
     
    742716#if defined(DHCP6_CLI_CFG_REQUIRED_OLIST)
    743717
    744         /* å¿
    745 é ˆã‚ªãƒ—ションを検証する。*/
     718        /* 必須オプションを検証する。*/
    746719        for (ix = sizeof(required_plist); ix -- > 0; ) {
    747720                if (find_msg_option(msg, required_plist[ix], 0) == NULL)
     
    754727#if defined(DHCP6_CLI_CFG_REQUEST_OLIST)
    755728
    756         /* 要求オプションを検証する。*/
     729        /* 要求オプションを検証する。*/
    757730        for (ix = sizeof(request_plist); ix -- > 0; ) {
    758731                if (find_msg_option(msg, request_plist[ix], 0) != NULL)
     
    764737
    765738/*
    766  *  eval_rcv_msg -- 受信メッセージを評価する。
     739 *  eval_rcv_msg -- 受信メッセージを評価する。
    767740 */
    768741
     
    773746        SYSTIM          time;
    774747
    775         /* メッセージを受信していなければ中止する。*/
     748        /* メッセージを受信していなければ中止する。*/
    776749        syscall(wai_sem(SEM_DHCP6_CLI_LOCK));
    777750        if (ct->val_lst == NULL) {
     
    780753                }
    781754
    782         /* 検証メッセージリストから評価メッセージを取り出す。*/
     755        /* 検証メッセージリストから評価メッセージを取り出す。*/
    783756        evl         = ct->val_lst;
    784757        ct->val_lst = ct->val_lst->next;
     
    786759        syscall(sig_sem(SEM_DHCP6_CLI_LOCK));
    787760
    788         /* 受信時間を設定する。*/
     761        /* 受信時間を設定する。*/
    789762        get_tim(&time);
    790763        evl->rcv_time = time;
    791764
    792         /* 評価メッセージを検証する。*/
     765        /* 評価メッセージを検証する。*/
    793766        if (validate_rcv_msg(ct, evl) != E_OK) {
    794767
    795                 /* エラーが発生した評価メッセージを受信メッセージ構造体リストに戻す。*/
     768                /* エラーが発生した評価メッセージを受信メッセージ構造体リストに戻す。*/
    796769                goto rcv_ret;
    797770                }
    798771
    799         /* REL_INFO 状æ
    800 ‹ã®æ™‚の処理 */
     772        /* REL_INFO 状態の時の処理 */
    801773        if (ct->fsm == DHCP6_FSM_REL_INFO) {
    802774                syscall(wai_sem(SEM_DHCP6_CLI_LOCK));
    803775                if (evl->status == DHCP6_STAT_SUCCESS) {
    804776                        /*
    805                          *  STATUS CODE が DHCP6_STAT_SUCCESS なら、
    806                          *  評価メッセージを推奨メッセージリストに設定して終了する。
     777                         *  STATUS CODE が DHCP6_STAT_SUCCESS なら、
     778                         *  評価メッセージを推奨メッセージリストに設定して終了する。
    807779                         */
    808780                        evl->next   = ct->prf_lst;
     
    810782                        }
    811783                else {
    812                         /* 評価メッセージを受信メッセージ構造体リストに戻して終了する。*/
     784                        /* 評価メッセージを受信メッセージ構造体リストに戻して終了する。*/
    813785                        evl->next   = ct->rcv_lst;
    814786                        ct->rcv_lst = evl;
     
    818790                }
    819791
    820         /* 評価メッセージの推奨度を評価する。*/
     792        /* 評価メッセージの推奨度を評価する。*/
    821793        eval_prefer(evl);
    822794        eval_ia_prefer(evl);
    823795
    824         /* 推奨メッセージリストが空なら評価メッセージを移して終了する。*/
     796        /* 推奨メッセージリストが空なら評価メッセージを移して終了する。*/
    825797        if (ct->prf_lst == NULL) {
    826798                ct->max_prefer = evl->prefer & DHCP6_ClI_MSG_PREFER_VALUE_MASK;
     
    829801                }
    830802
    831         /* 評価メッセージの推奨度と推奨メッセージリストの最大推奨度を比較する。*/
     803        /* 評価メッセージの推奨度と推奨メッセージリストの最大推奨度を比較する。*/
    832804        if ((evl->prefer & DHCP6_ClI_MSG_PREFER_VALUE_MASK) > ct->max_prefer) {
    833805
    834806                /*
    835                  *  評価メッセージの推奨度が推奨メッセージリストの最大推奨度より高ければ、
    836                  *  推奨メッセージリストを受信メッセージ構造体リストに戻し、
    837                  *  評価メッセージを推奨メッセージリストに移す。
     807                 *  評価メッセージの推奨度が推奨メッセージリストの最大推奨度より高ければ、
     808                 *  推奨メッセージリストを受信メッセージ構造体リストに戻し、
     809                 *  評価メッセージを推奨メッセージリストに移す。
    838810                 */
    839811                ct->max_prefer = evl->prefer & DHCP6_ClI_MSG_PREFER_VALUE_MASK;
     
    856828
    857829                                /*
    858                                  *  推奨メッセージリストに同じ DHCP6_OPT_SERVERID のメッセージがあれば、
    859                                  *  評価メッセージを受信メッセージ構造体リストに戻す。
     830                                 *  推奨メッセージリストに同じ DHCP6_OPT_SERVERID のメッセージがあれば、
     831                                 *  評価メッセージを受信メッセージ構造体リストに戻す。
    860832                                 */
    861833                                goto rcv_ret;
     
    864836
    865837                /*
    866                  *  評価メッセージを推奨メッセージリストに移す。
     838                 *  評価メッセージを推奨メッセージリストに移す。
    867839                 */
    868840                evl->next   = ct->prf_lst;
     
    873845        /*else */
    874846                /*
    875                  *  評価メッセージの推奨度が推奨メッセージリストの最大推奨度より低ければ、
    876                  *  評価メッセージを受信メッセージ構造体リストに戻す。
     847                 *  評価メッセージの推奨度が推奨メッセージリストの最大推奨度より低ければ、
     848                 *  評価メッセージを受信メッセージ構造体リストに戻す。
    877849                 */
    878850
     
    886858
    887859/*
    888  *  select_msg -- 推奨メッセージリストのå
    889 ˆé ­ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’選択する。
     860 *  select_msg -- 推奨メッセージリストの先頭のメッセージを選択する。
    890861 */
    891862
     
    897868        syscall(wai_sem(SEM_DHCP6_CLI_LOCK));
    898869        if (ct->prf_lst == NULL) {
    899                 /* メッセージを受信していなければ中止する。*/
     870                /* メッセージを受信していなければ中止する。*/
    900871                syscall(sig_sem(SEM_DHCP6_CLI_LOCK));
    901872                return NULL;
     
    907878
    908879        if ((select->prefer & DHCP6_ClI_MSG_PREFER_REQUIRED) == 0) {
    909                 /* å¿
    910 é ˆã‚ªãƒ—ションが無ければ選択しない。*/
     880                /* 必須オプションが無ければ選択しない。*/
    911881                syscall(sig_sem(SEM_DHCP6_CLI_LOCK));
    912882                return NULL;
     
    917887        if (((select->prefer & DHCP6_ClI_MSG_PREFER_REQUIRED) == 0) ||
    918888            ((select->prefer & DHCP6_ClI_MSG_PREFER_ADDR)     == 0)) {
    919                 /* å¿
    920 é ˆã‚ªãƒ—ションとアドレスが無ければ選択しない。*/
     889                /* 必須オプションとアドレスが無ければ選択しない。*/
    921890                syscall(sig_sem(SEM_DHCP6_CLI_LOCK));
    922891                return NULL;
     
    927896#endif  /* of #if DHCP6_CLI_CFG_MODE == DHCP6_CLI_CFG_STATELESS */
    928897
    929         /* 推奨メッセージリストのå
    930 ˆé ­ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’選択する。*/
     898        /* 推奨メッセージリストの先頭のメッセージを選択する。*/
    931899        ct->prf_lst  = ct->prf_lst->next;
    932900        select->next = NULL;
    933901
    934         /* 選択されなかった検証メッセージを受信メッセージ構造体リストに戻す。*/
     902        /* 選択されなかった検証メッセージを受信メッセージ構造体リストに戻す。*/
    935903        if (ct->rcv_lst == NULL)
    936904                ct->rcv_lst = ct->prf_lst;
     
    945913
    946914/*
    947  *  advance_retrans -- 再送信タイムアウトを更新する。
     915 *  advance_retrans -- 再送信タイムアウトを更新する。
    948916 */
    949917
     
    952920{
    953921        /*
    954          *  再送信間隔(RT)を更新する。
    955          *  再送信毎に約 2倍するが、
    956          *  最大送信間隔(MRT)をè¶
    957 ãˆãªã„ようにする。
     922         *  再送信間隔(RT)を更新する。
     923         *  再送信毎に約 2倍するが、
     924         *  最大送信間隔(MRT)を超えないようにする。
    958925         */
    959926        ct->RT += ct->RT + dhcp6_rand(ct->RT);
     
    961928                ct->RT = ct->MRT + dhcp6_rand(ct->MRT);
    962929
    963         /* 再送信回数を更新する。*/
     930        /* 再送信回数を更新する。*/
    964931        ct->txcount ++;
    965932        }
    966933
    967934/*
    968  *  init_retrans -- 再送信回数、トランザクション ID、その他を設定する。
     935 *  init_retrans -- 再送信回数、トランザクション ID、その他を設定する。
    969936 */
    970937
     
    972939init_retrans (T_DHCP6_CLI_CONTEXT *ct)
    973940{
    974         /* 送信回数をリセットする。*/
     941        /* 送信回数をリセットする。*/
    975942        ct->txcount = 0;
    976943
    977         /* 再送信間隔を設定する。*/
     944        /* 再送信間隔を設定する。*/
    978945        ct->RT = ct->IRT + dhcp6_rand(ct->IRT);
    979946
    980         /* トランザクション ID を設定する。*/
     947        /* トランザクション ID を設定する。*/
    981948        ct->xid = netapp_rand() % 0x00ffffff;
    982949
    983         /* 受信メッセージの最大推奨度をリセットする。*/
     950        /* 受信メッセージの最大推奨度をリセットする。*/
    984951        ct->max_prefer = 0;
    985952        }
    986953
    987954/*
    988  *  setup_msg_header -- メッセージのヘッダ部分を作成する。
     955 *  setup_msg_header -- メッセージのヘッダ部分を作成する。
    989956 */
    990957
     
    995962        ct->snd_msg->len = sizeof(ct->snd_msg->msg);
    996963
    997         /* ヘッダ部を設定する。*/
     964        /* ヘッダ部を設定する。*/
    998965        ct->snd_msg->msg.hdr.type   = type;
    999966        ct->snd_msg->msg.hdr.xid[0] = (ct->xid >> 16) & 0xff;
     
    1005972
    1006973/*
    1007  *  common_options -- 標準オプションを追加する。
     974 *  common_options -- 標準オプションを追加する。
    1008975 */
    1009976
     
    1024991#if defined(DHCP6_CLI_CFG_RAPID_COMMIT)
    1025992
    1026         /* Rapid-commit の指定 */
     993        /* Rapid-commit の指定 */
    1027994        if (type == DHCP6_SOLICIT)
    1028995                ;
     
    1030997#endif  /* of #if defined(DHCP6_CLI_CFG_RAPID_COMMIT) */
    1031998
    1032         /* クライアント DUID を追加する。*/
     999        /* クライアント DUID を追加する。*/
    10331000        cid = (T_DHCP6_OPT_CLIENTID*)msg;
    10341001        HOST2MSG16(cid->code, DHCP6_OPT_CLIENTID);
     
    10371004        msg += ct->duid_len + sizeof(T_DHCP6_OPT_CLIENTID);
    10381005
    1039         /* サーバ DUID を追加する。*/
     1006        /* サーバ DUID を追加する。*/
    10401007        if (lease == NULL) {
    10411008                if (!(type == DHCP6_SOLICIT || type == DHCP6_INFO_REQ))
     
    10531020#if defined(DHCP6_CLI_CFG_REQUIRED_OLIST) || defined(DHCP6_CLI_CFG_REQUEST_OLIST)
    10541021
    1055         /* å¿
    1056 é ˆãƒ»è¦æ±‚オプションを追加する。*/
     1022        /* 必須・要求オプションを追加する。*/
    10571023        oro = (T_DHCP6_OPT_ORO*)msg;
    10581024        HOST2MSG16(oro->code, DHCP6_OPT_ORO);
     
    10621028#if defined(DHCP6_CLI_CFG_REQUIRED_OLIST)
    10631029
    1064         /* å¿
    1065 é ˆã‚ªãƒ—ションを追加する。*/
     1030        /* 必須オプションを追加する。*/
    10661031        HOST2MSG16(oro->len, MSG2HOST16(oro->len) + sizeof(required_plist) * 2);
    10671032        for (ix = sizeof(required_plist); ix -- > 0; ) {
     
    10741039#if defined(DHCP6_CLI_CFG_REQUEST_OLIST)
    10751040
    1076         /* 要求オプションを追加する。*/
     1041        /* 要求オプションを追加する。*/
    10771042        HOST2MSG16(oro->len, MSG2HOST16(oro->len) + sizeof(request_plist) * 2);
    10781043        for (ix = sizeof(request_plist); ix -- > 0; ) {
     
    10891054
    10901055/*
    1091  *  rel_lease -- リースされたオプションを解析して値を解放する。
     1056 *  rel_lease -- リースされたオプションを解析して値を解放する。
    10921057 */
    10931058
     
    11061071        uint8_t         *opt, *last;
    11071072
    1108         /* 有効なリース・メッセージ構造体が無ければ何もしない。*/
     1073        /* 有効なリース・メッセージ構造体が無ければ何もしない。*/
    11091074        if (ct->act_msg == NULL)
    11101075                return;
     
    11541119
    11551120/*
    1156  *  set_lease -- リースされたオプションを解析して値を設定する。
     1121 *  set_lease -- リースされたオプションを解析して値を設定する。
    11571122 */
    11581123
     
    12311196
    12321197/*
    1233  *  start_req_info -- INFO-REQUEST を開始する。
     1198 *  start_req_info -- INFO-REQUEST を開始する。
    12341199 *
    1235  *    注意: DHCPv6 の RFC3315 には無い
     1200 *    注意: DHCPv6 の RFC3315 には無い
    12361201 */
    12371202
     
    12391204start_req_info (T_DHCP6_CLI_CONTEXT *ct)
    12401205{
    1241         /* タイムアウトを設定する。【RFC3315 (18.1.5) 参ç
    1242 §ã€‘*/
     1206        /* タイムアウトを設定する。【RFC3315 (18.1.5) 参照】*/
    12431207        ct->IRT = TMO_INF_TIMEOUT;
    12441208        ct->MRT = TMO_INF_MAX_RT;
    12451209        ct->MRC = 0;
    12461210
    1247         /* DHCP6_CLI_CFG_ONE_TRYが指定されていなければ標準タイムアウトまで再送する。*/
     1211        /* DHCP6_CLI_CFG_ONE_TRYが指定されていなければ標準タイムアウトまで再送する。*/
    12481212#if defined(DHCP6_CLI_CFG_ONE_TRY)
    12491213        ct->MRD = 0;
     
    12521216#endif
    12531217
    1254         /* 再送回数とトランザクション ID を設定する。*/
     1218        /* 再送回数とトランザクション ID を設定する。*/
    12551219        init_retrans(ct);
    12561220
    1257         /* REPLY メッセージの受信タイムアウトを設定する。*/
     1221        /* REPLY メッセージの受信タイムアウトを設定する。*/
    12581222        syscall(wai_sem(SEM_DHCP6_CLI_TIMER));
    12591223        ct->timers[DHCP6C_TIMER_RCV_REPLY] = SYSTIM2TIMER(ct->MRD);
     
    12611225
    12621226        /*
    1263          *  INFO-REQUEST メッセージ送信é
    1264 å»¶æ™‚間を設定する。
    1265          *  ただし、TMO_INF_MAX_DELAY が 1[s]なので、dly_tsk()を使用する。
     1227         *  INFO-REQUEST メッセージ送信遅延時間を設定する。
     1228         *  ただし、TMO_INF_MAX_DELAY が 1[s]なので、dly_tsk()を使用する。
    12661229         */
    12671230        dly_tsk(netapp_rand() % TMO_INF_MAX_DELAY);
    12681231
    1269         /* SELECT 状æ
    1270 ‹ã«é·ç§»ã™ã‚‹ã€‚*/
     1232        /* SELECT 状態に遷移する。*/
    12711233        ct->fsm = DHCP6_FSM_SELECT;
    12721234
    1273         /* INFO-REQUEST メッセージを送信する。*/
     1235        /* INFO-REQUEST メッセージを送信する。*/
    12741236        ct->flags |= DHCP6C_FLAG_TMOUT_SND_IREQ;
    12751237        syscall(sig_sem(SEM_DHCP6_CLI_READY));
     
    12771239
    12781240/*
    1279  *  start_informed -- INFORMED 状æ
    1280 ‹ã«é·ç§»ã™ã‚‹ã€‚
     1241 *  start_informed -- INFORMED 状態に遷移する。
    12811242 *
    1282  *    注意: DHCPv6 の RFC3315 には無い
     1243 *    注意: DHCPv6 の RFC3315 には無い
    12831244 */
    12841245
     
    12861247start_informed (T_DHCP6_CLI_CONTEXT *ct)
    12871248{
    1288         /* 有効なリースæƒ
    1289 å ±ãŒç„¡ã‘れば SLEEP に遷移する。*/
     1249        /* 有効なリース情報が無ければ SLEEP に遷移する。*/
    12901250        if (ct->act_msg == NULL) {
    12911251                ct->fsm = DHCP6_FSM_SLEEP;
     
    12931253                }
    12941254
    1295         /* リースæƒ
    1296 å ±ã‚’設定する。*/
     1255        /* リース情報を設定する。*/
    12971256        set_lease(ct);
    12981257
    1299         /* INFORMED 状æ
    1300 ‹ã«é·ç§»ã™ã‚‹ã€‚*/
     1258        /* INFORMED 状態に遷移する。*/
    13011259        ct->fsm = DHCP6_FSM_INFORMED;
    13021260
     
    13051263
    13061264/*
    1307  *  start_rel_info -- アドレスæƒ
    1308 å ±ã‚’解放する。
     1265 *  start_rel_info -- アドレス情報を解放する。
    13091266 *
    1310  *    注意: DHCPv6 の RFC3315 には無い
     1267 *    注意: DHCPv6 の RFC3315 には無い
    13111268 */
    13121269
     
    13141271start_rel_info (T_DHCP6_CLI_CONTEXT *ct)
    13151272{
    1316         /* リースæƒ
    1317 å ±ã‚’解放する。*/
     1273        /* リース情報を解放する。*/
    13181274        rel_lease(ct);
    13191275
    1320         /* SLEEP に遷移する。*/
     1276        /* SLEEP に遷移する。*/
    13211277        ct->fsm = DHCP6_FSM_SLEEP;
    13221278        syscall(sig_sem(SEM_DHCP6_CLI_READY));
     
    13241280
    13251281/*
    1326  *  select_info_reply -- 最適な REPLY (INFO-REQUEST への応答) メッセージを選択する。
     1282 *  select_info_reply -- 最適な REPLY (INFO-REQUEST への応答) メッセージを選択する。
    13271283 */
    13281284
     
    13321288        T_DHCP6_CLI_MSG         *msg;
    13331289
    1334         /* 最適な REPLY メッセージを選択する。*/
     1290        /* 最適な REPLY メッセージを選択する。*/
    13351291        if ((msg = select_msg(ct)) == NULL)
    13361292                return false;
     
    13411297
    13421298/*
    1343  *  setup_info_req_msg -- INFO-REQUEST メッセージを作成する。
     1299 *  setup_info_req_msg -- INFO-REQUEST メッセージを作成する。
    13441300 */
    13451301
     
    13491305        uint8_t *msg;
    13501306
    1351         /* メッセージのヘッダ部分を作成する。*/
     1307        /* メッセージのヘッダ部分を作成する。*/
    13521308        if ((msg = setup_msg_header(ct, DHCP6_INFO_REQ)) == NULL)
    13531309                return E_PAR;
     
    13561312                return E_PAR;
    13571313
    1358         /* メッセージ構造体長を設定する。*/
     1314        /* メッセージ構造体長を設定する。*/
    13591315        ct->snd_msg->len = msg - (uint8_t*)&ct->snd_msg->msg;
    13601316
    1361         /* 送信å
    1362 ˆã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’設定する。*/
     1317        /* 送信先アドレスを設定する。*/
    13631318        ct->dst.ipaddr  = in6_addr_all_DHCP_relay_servers;
    13641319        return E_OK;
     
    13661321
    13671322/*
    1368  *  send_info_req_msg -- INFO-REQUEST メッセージを送信する。
     1323 *  send_info_req_msg -- INFO-REQUEST メッセージを送信する。
    13691324 */
    13701325
     
    13751330
    13761331
    1377         /* REPLY メッセージの選択が終了していれば、BOUND 状æ
    1378 ‹ã«é·ç§»ã™ã‚‹ã€‚*/
     1332        /* REPLY メッセージの選択が終了していれば、BOUND 状態に遷移する。*/
    13791333        ct->flags &= ~DHCP6C_FLAG_TMOUT_MASK;
    13801334        if (select_info_reply(ct)) {
    13811335
    1382                 /* REPLY メッセージ受信タイマーを停止する。*/
     1336                /* REPLY メッセージ受信タイマーを停止する。*/
    13831337                syscall(wai_sem(SEM_DHCP6_CLI_TIMER));
    13841338                ct->timers[DHCP6C_TIMER_RCV_REPLY] = 0;
    13851339                syscall(sig_sem(SEM_DHCP6_CLI_TIMER));
    13861340
    1387                 /* INFORMED 状æ
    1388 ‹ã«é·ç§»ã™ã‚‹ã€‚*/
     1341                /* INFORMED 状態に遷移する。*/
    13891342                start_informed(ct);
    13901343                return;
    13911344                }
    13921345
    1393         /* 再送信回数を確認する。*/
     1346        /* 再送信回数を確認する。*/
    13941347        if ((ct->MRC != 0) && (ct->txcount > ct->MRC)) {
    13951348                ct->error  = E_TMOUT;
     
    13971350                }
    13981351
    1399         /* INFO-REQUEST メッセージを作成する。*/
     1352        /* INFO-REQUEST メッセージを作成する。*/
    14001353        if ((error = setup_info_req_msg(ct)) != E_OK) {
    14011354                syslog(LOG_NOTICE, "[DHCP6C] error, setup request message: %s.", itron_strerror(error));
     
    14041357                }
    14051358
    1406         /* INFO-REQUEST メッセージを送信する。*/
     1359        /* INFO-REQUEST メッセージを送信する。*/
    14071360        error = UDP_SND_DAT(ct->cepid, &ct->dst, &ct->snd_msg->msg, ct->snd_msg->len, TMO_NBLK);
    14081361        if (error != E_WBLK) {
     
    14121365                }
    14131366
    1414         /* 再送信タイムアウトを設定する。*/
     1367        /* 再送信タイムアウトを設定する。*/
    14151368        syscall(wai_sem(SEM_DHCP6_CLI_TIMER));
    14161369        ct->timers[DHCP6C_TIMER_SND_IREQ] = SYSTIM2TIMER(ct->RT);
    14171370        syscall(sig_sem(SEM_DHCP6_CLI_TIMER));
    14181371
    1419         /* 再送信タイムアウトを更新する。*/
     1372        /* 再送信タイムアウトを更新する。*/
    14201373        advance_retrans(ct);
    14211374        }
     
    14261379
    14271380/*
    1428  *  select_reply -- 最適な REPLY メッセージを選択する。
     1381 *  select_reply -- 最適な REPLY メッセージを選択する。
    14291382 */
    14301383
     
    14341387        T_DHCP6_CLI_MSG         *msg;
    14351388
    1436         /* 最適な REPLY メッセージを選択する。*/
     1389        /* 最適な REPLY メッセージを選択する。*/
    14371390        if ((msg = select_msg(ct)) == NULL)
    14381391                return false;
     
    14441397
    14451398        /*
    1446          *  最適な REPLY メッセージの推奨度が ADVERTISE メッセージ推奨度の
    1447          *  1/2 以下の時は受信メッセージ構造体リストに戻す。
     1399         *  最適な REPLY メッセージの推奨度が ADVERTISE メッセージ推奨度の
     1400         *  1/2 以下の時は受信メッセージ構造体リストに戻す。
    14481401         */
    14491402        if ((ct->adv_msg != NULL) && (ct->max_prefer < (ct->adv_msg->prefer & DHCP6_ClI_MSG_PREFER_VALUE_MASK) / 2)) {
     
    14561409
    14571410                /*
    1458                  *  ct->act_msg にある有効なå
    1459 ƒ REPLY メッセージを
    1460                  *  受信メッセージ構造体リストに戻して、
    1461                  *  最適な REPLY メッセージを act に移す。
     1411                 *  ct->act_msg にある有効な元 REPLY メッセージを
     1412                 *  受信メッセージ構造体リストに戻して、
     1413                 *  最適な REPLY メッセージを act に移す。
    14621414                 */
    14631415                if (ct->act_msg != NULL) {
     
    14741426
    14751427/*
    1476  *  select_adv -- 最適な ADVERTISE メッセージを選択する。
     1428 *  select_adv -- 最適な ADVERTISE メッセージを選択する。
    14771429 */
    14781430
     
    14801432select_adv (T_DHCP6_CLI_CONTEXT *ct)
    14811433{
    1482         /* 最適な ADVERTISE メッセージを adv に移す。*/
     1434        /* 最適な ADVERTISE メッセージを adv に移す。*/
    14831435        if ((ct->adv_msg = select_msg(ct)) != NULL) {
    14841436
    14851437                /*
    1486                  *  最適な ADVERTISE メッセージのサーバの IPv6 アドレスを
    1487                  *  次から送信するアドレスに設定する。
     1438                 *  最適な ADVERTISE メッセージのサーバの IPv6 アドレスを
     1439                 *  次から送信するアドレスに設定する。
    14881440                 */
    14891441                ct->dst = ct->adv_msg->srv;
     
    14951447
    14961448/*
    1497  *  eval_expire -- 推奨有効時間と有効時間を決定する。
     1449 *  eval_expire -- 推奨有効時間と有効時間を決定する。
    14981450 */
    14991451
     
    15111463        uint_t          aoff, asize, addrs;
    15121464
    1513         /* タイマーを停止する。*/
     1465        /* タイマーを停止する。*/
    15141466        syscall(wai_sem(SEM_DHCP6_CLI_TIMER));
    15151467        ct->timers[DHCP6C_TIMER_RENEW]  = 0;
     
    15281480                opt = (T_DHCP6_OPTION*)msg;
    15291481
    1530                 /* IA_NA/IA_PD オプションであれば、有効時間を更新する。*/
     1482                /* IA_NA/IA_PD オプションであれば、有効時間を更新する。*/
    15311483                if (MSG2HOST16(opt->code) == DHCP6_OPT_IA_NA || MSG2HOST16(opt->code) == DHCP6_OPT_IA_PD) {
    15321484
     
    15401492                        while (aoff < asize) {
    15411493
    1542                                 /* 最短の推奨有効時間を更新する。*/
     1494                                /* 最短の推奨有効時間を更新する。*/
    15431495                                iaa = (T_DHCP6_OPT_IAADDR*)((uint8_t*)opt + aoff);
    15441496                                //dump_msg_option("evl_depref1", (uint8_t*)iaa);
     
    15521504                                        }
    15531505
    1554                                 /* IAADDR の有効時間を更新する。*/
     1506                                /* IAADDR の有効時間を更新する。*/
    15551507                                iaa = (T_DHCP6_OPT_IAADDR*)((uint8_t*)opt + aoff);
    15561508                                if (!(MSG2HOST16(iaa->len) & DHCP6C_IAA_FLAG_EXPIRED)) {
     
    15701522                                }
    15711523
    1572                         /* iaa_low と iaa_high/2 の最長の方を有効時間として選択する。*/
     1524                        /* iaa_low と iaa_high/2 の最長の方を有効時間として選択する。*/
    15731525                        if (iaa_low <= (iaa_high / 2))
    15741526                                expire = iaa_high;
     
    15761528                                expire = iaa_low;
    15771529
    1578                         /* expire が 最大値(無制限)か 1 以下なら既定値に設定する。*/
     1530                        /* expire が 最大値(無制限)か 1 以下なら既定値に設定する。*/
    15791531                        if ((expire == DHCP6_MAX_TIME) || (expire <= 1))
    15801532                                expire  = SYSTIM2SEC(TMO_DHCP6C_REQ_LEASE) / 2;
     
    15821534                                expire /= 2;
    15831535
    1584                         /* renew を決定する。*/
     1536                        /* renew を決定する。*/
    15851537                        if (MSG2HOST32(ia->renew) == 0)
    15861538                                tval = expire + SYSTIM2SEC(ct->act_msg->rcv_time);
     
    15921544                                renew = tval;
    15931545
    1594                         /* rebind を決定する。*/
     1546                        /* rebind を決定する。*/
    15951547                        if (MSG2HOST32(ia->rebind) == 0)
    15961548                                tval = (expire + expire / 2) + SYSTIM2SEC(ct->act_msg->rcv_time);
     
    16021554                                rebind = tval;
    16031555
    1604                         /* 最短有効時間と最長有効時間を更新する。*/
     1556                        /* 最短有効時間と最長有効時間を更新する。*/
    16051557                        iaa_low  += SYSTIM2SEC(ct->act_msg->rcv_time);
    16061558                        iaa_high += SYSTIM2SEC(ct->act_msg->rcv_time);
     
    16141566                }
    16151567
    1616         /* アドレスが送られていなければ、SLEEP 状æ
    1617 ‹ã«é·ç§»ã™ã‚‹ã€‚*/
     1568        /* アドレスが送られていなければ、SLEEP 状態に遷移する。*/
    16181569        if (addrs == 0) {
    16191570                ct->fsm    = DHCP6_FSM_SLEEP;
    16201571                }
    16211572
    1622         /* 状æ
    1623 ‹ã«ä¾å­˜ã™ã‚‹å‡¦ç† */
     1573        /* 状態に依存する処理 */
    16241574        switch (ct->fsm) {
    16251575
    16261576        case DHCP6_FSM_BOUND:
    16271577
    1628                 /* RENEW タイムアウトの設定 */
     1578                /* RENEW タイムアウトの設定 */
    16291579                if ((rebind > SYSTIM2SEC(time)) && (renew < rebind)) {
    16301580                        ct->next_MRD = SEC2SYSTIM(rebind) - time;
     
    16341584                        break;
    16351585                        }
    1636                 /* break; */    /* 下に抜ける。*/
     1586                /* break; */    /* 下に抜ける。*/
    16371587
    16381588        case DHCP6_FSM_RENEW:
    16391589
    1640                 /* REBIND タイムアウトの設定 */
     1590                /* REBIND タイムアウトの設定 */
    16411591                ct->MRD = SEC2SYSTIM(rebind);
    16421592                if (rebind != DHCP6_MAX_TIME) {
     
    16571607                }
    16581608
    1659         /* DEPREF タイムアウトの設定 */
     1609        /* DEPREF タイムアウトの設定 */
    16601610        if (depref != DHCP6_MAX_TIME) {
    16611611                syscall(wai_sem(SEM_DHCP6_CLI_TIMER));
     
    16641614                }
    16651615
    1666         /* EXPIRE タイムアウトの設定 */
     1616        /* EXPIRE タイムアウトの設定 */
    16671617        if (low != DHCP6_MAX_TIME) {
    16681618                syscall(wai_sem(SEM_DHCP6_CLI_TIMER));
     
    16731623
    16741624/*
    1675  *  start_init -- INIT 状æ
    1676 ‹ã«é·ç§»ã™ã‚‹ã€‚
     1625 *  start_init -- INIT 状態に遷移する。
    16771626 */
    16781627
     
    16801629start_init (T_DHCP6_CLI_CONTEXT *ct)
    16811630{
    1682         /* タイムアウトを設定する。【RFC3315 (17.1.2) 参ç
    1683 §ã€‘*/
     1631        /* タイムアウトを設定する。【RFC3315 (17.1.2) 参照】*/
    16841632        ct->IRT = TMO_SOL_TIMEOUT;
    16851633        ct->MRT = TMO_SOL_MAX_RT;
    16861634        ct->MRC = 0;
    16871635
    1688         /* DHCP6_CLI_CFG_ONE_TRYが指定されていなければ標準タイムアウトまで再送する。*/
     1636        /* DHCP6_CLI_CFG_ONE_TRYが指定されていなければ標準タイムアウトまで再送する。*/
    16891637#if defined(DHCP6_CLI_CFG_ONE_TRY)
    16901638        ct->MRD = 0;
     
    16931641#endif
    16941642
    1695         /* 再送回数とトランザクション ID を設定する。*/
     1643        /* 再送回数とトランザクション ID を設定する。*/
    16961644        init_retrans(ct);
    16971645
    1698         /* RFC3315 (17.1.2) の規定に従ってタイムアウトを調整する。*/
     1646        /* RFC3315 (17.1.2) の規定に従ってタイムアウトを調整する。*/
    16991647        if (ct->RT <= ct->IRT)
    17001648                ct->RT = ct->IRT + (ct->IRT - ct->RT);
     
    17021650                ct->RT = ct->IRT + SEC2SYSTIM(1);
    17031651
    1704         /* ADVERTISE メッセージの受信タイムアウトを設定する。*/
     1652        /* ADVERTISE メッセージの受信タイムアウトを設定する。*/
    17051653        syscall(wai_sem(SEM_DHCP6_CLI_TIMER));
    17061654        ct->timers[DHCP6C_TIMER_RCV_ADV] = SYSTIM2TIMER(ct->MRD);
     
    17081656
    17091657        /*
    1710          *  SOLICIT メッセージ送信é
    1711 å»¶æ™‚間を設定する。
    1712          *  ただし、TMO_SOL_MAX_DELAY が 1[s]なので、dly_tsk()を使用する。
     1658         *  SOLICIT メッセージ送信遅延時間を設定する。
     1659         *  ただし、TMO_SOL_MAX_DELAY が 1[s]なので、dly_tsk()を使用する。
    17131660         */
    17141661        dly_tsk(netapp_rand() % TMO_SOL_MAX_DELAY);
    17151662
    1716         /* INIT 状æ
    1717 ‹ã«é·ç§»ã™ã‚‹ã€‚*/
     1663        /* INIT 状態に遷移する。*/
    17181664        ct->fsm = DHCP6_FSM_INIT;
    17191665
    1720         /* SOLICIT メッセージを送信する。*/
     1666        /* SOLICIT メッセージを送信する。*/
    17211667        ct->flags |= DHCP6C_FLAG_TMOUT_SND_SOL;
    17221668        syscall(sig_sem(SEM_DHCP6_CLI_READY));
     
    17241670
    17251671/*
    1726  *  start_select -- REQUEST メッセージを送信して SELECT 状æ
    1727 ‹ã«é·ç§»ã™ã‚‹ã€‚
     1672 *  start_select -- REQUEST メッセージを送信して SELECT 状態に遷移する。
    17281673 */
    17291674
     
    17311676start_select (T_DHCP6_CLI_CONTEXT *ct)
    17321677{
    1733         /* 有効な ADVERTISE メッセージを受信していなければ SLEEP 状æ
    1734 ‹ã«é·ç§»ã™ã‚‹ã€‚*/
     1678        /* 有効な ADVERTISE メッセージを受信していなければ SLEEP 状態に遷移する。*/
    17351679        if (ct->adv_msg == NULL) {
    17361680                ct->fsm = DHCP6_FSM_SLEEP;
     
    17381682                }
    17391683
    1740         /* タイムアウトを設定する。【RFC3315 (18.1.1) 参ç
    1741 §ã€‘*/
     1684        /* タイムアウトを設定する。【RFC3315 (18.1.1) 参照】*/
    17421685        ct->IRT = TMO_REQ_TIMEOUT;
    17431686        ct->MRT = TMO_REQ_MAX_RT;
     
    17451688        ct->MRD = 0;
    17461689
    1747         /* 再送回数とトランザクション ID を設定する。*/
     1690        /* 再送回数とトランザクション ID を設定する。*/
    17481691        init_retrans(ct);
    17491692
    1750         /* REPLY メッセージの受信タイムアウトを設定する。*/
     1693        /* REPLY メッセージの受信タイムアウトを設定する。*/
    17511694        syscall(wai_sem(SEM_DHCP6_CLI_TIMER));
    17521695        ct->timers[DHCP6C_TIMER_RCV_REPLY] = SYSTIM2TIMER(ct->MRD);
    17531696        syscall(sig_sem(SEM_DHCP6_CLI_TIMER));
    17541697
    1755         /* SELECT 状æ
    1756 ‹ã«é·ç§»ã™ã‚‹ã€‚*/
     1698        /* SELECT 状態に遷移する。*/
    17571699        ct->fsm = DHCP6_FSM_SELECT;
    17581700
    1759         /* REQUEST メッセージを送信する。*/
     1701        /* REQUEST メッセージを送信する。*/
    17601702        ct->flags |= DHCP6C_FLAG_TMOUT_SND_REQ;
    17611703        syscall(sig_sem(SEM_DHCP6_CLI_READY));
     
    17631705
    17641706/*
    1765  *  start_bound -- BOUND 状æ
    1766 ‹ã«é·ç§»ã™ã‚‹ã€‚
     1707 *  start_bound -- BOUND 状態に遷移する。
    17671708 */
    17681709
     
    17701711start_bound (T_DHCP6_CLI_CONTEXT *ct)
    17711712{
    1772         /* 有効なリースæƒ
    1773 å ±ãŒç„¡ã‘れば SLEEP に遷移する。*/
     1713        /* 有効なリース情報が無ければ SLEEP に遷移する。*/
    17741714        if (ct->act_msg == NULL)
    17751715                ct->fsm = DHCP6_FSM_SLEEP;
    17761716
    1777         /* BOUND 状æ
    1778 ‹ã«é·ç§»ã™ã‚‹ã€‚*/
     1717        /* BOUND 状態に遷移する。*/
    17791718        ct->fsm    = DHCP6_FSM_BOUND;
    17801719
    1781         /* リースæƒ
    1782 å ±ã‚’設定する。*/
     1720        /* リース情報を設定する。*/
    17831721        set_lease(ct);
    17841722
    1785         /* 有効時間を決定する。*/
     1723        /* 有効時間を決定する。*/
    17861724        eval_expire(ct);
    17871725
    17881726        }
    17891727/*
    1790  *  start_renew -- RENEW 状æ
    1791 ‹ã«é·ç§»ã™ã‚‹ã€‚
     1728 *  start_renew -- RENEW 状態に遷移する。
    17921729 */
    17931730
     
    17951732start_renew (T_DHCP6_CLI_CONTEXT *ct)
    17961733{
    1797         /* 有効なリースæƒ
    1798 å ±ãŒç„¡ã‘れば SLEEP に遷移する。*/
     1734        /* 有効なリース情報が無ければ SLEEP に遷移する。*/
    17991735        if (ct->act_msg == NULL) {
    18001736                ct->fsm = DHCP6_FSM_SLEEP;
     
    18021738                }
    18031739
    1804         /* タイムアウトを設定する。【RFC3315 (18.1.3) 参ç
    1805 §ã€‘*/
     1740        /* タイムアウトを設定する。【RFC3315 (18.1.3) 参照】*/
    18061741        ct->IRT = TMO_REN_TIMEOUT;
    18071742        ct->MRT = TMO_REN_MAX_RT;
     
    18091744        ct->MRD = ct->next_MRD;
    18101745
    1811         /* 再送回数とトランザクション ID を設定する。*/
     1746        /* 再送回数とトランザクション ID を設定する。*/
    18121747        init_retrans(ct);
    18131748
    1814         /* REFRESH メッセージタイプを設定する。*/
     1749        /* REFRESH メッセージタイプを設定する。*/
    18151750        ct->refresh_type = DHCP6_RENEW;
    18161751
    1817         /* REPLY メッセージの受信タイムアウトを設定する。*/
     1752        /* REPLY メッセージの受信タイムアウトを設定する。*/
    18181753        syscall(wai_sem(SEM_DHCP6_CLI_TIMER));
    18191754        ct->timers[DHCP6C_TIMER_RCV_REPLY] = SYSTIM2TIMER(ct->MRD);
    18201755        syscall(sig_sem(SEM_DHCP6_CLI_TIMER));
    18211756
    1822         /* RENEW 状æ
    1823 ‹ã«é·ç§»ã™ã‚‹ã€‚*/
     1757        /* RENEW 状態に遷移する。*/
    18241758        ct->fsm = DHCP6_FSM_RENEW;
    18251759
    1826         /* REFRESH メッセージを送信する。*/
     1760        /* REFRESH メッセージを送信する。*/
    18271761        ct->flags |= DHCP6C_FLAG_TMOUT_SND_REF;
    18281762        syscall(sig_sem(SEM_DHCP6_CLI_READY));
     
    18301764
    18311765/*
    1832  *  start_rebind -- REBIND 状æ
    1833 ‹ã«é·ç§»ã™ã‚‹ã€‚
     1766 *  start_rebind -- REBIND 状態に遷移する。
    18341767 */
    18351768
     
    18371770start_rebind (T_DHCP6_CLI_CONTEXT *ct)
    18381771{
    1839         /* 有効なリースæƒ
    1840 å ±ãŒç„¡ã‘れば SLEEP に遷移する。*/
     1772        /* 有効なリース情報が無ければ SLEEP に遷移する。*/
    18411773        if (ct->act_msg == NULL) {
    18421774                ct->fsm = DHCP6_FSM_SLEEP;
     
    18441776                }
    18451777
    1846         /* タイムアウトを設定する。【RFC3315 (18.1.4) 参ç
    1847 §ã€‘*/
     1778        /* タイムアウトを設定する。【RFC3315 (18.1.4) 参照】*/
    18481779        ct->IRT = TMO_REB_TIMEOUT;
    18491780        ct->MRT = TMO_REB_MAX_RT;
     
    18511782        ct->MRD = ct->next_MRD;
    18521783
    1853         /* 再送回数とトランザクション ID を設定する。*/
     1784        /* 再送回数とトランザクション ID を設定する。*/
    18541785        init_retrans(ct);
    18551786
    1856         /* REFRESH メッセージタイプを設定する。*/
     1787        /* REFRESH メッセージタイプを設定する。*/
    18571788        ct->refresh_type = DHCP6_REBIND;
    18581789
    1859         /* REPLY メッセージの受信タイムアウトを設定する。*/
     1790        /* REPLY メッセージの受信タイムアウトを設定する。*/
    18601791        syscall(wai_sem(SEM_DHCP6_CLI_TIMER));
    18611792        ct->timers[DHCP6C_TIMER_RCV_REPLY] = SYSTIM2TIMER(ct->MRD);
    18621793        syscall(sig_sem(SEM_DHCP6_CLI_TIMER));
    18631794
    1864         /* 送信å
    1865 ˆã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’設定する。*/
     1795        /* 送信先アドレスを設定する。*/
    18661796        ct->dst.ipaddr  = in6_addr_all_DHCP_relay_servers;
    18671797
    1868         /* REBIND 状æ
    1869 ‹ã«é·ç§»ã™ã‚‹ã€‚*/
     1798        /* REBIND 状態に遷移する。*/
    18701799        ct->fsm = DHCP6_FSM_REBIND;
    18711800
    1872         /* REFRESH メッセージを送信する。*/
     1801        /* REFRESH メッセージを送信する。*/
    18731802        ct->flags |= DHCP6C_FLAG_TMOUT_SND_REF;
    18741803        syscall(sig_sem(SEM_DHCP6_CLI_READY));
     
    18761805
    18771806/*
    1878  *  start_rel_info -- アドレスæƒ
    1879 å ±ã‚’解放する。
     1807 *  start_rel_info -- アドレス情報を解放する。
    18801808 *
    1881  *    注意: DHCPv6 の RFC3315 には無い
     1809 *    注意: DHCPv6 の RFC3315 には無い
    18821810 */
    18831811
     
    18851813start_rel_info (T_DHCP6_CLI_CONTEXT *ct)
    18861814{
    1887         /* å
    1888 ¨ã¦ã® TIMER をキャンセルする。*/
     1815        /* 全ての TIMER をキャンセルする。*/
    18891816        cancel_all_timers(ct);
    18901817
    1891         /* リースæƒ
    1892 å ±ã‚’解放する。*/
     1818        /* リース情報を解放する。*/
    18931819        rel_lease(ct);
    18941820
    1895         /* 有効なリースæƒ
    1896 å ±ãŒç„¡ã‘れば SLEEP に遷移する。*/
     1821        /* 有効なリース情報が無ければ SLEEP に遷移する。*/
    18971822        if (ct->act_msg == NULL) {
    18981823                ct->fsm = DHCP6_FSM_SLEEP;
     
    19001825                }
    19011826
    1902         /* タイムアウトを設定する。【RFC3315 (18.1.1) 参ç
    1903 §ã€‘*/
     1827        /* タイムアウトを設定する。【RFC3315 (18.1.1) 参照】*/
    19041828        ct->IRT = TMO_REL_TIMEOUT;
    19051829        ct->MRT = 0;
     
    19071831        ct->MRD = 0;
    19081832
    1909         /* 再送回数とトランザクション ID を設定する。*/
     1833        /* 再送回数とトランザクション ID を設定する。*/
    19101834        init_retrans(ct);
    19111835
    1912         /* REL_INFO 状æ
    1913 ‹ã«é·ç§»ã™ã‚‹ã€‚*/
     1836        /* REL_INFO 状態に遷移する。*/
    19141837        ct->fsm = DHCP6_FSM_REL_INFO;
    19151838
    1916         /* RELEASE メッセージを送信する。*/
     1839        /* RELEASE メッセージを送信する。*/
    19171840        ct->flags |= DHCP6C_FLAG_TMOUT_SND_REL;
    19181841        syscall(sig_sem(SEM_DHCP6_CLI_READY));
     
    19221845
    19231846/*
    1924  *  solicit_ia_option -- SOLICIT メッセージの IA_NA/IA_TA/IA_PD オプションのå
    1925 ±é€šéƒ¨åˆ†ã‚’追加する。
     1847 *  solicit_ia_option -- SOLICIT メッセージの IA_NA/IA_TA/IA_PD オプションの共通部分を追加する。
    19261848 */
    19271849
     
    19321854        uint_t                  off, len;
    19331855
    1934         /* オプションコードを設定する。*/
     1856        /* オプションコードを設定する。*/
    19351857        ia = (T_DHCP6_OPT_IA_TA*)msg;
    19361858        HOST2MSG16(ia->code, code);
    19371859
    1938         /* IAID を設定する。*/
     1860        /* IAID を設定する。*/
    19391861        if (sizeof(ct->sc->ifaddr.lladdr) > sizeof(uint32_t)) {
    19401862                off = sizeof(ct->sc->ifaddr.lladdr) - 4;
     
    19491871
    19501872/*
    1951  *  solicit_iaaddr_option -- SOLICIT メッセージの IAADDR オプションを追加する。
     1873 *  solicit_iaaddr_option -- SOLICIT メッセージの IAADDR オプションを追加する。
    19521874 */
    19531875
     
    19611883
    19621884        /*
    1963          *  有効なリース・メッセージが残っていて、
    1964          *  指定されたオプション(IA_NA/IA_TA/IA_PD)がある場合は
    1965          *  同じアドレスを要求する。
     1885         *  有効なリース・メッセージが残っていて、
     1886         *  指定されたオプション(IA_NA/IA_TA/IA_PD)がある場合は
     1887         *  同じアドレスを要求する。
    19661888         */
    19671889        if ((ct->act_msg == NULL) || (opt = find_msg_option(ct->act_msg, code, 0)) == NULL)
    19681890                return 0;
    19691891
    1970         /* オプションコードを設定する。*/
     1892        /* オプションコードを設定する。*/
    19711893        iaa = (T_DHCP6_OPT_IAADDR*)msg;
    19721894        HOST2MSG16(iaa->code, DHCP6_OPT_IAADDR);
    19731895
    1974         /* IAADDR オプションを除いたオプション長を設定する。*/
     1896        /* IAADDR オプションを除いたオプション長を設定する。*/
    19751897        HOST2MSG16(iaa->len, sizeof(*iaa) - sizeof(T_DHCP6_OPTION));
    19761898
    1977         /* アドレスを設定する。*/
     1899        /* アドレスを設定する。*/
    19781900        len = code == DHCP6_OPT_IA_TA ? sizeof(T_DHCP6_OPT_IA_TA)
    19791901                                      : sizeof(T_DHCP6_OPT_IA_NA_PD);
    19801902        memcpy(&iaa->addr, opt + sizeof(T_DHCP6_OPTION) + len, sizeof(iaa->addr));
    19811903
    1982         /* T1、T2 を設定する。*/
     1904        /* T1、T2 を設定する。*/
    19831905        t1 = TMO_DHCP6C_REQ_LEASE / 2;
    19841906        t2 = t1 + (t1 / 2);
     
    19921914
    19931915/*
    1994  *  solicit_ia_na_pd -- SOLICIT メッセージの IA_NA/IA_PD オプションを追加する。
     1916 *  solicit_ia_na_pd -- SOLICIT メッセージの IA_NA/IA_PD オプションを追加する。
    19951917 */
    19961918
     
    20041926        uint_t                  len;
    20051927
    2006         /* IA_NA/IA_TA/IA_PD オプションのå
    2007 ±é€šéƒ¨åˆ†ã‚’追加する。*/
     1928        /* IA_NA/IA_TA/IA_PD オプションの共通部分を追加する。*/
    20081929        solicit_ia_option(ct, msg, code);
    20091930        ia = (T_DHCP6_OPT_IA_NA_PD*)msg;
    20101931
    2011         /* T1、T2 を設定する。*/
     1932        /* T1、T2 を設定する。*/
    20121933        t1 = TMO_DHCP6C_REQ_LEASE / 2;
    20131934        t2 = t1 + (t1 / 2);
     
    20161937
    20171938        /*
    2018          *  有効なリース・メッセージが残っていて、
    2019          *  指定されたオプション(IA_NA/IA_PD)がある場合は
    2020          *  同じアドレスを要求する。
     1939         *  有効なリース・メッセージが残っていて、
     1940         *  指定されたオプション(IA_NA/IA_PD)がある場合は
     1941         *  同じアドレスを要求する。
    20211942         */
    20221943        msg += sizeof(*ia);
    20231944        len  = solicit_iaaddr_option(ct, msg, code);
    20241945
    2025         /* IA_NAIA_TA/IA_PD オプションを除いたオプション長を設定する。*/
     1946        /* IA_NAIA_TA/IA_PD オプションを除いたオプション長を設定する。*/
    20261947        HOST2MSG16(ia->len, (sizeof(*ia) + len) - sizeof(T_DHCP6_OPTION));
    20271948
     
    20321953
    20331954/*
    2034  *  solicit_ia_ta -- SOLICIT メッセージの IA_TA オプションを追加する。
     1955 *  solicit_ia_ta -- SOLICIT メッセージの IA_TA オプションを追加する。
    20351956 */
    20361957
     
    20421963        T_DHCP6_OPT_IA_TA       *ia;
    20431964
    2044         /* IA_NA/IA_TA/IA_PD オプションのå
    2045 ±é€šéƒ¨åˆ†ã‚’追加する。*/
     1965        /* IA_NA/IA_TA/IA_PD オプションの共通部分を追加する。*/
    20461966        solicit_ia_option(ct, msg, DHCP6_OPT_IA_TA);
    20471967
    2048         /* IA_NAIA_TA/IA_PD オプションを除いたオプション長を設定する。*/
     1968        /* IA_NAIA_TA/IA_PD オプションを除いたオプション長を設定する。*/
    20491969        ia = (T_DHCP6_OPT_IA_TA*)msg;
    20501970        HOST2MSG16(ia->len, sizeof(*ia) - sizeof(T_DHCP6_OPTION));
    20511971
    20521972        /*
    2053          *  有効なリース・メッセージが残っていて、
    2054          *  指定されたオプション(IA_TA)がある場合は
    2055          *  同じアドレスを要求する。
     1973         *  有効なリース・メッセージが残っていて、
     1974         *  指定されたオプション(IA_TA)がある場合は
     1975         *  同じアドレスを要求する。
    20561976         */
    20571977        msg += sizeof(*ia);
     
    20621982
    20631983/*
    2064  *  setup_solicit_msg -- SOLICIT メッセージを作成する。
     1984 *  setup_solicit_msg -- SOLICIT メッセージを作成する。
    20651985 */
    20661986
     
    20701990        uint8_t *head, *msg;
    20711991
    2072         /* メッセージのヘッダ部分を作成する。*/
     1992        /* メッセージのヘッダ部分を作成する。*/
    20731993        if ((head = setup_msg_header(ct, DHCP6_SOLICIT)) == NULL)
    20741994                return E_PAR;
     
    20791999#if defined(DHCP6_CLI_CFG_IA_NA)
    20802000
    2081         /* IA_NA を追加する。*/
     2001        /* IA_NA を追加する。*/
    20822002        msg = solicit_ia_na_pd(ct, msg, DHCP6_OPT_IA_NA);
    20832003#endif
     
    20852005#if defined(DHCP6_CLI_CFG_IA_TA)
    20862006
    2087         /* IA_TA を追加する。*/
     2007        /* IA_TA を追加する。*/
    20882008        msg = solicit_ia_ta(ct, msg);
    20892009#endif
     
    20912011#if defined(DHCP6_CLI_CFG_IA_PD)
    20922012
    2093         /* IA_PD を追加する。*/
     2013        /* IA_PD を追加する。*/
    20942014        msg = solicit_ia_na_pd(ct, msg, DHCP6_OPT_IA_PD);
    20952015#endif
    20962016
    2097         /* メッセージ構造体長を設定する。*/
     2017        /* メッセージ構造体長を設定する。*/
    20982018        ct->snd_msg->len = msg - (uint8_t*)&ct->snd_msg->msg;
    20992019
    2100         /* 送信å
    2101 ˆã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’設定する。*/
     2020        /* 送信先アドレスを設定する。*/
    21022021        ct->dst.ipaddr  = in6_addr_all_DHCP_relay_servers;
    21032022        return E_OK;
     
    21052024
    21062025/*
    2107  *  send_solicit_msg -- SOLICIT メッセージを送信する。
     2026 *  send_solicit_msg -- SOLICIT メッセージを送信する。
    21082027 */
    21092028
     
    21162035        ct->error = E_OK;
    21172036
    2118         /* ADVERTISE メッセージの選択が終了していれば、SELECT 状æ
    2119 ‹ã«é·ç§»ã™ã‚‹ã€‚*/
     2037        /* ADVERTISE メッセージの選択が終了していれば、SELECT 状態に遷移する。*/
    21202038        if (select_adv(ct)) {
    21212039
    2122                 /* ADVERTISE メッセージ受信タイマーを停止する。*/
     2040                /* ADVERTISE メッセージ受信タイマーを停止する。*/
    21232041                syscall(wai_sem(SEM_DHCP6_CLI_TIMER));
    21242042                ct->timers[DHCP6C_TIMER_RCV_ADV] = 0;
    21252043                syscall(sig_sem(SEM_DHCP6_CLI_TIMER));
    21262044
    2127                 /* REQUEST メッセージを送信して SELECT 状æ
    2128 ‹ã«é·ç§»ã™ã‚‹ã€‚*/
     2045                /* REQUEST メッセージを送信して SELECT 状態に遷移する。*/
    21292046                start_select(ct);
    21302047                return;
    21312048                }
    21322049
    2133         /* 再送信回数を確認する。*/
     2050        /* 再送信回数を確認する。*/
    21342051        if ((ct->MRC != 0) && (ct->txcount > ct->MRC)) {
    21352052                ct->error  = E_TMOUT;
     
    21372054                }
    21382055
    2139         /* SOLICIT メッセージを作成する。*/
     2056        /* SOLICIT メッセージを作成する。*/
    21402057        if ((error = setup_solicit_msg(ct, NULL)) != E_OK) {
    21412058                syslog(LOG_NOTICE, "[DHCP6C] error, setup solicit message: %s.", itron_strerror(error));
     
    21442061                }
    21452062
    2146         /* SOLICIT メッセージを送信する。*/
     2063        /* SOLICIT メッセージを送信する。*/
    21472064        error = UDP_SND_DAT(ct->cepid, &ct->dst, &ct->snd_msg->msg, ct->snd_msg->len, TMO_NBLK);
    21482065        if (error != E_WBLK) {
     
    21522069                }
    21532070
    2154         /* 再送信タイムアウトを設定する。*/
     2071        /* 再送信タイムアウトを設定する。*/
    21552072        syscall(wai_sem(SEM_DHCP6_CLI_TIMER));
    21562073        ct->timers[DHCP6C_TIMER_SND_SOL] = SYSTIM2TIMER(ct->RT);
    21572074        syscall(sig_sem(SEM_DHCP6_CLI_TIMER));
    21582075
    2159         /* 再送信タイムアウトを更新する。*/
     2076        /* 再送信タイムアウトを更新する。*/
    21602077        advance_retrans(ct);
    21612078        }
    21622079
    21632080/*
    2164  *  request_ia_option -- REQUEST メッセージの IA_NA/IA_TA/IA_PD オプションのå
    2165 ±é€šéƒ¨åˆ†ã‚’追加する。
     2081 *  request_ia_option -- REQUEST メッセージの IA_NA/IA_TA/IA_PD オプションの共通部分を追加する。
    21662082 */
    21672083
     
    21762092        src = (T_DHCP6_OPT_IA_NA_PD*)lease;
    21772093
    2178         /* オプションコードを設定する。*/
     2094        /* オプションコードを設定する。*/
    21792095        HOST2MSG16(dst->code, code);
    21802096
    2181         /* IA_NAIA_TA/IA_PD オプションを除いたオプション長を設定する。*/
     2097        /* IA_NAIA_TA/IA_PD オプションを除いたオプション長を設定する。*/
    21822098        HOST2MSG16(dst->len, sizeof(*dst) - (sizeof(dst->code) + sizeof(dst->len)));
    21832099
    2184         /* ADVERTISE メッセージから IA ID をコピーする。*/
     2100        /* ADVERTISE メッセージから IA ID をコピーする。*/
    21852101        memcpy(&dst->iaid, &src->iaid, sizeof(src->iaid));
    21862102
     
    21912107
    21922108/*
    2193  *  request_ia_na_pd -- REQUEST メッセージの IA_NA/IA_PD オプションを追加する。
     2109 *  request_ia_na_pd -- REQUEST メッセージの IA_NA/IA_PD オプションを追加する。
    21942110 */
    21952111
     
    22052121        uint_t                  ix, nsiaa;
    22062122
    2207         /* ADVERTISE メッセージに指定されたオプションがあることを確認する。*/
     2123        /* ADVERTISE メッセージに指定されたオプションがあることを確認する。*/
    22082124        if ((opt = find_msg_option(lease, opt_code, 0)) == NULL)
    22092125                return msg;
    22102126
    2211         /* IA_NA/IA_TA/IA_PD オプションのå
    2212 ±é€šéƒ¨åˆ†ã‚’追加する。*/
     2127        /* IA_NA/IA_TA/IA_PD オプションの共通部分を追加する。*/
    22132128        dia = (T_DHCP6_OPT_IA_NA_PD*)msg;
    22142129        sia = (T_DHCP6_OPT_IA_NA_PD*)opt;
    22152130        msg = request_ia_option(ct, msg, opt_code, opt);
    22162131
    2217         /* T1、T2 を決定する。*/
     2132        /* T1、T2 を決定する。*/
    22182133        switch (msg_type) {
    22192134        case DHCP6_REQUEST:
     
    22362151                }
    22372152
    2238         /* T1、T2 を設定する。*/
     2153        /* T1、T2 を設定する。*/
    22392154        HOST2MSG32(dia->renew,  t1);
    22402155        HOST2MSG32(dia->rebind, t2);
    22412156        msg += sizeof(dia->renew) + sizeof(dia->rebind);
    22422157
    2243         /* IAADDR オプションを設定する。*/
     2158        /* IAADDR オプションを設定する。*/
    22442159        nsiaa = ((MSG2HOST16(sia->len) & ~DHCP6C_IAA_FLAG_MASK) - (sizeof(*sia) - (sizeof(sia->code) + sizeof(sia->len)))) / sizeof(*siaa);
    22452160
     
    22482163                siaa = (T_DHCP6_OPT_IAADDR*)((opt + sizeof(*sia)) + sizeof(*siaa) * ix);
    22492164
    2250                 /* アドレスの有効期限が切れていればスキップする。*/
     2165                /* アドレスの有効期限が切れていればスキップする。*/
    22512166                if (MSG2HOST16(siaa->len) & DHCP6C_IAA_FLAG_EXPIRED)
    22522167                        continue;
    22532168
    2254                 /* コードと長さを設定する。*/
     2169                /* コードと長さを設定する。*/
    22552170                memcpy(&diaa->code, &siaa->code, sizeof(siaa->code));
    22562171                HOST2MSG16(diaa->len, MSG2HOST16(siaa->len) & ~DHCP6C_IAA_FLAG_MASK);
    22572172                msg += sizeof(dia->code) + sizeof(dia->len);
    22582173
    2259                 /* IPv6 アドレスをコピーする。*/
     2174                /* IPv6 アドレスをコピーする。*/
    22602175                memcpy(&diaa->addr, &siaa->addr, sizeof(siaa->addr));
    22612176                msg += sizeof(diaa->addr);
    22622177
    2263                 /* T1、T2 を決定する。*/
     2178                /* T1、T2 を決定する。*/
    22642179                switch (msg_type) {
    22652180                case DHCP6_REQUEST:
     
    22822197                        }
    22832198
    2284                 /* T1、T2 を設定する。*/
     2199                /* T1、T2 を設定する。*/
    22852200                HOST2MSG32(diaa->prefer, t1);
    22862201                HOST2MSG32(diaa->valid,  t2);
    22872202                msg += sizeof(diaa->prefer) + sizeof(diaa->valid);
    22882203
    2289                 /* IAADDR に付加オプションを追加する【å
    2290 ˆé€ã‚Šã€‘。*/
     2204                /* IAADDR に付加オプションを追加する【先送り】。*/
    22912205                }
    22922206
     
    22992213
    23002214/*
    2301  *  request_ia_ta -- REQUEST メッセージの IA_TA オプションを追加する。
     2215 *  request_ia_ta -- REQUEST メッセージの IA_TA オプションを追加する。
    23022216 */
    23032217
     
    23132227        uint_t                  ix, nsiaa;
    23142228
    2315         /* ADVERTISE メッセージに IA_TA オプションがあることを確認する。*/
     2229        /* ADVERTISE メッセージに IA_TA オプションがあることを確認する。*/
    23162230        if ((opt = find_msg_option(lease, DHCP6_OPT_IA_TA, 0)) == NULL)
    23172231                return msg;
    23182232
    2319         /* IA_NA/IA_TA/IA_PD オプションのå
    2320 ±é€šéƒ¨åˆ†ã‚’追加する。*/
     2233        /* IA_NA/IA_TA/IA_PD オプションの共通部分を追加する。*/
    23212234        dia = (T_DHCP6_OPT_IA_TA*)msg;
    23222235        sia = (T_DHCP6_OPT_IA_TA*)opt;
    23232236        msg = request_ia_option(ct, msg, DHCP6_OPT_IA_TA, opt);
    23242237
    2325         /* IAADDR オプションを設定する。*/
     2238        /* IAADDR オプションを設定する。*/
    23262239        nsiaa = ((MSG2HOST16(sia->len) & ~DHCP6C_IAA_FLAG_MASK) - (sizeof(*sia) - (sizeof(sia->code) + sizeof(sia->len)))) / sizeof(*siaa);
    23272240
     
    23302243                siaa = (T_DHCP6_OPT_IAADDR*)((opt + sizeof(*sia)) + sizeof(*siaa) * ix);
    23312244
    2332                 /* アドレスの有効期限が切れていればスキップする。*/
     2245                /* アドレスの有効期限が切れていればスキップする。*/
    23332246                if (MSG2HOST16(siaa->len) & DHCP6C_IAA_FLAG_EXPIRED)
    23342247                        continue;
    23352248
    2336                 /* コードと長さを設定する。*/
     2249                /* コードと長さを設定する。*/
    23372250                memcpy(diaa->code, siaa->code, sizeof(siaa->code));
    23382251                diaa->len  = HOST2MSG16(MSG2HOST16(siaa->len) & ~DHCP6C_IAA_FLAG_MASK);
    23392252                msg += sizeof(dia->code) + sizeof(dia->len);
    23402253
    2341                 /* IPv6 アドレスをコピーする。*/
     2254                /* IPv6 アドレスをコピーする。*/
    23422255                memcpy(diaa->addr, siaa->addr, sizeof(siaa->addr));
    23432256                msg += sizeof(diaa->addr);
    23442257
    2345                 /* T1、T2 を決定する。*/
     2258                /* T1、T2 を決定する。*/
    23462259                switch (msg_type) {
    23472260                case DHCP6_REQUEST:
     
    23642277                        }
    23652278
    2366                 /* T1、T2 を設定する。*/
     2279                /* T1、T2 を設定する。*/
    23672280                HOST2MSG32(diaa->prefer, t1);
    23682281                HOST2MSG32(diaa->valid,  t2);
    23692282                msg += sizeof(diaa->prefer) + sizeof(diaa->valid);
    23702283
    2371                 /* IAADDR に付加オプションを追加する【å
    2372 ˆé€ã‚Šã€‘。*/
     2284                /* IAADDR に付加オプションを追加する【先送り】。*/
    23732285                }
    23742286
     
    23792291
    23802292/*
    2381  *  setup_request_msg -- REQUEST メッセージを作成する。
     2293 *  setup_request_msg -- REQUEST メッセージを作成する。
    23822294 */
    23832295
     
    23872299        uint8_t *msg;
    23882300
    2389         /* メッセージのヘッダ部分を作成する。*/
     2301        /* メッセージのヘッダ部分を作成する。*/
    23902302        if ((msg = setup_msg_header(ct, type)) == NULL)
    23912303                return E_PAR;
     
    23962308#if defined(DHCP6_CLI_CFG_IA_NA)
    23972309
    2398         /* IA_NA を追加する。*/
     2310        /* IA_NA を追加する。*/
    23992311        msg = request_ia_na_pd(ct, msg, type, DHCP6_OPT_IA_NA, lease);
    24002312#endif
     
    24022314#if defined(DHCP6_CLI_CFG_IA_TA)
    24032315
    2404         /* IA_TA を追加する。*/
     2316        /* IA_TA を追加する。*/
    24052317        msg = request_ia_ta(ct, msg, type, lease);
    24062318#endif
     
    24082320#if defined(DHCP6_CLI_CFG_IA_PD)
    24092321
    2410         /* IA_PD を追加する。*/
     2322        /* IA_PD を追加する。*/
    24112323        msg = request_ia_na_pd(ct, msg, type, DHCP6_OPT_IA_PD, lease);
    24122324#endif
    24132325
    2414         /* メッセージ構造体長を設定する。*/
     2326        /* メッセージ構造体長を設定する。*/
    24152327        ct->snd_msg->len = msg - (uint8_t*)&ct->snd_msg->msg;
    24162328        return E_OK;
     
    24182330
    24192331/*
    2420  *  send_request_msg -- REQUEST メッセージを送信する。
     2332 *  send_request_msg -- REQUEST メッセージを送信する。
    24212333 */
    24222334
     
    24292341        ct->flags &= ~DHCP6C_FLAG_TMOUT_MASK;
    24302342
    2431         /* ADVERTISE メッセージを受信していなければエラー */
     2343        /* ADVERTISE メッセージを受信していなければエラー */
    24322344        if (ct->adv_msg == NULL) {
    24332345                ct->error  = E_OBJ;
     
    24352347                }
    24362348
    2437         /* REPLY メッセージの選択が終了していれば、BOUND 状æ
    2438 ‹ã«é·ç§»ã™ã‚‹ã€‚*/
     2349        /* REPLY メッセージの選択が終了していれば、BOUND 状態に遷移する。*/
    24392350        if (select_reply(ct)) {
    24402351
    2441                 /* REPLY メッセージ受信タイマーを停止する。*/
     2352                /* REPLY メッセージ受信タイマーを停止する。*/
    24422353                syscall(wai_sem(SEM_DHCP6_CLI_TIMER));
    24432354                ct->timers[DHCP6C_TIMER_RCV_REPLY] = 0;
    24442355                syscall(sig_sem(SEM_DHCP6_CLI_TIMER));
    24452356
    2446                 /* ADVERTISE メッセージを受信メッセージ構造体リストに戻す。*/
     2357                /* ADVERTISE メッセージを受信メッセージ構造体リストに戻す。*/
    24472358                syscall(wai_sem(SEM_DHCP6_CLI_LOCK));
    24482359                ct->adv_msg->next = ct->rcv_lst;
     
    24512362                syscall(sig_sem(SEM_DHCP6_CLI_LOCK));
    24522363
    2453                 /* BOUND 状æ
    2454 ‹ã«é·ç§»ã™ã‚‹ã€‚*/
     2364                /* BOUND 状態に遷移する。*/
    24552365                start_bound(ct);
    24562366                return;
    24572367                }
    24582368
    2459         /* 再送信回数を確認する。*/
     2369        /* 再送信回数を確認する。*/
    24602370        if ((ct->MRC != 0) && (ct->txcount > ct->MRC)) {
    24612371                ct->error  = E_TMOUT;
     
    24632373                }
    24642374
    2465         /* REQUEST メッセージを作成する。*/
     2375        /* REQUEST メッセージを作成する。*/
    24662376        if ((error = setup_request_msg(ct, ct->adv_msg, DHCP6_REQUEST)) != E_OK) {
    24672377                syslog(LOG_NOTICE, "[DHCP6C] error, setup request message: %s.", itron_strerror(error));
     
    24702380                }
    24712381
    2472         /* REQUEST メッセージを送信する。*/
     2382        /* REQUEST メッセージを送信する。*/
    24732383        error = UDP_SND_DAT(ct->cepid, &ct->dst, &ct->snd_msg->msg, ct->snd_msg->len, TMO_NBLK);
    24742384        if (error != E_WBLK) {
     
    24782388                }
    24792389
    2480         /* 再送信タイムアウトを設定する。*/
     2390        /* 再送信タイムアウトを設定する。*/
    24812391        syscall(wai_sem(SEM_DHCP6_CLI_TIMER));
    24822392        ct->timers[DHCP6C_TIMER_SND_REQ] = SYSTIM2TIMER(ct->RT);
    24832393        syscall(sig_sem(SEM_DHCP6_CLI_TIMER));
    24842394
    2485         /* 再送信タイムアウトを更新する。*/
     2395        /* 再送信タイムアウトを更新する。*/
    24862396        advance_retrans(ct);
    24872397        }
    24882398
    24892399/*
    2490  *  send_refresh_msg -- REFRESH メッセージを送信する。
     2400 *  send_refresh_msg -- REFRESH メッセージを送信する。
    24912401 */
    24922402
     
    24982408        uint8_t                 *opt;
    24992409
    2500         /* 有効なリースæƒ
    2501 å ±ãŒãªã‘ればエラー */
     2410        /* 有効なリース情報がなければエラー */
    25022411        ct->flags &= ~DHCP6C_FLAG_TMOUT_MASK;
    25032412        if (ct->act_msg == NULL)
    25042413                ct->error = E_OBJ;
    25052414
    2506         /* REFRESH タイプが RENEW または REBIND でなければエラー */
     2415        /* REFRESH タイプが RENEW または REBIND でなければエラー */
    25072416        if (!((ct->refresh_type == DHCP6_RENEW) || (ct->refresh_type == DHCP6_REBIND)))
    25082417                ct->error = E_PAR;
    25092418
    2510         /* REPLY メッセージの選択が終了していれば、BOUND 状æ
    2511 ‹ã«é·ç§»ã™ã‚‹ã€‚*/
     2419        /* REPLY メッセージの選択が終了していれば、BOUND 状態に遷移する。*/
    25122420        if (select_reply(ct)) {
    25132421
    2514                 /* REPLY メッセージ受信タイマーを停止する。*/
     2422                /* REPLY メッセージ受信タイマーを停止する。*/
    25152423                syscall(wai_sem(SEM_DHCP6_CLI_TIMER));
    25162424                ct->timers[DHCP6C_TIMER_RCV_REPLY] = 0;
    25172425                syscall(sig_sem(SEM_DHCP6_CLI_TIMER));
    25182426
    2519                 /* リースæƒ
    2520 å ±ã‚’解放する。*/
     2427                /* リース情報を解放する。*/
    25212428                rel_lease(ct);
    25222429
    2523                 /* BOUND 状æ
    2524 ‹ã«é·ç§»ã™ã‚‹ã€‚*/
     2430                /* BOUND 状態に遷移する。*/
    25252431                start_bound(ct);
    25262432                return;
    25272433                }
    25282434
    2529         /* 再送信回数を確認する。*/
     2435        /* 再送信回数を確認する。*/
    25302436        if ((ct->MRC != 0) && (ct->txcount > ct->MRC)) {
    25312437                eval_expire(ct);
     
    25342440
    25352441        /*
    2536          *  サーバから UNICAST オプションを受信したときは
    2537          *  指定したアドレスを送信å
    2538 ˆã‚¢ãƒ‰ãƒ¬ã‚¹ã«è¨­å®šã™ã‚‹ã€‚
     2442         *  サーバから UNICAST オプションを受信したときは
     2443         *  指定したアドレスを送信先アドレスに設定する。
    25392444         */
    25402445        if ((opt = find_msg_option(ct->act_msg, DHCP6_OPT_UNICAST, sizeof(T_DHCP6_OPT_UNICAST))) != NULL) {
     
    25432448                }
    25442449
    2545         /* REFRESH (REQUEST) メッセージを作成する。*/
     2450        /* REFRESH (REQUEST) メッセージを作成する。*/
    25462451        if ((error = setup_request_msg(ct, ct->act_msg, ct->refresh_type)) != E_OK) {
    25472452                syslog(LOG_NOTICE, "[DHCP6C] error, setup refresh message: %s.", itron_strerror(error));
     
    25502455                }
    25512456
    2552         /* REFRESH メッセージを送信する。*/
     2457        /* REFRESH メッセージを送信する。*/
    25532458        error = UDP_SND_DAT(ct->cepid, &ct->dst, &ct->snd_msg->msg, ct->snd_msg->len, TMO_NBLK);
    25542459        if (error != E_WBLK) {
     
    25582463                }
    25592464
    2560         /* 再送信タイムアウトを設定する。*/
     2465        /* 再送信タイムアウトを設定する。*/
    25612466        syscall(wai_sem(SEM_DHCP6_CLI_TIMER));
    25622467        ct->timers[DHCP6C_TIMER_SND_REF] = SYSTIM2TIMER(ct->RT);
    25632468        syscall(sig_sem(SEM_DHCP6_CLI_TIMER));
    25642469
    2565         /* 再送信タイムアウトを更新する。*/
     2470        /* 再送信タイムアウトを更新する。*/
    25662471        advance_retrans(ct);
    25672472        }
    25682473
    25692474/*
    2570  *  setup_release_msg -- RELEASE メッセージを作成する。
     2475 *  setup_release_msg -- RELEASE メッセージを作成する。
    25712476 */
    25722477
     
    25762481        uint8_t *msg;
    25772482
    2578         /* メッセージのヘッダ部分を作成する。*/
     2483        /* メッセージのヘッダ部分を作成する。*/
    25792484        if ((msg = setup_msg_header(ct, type)) == NULL)
    25802485                return E_PAR;
     
    25852490#if defined(DHCP6_CLI_CFG_IA_NA)
    25862491
    2587         /* IA_NA を追加する。*/
     2492        /* IA_NA を追加する。*/
    25882493        msg = request_ia_na_pd(ct, msg, type, DHCP6_OPT_IA_NA, lease);
    25892494#endif
     
    25912496#if defined(DHCP6_CLI_CFG_IA_PD)
    25922497
    2593         /* IA_PD を追加する。*/
     2498        /* IA_PD を追加する。*/
    25942499        msg = request_ia_na_pd(ct, msg, type, DHCP6_OPT_IA_PD, lease);
    25952500#endif
    25962501
    2597         /* メッセージ構造体長を設定する。*/
     2502        /* メッセージ構造体長を設定する。*/
    25982503        ct->snd_msg->len = msg - (uint8_t*)&ct->snd_msg->msg;
    25992504        return E_OK;
     
    26012506
    26022507/*
    2603  *  send_release_msg -- RELEASE メッセージを送信する。
     2508 *  send_release_msg -- RELEASE メッセージを送信する。
    26042509 */
    26052510
     
    26092514        ER      error;
    26102515
    2611         /* 有効な REPLY メッセージを受信していなければエラー */
     2516        /* 有効な REPLY メッセージを受信していなければエラー */
    26122517        ct->flags &= ~DHCP6C_FLAG_TMOUT_MASK;
    26132518        if (ct->act_msg == NULL)
    26142519                ct->error = E_OBJ;
    26152520
    2616         /* 有効な REPLY メッセージを受信していれば、SLEEP 状æ
    2617 ‹ã«é·ç§»ã™ã‚‹ã€‚*/
     2521        /* 有効な REPLY メッセージを受信していれば、SLEEP 状態に遷移する。*/
    26182522        syscall(wai_sem(SEM_DHCP6_CLI_LOCK));
    26192523        if (ct->prf_lst != NULL) {
    26202524
    2621                 /* 再送信タイマーを停止する。*/
     2525                /* 再送信タイマーを停止する。*/
    26222526                syscall(wai_sem(SEM_DHCP6_CLI_TIMER));
    26232527                ct->timers[DHCP6C_TIMER_RCV_REPLY] = 0;
    26242528                syscall(sig_sem(SEM_DHCP6_CLI_TIMER));
    26252529
    2626                 /* 有効なリース・メッセージ構造体を解放する。*/
     2530                /* 有効なリース・メッセージ構造体を解放する。*/
    26272531                if (ct->act_msg != NULL) {
    26282532                        syscall(rel_mpf(MPF_DHCP6_CLI_MSG, (void*)ct->act_msg));
     
    26302534                        }
    26312535
    2632                 /* SLEEP 状æ
    2633 ‹ã«é·ç§»ã™ã‚‹ã€‚*/
     2536                /* SLEEP 状態に遷移する。*/
    26342537                ct->fsm    = DHCP6_FSM_SLEEP;
    26352538                syscall(sig_sem(SEM_DHCP6_CLI_LOCK));
     
    26382541        syscall(sig_sem(SEM_DHCP6_CLI_LOCK));
    26392542
    2640         /* 再送信回数を確認する。*/
     2543        /* 再送信回数を確認する。*/
    26412544        if ((ct->MRC != 0) && (ct->txcount > ct->MRC)) {
    26422545                ct->error  = E_TMOUT;
     
    26442547                }
    26452548
    2646         /* RELEASE メッセージを作成する。*/
     2549        /* RELEASE メッセージを作成する。*/
    26472550        if ((error = setup_release_msg(ct, ct->act_msg, DHCP6_RELEASE)) != E_OK) {
    26482551                syslog(LOG_NOTICE, "[DHCP6C] error, setup release message: %s.", itron_strerror(error));
     
    26512554                }
    26522555
    2653         /* RELEASE メッセージを送信する。*/
     2556        /* RELEASE メッセージを送信する。*/
    26542557        error = UDP_SND_DAT(ct->cepid, &ct->dst, &ct->snd_msg->msg, ct->snd_msg->len, TMO_NBLK);
    26552558        if (error != E_WBLK) {
     
    26592562                }
    26602563
    2661         /* 再送信タイムアウトを設定する。*/
     2564        /* 再送信タイムアウトを設定する。*/
    26622565        syscall(wai_sem(SEM_DHCP6_CLI_TIMER));
    26632566        ct->timers[DHCP6C_TIMER_SND_REL] = SYSTIM2TIMER(ct->RT);
    26642567        syscall(sig_sem(SEM_DHCP6_CLI_TIMER));
    26652568
    2666         /* 再送信タイムアウトを更新する。*/
     2569        /* 再送信タイムアウトを更新する。*/
    26672570        advance_retrans(ct);
    26682571        }
    26692572
    26702573/*
    2671  *  advertise_msg_timeout -- ADVERTISE メッセージのタイムアウト処理
     2574 *  advertise_msg_timeout -- ADVERTISE メッセージのタイムアウト処理
    26722575 */
    26732576
     
    26752578advertise_msg_timeout (T_DHCP6_CLI_CONTEXT *ct)
    26762579{
    2677         /* SOLICIT メッセージ送信タイマーを停止する。*/
     2580        /* SOLICIT メッセージ送信タイマーを停止する。*/
    26782581        ct->flags &= ~DHCP6C_FLAG_TMOUT_MASK;
    26792582        syscall(wai_sem(SEM_DHCP6_CLI_TIMER));
     
    26832586        if (select_adv(ct)) {
    26842587                /*
    2685                  *  ADVERTISE メッセージの選択が終了していれば、
    2686                  *  REQUEST メッセージを送信して SELECT 状æ
    2687 ‹ã«é·ç§»ã™ã‚‹ã€‚
     2588                 *  ADVERTISE メッセージの選択が終了していれば、
     2589                 *  REQUEST メッセージを送信して SELECT 状態に遷移する。
    26882590                 */
    26892591                start_select(ct);
     
    26942596
    26952597/*
    2696  *  renew_timeout -- RENEW タイムアウト処理
     2598 *  renew_timeout -- RENEW タイムアウト処理
    26972599 */
    26982600
     
    27002602renew_timeout (T_DHCP6_CLI_CONTEXT *ct)
    27012603{
    2702         /* RENEW 状æ
    2703 ‹ã«é·ç§»ã™ã‚‹ã€‚*/
     2604        /* RENEW 状態に遷移する。*/
    27042605        ct->flags &= ~DHCP6C_FLAG_TMOUT_MASK;
    27052606        start_renew(ct);
     
    27072608
    27082609/*
    2709  *  rebind_timeout -- REBIND タイムアウト処理
     2610 *  rebind_timeout -- REBIND タイムアウト処理
    27102611 */
    27112612
     
    27132614rebind_timeout (T_DHCP6_CLI_CONTEXT *ct)
    27142615{
    2715         /* REBIND 状æ
    2716 ‹ã«é·ç§»ã™ã‚‹ã€‚*/
     2616        /* REBIND 状態に遷移する。*/
    27172617        ct->flags &= ~DHCP6C_FLAG_TMOUT_MASK;
    27182618        start_rebind(ct);
     
    27202620
    27212621/*
    2722  *  depref_timeout -- DEPREF タイムアウト処理
     2622 *  depref_timeout -- DEPREF タイムアウト処理
    27232623 */
    27242624
     
    27332633        uint_t          aoff, asize;
    27342634
    2735         /* 有効なリースが無ければ処理終了 */
     2635        /* 有効なリースが無ければ処理終了 */
    27362636        ct->flags &= ~DHCP6C_FLAG_TMOUT_MASK;
    27372637        if (ct->act_msg == NULL) {
     
    27442644        while (msg < last) {
    27452645
    2746                 /* IA_NA/IA_PD オプションであれば、推奨有効時間を確認する。*/
     2646                /* IA_NA/IA_PD オプションであれば、推奨有効時間を確認する。*/
    27472647                opt = (T_DHCP6_OPTION*)msg;
    27482648                if (MSG2HOST16(opt->code) == DHCP6_OPT_IA_NA || MSG2HOST16(opt->code) == DHCP6_OPT_IA_PD) {
     
    27532653                                                  aoff += (MSG2HOST16(iaa->len) & ~DHCP6C_IAA_FLAG_MASK) + sizeof(*iaa)) {
    27542654
    2755                                 /* すでに推奨有効時間を経過していれば処理しない。*/
     2655                                /* すでに推奨有効時間を経過していれば処理しない。*/
    27562656                                iaa = (T_DHCP6_OPT_IAADDR*)((uint8_t*)opt + aoff);
    27572657                                if ((MSG2HOST16(iaa->len) & DHCP6C_IAA_FLAG_DEPREFERD))
    27582658                                        continue;
    27592659
    2760                                 /* 推奨有効時間経過していれば FLAG を設定する。*/
     2660                                /* 推奨有効時間経過していれば FLAG を設定する。*/
    27612661                                if (TIMEC_GE(time, ct->act_msg->rcv_time + MSG2HOST32(iaa->prefer))) {
    27622662                                        HOST2MSG16(iaa->len, MSG2HOST16(iaa->len) | DHCP6C_IAA_FLAG_DEPREFERD);
     
    27662666                                                syslog(LOG_NOTICE, "[DHCP6C] prefix  depreferd: %s.", ipv62str(NULL, &iaa->addr));
    27672667
    2768                                         /*【DNS の処理がå¿
    2769 è¦ã€‘*/
     2668                                        /*【DNS の処理が必要】*/
    27702669                                        }
    27712670                                }
     
    27782677
    27792678/*
    2780  *  expire_timeout -- EXPIRE タイムアウト処理
     2679 *  expire_timeout -- EXPIRE タイムアウト処理
    27812680 */
    27822681
     
    27912690        uint_t          aoff, asize, addrs = 0;
    27922691
    2793         /* 有効なリースが無ければ処理終了 */
     2692        /* 有効なリースが無ければ処理終了 */
    27942693        ct->flags &= ~DHCP6C_FLAG_TMOUT_MASK;
    27952694        if (ct->act_msg == NULL) {
     
    28022701        while (msg < last) {
    28032702
    2804                 /* IA_NA/IA_PD オプションであれば、有効時間を確認する。*/
     2703                /* IA_NA/IA_PD オプションであれば、有効時間を確認する。*/
    28052704                opt = (T_DHCP6_OPTION*)msg;
    28062705                if (MSG2HOST16(opt->code) == DHCP6_OPT_IA_NA || MSG2HOST16(opt->code) == DHCP6_OPT_IA_PD) {
     
    28112710                                                  aoff += (MSG2HOST16(iaa->len) & ~DHCP6C_IAA_FLAG_MASK) + sizeof(*iaa)) {
    28122711
    2813                                 /* すでに有効時間を経過していれば処理しない。*/
     2712                                /* すでに有効時間を経過していれば処理しない。*/
    28142713                                iaa = (T_DHCP6_OPT_IAADDR*)((uint8_t*)opt + aoff);
    28152714                                if ((MSG2HOST16(iaa->len) & DHCP6C_IAA_FLAG_EXPIRED))
    28162715                                        continue;
    28172716
    2818                                 /* 有効時間経過していれば FLAG を設定する。*/
     2717                                /* 有効時間経過していれば FLAG を設定する。*/
    28192718                                if (TIMEC_GE(time, ct->act_msg->rcv_time + MSG2HOST32(iaa->valid))) {
    28202719                                        HOST2MSG16(iaa->len, MSG2HOST16(iaa->len) | DHCP6C_IAA_FLAG_EXPIRED);
     
    28242723                                                syslog(LOG_NOTICE, "[DHCP6C] prefix  expired: %s.", ipv62str(NULL, &iaa->addr));
    28252724
    2826                                         /*【DNS の処理がå¿
    2827 è¦ã€‘*/
     2725                                        /*【DNS の処理が必要】*/
    28282726                                        continue;
    28292727                                        }
     
    28342732                }
    28352733
    2836         /* 有効なアドレスがå
    2837 ¨ã¦ç„¡ããªã£ãŸæ™‚は INIT 状æ
    2838 ‹ã«é·ç§»ã™ã‚‹ã€‚*/
     2734        /* 有効なアドレスが全て無くなった時は INIT 状態に遷移する。*/
    28392735        if (addrs == 0) {
    28402736
    2841                 /* ACTIVE リースを受信メッセージ構造体リストに戻す。*/
     2737                /* ACTIVE リースを受信メッセージ構造体リストに戻す。*/
    28422738                syslog(LOG_NOTICE, "[DHCP6C] all address expired.");
    28432739                syscall(wai_sem(SEM_DHCP6_CLI_LOCK));
     
    28472743                syscall(sig_sem(SEM_DHCP6_CLI_LOCK));
    28482744
    2849                 /* å
    2850 ¨ã¦ã® TIMER をキャンセルする。*/
     2745                /* 全ての TIMER をキャンセルする。*/
    28512746                cancel_all_timers(ct);
    28522747
    2853                 /* INIT 状æ
    2854 ‹ã«é·ç§»ã™ã‚‹ã€‚*/
     2748                /* INIT 状態に遷移する。*/
    28552749                start_init(ct);
    28562750                return;
     
    28632757
    28642758/*
    2865  *  reply_msg_timeout -- REPLY メッセージのタイムアウト処理
     2759 *  reply_msg_timeout -- REPLY メッセージのタイムアウト処理
    28662760 */
    28672761
     
    28692763reply_msg_timeout (T_DHCP6_CLI_CONTEXT *ct)
    28702764{
    2871         /* SOLICIT メッセージ送信タイマーを停止する。*/
     2765        /* SOLICIT メッセージ送信タイマーを停止する。*/
    28722766        ct->flags &= ~DHCP6C_FLAG_TMOUT_MASK;
    28732767        syscall(wai_sem(SEM_DHCP6_CLI_TIMER));
     
    28782772#if DHCP6_CLI_CFG_MODE == DHCP6_CLI_CFG_STATELESS || DHCP6_CLI_CFG_MODE == DHCP6_CLI_CFG_RA
    28792773
    2880         /* STATELES モードではSLEEP に遷移する。*/
     2774        /* STATELES モードではSLEEP に遷移する。*/
    28812775        ct->error = E_TMOUT;
    28822776        ct->fsm   = DHCP6_FSM_SLEEP;
     
    28862780#if DHCP6_CLI_CFG_MODE == DHCP6_CLI_CFG_STATEFULL || DHCP6_CLI_CFG_MODE == DHCP6_CLI_CFG_RA
    28872781
    2888         /* RENEW メッセージの選択が終了していれば、BOUND 状æ
    2889 ‹ã«é·ç§»ã™ã‚‹ã€‚*/
     2782        /* RENEW メッセージの選択が終了していれば、BOUND 状態に遷移する。*/
    28902783        if (select_reply(ct)) {
    28912784
    2892                 /* リースæƒ
    2893 å ±ã‚’解放する。*/
     2785                /* リース情報を解放する。*/
    28942786                rel_lease(ct);
    28952787
    2896                 /* BOUND 状æ
    2897 ‹ã«é·ç§»ã™ã‚‹ã€‚*/
     2788                /* BOUND 状態に遷移する。*/
    28982789                start_bound(ct);
    28992790                }
     
    29012792                eval_expire(ct);
    29022793        else {
    2903                 /* SLEEP に遷移する。*/
     2794                /* SLEEP に遷移する。*/
    29042795                ct->error = E_TMOUT;
    29052796                ct->fsm   = DHCP6_FSM_SLEEP;
     
    29102801
    29112802/*
    2912  *  dispatch_timeout -- タイムアウトした時の処理
     2803 *  dispatch_timeout -- タイムアウトした時の処理
    29132804 */
    29142805
     
    29802871
    29812872/*
    2982  *  dispatch_event -- イベント毎の処理
     2873 *  dispatch_event -- イベント毎の処理
    29832874 */
    29842875
     
    29902881        while (ct->fsm != DHCP6_FSM_SLEEP && error == E_OK) {
    29912882
    2992                 /* メッセージの送受信とタイムアウトをå¾
    2993 ã¤ã€‚*/
     2883                /* メッセージの送受信とタイムアウトを待つ。*/
    29942884                syscall(wai_sem(SEM_DHCP6_CLI_READY));
    29952885
     
    30122902
    30132903/*
    3014  *  init_context -- DHCPv6 クライアントコンテキスト構造体を初期化する。
     2904 *  init_context -- DHCPv6 クライアントコンテキスト構造体を初期化する。
    30152905 */
    30162906
     
    30252915
    30262916/*
    3027  *  rel_cli_msg -- メッセージ構造体を解放する。
     2917 *  rel_cli_msg -- メッセージ構造体を解放する。
    30282918 */
    30292919
     
    30602950#if DHCP6_CLI_CFG_MODE == DHCP6_CLI_CFG_STATELESS
    30612951
    3062         /* ステートレスの時は有効なリース・メッセージ構造体も解放する。*/
     2952        /* ステートレスの時は有効なリース・メッセージ構造体も解放する。*/
    30632953        if (ct->act_msg != NULL) {
    30642954                syscall(rel_mpf(MPF_DHCP6_CLI_MSG, (void*)ct->act_msg));
     
    30722962
    30732963/*
    3074  *  init_cli_msg -- 各メッセージ構造体を初期化する。
     2964 *  init_cli_msg -- 各メッセージ構造体を初期化する。
    30752965 */
    30762966
     
    30822972        int             count;
    30832973
    3084         /* 送信メッセージ構造体を獲得する。*/
     2974        /* 送信メッセージ構造体を獲得する。*/
    30852975        if ((error = tget_mpf(MPF_DHCP6_CLI_MSG, (void*)&ct->snd_msg, TMO_DHCP6C_MPF_GET)) != E_OK) {
    30862976                syslog(LOG_NOTICE, "[DHCP6C] error, tget_mpf() for send: %s.", itron_strerror(error));
     
    30892979
    30902980        /*
    3091          *  有効なリース・メッセージ構造体がある場合は、
    3092          *  獲得する受信メッセージ構造体リストの構造体を 1減らす。
     2981         *  有効なリース・メッセージ構造体がある場合は、
     2982         *  獲得する受信メッセージ構造体リストの構造体を 1減らす。
    30932983         */
    30942984        if (ct->act_msg == NULL)
     
    30972987                count = NUM_DHCP6_CLI_MSG_LIST - 1;
    30982988
    3099         /* 受信メッセージ構造体を獲得する。*/
     2989        /* 受信メッセージ構造体を獲得する。*/
    31002990        syscall(wai_sem(SEM_DHCP6_CLI_LOCK));
    31012991        while (count --> 0) {
     
    31133003
    31143004/*
    3115  *  dhcp6c_renew_info -- ネットワークæƒ
    3116 å ±ã‚’再取得する。
     3005 *  dhcp6c_renew_info -- ネットワーク情報を再取得する。
    31173006 */
    31183007
     
    31253014        if (context.fsm == DHCP6_FSM_INFORMED) {
    31263015
    3127                 /* REL_INFO 状æ
    3128 ‹ã«é·ç§»ã—た後に SLEEP を解除するように設定する。*/
     3016                /* REL_INFO 状態に遷移した後に SLEEP を解除するように設定する。*/
    31293017                context.flags |= DHCP6C_FLAG_RENEW;
    31303018                start_rel_info(&context);
     
    31333021        else if (context.fsm == DHCP6_FSM_SLEEP) {
    31343022
    3135                 /* SLEEP を解除する。*/
     3023                /* SLEEP を解除する。*/
    31363024                wup_tsk(DHCP6_CLI_TASK);
    31373025                return E_OK;
     
    31443032        if (context.fsm == DHCP6_FSM_BOUND) {
    31453033
    3146                 /* RENEW 状æ
    3147 ‹ã«é·ç§»ã™ã‚‹ã€‚*/
     3034                /* RENEW 状態に遷移する。*/
    31483035                start_renew(&context);
    31493036                return E_OK;
     
    31513038        else if (context.fsm == DHCP6_FSM_SLEEP) {
    31523039
    3153                 /* SLEEP を解除する。*/
     3040                /* SLEEP を解除する。*/
    31543041                wup_tsk(DHCP6_CLI_TASK);
    31553042                return E_OK;
     
    31653052
    31663053/*
    3167  *  dhcp6c_rel_info -- DHCP で設定されたネットワークæƒ
    3168 å ±ã‚’解放する。
     3054 *  dhcp6c_rel_info -- DHCP で設定されたネットワーク情報を解放する。
    31693055 */
    31703056
     
    31723058dhcp6c_rel_info (void)
    31733059{
    3174         /* REL_INFO 状æ
    3175 ‹ã«é·ç§»ã™ã‚‹ã€‚*/
     3060        /* REL_INFO 状態に遷移する。*/
    31763061        start_rel_info(&context);
    31773062        return E_OK;
     
    31793064
    31803065/*
    3181  *  dhcp6c_get_info -- DHCP で設定されたネットワークæƒ
    3182 å ±ã‚’返す。
     3066 *  dhcp6c_get_info -- DHCP で設定されたネットワーク情報を返す。
    31833067 */
    31843068
     
    32093093
    32103094/*
    3211  *  コールバック関数
     3095 *  コールバック関数
    32123096 */
    32133097
     
    32203104        len = *(ER_UINT*)p_parblk;
    32213105        if (len < 0 && len != E_RLWAI) {
    3222                 /* E_RLWAI 以外で、0 以下の場合は、エラーコード */
     3106                /* E_RLWAI 以外で、0 以下の場合は、エラーコード */
    32233107                syslog(LOG_NOTICE, "[DHCP6C(CBR)] error: %s, fncd: %s.", itron_strerror(len), in_strtfn(fncd));
    32243108                }
     
    32263110                if (fncd == TEV_UDP_RCV_DAT) {
    32273111
    3228                         /* 受信メッセージリストが空の時は、受信しないでデータグラムを捨てる。*/
     3112                        /* 受信メッセージリストが空の時は、受信しないでデータグラムを捨てる。*/
    32293113                        if (context.rcv_lst == NULL)
    32303114                                syslog(LOG_NOTICE, "[DHCP6C(CBR)] receive buffer all busy.");
    32313115                        else {
    3232                                 /* メッセージを受信するメッセージ構造体を準備する。*/
     3116                                /* メッセージを受信するメッセージ構造体を準備する。*/
    32333117                                syscall(wai_sem(SEM_DHCP6_CLI_LOCK));
    32343118                                msg = context.rcv_lst;
     
    32363120                                syscall(sig_sem(SEM_DHCP6_CLI_LOCK));
    32373121
    3238                                 /* メッセージを受信する。*/
     3122                                /* メッセージを受信する。*/
    32393123                                len = UDP_RCV_DAT(context.cepid, &msg->srv, &msg->msg, sizeof(msg->msg), TMO_POL);
    32403124
     
    32423126                                msg->len = len;
    32433127                                if (len >= 0) {
    3244                                         /* 受信したメッセージを検証メッセージリストに移す。*/
     3128                                        /* 受信したメッセージを検証メッセージリストに移す。*/
    32453129                                        msg->next = context.val_lst;
    32463130                                        context.val_lst = msg;
     
    32483132                                        }
    32493133                                else {
    3250                                         /* メッセージ構造体を受信メッセージリストに戻す。*/
     3134                                        /* メッセージ構造体を受信メッセージリストに戻す。*/
    32513135                                        context.error = len;
    32523136                                        msg->next = context.rcv_lst;
     
    32613145        }
    32623146/*
    3263  *  dhcp6_cli_task -- DHCPv6 クライアントタスク
     3147 *  dhcp6_cli_task -- DHCPv6 クライアントタスク
    32643148 */
    32653149
     
    32843168        ct = &context;
    32853169
    3286         /* DHCP クライアントコンテキスト構造体を初期化する。*/
     3170        /* DHCP クライアントコンテキスト構造体を初期化する。*/
    32873171        init_context(ct, (ID)exinf);
    32883172
    32893173        while (true) {
    32903174
    3291                 /* 1秒毎にタイムアウトするようにタイマーを設定する。*/
     3175                /* 1秒毎にタイムアウトするようにタイマーを設定する。*/
    32923176                timeout((callout_func)dhcpc_timer, ct, NET_TIMER_HZ / DHCP6C_TIMER_HZ);
    32933177
    3294                 /* クライアント DUID を設定する。*/
     3178                /* クライアント DUID を設定する。*/
    32953179                init_duid(ct);
    32963180
    3297                 /* メッセージ構造体を初期化する。*/
     3181                /* メッセージ構造体を初期化する。*/
    32983182                if ((error = init_cli_msg(ct))  == E_OK) {
    32993183
     
    33053189#endif
    33063190
    3307                         /* メインループ */
     3191                        /* メインループ */
    33083192                        error = dispatch_event(ct);
    33093193                        }
    33103194
    3311                 /* å
    3312 ¨ã¦ã® TIMER をキャンセルする。*/
     3195                /* 全ての TIMER をキャンセルする。*/
    33133196                cancel_all_timers(ct);
    33143197
    3315                 /* タイマーを停止する。*/
     3198                /* タイマーを停止する。*/
    33163199                untimeout((callout_func)dhcpc_timer, ct);
    33173200
    3318                 /* メッセージ構造体を解放する。*/
     3201                /* メッセージ構造体を解放する。*/
    33193202                rel_cli_msg(ct);
    33203203
    3321                 /* リースを解放後、再取得が指定されていなければ休止する。*/
     3204                /* リースを解放後、再取得が指定されていなければ休止する。*/
    33223205                if (!(ct->flags & DHCP6C_FLAG_RENEW)) {
    33233206
    3324                         /* 休止する。*/
     3207                        /* 休止する。*/
    33253208                        if (error == E_OK)
    33263209                                syslog(LOG_NOTICE, "[DHCP6C] lease released, go to sleep.");
Note: See TracChangeset for help on using the changeset viewer.