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

文字コードを設定

Location:
EcnlProtoTool/trunk/asp3_dcre/tinet/netinet
Files:
39 edited

Legend:

Unmodified
Added
Removed
  • EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/icmp6.h

    • Property svn:keywords deleted
    • Property svn:mime-type changed from text/x-chdr to text/x-chdr;charset=UTF-8
    r270 r321  
    55 *                   Tomakomai National College of Technology, JAPAN
    66 *
    7  *  上記著作権è€
    8 ã¯ï¼Œä»¥ä¸‹ã® (1)~(4) の条件か,Free Software Foundation
    9  *  によってå
    10 ¬è¡¨ã•ã‚Œã¦ã„ã‚‹ GNU General Public License の Version 2 に記
    11  *  述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
    12  *  を改変したものを含む.以下同じ)を使用・複製・改変・再é
    13 å¸ƒï¼ˆä»¥ä¸‹ï¼Œ
    14  *  利用と呼ぶ)することを無償で許諾する.
    15  *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
    16  *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
    17  *      スコード中に含まれていること.
    18  *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
    19  *      用できる形で再é
    20 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é
    21 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
    22  *      è€
    23 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—作権表示,この利用条件および下記
    24  *      の無保証規定を掲載すること.
    25  *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
    26  *      用できない形で再é
    27 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®æ¡ä»¶ã‚’満たすこと.
    28  *    (a) 再é
    29 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€
    30 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—
    31  *        作権表示,この利用条件および下記の無保証規定を掲載すること.
    32  *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
    33  *      害からも,上記著作権è€
    34 ãŠã‚ˆã³TOPPERSプロジェクトをå
    35 è²¬ã™ã‚‹ã“と.
    36  *
    37  *  本ソフトウェアは,無保証で提供されているものである.上記著作権è€
    38 ãŠ
    39  *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
    40  *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
    41  *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
     7 *  上記著作権者は,以下の (1)~(4) の条件か,Free Software Foundation
     8 *  によって公表されている GNU General Public License の Version 2 に記
     9 *  述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
     10 *  を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下,
     11 *  利用と呼ぶ)することを無償で許諾する.
     12 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     13 *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     14 *      スコード中に含まれていること.
     15 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     16 *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     17 *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     18 *      の無保証規定を掲載すること.
     19 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     20 *      用できない形で再配布する場合には,次の条件を満たすこと.
     21 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     22 *        作権表示,この利用条件および下記の無保証規定を掲載すること.
     23 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     24 *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
     25 *
     26 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     27 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
     28 *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
     29 *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
    4230 *
    4331 *  @(#) $Id$
     
    117105
    118106/*
    119  *  ICMPv6 ヘッダ
     107 *  ICMPv6 ヘッダ
    120108 */
    121109
    122110typedef struct t_icmp6_hdr {
    123         uint8_t         type;           /* メッセージの型        */
    124         uint8_t         code;           /* サブ型            */
    125         uint16_t        sum;            /* チェックサム           */
     111        uint8_t         type;           /* メッセージの型      */
     112        uint8_t         code;           /* サブ型          */
     113        uint16_t        sum;            /* チェックサム               */
    126114        union {
    127115                uint32_t        data32;
     
    134122#define icmp6_data16                    data.data16
    135123#define icmp6_data8                     data.data8
    136 #define icmp6_pptr                      data.data32             /* パラメータ異常        */
    137 #define icmp6_mtu                       data.data32             /* パラメータ異常        */
    138 #define icmp6_id                        data.data16[0]          /* エコー要求と応答     */
    139 #define icmp6_seq                       data.data16[1]          /* エコー要求と応答     */
     124#define icmp6_pptr                      data.data32             /* パラメータ異常      */
     125#define icmp6_mtu                       data.data32             /* パラメータ異常      */
     126#define icmp6_id                        data.data16[0]          /* エコー要求と応答     */
     127#define icmp6_seq                       data.data16[1]          /* エコー要求と応答     */
    140128
    141129#define ICMP6_HDR_SIZE                  (sizeof(T_ICMP6_HDR))
     
    149137
    150138/*
    151  *  ICMP6 タイプ
    152  */
    153 
    154 #define ICMP6_DST_UNREACH               UINT_C(1)       /* 宛å
    155 ˆåˆ°é”不可能                */
    156 #define ICMP6_PACKET_TOO_BIG            UINT_C(2)       /* パケットが大きすぎる。    */
    157 #define ICMP6_TIME_EXCEEDED             UINT_C(3)       /* TTL をè¶
    158 éŽã—た。            */
    159 #define ICMP6_PARAM_PROB                UINT_C(4)       /* IPv6 ヘッダが不正。           */
    160 
    161 #define ICMP6_ECHO_REQUEST              UINT_C(128)     /* エコー要求                      */
    162 #define ICMP6_ECHO_REPLY                UINT_C(129)     /* エコー応答                      */
    163 
    164 #define ICMP6_MEMBERSHIP_QUERY          UINT_C(130)     /* グループメンバç
    165 §ä¼š            */
    166 #define ICMP6_MEMBERSHIP_REPORT         UINT_C(131)     /* グループメンバ報告          */
    167 #define ICMP6_MEMBERSHIP_REDUCTION      UINT_C(132)     /* グループメンバ終了          */
    168 
    169 #define MLD_LISTENER_QUERY              UINT_C(130)     /* マルチキャスト受信è€
    170 ç
    171 §ä¼š    */
    172 #define MLD_LISTENER_REPORT             UINT_C(131)     /* マルチキャスト受信è€
    173 å ±å‘Š  */
    174 #define MLD_LISTENER_DONE               UINT_C(132)     /* マルチキャスト受信è€
    175 çµ‚了  */
    176 
    177 #define ND_ROUTER_SOLICIT               UINT_C(133)     /* ルータ要請                      */
    178 #define ND_ROUTER_ADVERT                UINT_C(134)     /* ルータ通知                      */
    179 #define ND_NEIGHBOR_SOLICIT             UINT_C(135)     /* 近隣要請                 */
    180 #define ND_NEIGHBOR_ADVERT              UINT_C(136)     /* 近隣通知                 */
    181 #define ND_REDIRECT                     UINT_C(137)     /* 向け直し                 */
    182 
    183 #define ICMP6_ROUTER_RENUMBERING        UINT_C(138)     /* ルータ番号再設定             */
    184 
    185 #define ICMP6_WRU_REQUEST               UINT_C(139)     /* 要求ノード探索                */
    186 #define ICMP6_WRU_REPLY                 UINT_C(140)     /* 応答ノード探索                */
    187 
    188 #define ICMP6_FQDN_QUERY                UINT_C(139)     /* FQDN ç
    189 §ä¼š                    */
    190 #define ICMP6_FQDN_REPLY                UINT_C(140)     /* FQDN 応答                  */
    191 
    192 #define ICMP6_NI_QUERY                  UINT_C(139)     /* ノードæƒ
    193 å ±ç
    194 §ä¼š            */
    195 #define ICMP6_NI_REPLY                  UINT_C(140)     /* ノードæƒ
    196 å ±å¿œç­”               */
    197 
    198 #define ICMP6_MAX_TYPE                  UINT_C(203)     /* ICMP6 タイプの最大値          */
    199 
    200 /*
    201  *  ICMP6 コード
    202  */
    203 
    204 /* 宛å
    205 ˆåˆ°é”不可能 */
    206 
    207 #define ICMP6_DST_UNREACH_NOROUTE       UINT_C(0)       /* 到達ルートなし。             */
    208 #define ICMP6_DST_UNREACH_ADMIN         UINT_C(1)       /* 管理è€
    209 ã«ã‚ˆã‚Šç„¡åŠ¹åŒ–中。        */
    210 #define ICMP6_DST_UNREACH_NOTEIGHBOR    UINT_C(2)       /* 近隣è€
    211 ã§ã¯ãªããªã£ãŸã€‚        */
    212 #define ICMP6_DST_UNREACH_BEYOND_SCOPE  UINT_C(2)       /* スコープをè¶
    213 ãˆã¦ã„る。 */
    214 #define ICMP6_DST_UNREACH_ADDR          UINT_C(3)       /* 宛å
    215 ˆã‚¢ãƒ‰ãƒ¬ã‚¹ã«åˆ°é”不可能。      */
    216 #define ICMP6_DST_UNREACH_NOPORT        UINT_C(4)       /* 宛å
    217 ˆãƒãƒ¼ãƒˆã«åˆ°é”不可能。 */
    218 
    219 /* TTL è¶
    220 éŽ */
    221 
    222 #define ICMP6_TIME_EXCEED_TRANSIT       UINT_C(0)       /* 転送時に TTL==0 になった。  */
    223 #define ICMP6_TIME_EXCEED_REASSEMBLY    UINT_C(1)       /* IP 再構成でタイムアウトした。*/
    224 
    225 /* ヘッダ不正 */
    226 
    227 #define ICMP6_PARAMPROB_HEADER          UINT_C(0)       /* ヘッダに不正があった。    */
    228 #define ICMP6_PARAMPROB_NEXT_HEADER     UINT_C(1)       /* 次ヘッダが認識できない。 */
    229 #define ICMP6_PARAMPROB_OPTION          UINT_C(2)       /* オプションが認識できない。      */
    230 
    231 /* å†
    232 éƒ¨ä½¿ç”¨ */
    233 #define ND_REDIRECT_ONLINK              UINT_C(0)       /* オンリンクへの向け直し    */
    234 #define ND_REDIRECT_ROUTER              UINT_C(1)       /* ルータへの向け直し          */
    235 
    236 /*
    237  *  制限値
    238  */
    239 
    240                                                         /* ICMPv6 の最大ペイロード長   */
     139 *  ICMP6 タイプ
     140 */
     141
     142#define ICMP6_DST_UNREACH               UINT_C(1)       /* 宛先到達不可能              */
     143#define ICMP6_PACKET_TOO_BIG            UINT_C(2)       /* パケットが大きすぎる。  */
     144#define ICMP6_TIME_EXCEEDED             UINT_C(3)       /* TTL を超過した。           */
     145#define ICMP6_PARAM_PROB                UINT_C(4)       /* IPv6 ヘッダが不正。         */
     146
     147#define ICMP6_ECHO_REQUEST              UINT_C(128)     /* エコー要求                        */
     148#define ICMP6_ECHO_REPLY                UINT_C(129)     /* エコー応答                        */
     149
     150#define ICMP6_MEMBERSHIP_QUERY          UINT_C(130)     /* グループメンバ照会            */
     151#define ICMP6_MEMBERSHIP_REPORT         UINT_C(131)     /* グループメンバ報告            */
     152#define ICMP6_MEMBERSHIP_REDUCTION      UINT_C(132)     /* グループメンバ終了            */
     153
     154#define MLD_LISTENER_QUERY              UINT_C(130)     /* マルチキャスト受信者照会 */
     155#define MLD_LISTENER_REPORT             UINT_C(131)     /* マルチキャスト受信者報告 */
     156#define MLD_LISTENER_DONE               UINT_C(132)     /* マルチキャスト受信者終了 */
     157
     158#define ND_ROUTER_SOLICIT               UINT_C(133)     /* ルータ要請                        */
     159#define ND_ROUTER_ADVERT                UINT_C(134)     /* ルータ通知                        */
     160#define ND_NEIGHBOR_SOLICIT             UINT_C(135)     /* 近隣要請                 */
     161#define ND_NEIGHBOR_ADVERT              UINT_C(136)     /* 近隣通知                 */
     162#define ND_REDIRECT                     UINT_C(137)     /* 向け直し                 */
     163
     164#define ICMP6_ROUTER_RENUMBERING        UINT_C(138)     /* ルータ番号再設定             */
     165
     166#define ICMP6_WRU_REQUEST               UINT_C(139)     /* 要求ノード探索              */
     167#define ICMP6_WRU_REPLY                 UINT_C(140)     /* 応答ノード探索              */
     168
     169#define ICMP6_FQDN_QUERY                UINT_C(139)     /* FQDN 照会                      */
     170#define ICMP6_FQDN_REPLY                UINT_C(140)     /* FQDN 応答                      */
     171
     172#define ICMP6_NI_QUERY                  UINT_C(139)     /* ノード情報照会              */
     173#define ICMP6_NI_REPLY                  UINT_C(140)     /* ノード情報応答              */
     174
     175#define ICMP6_MAX_TYPE                  UINT_C(203)     /* ICMP6 タイプの最大値                */
     176
     177/*
     178 *  ICMP6 コード
     179 */
     180
     181/* 宛先到達不可能 */
     182
     183#define ICMP6_DST_UNREACH_NOROUTE       UINT_C(0)       /* 到達ルートなし。             */
     184#define ICMP6_DST_UNREACH_ADMIN         UINT_C(1)       /* 管理者により無効化中。  */
     185#define ICMP6_DST_UNREACH_NOTEIGHBOR    UINT_C(2)       /* 近隣者ではなくなった。  */
     186#define ICMP6_DST_UNREACH_BEYOND_SCOPE  UINT_C(2)       /* スコープを超えている。  */
     187#define ICMP6_DST_UNREACH_ADDR          UINT_C(3)       /* 宛先アドレスに到達不可能。        */
     188#define ICMP6_DST_UNREACH_NOPORT        UINT_C(4)       /* 宛先ポートに到達不可能。 */
     189
     190/* TTL 超過 */
     191
     192#define ICMP6_TIME_EXCEED_TRANSIT       UINT_C(0)       /* 転送時に TTL==0 になった。    */
     193#define ICMP6_TIME_EXCEED_REASSEMBLY    UINT_C(1)       /* IP 再構成でタイムアウトした。*/
     194
     195/* ヘッダ不正 */
     196
     197#define ICMP6_PARAMPROB_HEADER          UINT_C(0)       /* ヘッダに不正があった。  */
     198#define ICMP6_PARAMPROB_NEXT_HEADER     UINT_C(1)       /* 次ヘッダが認識できない。 */
     199#define ICMP6_PARAMPROB_OPTION          UINT_C(2)       /* オプションが認識できない。        */
     200
     201/* 内部使用 */
     202#define ND_REDIRECT_ONLINK              UINT_C(0)       /* オンリンクへの向け直し  */
     203#define ND_REDIRECT_ROUTER              UINT_C(1)       /* ルータへの向け直し            */
     204
     205/*
     206 *  制限値
     207 */
     208
     209                                                        /* ICMPv6 の最大ペイロード長     */
    241210#define ICMPV6_PAYLOAD_MAXLEN           (IPV6_MMTU - (IP6_HDR_SIZE + ICMP6_HDR_SIZE))
    242211
    243212/*
    244  *  近隣要請
     213 *  近隣要請
    245214 */
    246215
     
    248217        T_ICMP6_HDR     hdr;
    249218        T_IN6_ADDR      target;
    250         /* この後にオプションが続く */
     219        /* この後にオプションが続く */
    251220        } __attribute__((packed, aligned(2)))T_NEIGHBOR_SOLICIT_HDR;
    252221
     
    266235
    267236/*
    268  *  近隣通知
     237 *  近隣通知
    269238 */
    270239
     
    272241        T_ICMP6_HDR     hdr;
    273242        T_IN6_ADDR      target;
    274         /* この後にオプションが続く */
     243        /* この後にオプションが続く */
    275244        } __attribute__((packed, aligned(2)))T_NEIGHBOR_ADVERT_HDR;
    276245
    277 /* ICMP6 ヘッダのデータ部の定義 */
     246/* ICMP6 ヘッダのデータ部の定義 */
    278247
    279248#define nd_na_flags_reserved            hdr.data.data32
     
    297266
    298267/*
    299  *  近隣通知フラグ、nd_na_flags_reserved (hdr.data32) に設定する。
     268 *  近隣通知フラグ、nd_na_flags_reserved (hdr.data32) に設定する。
    300269 */
    301270
    302271#if _NET_CFG_BYTE_ORDER == _NET_CFG_BIG_ENDIAN
    303272
    304 #define ND_NA_FLG_OVERRIDE              ULONG_C(0x20000000)     /* 近隣キャッシュ上書き       */
    305 #define ND_NA_FLG_SOLICITED             ULONG_C(0x40000000)     /* 近隣要請への応答     */
    306 #define ND_NA_FLG_ROUTER                ULONG_C(0x80000000)     /* ルータ通知              */
     273#define ND_NA_FLG_OVERRIDE              ULONG_C(0x20000000)     /* 近隣キャッシュ上書き   */
     274#define ND_NA_FLG_SOLICITED             ULONG_C(0x40000000)     /* 近隣要請への応答     */
     275#define ND_NA_FLG_ROUTER                ULONG_C(0x80000000)     /* ルータ通知                */
    307276
    308277#elif _NET_CFG_BYTE_ORDER == _NET_CFG_LITTLE_ENDIAN
    309278
    310 #define ND_NA_FLG_OVERRIDE              ULONG_C(0x00000020)     /* 近隣キャッシュ上書き       */
    311 #define ND_NA_FLG_SOLICITED             ULONG_C(0x00000040)     /* 近隣要請への応答     */
    312 #define ND_NA_FLG_ROUTER                ULONG_C(0x00000080)     /* ルータ通知              */
     279#define ND_NA_FLG_OVERRIDE              ULONG_C(0x00000020)     /* 近隣キャッシュ上書き   */
     280#define ND_NA_FLG_SOLICITED             ULONG_C(0x00000040)     /* 近隣要請への応答     */
     281#define ND_NA_FLG_ROUTER                ULONG_C(0x00000080)     /* ルータ通知                */
    313282
    314283#endif  /* #if _NET_CFG_BYTE_ORDER == _NET_CFG_BIG_ENDIAN */
    315284
    316285/*
    317  *  ルータ通知
     286 *  ルータ通知
    318287 */
    319288
    320289typedef struct t_router_advert_hdr {
    321290        T_ICMP6_HDR     hdr;
    322         uint32_t        reachable;              /* [ms] 到達可能時間      */
    323         uint32_t        retransmit;             /* [ms] 近隣要請送信間隔        */
    324         /* この後にオプションが続く */
     291        uint32_t        reachable;              /* [ms] 到達可能時間  */
     292        uint32_t        retransmit;             /* [ms] 近隣要請送信間隔        */
     293        /* この後にオプションが続く */
    325294        } __attribute__((packed, aligned(2)))T_ROUTER_ADVERT_HDR;
    326295
    327 /* ICMP6 ヘッダのデータ部の定義 */
     296/* ICMP6 ヘッダのデータ部の定義 */
    328297
    329298#define nd_ra_current_hoplimit          hdr.data.data8[0]
    330299#define nd_ra_flags                     hdr.data.data8[1]
    331 #define nd_ra_router_lifetime           hdr.data.data16[1]      /* [s] ルータ有効時間    */
     300#define nd_ra_router_lifetime           hdr.data.data16[1]      /* [s] ルータ有効時間  */
    332301
    333302#define ROUTER_ADVERT_HDR_SIZE          (sizeof(T_ROUTER_ADVERT_HDR))
     
    347316
    348317/*
    349  *  ルータ通知ヘッダのフラグ
     318 *  ルータ通知ヘッダのフラグ
    350319 */
    351320
     
    355324
    356325/*
    357  *  ルータ要請
     326 *  ルータ要請
    358327 */
    359328
     
    362331        } __attribute__((packed, aligned(2)))T_ROUTER_SOLICIT_HDR;
    363332
    364 /* ICMP6 ヘッダのデータ部の定義 */
     333/* ICMP6 ヘッダのデータ部の定義 */
    365334
    366335#define nd_rs_reserved                  hdr.data.data32
     
    383352
    384353/*
    385  *  近隣探索オプション
    386  */
    387 
    388 /* 近隣探索ヘッダ */
     354 *  近隣探索オプション
     355 */
     356
     357/* 近隣探索ヘッダ */
    389358
    390359typedef struct t_neighbor_hdr {
     
    393362        } __attribute__((packed, aligned(2)))T_NEIGHBOR_HDR;
    394363
    395 /* 近隣探索オプションヘッダ */
     364/* 近隣探索オプションヘッダ */
    396365
    397366typedef struct t_nd_opt_hdr {
    398         uint8_t         type;                   /* オプションタイプ                     */
    399         uint8_t         len;                    /* オプション長、単位は 8 バイト   */
     367        uint8_t         type;                   /* オプションタイプ                     */
     368        uint8_t         len;                    /* オプション長、単位は 8 バイト     */
    400369        } __attribute__((packed, aligned(2)))T_ND_OPT_HDR;
    401370
    402371#define ND_OPT_HDR_SIZE                 (sizeof(T_ND_OPT_HDR))
    403372
    404 #define ND_OPT_SOURCE_LINKADDR          UINT_C(1)       /* 送信å
    405 ˆãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¤ãƒ³ã‚¿ãƒ•ã‚§ãƒ¼ã‚¹ã®ã‚¢ãƒ‰ãƒ¬ã‚¹ */
    406 #define ND_OPT_TARGET_LINKADDR          UINT_C(2)       /* 対象ネットワークインタフェースのアドレス */
    407 #define ND_OPT_PREFIX_INFORMATION       UINT_C(3)       /* プレフィックスæƒ
    408 å ±                             */
    409 #define ND_OPT_REDIRECTED_HEADER        UINT_C(4)       /* リダイレクト・ヘッダ                               */
     373#define ND_OPT_SOURCE_LINKADDR          UINT_C(1)       /* 送信先ネットワークインタフェースのアドレス        */
     374#define ND_OPT_TARGET_LINKADDR          UINT_C(2)       /* 対象ネットワークインタフェースのアドレス */
     375#define ND_OPT_PREFIX_INFORMATION       UINT_C(3)       /* プレフィックス情報                            */
     376#define ND_OPT_REDIRECTED_HEADER        UINT_C(4)       /* リダイレクト・ヘッダ                           */
    410377#define ND_OPT_MTU                      UINT_C(5)       /* MTU                                          */
    411378
    412 #define ND_OPT_PREFIX_INFO_COUNT        UINT_C(6)       /* プレフィックスæƒ
    413 å ±ã®å€‹æ•°                    */
    414 #define ND_OPT_OFF_ARRAY_SIZE           UINT_C(7)       /* ND オプションのオフセットを記録するé
    415 åˆ—サイズ*/
    416 
    417 #define ND_OPT_OFF_ARRAY_IX(t)          ((t)-1)         /* オフセットé
    418 åˆ—のインデックス                       */
    419 
    420 /* プレフィックスオプション */
     379#define ND_OPT_PREFIX_INFO_COUNT        UINT_C(6)       /* プレフィックス情報の個数                 */
     380#define ND_OPT_OFF_ARRAY_SIZE           UINT_C(7)       /* ND オプションのオフセットを記録する配列サイズ*/
     381
     382#define ND_OPT_OFF_ARRAY_IX(t)          ((t)-1)         /* オフセット配列のインデックス                       */
     383
     384/* プレフィックスオプション */
    421385
    422386typedef struct t_nd_opt_prefix_info {
    423         uint8_t         type;           /* 近隣探索オプションタイプ = 3     */
    424         uint8_t         len;            /* オプション長 = 8×4=32 */
    425         uint8_t         prefix_len;     /* プレフィックス長             */
    426         uint8_t         flags;          /* フラグ                    */
    427         uint32_t        valid;          /* [s] 有効時間                     */
    428         uint32_t        preferred;      /* [s] 推奨有効時間               */
     387        uint8_t         type;           /* 近隣探索オプションタイプ = 3     */
     388        uint8_t         len;            /* オプション長 = 8×4=32      */
     389        uint8_t         prefix_len;     /* プレフィックス長             */
     390        uint8_t         flags;          /* フラグ                  */
     391        uint32_t        valid;          /* [s] 有効時間                     */
     392        uint32_t        preferred;      /* [s] 推奨有効時間           */
    429393        uint32_t        reserved;
    430         T_IN6_ADDR      prefix;         /* プレフィックス                */
     394        T_IN6_ADDR      prefix;         /* プレフィックス              */
    431395        } __attribute__((packed, aligned(2)))T_ND_OPT_PREFIX_INFO;
    432396
    433 #define ND_OPT_PI_FLAG_ONLINK   UINT_C(0x80)            /* オンリンクプレフィックス */
    434 #define ND_OPT_PI_FLAG_AUTO     UINT_C(0x40)            /* ステートレス・アドレス自動設定*/
    435 
    436 /* MTU オプションヘッダ */
     397#define ND_OPT_PI_FLAG_ONLINK   UINT_C(0x80)            /* オンリンクプレフィックス */
     398#define ND_OPT_PI_FLAG_AUTO     UINT_C(0x40)            /* ステートレス・アドレス自動設定*/
     399
     400/* MTU オプションヘッダ */
    437401
    438402typedef struct t_nd_opt_mtu_hdr {
    439         uint8_t         type;           /* オプションタイプ             */
    440         uint8_t         len;            /* オプション長、単位は 8 バイト*/
     403        uint8_t         type;           /* オプションタイプ             */
     404        uint8_t         len;            /* オプション長、単位は 8 バイト*/
    441405        uint16_t        reserved;
    442406        uint32_t        mtu;            /* MTU                          */
     
    444408
    445409/*
    446  *  向け直し
     410 *  向け直し
    447411 */
    448412
    449413typedef struct t_nd_redirect_hdr {
    450414        T_ICMP6_HDR     hdr;
    451         T_IN6_ADDR      target;         /* ルータのアドレス             */
    452         T_IN6_ADDR      dst;            /* 向け直しの終点アドレス            */
    453         /* この後にオプションが続く */
     415        T_IN6_ADDR      target;         /* ルータのアドレス             */
     416        T_IN6_ADDR      dst;            /* 向け直しの終点アドレス          */
     417        /* この後にオプションが続く */
    454418        } __attribute__((packed, aligned(2)))T_ND_REDIRECT_HDR;
    455419
     
    459423
    460424/*
    461  *  SNMP の 管理æƒ
    462 å ±ãƒ™ãƒ¼ã‚¹ (MIB)
     425 *  SNMP の 管理情報ベース (MIB)
    463426 */
    464427
     
    505468
    506469/*
    507  *  関数
     470 *  関数
    508471 */
    509472
  • EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/icmp_var.h

    • Property svn:keywords deleted
    • Property svn:mime-type changed from text/x-chdr to text/x-chdr;charset=UTF-8
    r270 r321  
    55 *                   Tomakomai National College of Technology, JAPAN
    66 *
    7  *  上記著作権è€
    8 ã¯ï¼Œä»¥ä¸‹ã® (1)~(4) の条件か,Free Software Foundation
    9  *  によってå
    10 ¬è¡¨ã•ã‚Œã¦ã„ã‚‹ GNU General Public License の Version 2 に記
    11  *  述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
    12  *  を改変したものを含む.以下同じ)を使用・複製・改変・再é
    13 å¸ƒï¼ˆä»¥ä¸‹ï¼Œ
    14  *  利用と呼ぶ)することを無償で許諾する.
    15  *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
    16  *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
    17  *      スコード中に含まれていること.
    18  *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
    19  *      用できる形で再é
    20 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é
    21 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
    22  *      è€
    23 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—作権表示,この利用条件および下記
    24  *      の無保証規定を掲載すること.
    25  *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
    26  *      用できない形で再é
    27 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®æ¡ä»¶ã‚’満たすこと.
    28  *    (a) 再é
    29 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€
    30 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—
    31  *        作権表示,この利用条件および下記の無保証規定を掲載すること.
    32  *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
    33  *      害からも,上記著作権è€
    34 ãŠã‚ˆã³TOPPERSプロジェクトをå
    35 è²¬ã™ã‚‹ã“と.
     7 *  上記著作権者は,以下の (1)~(4) の条件か,Free Software Foundation
     8 *  によって公表されている GNU General Public License の Version 2 に記
     9 *  述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
     10 *  を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下,
     11 *  利用と呼ぶ)することを無償で許諾する.
     12 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     13 *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     14 *      スコード中に含まれていること.
     15 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     16 *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     17 *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     18 *      の無保証規定を掲載すること.
     19 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     20 *      用できない形で再配布する場合には,次の条件を満たすこと.
     21 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     22 *        作権表示,この利用条件および下記の無保証規定を掲載すること.
     23 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     24 *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
    3625 *
    37  *  本ソフトウェアは,無保証で提供されているものである.上記著作権è€
    38 ãŠ
    39  *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
    40  *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
    41  *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
     26 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     27 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
     28 *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
     29 *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
    4230 *
    4331 *  @(#) $Id$
     
    8674
    8775/*
    88  *  SNMP の 管理æƒ
    89 å ±ãƒ™ãƒ¼ã‚¹ (MIB)
     76 *  SNMP の 管理情報ベース (MIB)
    9077 */
    9178
  • EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/if_ether.c

    • Property svn:keywords deleted
    • Property svn:mime-type changed from text/x-csrc to text/x-csrc;charset=UTF-8
    r270 r321  
    55 *                   Tomakomai National College of Technology, JAPAN
    66 *
    7  *  上記著作権è€
    8 ã¯ï¼Œä»¥ä¸‹ã® (1)~(4) の条件か,Free Software Foundation
    9  *  によってå
    10 ¬è¡¨ã•ã‚Œã¦ã„ã‚‹ GNU General Public License の Version 2 に記
    11  *  述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
    12  *  を改変したものを含む.以下同じ)を使用・複製・改変・再é
    13 å¸ƒï¼ˆä»¥ä¸‹ï¼Œ
    14  *  利用と呼ぶ)することを無償で許諾する.
    15  *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
    16  *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
    17  *      スコード中に含まれていること.
    18  *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
    19  *      用できる形で再é
    20 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é
    21 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
    22  *      è€
    23 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—作権表示,この利用条件および下記
    24  *      の無保証規定を掲載すること.
    25  *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
    26  *      用できない形で再é
    27 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®æ¡ä»¶ã‚’満たすこと.
    28  *    (a) 再é
    29 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€
    30 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—
    31  *        作権表示,この利用条件および下記の無保証規定を掲載すること.
    32  *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
    33  *      害からも,上記著作権è€
    34 ãŠã‚ˆã³TOPPERSプロジェクトをå
    35 è²¬ã™ã‚‹ã“と.
    36  *
    37  *  本ソフトウェアは,無保証で提供されているものである.上記著作権è€
    38 ãŠ
    39  *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
    40  *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
    41  *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
     7 *  上記著作権者は,以下の (1)~(4) の条件か,Free Software Foundation
     8 *  によって公表されている GNU General Public License の Version 2 に記
     9 *  述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
     10 *  を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下,
     11 *  利用と呼ぶ)することを無償で許諾する.
     12 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     13 *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     14 *      スコード中に含まれていること.
     15 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     16 *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     17 *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     18 *      の無保証規定を掲載すること.
     19 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     20 *      用できない形で再配布する場合には,次の条件を満たすこと.
     21 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     22 *        作権表示,この利用条件および下記の無保証規定を掲載すること.
     23 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     24 *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
     25 *
     26 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     27 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
     28 *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
     29 *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
    4230 *
    4331 *  @(#) $Id$
     
    121109
    122110/*
    123  *  ARP キャッシュエントリ
     111 *  ARP キャッシュエントリ
    124112 */
    125113
     
    127115
    128116/*
    129  *  関数
     117 *  関数
    130118 */
    131119
     
    135123
    136124/*
    137  *  arp_lookup -- ARP キャッシュの探索と登録
    138  *
    139  *    注意: SEM_ARP_CACHE_LOCK を獲得した状æ
    140 ‹ã§å‘¼å‡ºã™ã“と
     125 *  arp_lookup -- ARP キャッシュの探索と登録
     126 *
     127 *    注意: SEM_ARP_CACHE_LOCK を獲得した状態で呼出すこと
    141128 */
    142129
     
    152139                }
    153140
    154         /* create が真なら、新たなエントリを登録する。*/
     141        /* create が真なら、新たなエントリを登録する。*/
    155142        if (create) {
    156143
    157                 /* まず、空きがあれば、その空きを利用する。*/
     144                /* まず、空きがあれば、その空きを利用する。*/
    158145                for (ix = NUM_ARP_ENTRY; ix -- > 0; ) {
    159146                        if (arp_cache[ix].expire == 0) {
     
    164151
    165152                /*
    166                  *  空きがなければ、タイムアウトまで時間が最短の
    167                  *  エントリーを破棄して利用する。
     153                 *  空きがなければ、タイムアウトまで時間が最短の
     154                 *  エントリーを破棄して利用する。
    168155                 */
    169156                syslog(LOG_NOTICE, "[ARP] cache busy, size=%d", NUM_ARP_ENTRY);
     
    183170
    184171/*
    185  *  in_arpinput -- TCP/IP 用 ARP のå
    186 ¥åŠ›é–¢æ•°
     172 *  in_arpinput -- TCP/IP 用 ARP の入力関数
    187173 */
    188174
     
    200186        et_arph = GET_ETHER_ARP_HDR(input);
    201187
    202         ntoahl(saddr, et_arph->sproto);         /* 送信å
    203 ƒ IP アドレス       */
    204         ntoahl(taddr, et_arph->tproto);         /* 解決対象 IP アドレス */
    205 
    206         /*
    207          *  以下の場合はエラー
    208          *    ・送信ホストの物理アドレスが自分
    209          *    ・送信ホストの物理アドレスがブロードキャスト
     188        ntoahl(saddr, et_arph->sproto);         /* 送信元 IP アドレス  */
     189        ntoahl(taddr, et_arph->tproto);         /* 解決対象 IP アドレス */
     190
     191        /*
     192         *  以下の場合はエラー
     193         *    ・送信ホストの物理アドレスが自分
     194         *    ・送信ホストの物理アドレスがブロードキャスト
    210195         */
    211196        if (memcmp(et_arph->shost, ifaddr->lladdr,        ETHER_ADDR_LEN) == 0 ||
     
    214199
    215200        /*
    216          *  送信ホストの IP アドレスが自分の場合は、重複しているので
    217          *  相手にも知らせる。
     201         *  送信ホストの IP アドレスが自分の場合は、重複しているので
     202         *  相手にも知らせる。
    218203         */
    219204        if (saddr == ifp->in_ifaddr.addr) {
     
    240225
    241226        /*
    242          *  以下の場合は何もしない。
    243          *    ・解決対象 IP アドレスが自分ではない、注: å
    244 ƒã® FreeBSD の
    245          *      実è£
    246 ã§ã¯ã€ARP PROXY 等のため、自分以外の IP アドレスの
    247          *      解決も行っているが、本実è£
    248 ã§ã¯ã€è‡ªåˆ†ä»¥å¤–の IP
    249          *      アドレスの解決は行わない。
     227         *  以下の場合は何もしない。
     228         *    ・解決対象 IP アドレスが自分ではない、注: 元の FreeBSD の
     229         *      実装では、ARP PROXY 等のため、自分以外の IP アドレスの
     230         *      解決も行っているが、本実装では、自分以外の IP
     231         *      アドレスの解決は行わない。
    250232         */
    251233        if (taddr != ifp->in_ifaddr.addr)
     
    253235
    254236        /*
    255          *  送信å
    256 ƒ IP アドレスが ARP キャッシュにあるか調べる。
    257          *  キャッシュになければ、新たにエントリを登録する。
     237         *  送信元 IP アドレスが ARP キャッシュにあるか調べる。
     238         *  キャッシュになければ、新たにエントリを登録する。
    258239         */
    259240        syscall(wai_sem(SEM_ARP_CACHE_LOCK));
     
    264245
    265246        /*
    266          *  送信がペンデングされているフレームがあれば送信する。
     247         *  送信がペンデングされているフレームがあれば送信する。
    267248         */
    268249        if (ent->hold) {
    269250
    270                 /* フレームの Ethernet ヘッダを設定する。*/
     251                /* フレームの Ethernet ヘッダを設定する。*/
    271252                memcpy(GET_ETHER_HDR(ent->hold)->dhost, ent->mac_addr, ETHER_ADDR_LEN);
    272253
     
    275256                syscall(sig_sem(SEM_ARP_CACHE_LOCK));
    276257
    277                 /* ペンディングされているフレームを送信する。*/
     258                /* ペンディングされているフレームを送信する。*/
    278259                IF_RAW_OUTPUT(pending, TMO_FEVR);
    279260
     
    286267        arph = GET_ARP_HDR(input);
    287268
    288         /* アドレス解決要求でなければ終了 */
     269        /* アドレス解決要求でなければ終了 */
    289270        if (ntohs(arph->opcode) != ARPOP_REQUEST)
    290271                goto buf_rel;
    291272
    292         /* Ethernet ARP ヘッダを設定する。*/
     273        /* Ethernet ARP ヘッダを設定する。*/
    293274        memcpy(et_arph->thost, et_arph->shost, ETHER_ADDR_LEN);
    294275        memcpy(et_arph->shost, ifaddr->lladdr, ETHER_ADDR_LEN);
     
    296277        ahtonl(et_arph->sproto, taddr);
    297278
    298         /* Ethernet ARP ヘッダを設定する。*/
     279        /* Ethernet ARP ヘッダを設定する。*/
    299280        arph->opcode = htons(ARPOP_REPLY);
    300281
    301         /* Ethernet ヘッダを設定する。*/
     282        /* Ethernet ヘッダを設定する。*/
    302283        eth = GET_ETHER_HDR(input);
    303284        memcpy(eth->dhost, eth->shost,     ETHER_ADDR_LEN);
    304285        memcpy(eth->shost, ifaddr->lladdr, ETHER_ADDR_LEN);
    305286
    306         /* ARP 応答を送信する。*/
     287        /* ARP 応答を送信する。*/
    307288        IF_RAW_OUTPUT(input, TMO_FEVR);
    308289        return;
     
    315296
    316297/*
    317  *  arp_timer -- ARP キャッシュの更新
     298 *  arp_timer -- ARP キャッシュの更新
    318299 */
    319300
     
    329310                        arp_cache[ix].expire -= ARP_TIMER_TMO;
    330311                        if (arp_cache[ix].expire == 0) {
    331                                 /* 送信がペンデングされているフレームがあれば捨てる。*/
     312                                /* 送信がペンデングされているフレームがあれば捨てる。*/
    332313                                if (arp_cache[ix].hold) {
    333314                                        NET_COUNT_IP4(net_count_ip4[NC_IP4_OUT_ERR_PACKETS], 1);
     
    344325
    345326/*
    346  *  arp_request -- MAC アドレス解決要求
     327 *  arp_request -- MAC アドレス解決要求
    347328 */
    348329
     
    362343        if ((error = tget_net_buf(&arp_req, IF_ARP_ETHER_HDR_SIZE, TMO_ARP_GET_NET_BUF)) == E_OK) {
    363344
    364                 /* イーサネットヘッダを設定する。*/
     345                /* イーサネットヘッダを設定する。*/
    365346                eth     = GET_ETHER_HDR(arp_req);
    366347                memcpy(eth->dhost, ether_broad_cast_addr, ETHER_ADDR_LEN);
     
    368349                eth->type = htons(ETHER_TYPE_ARP);
    369350
    370                 /* ARP ヘッダを設定する。*/
     351                /* ARP ヘッダを設定する。*/
    371352                arph    = GET_ARP_HDR(arp_req);
    372353                arph->hrd_addr  = htons(ARPHRD_ETHER);
     
    376357                arph->opcode    = htons(ARPOP_REQUEST);
    377358
    378                 /* イーサネット ARP ヘッダを設定する。*/
     359                /* イーサネット ARP ヘッダを設定する。*/
    379360                et_arph = GET_ETHER_ARP_HDR(arp_req);
    380361                src     = IF_GET_IFNET()->in_ifaddr.addr;
     
    384365                ahtonl(et_arph->tproto, dst);
    385366
    386                 /* 送信する。*/
     367                /* 送信する。*/
    387368                error = IF_RAW_OUTPUT(arp_req, TMO_ARP_OUTPUT);
    388369                }
     
    393374
    394375/*
    395  *  arp_get_cache -- ARP キャッシュを獲得する。
     376 *  arp_get_cache -- ARP キャッシュを獲得する。
    396377 */
    397378
     
    403384
    404385/*
    405  *  arp_input -- ARP のå
    406 ¥åŠ›é–¢æ•°
     386 *  arp_input -- ARP の入力関数
    407387 */
    408388
     
    415395        NET_COUNT_ARP(net_count_arp.in_packets, 1);
    416396
    417         /* ARP ヘッダの長さをチェックする。*/
     397        /* ARP ヘッダの長さをチェックする。*/
    418398        if (input->len < IF_ARP_HDR_SIZE)
    419399                goto buf_rel;
     
    422402
    423403        /*
    424          *  物理アドレスフォーマットが Ehternet 以外
    425          *  または、プロトコルが IP 以外はエラー。
     404         *  物理アドレスフォーマットが Ehternet 以外
     405         *  または、プロトコルが IP 以外はエラー。
    426406         */
    427407        if (ntohs(arph->hrd_addr) != ARPHRD_ETHER ||
     
    429409                goto buf_rel;
    430410
    431         /* ARP ヘッダ + Ether ARP ヘッダの長さをチェックする。*/
     411        /* ARP ヘッダ + Ether ARP ヘッダの長さをチェックする。*/
    432412        if (input->len < IF_ARP_ETHER_HDR_SIZE)
    433413                goto buf_rel;
     
    442422
    443423/*
    444  *  arp_resolve -- MAC アドレス解決
    445  *
    446  *    アドレス解決ができれば、戻り値は true を返し、できなければ
    447  *    送信をペンディングして、戻り値は false を返す。
     424 *  arp_resolve -- MAC アドレス解決
     425 *
     426 *    アドレス解決ができれば、戻り値は true を返し、できなければ
     427 *    送信をペンディングして、戻り値は false を返す。
    448428 */
    449429
     
    458438
    459439        /*
    460          *  次の場合は、イーサネットのブロードキャストアドレスを返す。
     440         *  次の場合は、イーサネットのブロードキャストアドレスを返す。
    461441         *
    462          *    ・å
    463 ¨ãƒ“ットが 1
    464          *    ・ホスト部のå
    465 ¨ãƒ“ットが 1 で、ネットワーク部がローカルアドレス
     442         *    ・全ビットが 1
     443         *    ・ホスト部の全ビットが 1 で、ネットワーク部がローカルアドレス
    466444         */
    467445        if (gw == IPV4_ADDR_BROADCAST ||
     
    471449                }
    472450
    473         /* 送信å
    474 ˆ GW の IP アドレスが ARP キャッシュにあるか調べる。*/
     451        /* 送信先 GW の IP アドレスが ARP キャッシュにあるか調べる。*/
    475452        syscall(wai_sem(SEM_ARP_CACHE_LOCK));
    476453        ent = arp_lookup(gw, true);
     
    481458                }
    482459        else {
    483                 /* 送信がペンデングされているフレームがあれば捨てる。*/
     460                /* 送信がペンデングされているフレームがあれば捨てる。*/
    484461                if (ent->hold) {
    485462                        NET_COUNT_IP4(net_count_ip4[NC_IP4_OUT_ERR_PACKETS], 1);
     
    488465
    489466                /*
    490                  *  送信をペンディングする。
    491                  *  IF でネットワークバッファを開放しないフラグが設定されているときは、
    492                  *  送信をペンディングしない。
     467                 *  送信をペンディングする。
     468                 *  IF でネットワークバッファを開放しないフラグが設定されているときは、
     469                 *  送信をペンディングしない。
    493470                 */
    494471                if ((output->flags & NB_FLG_NOREL_IFOUT) == 0)
     
    500477                syscall(sig_sem(SEM_ARP_CACHE_LOCK));
    501478
    502                 /* アドレス解決要求を送信する。*/
     479                /* アドレス解決要求を送信する。*/
    503480                arp_request(ifaddr, gw);
    504481                return false;
     
    507484
    508485/*
    509  *  arp_init -- ARP 初期化
     486 *  arp_init -- ARP 初期化
    510487 */
    511488
     
    518495#ifdef ETHER_CFG_MULTICAST
    519496/*
    520  *  ether_map_ipv4_multicast -- IPv4 マルチキャストアドレスからイーサネット・マルチキャストアドレスへの変換
     497 *  ether_map_ipv4_multicast -- IPv4 マルチキャストアドレスからイーサネット・マルチキャストアドレスへの変換
    521498 */
    522499
  • EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/if_ether.cfg

    • Property svn:keywords deleted
    • Property svn:mime-type changed from text/plain to text/plain;charset=UTF-8
    r270 r321  
    55 *                   Tomakomai National College of Technology, JAPAN
    66 *
    7  *  上記著作権è€
    8 ã¯ï¼Œä»¥ä¸‹ã® (1)~(4) の条件か,Free Software Foundation
    9  *  によってå
    10 ¬è¡¨ã•ã‚Œã¦ã„ã‚‹ GNU General Public License の Version 2 に記
    11  *  述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
    12  *  を改変したものを含む.以下同じ)を使用・複製・改変・再é
    13 å¸ƒï¼ˆä»¥ä¸‹ï¼Œ
    14  *  利用と呼ぶ)することを無償で許諾する.
    15  *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
    16  *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
    17  *      スコード中に含まれていること.
    18  *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
    19  *      用できる形で再é
    20 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é
    21 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
    22  *      è€
    23 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—作権表示,この利用条件および下記
    24  *      の無保証規定を掲載すること.
    25  *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
    26  *      用できない形で再é
    27 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®æ¡ä»¶ã‚’満たすこと.
    28  *    (a) 再é
    29 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€
    30 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—
    31  *        作権表示,この利用条件および下記の無保証規定を掲載すること.
    32  *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
    33  *      害からも,上記著作権è€
    34 ãŠã‚ˆã³TOPPERSプロジェクトをå
    35 è²¬ã™ã‚‹ã“と.
     7 *  上記著作権者は,以下の (1)~(4) の条件か,Free Software Foundation
     8 *  によって公表されている GNU General Public License の Version 2 に記
     9 *  述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
     10 *  を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下,
     11 *  利用と呼ぶ)することを無償で許諾する.
     12 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     13 *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     14 *      スコード中に含まれていること.
     15 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     16 *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     17 *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     18 *      の無保証規定を掲載すること.
     19 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     20 *      用できない形で再配布する場合には,次の条件を満たすこと.
     21 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     22 *        作権表示,この利用条件および下記の無保証規定を掲載すること.
     23 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     24 *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
    3625 *
    37  *  本ソフトウェアは,無保証で提供されているものである.上記著作権è€
    38 ãŠ
    39  *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
    40  *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
    41  *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
     26 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     27 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
     28 *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
     29 *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
    4230 *
    4331 *  @(#) $Id$
     
    4533
    4634/*
    47  *  Ethernet ARP コンフィギュレーションファイル
     35 *  Ethernet ARP コンフィギュレーションファイル
    4836 */
    4937
    5038#ifdef SUPPORT_ETHER
    5139
    52 /* ARP キャッシュ更新用セマフォ */
     40/* ARP キャッシュ更新用セマフォ */
    5341
    5442CRE_SEM(SEM_ARP_CACHE_LOCK, { TA_TPRI, 1, 1 });
  • EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/if_ether.h

    • Property svn:keywords deleted
    • Property svn:mime-type changed from text/x-chdr to text/x-chdr;charset=UTF-8
    r270 r321  
    55 *                   Tomakomai National College of Technology, JAPAN
    66 *
    7  *  上記著作権è€
    8 ã¯ï¼Œä»¥ä¸‹ã® (1)~(4) の条件か,Free Software Foundation
    9  *  によってå
    10 ¬è¡¨ã•ã‚Œã¦ã„ã‚‹ GNU General Public License の Version 2 に記
    11  *  述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
    12  *  を改変したものを含む.以下同じ)を使用・複製・改変・再é
    13 å¸ƒï¼ˆä»¥ä¸‹ï¼Œ
    14  *  利用と呼ぶ)することを無償で許諾する.
    15  *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
    16  *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
    17  *      スコード中に含まれていること.
    18  *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
    19  *      用できる形で再é
    20 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é
    21 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
    22  *      è€
    23 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—作権表示,この利用条件および下記
    24  *      の無保証規定を掲載すること.
    25  *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
    26  *      用できない形で再é
    27 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®æ¡ä»¶ã‚’満たすこと.
    28  *    (a) 再é
    29 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€
    30 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—
    31  *        作権表示,この利用条件および下記の無保証規定を掲載すること.
    32  *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
    33  *      害からも,上記著作権è€
    34 ãŠã‚ˆã³TOPPERSプロジェクトをå
    35 è²¬ã™ã‚‹ã“と.
     7 *  上記著作権者は,以下の (1)~(4) の条件か,Free Software Foundation
     8 *  によって公表されている GNU General Public License の Version 2 に記
     9 *  述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
     10 *  を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下,
     11 *  利用と呼ぶ)することを無償で許諾する.
     12 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     13 *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     14 *      スコード中に含まれていること.
     15 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     16 *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     17 *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     18 *      の無保証規定を掲載すること.
     19 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     20 *      用できない形で再配布する場合には,次の条件を満たすこと.
     21 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     22 *        作権表示,この利用条件および下記の無保証規定を掲載すること.
     23 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     24 *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
    3625 *
    37  *  本ソフトウェアは,無保証で提供されているものである.上記著作権è€
    38 ãŠ
    39  *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
    40  *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
    41  *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
     26 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     27 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
     28 *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
     29 *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
    4230 *
    4331 *  @(#) $Id$
     
    8876 *  Ethernet Address Resolution Protocol.
    8977 *
    90  *  RFC 826 参ç
    91 §
     78 *  RFC 826 参照
    9279 */
    9380
    9481typedef struct t_ether_arp_hdr {
    95         uint8_t         shost[ETHER_ADDR_LEN];  /* 送信ホストの物理アドレス */
    96         uint8_t         sproto[IPV4_ADDR_LEN];  /* 送信ホストの IP アドレス   */
    97         uint8_t         thost[ETHER_ADDR_LEN];  /* 解決対象物理アドレス               */
    98         uint8_t         tproto[IPV4_ADDR_LEN];  /* 解決対象 IP アドレス         */
     82        uint8_t         shost[ETHER_ADDR_LEN];  /* 送信ホストの物理アドレス */
     83        uint8_t         sproto[IPV4_ADDR_LEN];  /* 送信ホストの IP アドレス       */
     84        uint8_t         thost[ETHER_ADDR_LEN];  /* 解決対象物理アドレス           */
     85        uint8_t         tproto[IPV4_ADDR_LEN];  /* 解決対象 IP アドレス         */
    9986        } __attribute__((packed, aligned(2)))T_ETHER_ARP_HDR;
    10087
     
    10592
    10693/*
    107  *  ARP キャッシュエントリ
     94 *  ARP キャッシュエントリ
    10895 */
    10996
    11097typedef struct arp_entry {
    111         T_NET_BUF       *hold;          /* ARP の解決å¾
    112 ã¡å‡ºåŠ›ãƒ•ãƒ¬ãƒ¼ãƒ    */
    113         T_IN4_ADDR      ip_addr;        /* IP アドレス                      */
    114         uint16_t        expire;         /* 破棄までの時間、0 なら未使用    */
    115         uint8_t         mac_addr[ETHER_ADDR_LEN];       /* MAC アドレス     */
     98        T_NET_BUF       *hold;          /* ARP の解決待ち出力フレーム      */
     99        T_IN4_ADDR      ip_addr;        /* IP アドレス                      */
     100        uint16_t        expire;         /* 破棄までの時間、0 なら未使用      */
     101        uint8_t         mac_addr[ETHER_ADDR_LEN];       /* MAC アドレス     */
    116102        } __attribute__((packed, aligned(2)))T_ARP_ENTRY;
    117103
    118104/*
    119  *  関数
     105 *  関数
    120106 */
    121107
     
    131117
    132118/*
    133  *  TINET 独自 API
     119 *  TINET 独自 API
    134120 */
    135121
  • EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/in.h

    • Property svn:keywords deleted
    • Property svn:mime-type changed from text/x-chdr to text/x-chdr;charset=UTF-8
    r270 r321  
    55 *                   Tomakomai National College of Technology, JAPAN
    66 *
    7  *  上記著作権è€
    8 ã¯ï¼Œä»¥ä¸‹ã® (1)~(4) の条件か,Free Software Foundation
    9  *  によってå
    10 ¬è¡¨ã•ã‚Œã¦ã„ã‚‹ GNU General Public License の Version 2 に記
    11  *  述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
    12  *  を改変したものを含む.以下同じ)を使用・複製・改変・再é
    13 å¸ƒï¼ˆä»¥ä¸‹ï¼Œ
    14  *  利用と呼ぶ)することを無償で許諾する.
    15  *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
    16  *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
    17  *      スコード中に含まれていること.
    18  *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
    19  *      用できる形で再é
    20 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é
    21 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
    22  *      è€
    23 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—作権表示,この利用条件および下記
    24  *      の無保証規定を掲載すること.
    25  *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
    26  *      用できない形で再é
    27 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®æ¡ä»¶ã‚’満たすこと.
    28  *    (a) 再é
    29 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€
    30 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—
    31  *        作権表示,この利用条件および下記の無保証規定を掲載すること.
    32  *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
    33  *      害からも,上記著作権è€
    34 ãŠã‚ˆã³TOPPERSプロジェクトをå
    35 è²¬ã™ã‚‹ã“と.
    36  *
    37  *  本ソフトウェアは,無保証で提供されているものである.上記著作権è€
    38 ãŠ
    39  *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
    40  *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
    41  *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
     7 *  上記著作権者は,以下の (1)~(4) の条件か,Free Software Foundation
     8 *  によって公表されている GNU General Public License の Version 2 に記
     9 *  述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
     10 *  を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下,
     11 *  利用と呼ぶ)することを無償で許諾する.
     12 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     13 *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     14 *      スコード中に含まれていること.
     15 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     16 *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     17 *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     18 *      の無保証規定を掲載すること.
     19 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     20 *      用できない形で再配布する場合には,次の条件を満たすこと.
     21 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     22 *        作権表示,この利用条件および下記の無保証規定を掲載すること.
     23 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     24 *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
     25 *
     26 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     27 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
     28 *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
     29 *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
    4230 *
    4331 *  @(#) $Id$
     
    8876
    8977/*
    90  *  TINET のバージョンæƒ
    91 å ±
    92  */
    93 
    94 #define TINET_PRVER             UINT_C(0x1054)  /* TINET のバージョン番号 */
    95 
    96 /*
    97  *  インターネットシステムの定義、RFC790 参ç
    98 §
    99  */
    100 
    101 /*
    102  *  プロトコル (RFC1700)
    103  */
    104 
    105 #define IPPROTO_IP              UINT_C(0)       /* IP のダミー                              */
    106 #define IPPROTO_HOPOPTS         UINT_C(0)       /* IPv6 中継点 (Hop-by-Hop) オプション  */
     78 *  TINET のバージョン情報
     79 */
     80
     81#define TINET_PRVER             UINT_C(0x1054)  /* TINET のバージョン番号 */
     82
     83/*
     84 *  インターネットシステムの定義、RFC790 参照
     85 */
     86
     87/*
     88 *  プロトコル (RFC1700)
     89 */
     90
     91#define IPPROTO_IP              UINT_C(0)       /* IP のダミー                              */
     92#define IPPROTO_HOPOPTS         UINT_C(0)       /* IPv6 中継点 (Hop-by-Hop) オプション  */
    10793#define IPPROTO_ICMP            UINT_C(1)       /* ICMP                                 */
    10894#define IPPROTO_TCP             UINT_C(6)       /* TCP                                  */
    10995#define IPPROTO_UDP             UINT_C(17)      /* UDP                                  */
    11096#define IPPROTO_IPV6            UINT_C(41)      /* IPv6                                 */
    111 #define IPPROTO_ROUTING         UINT_C(43)      /* 経路制御オプション                  */
    112 #define IPPROTO_FRAGMENT        UINT_C(44)      /* 断片化オプション                     */
     97#define IPPROTO_ROUTING         UINT_C(43)      /* 経路制御オプション                    */
     98#define IPPROTO_FRAGMENT        UINT_C(44)      /* 断片化オプション                     */
    11399#define IPPROTO_RSVP            UINT_C(46)      /* RSVP                                 */
    114 #define IPPROTO_ESP             UINT_C(50)      /* IPv6 暗号化オプション                */
    115 #define IPPROTO_AH              UINT_C(51)      /* IPv6 認証オプション                   */
     100#define IPPROTO_ESP             UINT_C(50)      /* IPv6 暗号化オプション                */
     101#define IPPROTO_AH              UINT_C(51)      /* IPv6 認証オプション                 */
    116102#define IPPROTO_ICMPV6          UINT_C(58)      /* ICMPv6                               */
    117 #define IPPROTO_NONE            UINT_C(59)      /* IPv6 次ヘッダ無し                      */
    118 #define IPPROTO_DSTOPTS         UINT_C(60)      /* IPv6 終点オプション                   */
    119 #define IPPROTO_IPCOMP          UINT_C(108)     /* ペイロード圧縮                        */
    120 #define IPPROTO_DONE            UINT_C(257)     /* IPv6 で上位プロトコルå
    121 ¥åŠ›çµ‚了      */
    122 
    123 /*
    124  *  IPv4 アドレス
    125  */
    126 
    127 /* 前方参ç
    128 § */
     103#define IPPROTO_NONE            UINT_C(59)      /* IPv6 次ヘッダ無し                  */
     104#define IPPROTO_DSTOPTS         UINT_C(60)      /* IPv6 終点オプション                 */
     105#define IPPROTO_IPCOMP          UINT_C(108)     /* ペイロード圧縮                      */
     106#define IPPROTO_DONE            UINT_C(257)     /* IPv6 で上位プロトコル入力終了    */
     107
     108/*
     109 *  IPv4 アドレス
     110 */
     111
     112/* 前方参照 */
    129113
    130114#ifndef T_IN4_ADDR_DEFINED
     
    137121
    138122/*
    139  *  ITRON TCP/IPv4 アドレス/ポート番号の定義
     123 *  ITRON TCP/IPv4 アドレス/ポート番号の定義
    140124 */
    141125
    142126typedef struct t_ipv4ep {
    143         uint32_t        ipaddr;         /* IPv4 アドレス    */
    144         uint16_t        portno;         /* ポート番号              */
     127        uint32_t        ipaddr;         /* IPv4 アドレス    */
     128        uint16_t        portno;         /* ポート番号                */
    145129        } T_IPV4EP;
    146130
    147131/*
    148  *  アドレス/ポートの長さ
     132 *  アドレス/ポートの長さ
    149133 */
    150134
     
    153137
    154138/*
    155  *  ポート番号の定義
    156  */
    157 
    158 #define TCP_PORTANY                     UINT_C(0x0000)  /* ITRON TCP/IP 標準  */
    159 #define UDP_PORTANY                     UINT_C(0x0000)  /* ITRON TCP/IP 標準  */
    160 
    161 #define TCP_PORT_LAST_WELL_KNOWN        UINT_C(1023)    /* Well Known 終了番号      */
    162 #define TCP_PORT_FIRST_AUTO             UINT_C(1024)    /* 自動割り当て開始番号       */
    163 #define TCP_PORT_LAST_AUTO              UINT_C(4999)    /* 自動割り当て終了番号       */
    164 
    165 #define UDP_PORT_LAST_WELL_KNOWN        UINT_C(1023)    /* Well Known 終了番号      */
    166 #define UDP_PORT_FIRST_AUTO             UINT_C(1024)    /* 自動割り当て開始番号       */
    167 #define UDP_PORT_LAST_AUTO              UINT_C(4999)    /* 自動割り当て終了番号       */
    168 
    169 /*
    170  *  IP アドレスの定義
    171  */
    172 
    173 #define IPV4_ADDRANY            ULONG_C(0x00000000)     /* ITRON TCP/IP 標準  */
     139 *  ポート番号の定義
     140 */
     141
     142#define TCP_PORTANY                     UINT_C(0x0000)  /* ITRON TCP/IP 標準      */
     143#define UDP_PORTANY                     UINT_C(0x0000)  /* ITRON TCP/IP 標準      */
     144
     145#define TCP_PORT_LAST_WELL_KNOWN        UINT_C(1023)    /* Well Known 終了番号      */
     146#define TCP_PORT_FIRST_AUTO             UINT_C(1024)    /* 自動割り当て開始番号   */
     147#define TCP_PORT_LAST_AUTO              UINT_C(4999)    /* 自動割り当て終了番号   */
     148
     149#define UDP_PORT_LAST_WELL_KNOWN        UINT_C(1023)    /* Well Known 終了番号      */
     150#define UDP_PORT_FIRST_AUTO             UINT_C(1024)    /* 自動割り当て開始番号   */
     151#define UDP_PORT_LAST_AUTO              UINT_C(4999)    /* 自動割り当て終了番号   */
     152
     153/*
     154 *  IP アドレスの定義
     155 */
     156
     157#define IPV4_ADDRANY            ULONG_C(0x00000000)     /* ITRON TCP/IP 標準      */
    174158
    175159#define IPV4_ADDR_LOOPBACK      ULONG_C(0x7f000001)
     
    209193
    210194/*
    211  *  動的生成用 TCP 通信端点
     195 *  動的生成用 TCP 通信端点
    212196 */
    213197
    214198typedef struct t_tcp_ccep {
    215         /* 標準 */
    216         ATR             cepatr;         /* 通信端点属性                   */
    217         void            *sbuf;          /* 送信用ウィンドバッファ    */
    218         int_t           sbufsz;         /* 送信用ウィンドバッファサイズ   */
    219         void            *rbuf;          /* 受信用ウィンドバッファ    */
    220         int_t           rbufsz;         /* 受信用ウィンドバッファサイズ   */
    221         FP              callback;       /* コールバック                   */
    222         /* 実è£
    223 ä¾å­˜ */
     199        /* 標準 */
     200        ATR             cepatr;         /* 通信端点属性                       */
     201        void            *sbuf;          /* 送信用ウィンドバッファ  */
     202        int_t           sbufsz;         /* 送信用ウィンドバッファサイズ       */
     203        void            *rbuf;          /* 受信用ウィンドバッファ  */
     204        int_t           rbufsz;         /* 受信用ウィンドバッファサイズ       */
     205        FP              callback;       /* コールバック                       */
     206        /* 実装依存 */
    224207        } T_TCP_CCEP;
    225208
    226209/*
    227  *  動的生成用 TCP 受付口
     210 *  動的生成用 TCP 受付口
    228211 */
    229212
     
    231214
    232215typedef struct t_tcp_crep {
    233         /* 標準 */
    234         ATR             repatr;         /* 受付口属性              */
    235         T_IPV4EP        myaddr;         /* 自分のアドレス        */
    236         /* 実è£
    237 ä¾å­˜ */
     216        /* 標準 */
     217        ATR             repatr;         /* 受付口属性                */
     218        T_IPV4EP        myaddr;         /* 自分のアドレス      */
     219        /* 実装依存 */
    238220        } T_TCP_CREP;
    239221
     
    241223
    242224/*
    243  *  動的生成用 UDP 通信端点
     225 *  動的生成用 UDP 通信端点
    244226 */
    245227
     
    247229
    248230typedef struct t_udp_ccep {
    249         /* 標準 */
    250         ATR             cepatr;         /* UDP 通信端点属性               */
    251         T_IPV4EP        myaddr;         /* 自分のアドレス                */
    252         FP              callback;       /* コールバック関数             */
    253         /* 実è£
    254 ä¾å­˜ */
     231        /* 標準 */
     232        ATR             cepatr;         /* UDP 通信端点属性           */
     233        T_IPV4EP        myaddr;         /* 自分のアドレス              */
     234        FP              callback;       /* コールバック関数             */
     235        /* 実装依存 */
    255236        } T_UDP_CCEP;
    256237
     
    258239
    259240/*
    260  *  IPv4 と IPv6 をコンパイル時に選択するためのマクロ
     241 *  IPv4 と IPv6 をコンパイル時に選択するためのマクロ
    261242 */
    262243
     
    278259
    279260/*
    280  *  TINET 独自 API
     261 *  TINET 独自 API
    281262 */
    282263
  • EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/in_itron.h

    • Property svn:keywords deleted
    • Property svn:mime-type changed from text/x-chdr to text/x-chdr;charset=UTF-8
    r270 r321  
    55 *                   Tomakomai National College of Technology, JAPAN
    66 *
    7  *  上記著作権è€
    8 ã¯ï¼Œä»¥ä¸‹ã® (1)~(4) の条件か,Free Software Foundation
    9  *  によってå
    10 ¬è¡¨ã•ã‚Œã¦ã„ã‚‹ GNU General Public License の Version 2 に記
    11  *  述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
    12  *  を改変したものを含む.以下同じ)を使用・複製・改変・再é
    13 å¸ƒï¼ˆä»¥ä¸‹ï¼Œ
    14  *  利用と呼ぶ)することを無償で許諾する.
    15  *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
    16  *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
    17  *      スコード中に含まれていること.
    18  *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
    19  *      用できる形で再é
    20 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é
    21 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
    22  *      è€
    23 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—作権表示,この利用条件および下記
    24  *      の無保証規定を掲載すること.
    25  *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
    26  *      用できない形で再é
    27 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®æ¡ä»¶ã‚’満たすこと.
    28  *    (a) 再é
    29 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€
    30 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—
    31  *        作権表示,この利用条件および下記の無保証規定を掲載すること.
    32  *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
    33  *      害からも,上記著作権è€
    34 ãŠã‚ˆã³TOPPERSプロジェクトをå
    35 è²¬ã™ã‚‹ã“と.
     7 *  上記著作権者は,以下の (1)~(4) の条件か,Free Software Foundation
     8 *  によって公表されている GNU General Public License の Version 2 に記
     9 *  述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
     10 *  を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下,
     11 *  利用と呼ぶ)することを無償で許諾する.
     12 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     13 *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     14 *      スコード中に含まれていること.
     15 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     16 *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     17 *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     18 *      の無保証規定を掲載すること.
     19 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     20 *      用できない形で再配布する場合には,次の条件を満たすこと.
     21 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     22 *        作権表示,この利用条件および下記の無保証規定を掲載すること.
     23 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     24 *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
    3625 *
    37  *  本ソフトウェアは,無保証で提供されているものである.上記著作権è€
    38 ãŠ
    39  *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
    40  *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
    41  *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
     26 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     27 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
     28 *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
     29 *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
    4230 *
    4331 *  @(#) $Id$
     
    4836
    4937/*
    50  *  API 機能・事象コード
     38 *  API 機能・事象コード
    5139 */
    5240
    53 /* TCP 関係 */
     41/* TCP 関係 */
    5442
    5543#define TFN_TCP_CRE_REP         (-0x201)
     
    7664#define TEV_TCP_RCV_OOB         (-0x201)
    7765
    78 /* UDP 関係 */
     66/* UDP 関係 */
    7967
    8068#define TFN_UDP_CRE_CEP         (-0x221)
     
    8977#define TEV_UDP_RCV_DAT         (-0x221)
    9078
    91 /* 一般 */
     79/* 一般 */
    9280
    93 #define NADR                    ((void*)(-1))   /* 無効アドレス */
     81#define NADR                    ((void*)(-1))   /* 無効アドレス */
    9482#define IS_PTR_DEFINED(a)       ((void*)(a)!=NADR&&(void*)(a)!=NULL)
    9583#define TCP_REP_NONE            UINT_C(0)
     
    9886
    9987/*
    100  *  関数
     88 *  関数
    10189 */
    10290
    103 /* TCP 関係 */
     91/* TCP 関係 */
    10492
    105 /* 【標準機能】 */
     93/* 【標準機能】 */
    10694
    10795extern ER       tcp_acp_cep (ID cepid, ID repid, T_IPV4EP *p_dstaddr, TMO tmout);
     
    120108extern ER       tcp6_con_cep (ID cepid, T_IPV6EP *p_myaddr, T_IPV6EP *p_dstaddr, TMO tmout);
    121109
    122 /* 【拡張機能】 */
     110/* 【拡張機能】 */
    123111
    124112extern ER       tcp_del_rep (ID cepid);
     
    133121extern ER       tcp6_cre_rep (ID repid, T_TCP6_CREP *pk_crep);
    134122
    135 /* UDP 関係 */
     123/* UDP 関係 */
    136124
    137 /* 【標準機能】 */
     125/* 【標準機能】 */
    138126
    139127extern ER_UINT  udp_snd_dat (ID cepid, T_IPV4EP *p_dstaddr, void *data, int_t len, TMO tmout);
     
    144132extern ER_UINT  udp6_rcv_dat (ID cepid, T_IPV6EP *p_dstaddr, void *data, int_t len, TMO tmout);
    145133
    146 /* 【拡張機能】 */
     134/* 【拡張機能】 */
    147135
    148136extern ER       udp_del_cep (ID cepid);
  • EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/in_rename.h

    • Property svn:keywords deleted
    • Property svn:mime-type changed from text/x-chdr to text/x-chdr;charset=UTF-8
    r270 r321  
    55 *                   Tomakomai National College of Technology, JAPAN
    66 *
    7  *  上記著作権è€
    8 ã¯ï¼Œä»¥ä¸‹ã® (1)~(4) の条件か,Free Software Foundation
    9  *  によってå
    10 ¬è¡¨ã•ã‚Œã¦ã„ã‚‹ GNU General Public License の Version 2 に記
    11  *  述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
    12  *  を改変したものを含む.以下同じ)を使用・複製・改変・再é
    13 å¸ƒï¼ˆä»¥ä¸‹ï¼Œ
    14  *  利用と呼ぶ)することを無償で許諾する.
    15  *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
    16  *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
    17  *      スコード中に含まれていること.
    18  *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
    19  *      用できる形で再é
    20 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é
    21 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
    22  *      è€
    23 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—作権表示,この利用条件および下記
    24  *      の無保証規定を掲載すること.
    25  *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
    26  *      用できない形で再é
    27 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®æ¡ä»¶ã‚’満たすこと.
    28  *    (a) 再é
    29 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€
    30 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—
    31  *        作権表示,この利用条件および下記の無保証規定を掲載すること.
    32  *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
    33  *      害からも,上記著作権è€
    34 ãŠã‚ˆã³TOPPERSプロジェクトをå
    35 è²¬ã™ã‚‹ã“と.
     7 *  上記著作権者は,以下の (1)~(4) の条件か,Free Software Foundation
     8 *  によって公表されている GNU General Public License の Version 2 に記
     9 *  述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
     10 *  を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下,
     11 *  利用と呼ぶ)することを無償で許諾する.
     12 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     13 *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     14 *      スコード中に含まれていること.
     15 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     16 *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     17 *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     18 *      の無保証規定を掲載すること.
     19 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     20 *      用できない形で再配布する場合には,次の条件を満たすこと.
     21 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     22 *        作権表示,この利用条件および下記の無保証規定を掲載すること.
     23 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     24 *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
    3625 *
    37  *  本ソフトウェアは,無保証で提供されているものである.上記著作権è€
    38 ãŠ
    39  *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
    40  *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
    41  *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
     26 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     27 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
     28 *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
     29 *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
    4230 *
    4331 *  @(#) $Id$
     
    4836
    4937/*
    50  *  TCP/IP プロトコルスタックå†
    51 éƒ¨åã®ãƒªãƒãƒ¼ãƒ 
     38 *  TCP/IP プロトコルスタック内部名のリネーム
    5239 */
    5340
     
    154141#define tmax_tcp_repid          _tinet_tmax_tcp_repid
    155142#define tmax_tcp_cepid          _tinet_tmax_tcp_cepid
    156 #define tmax_tcp_crepid         _tinet_tmax_tcp_repid   /* TINET 1.3 との互換性のための定義 */
    157 #define tmax_tcp_ccepid         _tinet_tmax_tcp_cepid   /* TINET 1.3 との互換性のための定義 */
     143#define tmax_tcp_crepid         _tinet_tmax_tcp_repid   /* TINET 1.3 との互換性のための定義 */
     144#define tmax_tcp_ccepid         _tinet_tmax_tcp_cepid   /* TINET 1.3 との互換性のための定義 */
    158145
    159146/* netinet/udp_input.c */
     
    179166#define udp_cep                 _tinet_udp_cep
    180167#define tmax_udp_cepid          _tinet_tmax_udp_cepid
    181 #define tmax_udp_ccepid         _tinet_tmax_udp_cepid   /* TINET 1.3 との互換性のための定義 */
     168#define tmax_udp_ccepid         _tinet_tmax_udp_cepid   /* TINET 1.3 との互換性のための定義 */
    182169
    183170/* netinet/ip_icmp.c */
  • EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/in_subr.c

    • Property svn:keywords deleted
    • Property svn:mime-type changed from text/x-csrc to text/x-csrc;charset=UTF-8
    r270 r321  
    55 *                   Tomakomai National College of Technology, JAPAN
    66 *
    7  *  上記著作権è€
    8 ã¯ï¼Œä»¥ä¸‹ã® (1)~(4) の条件か,Free Software Foundation
    9  *  によってå
    10 ¬è¡¨ã•ã‚Œã¦ã„ã‚‹ GNU General Public License の Version 2 に記
    11  *  述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
    12  *  を改変したものを含む.以下同じ)を使用・複製・改変・再é
    13 å¸ƒï¼ˆä»¥ä¸‹ï¼Œ
    14  *  利用と呼ぶ)することを無償で許諾する.
    15  *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
    16  *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
    17  *      スコード中に含まれていること.
    18  *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
    19  *      用できる形で再é
    20 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é
    21 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
    22  *      è€
    23 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—作権表示,この利用条件および下記
    24  *      の無保証規定を掲載すること.
    25  *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
    26  *      用できない形で再é
    27 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®æ¡ä»¶ã‚’満たすこと.
    28  *    (a) 再é
    29 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€
    30 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—
    31  *        作権表示,この利用条件および下記の無保証規定を掲載すること.
    32  *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
    33  *      害からも,上記著作権è€
    34 ãŠã‚ˆã³TOPPERSプロジェクトをå
    35 è²¬ã™ã‚‹ã“と.
    36  *
    37  *  本ソフトウェアは,無保証で提供されているものである.上記著作権è€
    38 ãŠ
    39  *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
    40  *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
    41  *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
     7 *  上記著作権者は,以下の (1)~(4) の条件か,Free Software Foundation
     8 *  によって公表されている GNU General Public License の Version 2 に記
     9 *  述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
     10 *  を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下,
     11 *  利用と呼ぶ)することを無償で許諾する.
     12 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     13 *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     14 *      スコード中に含まれていること.
     15 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     16 *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     17 *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     18 *      の無保証規定を掲載すること.
     19 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     20 *      用できない形で再配布する場合には,次の条件を満たすこと.
     21 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     22 *        作権表示,この利用条件および下記の無保証規定を掲載すること.
     23 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     24 *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
     25 *
     26 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     27 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
     28 *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
     29 *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
    4230 *
    4331 *  @(#) $Id$
     
    122110
    123111/*
    124  *  in4_get_ifaddr -- インタフェースに設定されているアドレスを返す。
     112 *  in4_get_ifaddr -- インタフェースに設定されているアドレスを返す。
    125113 */
    126114
     
    134122
    135123/*
    136  *  ip2str -- IPv4 アドレスを文字列に変換する。
     124 *  ip2str -- IPv4 アドレスを文字列に変換する。
    137125 */
    138126
     
    166154
    167155/*
    168  *  in4_set_header -- IPv4 ヘッダを設定する。
     156 *  in4_set_header -- IPv4 ヘッダを設定する。
    169157 */
    170158
     
    176164        T_IFNET         *ifp = IF_GET_IFNET();
    177165
    178         /* IP ヘッダを設定する。*/
     166        /* IP ヘッダを設定する。*/
    179167        ip4h->vhl       = IP4_MAKE_VHL(IPV4_VERSION, IP4_HDR_SIZE >> 2);
    180168        ip4h->len       = htons(IP4_HDR_SIZE + len);
     
    184172        ip4h->id        = ip4h->flg_off = ip4h->sum = 0;
    185173
    186         /* IP アドレスを設定する。*/
     174        /* IP アドレスを設定する。*/
    187175        ip4h->dst       = htonl(*dstaddr);
    188176
     
    196184
    197185/*
    198  *  in4_get_datagram -- IPv4 データグラムを獲得し、ヘッダを設定する。
     186 *  in4_get_datagram -- IPv4 データグラムを獲得し、ヘッダを設定する。
    199187 */
    200188
     
    207195        uint_t  align;
    208196
    209         /* データ長を 4 オクテット境界に調整する。*/
     197        /* データ長を 4 オクテット境界に調整する。*/
    210198        align = (len + 3) >> 2 << 2;
    211199
    212         /* ネットワークバッファを獲得する。*/
     200        /* ネットワークバッファを獲得する。*/
    213201        if ((error = tget_net_buf_ex(nbuf, (uint_t)(IF_IP4_HDR_SIZE + align),
    214202                                           (uint_t)(IF_IP4_HDR_SIZE + maxlen), nbatr, tmout)) != E_OK)
     
    216204
    217205        /*
    218          *  より大きなサイズのネットワークバッファを獲得する場合のみ長さを調整する。
    219          *  より小さなサイズのネットワークバッファの獲得は、送信ウィンドバッファの
    220          *  省コピー機能で使用され、実際に送信するまで、データサイズは決定できない。
     206         *  より大きなサイズのネットワークバッファを獲得する場合のみ長さを調整する。
     207         *  より小さなサイズのネットワークバッファの獲得は、送信ウィンドバッファの
     208         *  省コピー機能で使用され、実際に送信するまで、データサイズは決定できない。
    221209         */
    222210        if ((nbatr & NBA_SEARCH_ASCENT) != 0)
    223211                (*nbuf)->len = (uint16_t)(IF_IP4_HDR_SIZE + len);
    224212
    225         /* IP ヘッダを設定する。*/
     213        /* IP ヘッダを設定する。*/
    226214        if ((error = in4_set_header(*nbuf, len, dstaddr, srcaddr, proto, ttl)) != E_OK)
    227215                return error;
    228216
    229         /* 4 オクテット境界までパディングで埋める。*/
     217        /* 4 オクテット境界までパディングで埋める。*/
    230218        if (align > len)
    231219                memset((GET_IP4_SDU(*nbuf) + len), 0, (size_t)(align - len));
     
    235223
    236224/*
    237  *  in4_cksum -- IPv4 のトランスポート層ヘッダのチェックサムを計算する。
    238  *
    239  *  注意: 戻り値はネットワークバイトオーダ
     225 *  in4_cksum -- IPv4 のトランスポート層ヘッダのチェックサムを計算する。
     226 *
     227 *  注意: 戻り値はネットワークバイトオーダ
    240228 */
    241229
     
    246234        uint_t          align;
    247235
    248         /* 4 オクテット境界のデータ長 */
     236        /* 4 オクテット境界のデータ長 */
    249237        align = (len + 3) >> 2 << 2;
    250238
    251         /* 4 オクテット境界までパディングで埋める。*/
     239        /* 4 オクテット境界までパディングで埋める。*/
    252240        if (align > len)
    253241                memset((uint8_t*)nbuf->buf + off + len, 0, (size_t)(align - len));
     
    262250
    263251/*
    264  *  in_cksum -- チェックサム計算関数、IPv4、ICMPv4 用
    265  *
    266  *  注意: data は 4 オクテット単位でパディングすること。
    267  *        data が 2 オクテット単位にアラインされていないと
    268  *        例外が発生する可能性がある。
    269  *        len  は 4 オクテット単位にアラインされていること。
    270  *
    271  *        戻り値はネットワークバイトオーダ
     252 *  in_cksum -- チェックサム計算関数、IPv4、ICMPv4 用
     253 *
     254 *  注意: data は 4 オクテット単位でパディングすること。
     255 *        data が 2 オクテット単位にアラインされていないと
     256 *        例外が発生する可能性がある。
     257 *        len  は 4 オクテット単位にアラインされていること。
     258 *
     259 *        戻り値はネットワークバイトオーダ
    272260 */
    273261
    274262uint16_t
    275 in_cksum (void *data, uint_t len /*オクテット単位*/)
     263in_cksum (void *data, uint_t len /*オクテット単位*/)
    276264{
    277265        uint16_t        sum;
     
    282270
    283271/*
    284  *  in4_is_dstaddr_accept -- 宛å
    285 ˆã‚¢ãƒ‰ãƒ¬ã‚¹ã¨ã—て正しいかチェックする。
    286  *
    287  *    注意: dstaddr は、
    288  *          TINET-1.2 からネットワークバイトオーダ、
    289  *          TINET-1.1 までは、ホストバイトオーダ
     272 *  in4_is_dstaddr_accept -- 宛先アドレスとして正しいかチェックする。
     273 *
     274 *    注意: dstaddr は、
     275 *          TINET-1.2 からネットワークバイトオーダ、
     276 *          TINET-1.1 までは、ホストバイトオーダ
    290277 */
    291278
     
    300287
    301288/*
    302  * in4_ifawithifp -- 宛å
    303 ˆã‚¢ãƒ‰ãƒ¬ã‚¹ã«ãµã•ã‚ã—い送信å
    304 ƒã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’、
    305  *                   ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¤ãƒ³ã‚¿ãƒ•ã‚§ãƒ¼ã‚¹ã‹ã‚‰æŽ¢ç´¢ã™ã‚‹ã€‚
    306  *                   in6_ifawithifp をシミュレートするだけで、
    307  *                   ã‚¨ãƒ©ãƒ¼ã‚’返すことはない。
     289 * in4_ifawithifp -- 宛先アドレスにふさわしい送信元アドレスを、
     290 *                   ネットワークインタフェースから探索する。
     291 *                   in6_ifawithifp をシミュレートするだけで、
     292 *                   エラーを返すことはない。
    308293 */
    309294
     
    315300
    316301/*
    317  *  in4_add_ifaddr -- インタフェースに IPv4 アドレスを設定する。
     302 *  in4_add_ifaddr -- インタフェースに IPv4 アドレスを設定する。
    318303 */
    319304
     
    331316
    332317/*
    333  *  in4_add_route -- 経路表にエントリを設定する。
     318 *  in4_add_route -- 経路表にエントリを設定する。
    334319 */
    335320
     
    351336
    352337/*
    353  *  in4_rtalloc -- ルーティング表を探索する。
     338 *  in4_rtalloc -- ルーティング表を探索する。
    354339 */
    355340
     
    374359
    375360/*
    376  *  in4_rtredirect -- ルーティング表にエントリを登録する。
    377  *
    378  *    注意: 引数 tmo の単位は [ms]。
     361 *  in4_rtredirect -- ルーティング表にエントリを登録する。
     362 *
     363 *    注意: 引数 tmo の単位は [ms]。
    379364 */
    380365
     
    393378
    394379/*
    395  *  in4_timer -- IPv4 å
    396 ±é€šã‚¿ã‚¤ãƒžãƒ¼
    397  *
    398  *    1秒周期で起動される。
     380 *  in4_timer -- IPv4 共通タイマー
     381 *
     382 *    1秒周期で起動される。
    399383 */
    400384
     
    418402
    419403/*
    420  *  in4_init -- IPv4 å
    421 ±é€šæ©Ÿèƒ½ã‚’初期化する。
     404 *  in4_init -- IPv4 共通機能を初期化する。
    422405 */
    423406
     
    439422
    440423/*
    441  *  in_rtinit -- ルーティング表を初期化する。
     424 *  in_rtinit -- ルーティング表を初期化する。
    442425 */
    443426
     
    455438
    456439/*
    457  *  in_rtnewentry -- 新しいエントリを獲得する。
     440 *  in_rtnewentry -- 新しいエントリを獲得する。
    458441 */
    459442
     
    465448        int_t           ix;
    466449
    467         /* 空きエントリを探す。*/
     450        /* 空きエントリを探す。*/
    468451        for (ix = NUM_STATIC_ROUTE_ENTRY; ix < NUM_ROUTE_ENTRY; ix ++) {
    469452                rt = &routing_tbl[ix];
     
    474457                }
    475458
    476         /* expire の単位は [s]。*/
     459        /* expire の単位は [s]。*/
    477460        syscall(get_tim(&now));
    478461        now /= SYSTIM_HZ;
    479462
    480463        if (frt == NULL) {
    481                 /* 空きがなければ、有効時間がもっとも短いエントリを空きにする。*/
     464                /* 空きがなければ、有効時間がもっとも短いエントリを空きにする。*/
    482465                T_IN_RTENTRY    *srt = NULL;
    483466                int_t           diff, sdiff = INT_MAX;
     
    488471                        diff = (int_t)(rt->expire - now);
    489472                        if (diff <= 0) {        /* rt->expire <= now */
    490                                 /* 既に、有効時間が過ぎている。*/
     473                                /* 既に、有効時間が過ぎている。*/
    491474                                frt = rt;
    492475                                break;
     
    509492
    510493/*
    511  *  in_rttimer -- ルーティング表の管理タイマー
     494 *  in_rttimer -- ルーティング表の管理タイマー
    512495 */
    513496
     
    518501        int_t   ix;
    519502
    520         /* expire の単位は [s]。*/
     503        /* expire の単位は [s]。*/
    521504        syscall(get_tim(&now));
    522505        now /= SYSTIM_HZ;
     
    533516
    534517/*
    535  *  in_cksum_sum -- チェックサムの合計計算関数
    536  *
    537  *  注意: data は 4 オクテット単位でパディングすること。
    538  *        data が 2 オクテット単位にアラインされていないと
    539  *        例外が発生する可能性がある。
    540  *        len  は 4 オクテット単位にアラインされていること。
    541  *
    542  *        戻り値はホストバイトオーダ
     518 *  in_cksum_sum -- チェックサムの合計計算関数
     519 *
     520 *  注意: data は 4 オクテット単位でパディングすること。
     521 *        data が 2 オクテット単位にアラインされていないと
     522 *        例外が発生する可能性がある。
     523 *        len  は 4 オクテット単位にアラインされていること。
     524 *
     525 *        戻り値はホストバイトオーダ
    543526 */
    544527
    545528uint32_t
    546 in_cksum_sum (void *data, uint_t len /*オクテット単位*/)
     529in_cksum_sum (void *data, uint_t len /*オクテット単位*/)
    547530{
    548531        uint32_t sum = 0;
     
    562545
    563546/*
    564  *  in_cksum_carry -- チェックサムの桁上げ計算関数
    565  *
    566  *  注意: data は 4 オクテット単位でパディングすること。
    567  *        data が 2 オクテット単位にアラインされていないと
    568  *        例外が発生する可能性がある。
    569  *        len  は 4 オクテット単位にアラインされていること。
     547 *  in_cksum_carry -- チェックサムの桁上げ計算関数
     548 *
     549 *  注意: data は 4 オクテット単位でパディングすること。
     550 *        data が 2 オクテット単位にアラインされていないと
     551 *        例外が発生する可能性がある。
     552 *        len  は 4 オクテット単位にアラインされていること。
    570553 */
    571554
     
    584567
    585568/*
    586  *  in_strtfn -- API 機能コードの文字表現を返す。
     569 *  in_strtfn -- API 機能コードの文字表現を返す。
    587570 */
    588571
     
    592575        switch (fncd) {
    593576
    594         /* TCP 関係 */
     577        /* TCP 関係 */
    595578
    596579        case TFN_TCP_CRE_REP:
     
    655638                break;
    656639
    657         /* UDP 関係 */
     640        /* UDP 関係 */
    658641
    659642        case TFN_UDP_CRE_CEP:
  • EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/in_var.h

    • Property svn:keywords deleted
    • Property svn:mime-type changed from text/x-chdr to text/x-chdr;charset=UTF-8
    r270 r321  
    55 *                   Tomakomai National College of Technology, JAPAN
    66 *
    7  *  上記著作権è€
    8 ã¯ï¼Œä»¥ä¸‹ã® (1)~(4) の条件か,Free Software Foundation
    9  *  によってå
    10 ¬è¡¨ã•ã‚Œã¦ã„ã‚‹ GNU General Public License の Version 2 に記
    11  *  述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
    12  *  を改変したものを含む.以下同じ)を使用・複製・改変・再é
    13 å¸ƒï¼ˆä»¥ä¸‹ï¼Œ
    14  *  利用と呼ぶ)することを無償で許諾する.
    15  *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
    16  *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
    17  *      スコード中に含まれていること.
    18  *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
    19  *      用できる形で再é
    20 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é
    21 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
    22  *      è€
    23 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—作権表示,この利用条件および下記
    24  *      の無保証規定を掲載すること.
    25  *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
    26  *      用できない形で再é
    27 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®æ¡ä»¶ã‚’満たすこと.
    28  *    (a) 再é
    29 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€
    30 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—
    31  *        作権表示,この利用条件および下記の無保証規定を掲載すること.
    32  *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
    33  *      害からも,上記著作権è€
    34 ãŠã‚ˆã³TOPPERSプロジェクトをå
    35 è²¬ã™ã‚‹ã“と.
    36  *
    37  *  本ソフトウェアは,無保証で提供されているものである.上記著作権è€
    38 ãŠ
    39  *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
    40  *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
    41  *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
     7 *  上記著作権者は,以下の (1)~(4) の条件か,Free Software Foundation
     8 *  によって公表されている GNU General Public License の Version 2 に記
     9 *  述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
     10 *  を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下,
     11 *  利用と呼ぶ)することを無償で許諾する.
     12 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     13 *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     14 *      スコード中に含まれていること.
     15 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     16 *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     17 *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     18 *      の無保証規定を掲載すること.
     19 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     20 *      用できない形で再配布する場合には,次の条件を満たすこと.
     21 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     22 *        作権表示,この利用条件および下記の無保証規定を掲載すること.
     23 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     24 *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
     25 *
     26 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     27 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
     28 *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
     29 *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
    4230 *
    4331 *  @(#) $Id$
     
    9078
    9179/*
    92  *  独自のエラーコード
    93  */
    94 
    95 #define EV_NOPND                (-97)           /* ペンディングしていない */
    96 
    97 /*
    98  *  ネットワークエラーコード
    99  */
    100 
    101 #define EV_MSIZE                (-98)           /* データグラム長è¶
    102 éŽ     */
    103 #define EV_NURCH                (-99)           /* ネットワーク到達不能       */
    104 #define EV_HDOWN                (-100)          /* ホストダウン           */
    105 #define EV_HURCH                (-101)          /* ホスト到達不能        */
    106 #define EV_CNNRF                (-102)          /* 接続不能         */
    107 #define EV_CNRST                (-103)          /* 接続リセット           */
    108 #define EV_REXMTMO              (-104)          /* 再送タイムアウト     */
    109 
    110 /*
    111  *  å
    112 ±é€šã‚¿ã‚¤ãƒžã®èµ·å‹•å‘¨æœŸã®å®šç¾©
     80 *  独自のエラーコード
     81 */
     82
     83#define EV_NOPND                (-97)           /* ペンディングしていない */
     84
     85/*
     86 *  ネットワークエラーコード
     87 */
     88
     89#define EV_MSIZE                (-98)           /* データグラム長超過    */
     90#define EV_NURCH                (-99)           /* ネットワーク到達不能   */
     91#define EV_HDOWN                (-100)          /* ホストダウン               */
     92#define EV_HURCH                (-101)          /* ホスト到達不能      */
     93#define EV_CNNRF                (-102)          /* 接続不能         */
     94#define EV_CNRST                (-103)          /* 接続リセット               */
     95#define EV_REXMTMO              (-104)          /* 再送タイムアウト     */
     96
     97/*
     98 *  共通タイマの起動周期の定義
    11399 */
    114100
     
    116102
    117103/*
    118  *  インタフェースアドレス構造体
     104 *  インタフェースアドレス構造体
    119105 */
    120106
    121107typedef struct t_in4_ifaddr {
    122         T_IN4_ADDR              addr;           /* IPv4 アドレス    */
    123         T_IN4_ADDR              mask;           /* サブネットマスク     */
     108        T_IN4_ADDR              addr;           /* IPv4 アドレス    */
     109        T_IN4_ADDR              mask;           /* サブネットマスク     */
    124110        } T_IN4_IFADDR;
    125111
    126112/*
    127  *  ルーティング表エントリ構造体
     113 *  ルーティング表エントリ構造体
    128114 */
    129115
    130116typedef struct t_in4_rtentry {
    131         T_IN4_ADDR      target;         /* 目標ネットワークアドレス                 */
    132         T_IN4_ADDR      mask;           /* 目標ネットワークアドレスのサブネットマスク      */
    133         T_IN4_ADDR      gateway;        /* ゲートウェイの IP アドレス                        */
    134         uint32_t        expire;         /* 有効時間が切れる時刻 [s]                   */
    135         uint8_t         flags;          /* フラグ                                    */
     117        T_IN4_ADDR      target;         /* 目標ネットワークアドレス                 */
     118        T_IN4_ADDR      mask;           /* 目標ネットワークアドレスのサブネットマスク        */
     119        T_IN4_ADDR      gateway;        /* ゲートウェイの IP アドレス                      */
     120        uint32_t        expire;         /* 有効時間が切れる時刻 [s]                       */
     121        uint8_t         flags;          /* フラグ                                  */
    136122        } T_IN4_RTENTRY;
    137123
    138124/*
    139  *  TINET 1.1 との互換性のための定義
     125 *  TINET 1.1 との互換性のための定義
    140126 */
    141127
     
    150136#define NUM_ROUTE_ENTRY                 \
    151137        (NUM_STATIC_ROUTE_ENTRY + NUM_REDIRECT_ROUTE_ENTRY)
    152                                         /* ルーティング表のエントリ数      */
     138                                        /* ルーティング表のエントリ数        */
    153139
    154140#endif  /* of #ifdef NUM_ROUTE_ENTRY */
    155141
    156142/*
    157  *  ルーティングエントリ状æ
    158 ‹ãƒ•ãƒ©ã‚°
    159  */
    160 
    161 #define IN_RTF_DEFINED          UINT_C(0x01)    /* 定義済み                 */
    162 #define IN_RTF_REDIRECT         UINT_C(0x10)    /* 向け直しにより自動設定された   */
    163 
    164 /*
    165  *  IPv4 と IPv6 をコンパイル時に選択するためのマクロ
     143 *  ルーティングエントリ状態フラグ
     144 */
     145
     146#define IN_RTF_DEFINED          UINT_C(0x01)    /* 定義済み                 */
     147#define IN_RTF_REDIRECT         UINT_C(0x10)    /* 向け直しにより自動設定された       */
     148
     149/*
     150 *  IPv4 と IPv6 をコンパイル時に選択するためのマクロ
    166151 */
    167152
     
    182167
    183168/*
    184  *  ルーティング表
     169 *  ルーティング表
    185170 */
    186171
     
    188173
    189174/*
    190  *  前方参ç
    191 §
     175 *  前方参照
    192176 */
    193177
     
    203187
    204188/*
    205  *  関数
     189 *  関数
    206190 */
    207191
     
    223207
    224208/*
    225  *  in4_is_dstaddr_accept -- 宛å
    226 ˆã‚¢ãƒ‰ãƒ¬ã‚¹ã¨ã—て正しいかチェックする。
    227  *
    228  *    注意: dstaddr は、
    229  *          TINET-1.2 からネットワークバイトオーダ、
    230  *          TINET-1.1 までは、ホストバイトオーダ
     209 *  in4_is_dstaddr_accept -- 宛先アドレスとして正しいかチェックする。
     210 *
     211 *    注意: dstaddr は、
     212 *          TINET-1.2 からネットワークバイトオーダ、
     213 *          TINET-1.1 までは、ホストバイトオーダ
    231214 */
    232215extern bool_t in4_is_dstaddr_accept (T_IN4_ADDR *myaddr, T_IN4_ADDR *dstaddr);
    233216
    234217/*
    235  *  in_cksum -- チェックサム計算関数、IPv4、ICMPv4 用
    236  *
    237  *  注意: data は 4 オクテット単位でパディングすること。
    238  *        data が 2 オクテット単位にアラインされていないと
    239  *        例外が発生する可能性がある。
    240  *        len  は 4 オクテット単位にアラインされていること。
    241  */
    242 extern uint16_t in_cksum(void *data, uint_t len /*オクテット単位*/);
    243 
    244 /*
    245  *  in_cksum_sum -- チェックサムの合計計算関数
    246  *
    247  *  注意: data は 4 オクテット単位でパディングすること。
    248  *        data が 2 オクテット単位にアラインされていないと
    249  *        例外が発生する可能性がある。
    250  *        len  は 4 オクテット単位にアラインされていること。
    251  */
    252 extern uint32_t in_cksum_sum (void *data, uint_t len /*オクテット単位*/);
    253 
    254 /*
    255  *  in_cksum_carry -- チェックサムの桁上げ計算関数
    256  *
    257  *  注意: data は 4 オクテット単位でパディングすること。
    258  *        data が 2 オクテット単位にアラインされていないと
    259  *        例外が発生する可能性がある。
    260  *        len  は 4 オクテット単位にアラインされていること。
     218 *  in_cksum -- チェックサム計算関数、IPv4、ICMPv4 用
     219 *
     220 *  注意: data は 4 オクテット単位でパディングすること。
     221 *        data が 2 オクテット単位にアラインされていないと
     222 *        例外が発生する可能性がある。
     223 *        len  は 4 オクテット単位にアラインされていること。
     224 */
     225extern uint16_t in_cksum(void *data, uint_t len /*オクテット単位*/);
     226
     227/*
     228 *  in_cksum_sum -- チェックサムの合計計算関数
     229 *
     230 *  注意: data は 4 オクテット単位でパディングすること。
     231 *        data が 2 オクテット単位にアラインされていないと
     232 *        例外が発生する可能性がある。
     233 *        len  は 4 オクテット単位にアラインされていること。
     234 */
     235extern uint32_t in_cksum_sum (void *data, uint_t len /*オクテット単位*/);
     236
     237/*
     238 *  in_cksum_carry -- チェックサムの桁上げ計算関数
     239 *
     240 *  注意: data は 4 オクテット単位でパディングすること。
     241 *        data が 2 オクテット単位にアラインされていないと
     242 *        例外が発生する可能性がある。
     243 *        len  は 4 オクテット単位にアラインされていること。
    261244 */
    262245extern uint32_t in_cksum_carry (uint32_t sum);
  • EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/ip.cfg

    • Property svn:keywords deleted
    • Property svn:mime-type changed from text/plain to text/plain;charset=UTF-8
    r270 r321  
    55 *                   Tomakomai National College of Technology, JAPAN
    66 *
    7  *  上記著作権è€
    8 ã¯ï¼Œä»¥ä¸‹ã® (1)~(4) の条件か,Free Software Foundation
    9  *  によってå
    10 ¬è¡¨ã•ã‚Œã¦ã„ã‚‹ GNU General Public License の Version 2 に記
    11  *  述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
    12  *  を改変したものを含む.以下同じ)を使用・複製・改変・再é
    13 å¸ƒï¼ˆä»¥ä¸‹ï¼Œ
    14  *  利用と呼ぶ)することを無償で許諾する.
    15  *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
    16  *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
    17  *      スコード中に含まれていること.
    18  *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
    19  *      用できる形で再é
    20 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é
    21 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
    22  *      è€
    23 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—作権表示,この利用条件および下記
    24  *      の無保証規定を掲載すること.
    25  *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
    26  *      用できない形で再é
    27 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®æ¡ä»¶ã‚’満たすこと.
    28  *    (a) 再é
    29 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€
    30 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—
    31  *        作権表示,この利用条件および下記の無保証規定を掲載すること.
    32  *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
    33  *      害からも,上記著作権è€
    34 ãŠã‚ˆã³TOPPERSプロジェクトをå
    35 è²¬ã™ã‚‹ã“と.
     7 *  上記著作権者は,以下の (1)~(4) の条件か,Free Software Foundation
     8 *  によって公表されている GNU General Public License の Version 2 に記
     9 *  述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
     10 *  を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下,
     11 *  利用と呼ぶ)することを無償で許諾する.
     12 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     13 *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     14 *      スコード中に含まれていること.
     15 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     16 *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     17 *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     18 *      の無保証規定を掲載すること.
     19 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     20 *      用できない形で再配布する場合には,次の条件を満たすこと.
     21 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     22 *        作権表示,この利用条件および下記の無保証規定を掲載すること.
     23 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     24 *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
    3625 *
    37  *  本ソフトウェアは,無保証で提供されているものである.上記著作権è€
    38 ãŠ
    39  *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
    40  *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
    41  *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
     26 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     27 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
     28 *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
     29 *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
    4230 *
    4331 *  @(#) $Id$
     
    4533
    4634/*
    47  *  IPv4 で使用するカーネルオブジェクト
     35 *  IPv4 で使用するカーネルオブジェクト
    4836 */
    4937
     
    5240#ifdef IP4_CFG_FRAGMENT
    5341
    54 /* データグラムの分割・再構成 */
     42/* データグラムの分割・再構成 */
    5543
    5644CRE_SEM(SEM_IP4_FRAG_QUEUE, { TA_TPRI, 1, 1 });
     
    6048#if NUM_REDIRECT_ROUTE_ENTRY > 0
    6149
    62 /* ルーティング表(向け直し)*/
     50/* ルーティング表(向け直し)*/
    6351
    6452CRE_SEM(SEM_IN_ROUTING_TBL, { TA_TPRI, 1, 1 });
  • EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/ip.h

    • Property svn:keywords deleted
    • Property svn:mime-type changed from text/x-chdr to text/x-chdr;charset=UTF-8
    r270 r321  
    55 *                   Tomakomai National College of Technology, JAPAN
    66 *
    7  *  上記著作権è€
    8 ã¯ï¼Œä»¥ä¸‹ã® (1)~(4) の条件か,Free Software Foundation
    9  *  によってå
    10 ¬è¡¨ã•ã‚Œã¦ã„ã‚‹ GNU General Public License の Version 2 に記
    11  *  述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
    12  *  を改変したものを含む.以下同じ)を使用・複製・改変・再é
    13 å¸ƒï¼ˆä»¥ä¸‹ï¼Œ
    14  *  利用と呼ぶ)することを無償で許諾する.
    15  *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
    16  *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
    17  *      スコード中に含まれていること.
    18  *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
    19  *      用できる形で再é
    20 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é
    21 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
    22  *      è€
    23 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—作権表示,この利用条件および下記
    24  *      の無保証規定を掲載すること.
    25  *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
    26  *      用できない形で再é
    27 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®æ¡ä»¶ã‚’満たすこと.
    28  *    (a) 再é
    29 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€
    30 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—
    31  *        作権表示,この利用条件および下記の無保証規定を掲載すること.
    32  *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
    33  *      害からも,上記著作権è€
    34 ãŠã‚ˆã³TOPPERSプロジェクトをå
    35 è²¬ã™ã‚‹ã“と.
     7 *  上記著作権者は,以下の (1)~(4) の条件か,Free Software Foundation
     8 *  によって公表されている GNU General Public License の Version 2 に記
     9 *  述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
     10 *  を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下,
     11 *  利用と呼ぶ)することを無償で許諾する.
     12 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     13 *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     14 *      スコード中に含まれていること.
     15 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     16 *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     17 *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     18 *      の無保証規定を掲載すること.
     19 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     20 *      用できない形で再配布する場合には,次の条件を満たすこと.
     21 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     22 *        作権表示,この利用条件および下記の無保証規定を掲載すること.
     23 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     24 *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
    3625 *
    37  *  本ソフトウェアは,無保証で提供されているものである.上記著作権è€
    38 ãŠ
    39  *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
    40  *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
    41  *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
     26 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     27 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
     28 *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
     29 *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
    4230 *
    4331 *  @(#) $Id$
     
    8472
    8573/*
    86  *  IPv4 の定義、RFC791 参ç
    87 §
     74 *  IPv4 の定義、RFC791 参照
    8875 */
    8976
     
    9178
    9279/*
    93  *  IPv4 ヘッダの定義
     80 *  IPv4 ヘッダの定義
    9481 */
    9582
    9683typedef struct t_ip4_hdr {
    9784        uint8_t         vhl;            /* version << 4 | header length >> 2    */
    98                                         /* length は 4 octets 単位           */
     85                                        /* length は 4 octets 単位         */
    9986        uint8_t         type;           /* type of services                     */
    10087        uint16_t        len;            /* total length                         */
     
    114101
    115102/*
    116  *  IPv4 ヘッダ構造体メンバアクセスマクロ
     103 *  IPv4 ヘッダ構造体メンバアクセスマクロ
    117104 */
    118105
     
    126113
    127114/*
    128  *  IPv4 ヘッダのフィールドの値の定義
     115 *  IPv4 ヘッダのフィールドの値の定義
    129116 */
    130117
    131 #define IP4_VHL_BORING  UINT_C(0x45)    /* オプションがない VHL 値     */
    132 #define IP4_RF          UINT_C(0x8000)  /* off: 予約                  */
    133 #define IP4_DF          UINT_C(0x4000)  /* off: 分割禁止                    */
    134 #define IP4_MF          UINT_C(0x2000)  /* off: 分割あり                    */
    135 #define IP4_OFFMASK     UINT_C(0x1fff)  /* オフセット部のマスク値            */
     118#define IP4_VHL_BORING  UINT_C(0x45)    /* オプションがない VHL 値       */
     119#define IP4_RF          UINT_C(0x8000)  /* off: 予約                      */
     120#define IP4_DF          UINT_C(0x4000)  /* off: 分割禁止                    */
     121#define IP4_MF          UINT_C(0x2000)  /* off: 分割あり                    */
     122#define IP4_OFFMASK     UINT_C(0x1fff)  /* オフセット部のマスク値          */
    136123
    137124/*
    138  *  制限値
     125 *  制限値
    139126 */
    140127
    141 #define IP4_MAXPACKET   UINT_C(65535)   /* 最大パケットサイズ          */
    142 #define IP4_MAXTTL      UINT_C(255)     /* TTL 最大値                        */
    143 #define IP4_DEFTTL      UINT_C(64)      /* TTL 規定値 (RFC1340)              */
    144 #define IP4_FRAGTTL     UINT_C(60)      /* 分割されたデータグラムの生存時間(秒)*/
    145 #define IP4_MSS         UINT_C(576)     /* 最大セグメントサイズの規定値   */
     128#define IP4_MAXPACKET   UINT_C(65535)   /* 最大パケットサイズ            */
     129#define IP4_MAXTTL      UINT_C(255)     /* TTL 最大値                      */
     130#define IP4_DEFTTL      UINT_C(64)      /* TTL 規定値 (RFC1340)            */
     131#define IP4_FRAGTTL     UINT_C(60)      /* 分割されたデータグラムの生存時間(秒)*/
     132#define IP4_MSS         UINT_C(576)     /* 最大セグメントサイズの規定値       */
    146133
    147 /* IPv4 と IPv6 をコンパイル時に選択するためのマクロ */
     134/* IPv4 と IPv6 をコンパイル時に選択するためのマクロ */
    148135
    149136#if defined(SUPPORT_INET4)
  • EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/ip6.h

    • Property svn:keywords deleted
    • Property svn:mime-type changed from text/x-chdr to text/x-chdr;charset=UTF-8
    r270 r321  
    55 *                   Tomakomai National College of Technology, JAPAN
    66 *
    7  *  上記著作権è€
    8 ã¯ï¼Œä»¥ä¸‹ã® (1)~(4) の条件か,Free Software Foundation
    9  *  によってå
    10 ¬è¡¨ã•ã‚Œã¦ã„ã‚‹ GNU General Public License の Version 2 に記
    11  *  述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
    12  *  を改変したものを含む.以下同じ)を使用・複製・改変・再é
    13 å¸ƒï¼ˆä»¥ä¸‹ï¼Œ
    14  *  利用と呼ぶ)することを無償で許諾する.
    15  *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
    16  *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
    17  *      スコード中に含まれていること.
    18  *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
    19  *      用できる形で再é
    20 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é
    21 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
    22  *      è€
    23 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—作権表示,この利用条件および下記
    24  *      の無保証規定を掲載すること.
    25  *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
    26  *      用できない形で再é
    27 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®æ¡ä»¶ã‚’満たすこと.
    28  *    (a) 再é
    29 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€
    30 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—
    31  *        作権表示,この利用条件および下記の無保証規定を掲載すること.
    32  *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
    33  *      害からも,上記著作権è€
    34 ãŠã‚ˆã³TOPPERSプロジェクトをå
    35 è²¬ã™ã‚‹ã“と.
    36  *
    37  *  本ソフトウェアは,無保証で提供されているものである.上記著作権è€
    38 ãŠ
    39  *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
    40  *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
    41  *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
     7 *  上記著作権者は,以下の (1)~(4) の条件か,Free Software Foundation
     8 *  によって公表されている GNU General Public License の Version 2 に記
     9 *  述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
     10 *  を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下,
     11 *  利用と呼ぶ)することを無償で許諾する.
     12 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     13 *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     14 *      スコード中に含まれていること.
     15 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     16 *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     17 *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     18 *      の無保証規定を掲載すること.
     19 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     20 *      用できない形で再配布する場合には,次の条件を満たすこと.
     21 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     22 *        作権表示,この利用条件および下記の無保証規定を掲載すること.
     23 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     24 *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
     25 *
     26 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     27 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
     28 *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
     29 *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
    4230 *
    4331 *  @(#) $Id$
     
    117105
    118106/*
    119  *  IPv6 の定義、RFC2460 参ç
    120 §
     107 *  IPv6 の定義、RFC2460 参照
    121108 */
    122109
     
    124111
    125112/*
    126  *  IPv6 ヘッダの定義
     113 *  IPv6 ヘッダの定義
    127114 */
    128115
     
    141128
    142129/*
    143  *  IPv6 ヘッダ構造体メンバアクセスマクロ
     130 *  IPv6 ヘッダ構造体メンバアクセスマクロ
    144131 */
    145132
     
    151138
    152139/*
    153  *  拡張ヘッダ
     140 *  拡張ヘッダ
    154141 */
    155142
    156143typedef struct t_ip6_ext_hdr {
    157144        uint8_t         next;           /* Next Header                  */
    158         uint8_t         len;            /* 8 オクテット単位の長さ     */
     145        uint8_t         len;            /* 8 オクテット単位の長さ */
    159146        } __attribute__((packed, aligned(2)))T_IP6_EXT_HDR;
    160147
    161148/*
    162  *  中継点 (Hop-by-Hop) オプションヘッダ
     149 *  中継点 (Hop-by-Hop) オプションヘッダ
    163150 */
    164151
    165152typedef struct t_ip6_hbh_hdr {
    166153        uint8_t         next;           /* Next Header                  */
    167         uint8_t         len;            /* 8 オクテット単位の長さ。ただし、
    168                                          * このオプションヘッダå
    169 ¨ä½“のオクテット数を
    170                                          * 8 で割った値の - 1 がå
    171 ¥ã‚‹ã€‚
     154        uint8_t         len;            /* 8 オクテット単位の長さ。ただし、
     155                                         * このオプションヘッダ全体のオクテット数を
     156                                         * 8 で割った値の - 1 が入る。
    172157                                         */
    173158        } __attribute__((packed, aligned(2)))T_IP6_HBH_HDR;
    174159
    175160/*
    176  *  終点 (Destination) オプションヘッダ
     161 *  終点 (Destination) オプションヘッダ
    177162 */
    178163
    179164typedef struct t_ip6_dest_hdr {
    180165        uint8_t         next;           /* Next Header                  */
    181         uint8_t         len;            /* 8 オクテット単位の長さ。ただし、
    182                                          * このオプションヘッダå
    183 ¨ä½“のオクテット数を
    184                                          * 8 で割った値の - 1 がå
    185 ¥ã‚‹ã€‚
     166        uint8_t         len;            /* 8 オクテット単位の長さ。ただし、
     167                                         * このオプションヘッダ全体のオクテット数を
     168                                         * 8 で割った値の - 1 が入る。
    186169                                         */
    187170        } __attribute__((packed, aligned(2)))T_IP6_DEST_HDR;
    188171
    189 /* 中継点 (Hop-by-Hop) オプション */
     172/* 中継点 (Hop-by-Hop) オプション */
    190173
    191174#define IP6OPT_PAD1             UINT_C(0x00)    /* 00 0 00000 */
     
    196179#define IP6OPT_RTR_ALERT        UINT_C(0x05)    /* 00 0 00101 */
    197180
    198 #define IP6OPT_MINLEN           2       /* オプションの最短長          */
    199 
    200 /* 未知のオプションの処理の指定 */
    201 
    202 #define IP6OPT_TYPE_SKIP        UINT_C(0x00)    /* 無視する。                      */
    203 #define IP6OPT_TYPE_DISCARD     UINT_C(0x40)    /* データグラムを破棄する。 */
    204 #define IP6OPT_TYPE_FORCEICMP   UINT_C(0x80)    /* 破棄して、ICMP を返送する。       */
     181#define IP6OPT_MINLEN           2       /* オプションの最短長            */
     182
     183/* 未知のオプションの処理の指定 */
     184
     185#define IP6OPT_TYPE_SKIP        UINT_C(0x00)    /* 無視する。                        */
     186#define IP6OPT_TYPE_DISCARD     UINT_C(0x40)    /* データグラムを破棄する。 */
     187#define IP6OPT_TYPE_FORCEICMP   UINT_C(0x80)    /* 破棄して、ICMP を返送する。     */
    205188#define IP6OPT_TYPE_ICMP        UINT_C(0xc0)
    206                 /* 破棄して、マルチキャストでなければ ICMP を返送する。  */
     189                /* 破棄して、マルチキャストでなければ ICMP を返送する。        */
    207190
    208191#define IP6OPT_TYPE(o)          ((o)&UINT_C(0xc0))
    209192
    210193/*
    211  *  経路制御ヘッダ
     194 *  経路制御ヘッダ
    212195 */
    213196
    214197typedef struct t_ip6_rt_hdr {
    215198        uint8_t         next;           /* Next Header                  */
    216         uint8_t         len;            /* 8 オクテット単位の長さ。ただし、
    217                                          * このオプションヘッダå
    218 ¨ä½“のオクテット数を
    219                                          * 8 で割った値の - 1 がå
    220 ¥ã‚‹ã€‚
    221                                          */
    222         uint8_t         type;           /* 経路制御タイプ                */
    223         uint8_t         segleft;        /* セグメントの残り             */
     199        uint8_t         len;            /* 8 オクテット単位の長さ。ただし、
     200                                         * このオプションヘッダ全体のオクテット数を
     201                                         * 8 で割った値の - 1 が入る。
     202                                         */
     203        uint8_t         type;           /* 経路制御タイプ              */
     204        uint8_t         segleft;        /* セグメントの残り             */
    224205        } __attribute__((packed, aligned(2)))T_IP6_RT_HDR;
    225206
    226207/*
    227  *  タイプ 0 経路制御ヘッダ
     208 *  タイプ 0 経路制御ヘッダ
    228209 */
    229210
    230211typedef struct t_ip6_rt0_hdr {
    231212        uint8_t         next;           /* Next Header                  */
    232         uint8_t         len;            /* 8 オクテット単位の長さ。ただし、
    233                                          * このオプションヘッダå
    234 ¨ä½“のオクテット数を
    235                                          * 8 で割った値の - 1 がå
    236 ¥ã‚‹ã€‚
    237                                          */
    238         uint8_t         type;           /* 経路制御タイプ                */
    239         uint8_t         segleft;        /* セグメントの残り             */
    240         uint32_t        reserved;       /* 予約                               */
     213        uint8_t         len;            /* 8 オクテット単位の長さ。ただし、
     214                                         * このオプションヘッダ全体のオクテット数を
     215                                         * 8 で割った値の - 1 が入る。
     216                                         */
     217        uint8_t         type;           /* 経路制御タイプ              */
     218        uint8_t         segleft;        /* セグメントの残り             */
     219        uint32_t        reserved;       /* 予約                           */
    241220        } __attribute__((packed, aligned(2)))T_IP6_RT0_HDR;
    242221
    243222/*
    244  *  断片ヘッダ
     223 *  断片ヘッダ
    245224 */
    246225
     
    248227        uint8_t         next;           /* Next Header                  */
    249228        uint8_t         reserved;
    250         uint16_t        off_flag;       /* オフセットとフラグ          */
    251         uint32_t        ident;          /* 分割識別子                      */
     229        uint16_t        off_flag;       /* オフセットとフラグ            */
     230        uint32_t        ident;          /* 分割識別子                        */
    252231        } __attribute__((packed, aligned(2)))T_IP6_FRAG_HDR;
    253232
    254 /* 断片ヘッダのオフセットとフラグ */
     233/* 断片ヘッダのオフセットとフラグ */
    255234
    256235#ifdef _NET_CFG_BYTE_ORDER
     
    258237#if _NET_CFG_BYTE_ORDER == _NET_CFG_BIG_ENDIAN
    259238
    260 #define IP6F_OFF_MASK           UINT_C(0xfff8)          /* オフセットを取出すマスク */
    261 #define IP6F_RESERVED_MASK      UINT_C(0x0006)          /* 予約を取出すマスク          */
    262 #define IP6F_MORE_FRAG          UINT_C(0x0001)          /* 中間フラグメント             */
     239#define IP6F_OFF_MASK           UINT_C(0xfff8)          /* オフセットを取出すマスク */
     240#define IP6F_RESERVED_MASK      UINT_C(0x0006)          /* 予約を取出すマスク            */
     241#define IP6F_MORE_FRAG          UINT_C(0x0001)          /* 中間フラグメント             */
    263242
    264243#elif _NET_CFG_BYTE_ORDER == _NET_CFG_LITTLE_ENDIAN
    265244
    266 #define IP6F_OFF_MASK           UINT_C(0xf8ff)          /* オフセットを取出すマスク */
    267 #define IP6F_RESERVED_MASK      UINT_C(0x0600)          /* 予約を取出すマスク          */
    268 #define IP6F_MORE_FRAG          UINT_C(0x0100)          /* 中間フラグメント             */
     245#define IP6F_OFF_MASK           UINT_C(0xf8ff)          /* オフセットを取出すマスク */
     246#define IP6F_RESERVED_MASK      UINT_C(0x0600)          /* 予約を取出すマスク            */
     247#define IP6F_MORE_FRAG          UINT_C(0x0100)          /* 中間フラグメント             */
    269248
    270249#endif  /* #if _NET_CFG_BYTE_ORDER == _NET_CFG_BIG_ENDIAN */
     
    273252
    274253/*
    275  *  制限値
    276  */
    277 
    278 #define IPV6_MAXHLIM    UINT_C(255)     /* ホップリミットの最大値                            */
    279 #define IPV6_DEFHLIM    UINT_C(64)      /* ホップリミットの規定値                            */
    280 #define IPV6_FRAGTTL    UINT_C(60)      /* 分割されたデータグラムの生存時間(秒)    */
    281 #define IPV6_MMTU       UINT_C(1280)    /* 最小 MTU。ペイロード (1024) + ヘッダ (256)        */
    282 #define IPV6_MAXPACKET  UINT_C(65535)   /* ジャンボペイロードを除く最大パケットサイズ      */
    283 
    284 /*
    285  *  IPv4 と IPv6 をコンパイル時に選択するためのマクロ
    286  */
    287 
    288 /*
    289  *  ホップリミットの規定値は、ルータ通知により変更されることがある
     254 *  制限値
     255 */
     256
     257#define IPV6_MAXHLIM    UINT_C(255)     /* ホップリミットの最大値                          */
     258#define IPV6_DEFHLIM    UINT_C(64)      /* ホップリミットの規定値                          */
     259#define IPV6_FRAGTTL    UINT_C(60)      /* 分割されたデータグラムの生存時間(秒)  */
     260#define IPV6_MMTU       UINT_C(1280)    /* 最小 MTU。ペイロード (1024) + ヘッダ (256)      */
     261#define IPV6_MAXPACKET  UINT_C(65535)   /* ジャンボペイロードを除く最大パケットサイズ        */
     262
     263/*
     264 *  IPv4 と IPv6 をコンパイル時に選択するためのマクロ
     265 */
     266
     267/*
     268 *  ホップリミットの規定値は、ルータ通知により変更されることがある
    290269 */
    291270
    292271#if NUM_ND6_DEF_RTR_ENTRY > 0
    293272
    294 /* ルータ通知を受信する場合は、通知された値 */
     273/* ルータ通知を受信する場合は、通知された値 */
    295274
    296275#define IP_DEFTTL       ip6_defhlim
     
    298277#else   /* #if NUM_ND6_DEF_RTR_ENTRY > 0 */
    299278
    300 /* ルータ通知を受信しない場合の値は既定値 */
     279/* ルータ通知を受信しない場合の値は既定値 */
    301280
    302281#define IP_DEFTTL       IPV6_DEFHLIM
  • EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/ip_icmp.c

    • Property svn:keywords deleted
    • Property svn:mime-type changed from text/x-csrc to text/x-csrc;charset=UTF-8
    r270 r321  
    55 *                   Tomakomai National College of Technology, JAPAN
    66 *
    7  *  上記著作権è€
    8 ã¯ï¼Œä»¥ä¸‹ã® (1)~(4) の条件か,Free Software Foundation
    9  *  によってå
    10 ¬è¡¨ã•ã‚Œã¦ã„ã‚‹ GNU General Public License の Version 2 に記
    11  *  述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
    12  *  を改変したものを含む.以下同じ)を使用・複製・改変・再é
    13 å¸ƒï¼ˆä»¥ä¸‹ï¼Œ
    14  *  利用と呼ぶ)することを無償で許諾する.
    15  *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
    16  *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
    17  *      スコード中に含まれていること.
    18  *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
    19  *      用できる形で再é
    20 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é
    21 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
    22  *      è€
    23 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—作権表示,この利用条件および下記
    24  *      の無保証規定を掲載すること.
    25  *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
    26  *      用できない形で再é
    27 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®æ¡ä»¶ã‚’満たすこと.
    28  *    (a) 再é
    29 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€
    30 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—
    31  *        作権表示,この利用条件および下記の無保証規定を掲載すること.
    32  *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
    33  *      害からも,上記著作権è€
    34 ãŠã‚ˆã³TOPPERSプロジェクトをå
    35 è²¬ã™ã‚‹ã“と.
    36  *
    37  *  本ソフトウェアは,無保証で提供されているものである.上記著作権è€
    38 ãŠ
    39  *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
    40  *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
    41  *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
     7 *  上記著作権者は,以下の (1)~(4) の条件か,Free Software Foundation
     8 *  によって公表されている GNU General Public License の Version 2 に記
     9 *  述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
     10 *  を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下,
     11 *  利用と呼ぶ)することを無償で許諾する.
     12 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     13 *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     14 *      スコード中に含まれていること.
     15 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     16 *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     17 *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     18 *      の無保証規定を掲載すること.
     19 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     20 *      用できない形で再配布する場合には,次の条件を満たすこと.
     21 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     22 *        作権表示,この利用条件および下記の無保証規定を掲載すること.
     23 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     24 *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
     25 *
     26 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     27 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
     28 *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
     29 *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
    4230 *
    4331 *  @(#) $Id$
     
    122110
    123111/*
    124  *  変数
     112 *  変数
    125113 */
    126114
     
    128116
    129117/*
    130  *  SNMP の 管理æƒ
    131 å ±ãƒ™ãƒ¼ã‚¹ (MIB)
     118 *  SNMP の 管理情報ベース (MIB)
    132119 */
    133120
     
    137124
    138125/*
    139  *  関数
     126 *  関数
    140127 */
    141128
     
    150137
    151138/*
    152  *  icmp_echo -- エコー要求を受信したときの処理
    153  *
    154  *    input には IF ヘッダと IP ヘッダも含まれている。
     139 *  icmp_echo -- エコー要求を受信したときの処理
     140 *
     141 *    input には IF ヘッダと IP ヘッダも含まれている。
    155142 */
    156143
     
    164151        NET_COUNT_MIB(icmp_stats.icmpInEchos, 1);
    165152
    166         /* メッセージの型をエコー要求 (8) から エコー応答 (0) に   */
    167         /* 変更して送り返す。                                  */
     153        /* メッセージの型をエコー要求 (8) から エコー応答 (0) に     */
     154        /* 変更して送り返す。                                    */
    168155
    169156        icmp4h = GET_ICMP4_HDR(input, ihoff);
    170157        icmp4h->type = ICMP4_ECHO_REPLY;
    171158
    172         /* IP ヘッダの宛å
    173 ˆã¨ç™ºä¿¡å
    174 ƒã‚’交換する。*/
     159        /* IP ヘッダの宛先と発信元を交換する。*/
    175160        ip4h      = GET_IP4_HDR(input);
    176161        addr      = ip4h->src;
     
    178163        ip4h->dst = addr;
    179164
    180         /* チェックサムを計算する。*/
     165        /* チェックサムを計算する。*/
    181166        icmp4h->sum = 0;
    182167        icmp4h->sum = in_cksum(icmp4h,
    183168                               (uint_t)(((input->len - GET_IF_IP4_HDR_SIZE(input)) + 3) >> 2 << 2));
    184169
    185         /* 送信する。*/
     170        /* 送信する。*/
    186171        NET_COUNT_ICMP4(net_count_icmp4.out_octets,
    187172                       input->len - GET_IF_IP4_HDR_SIZE(input));
     
    193178
    194179/*
    195  *  icmp_unreach -- ICMP4_UNREACH を受信したときの処理
     180 *  icmp_unreach -- ICMP4_UNREACH を受信したときの処理
    196181 */
    197182
     
    245230
    246231/*
    247  *  icmp_redirect -- 向け直しメッセージを受信したときの処理
    248  *
    249  *    input には IF ヘッダと IP ヘッダも含まれている。
     232 *  icmp_redirect -- 向け直しメッセージを受信したときの処理
     233 *
     234 *    input には IF ヘッダと IP ヘッダも含まれている。
    250235 */
    251236
     
    261246
    262247        /*
    263          *  å†
    264 å®¹ãƒã‚§ãƒƒã‚¯ã€ä»¥ä¸‹ã®å ´åˆã¯ã‚¨ãƒ©ãƒ¼
     248         *  内容チェック、以下の場合はエラー
    265249         *
    266          *    ・ICMP コードが、ICMP4_REDIRECT_PORT_AND_HOST (3) 以上
    267          *    ・データグラム長が、ICMP の最小長より短い (IP ヘッダ + ICMP ヘッダ + IP ヘッダ + 8)
    268          *    ・データグラム長が、ICMP の最大長より短い
    269          *    ・
     250         *    ・ICMP コードが、ICMP4_REDIRECT_PORT_AND_HOST (3) 以上
     251         *    ・データグラム長が、ICMP の最小長より短い (IP ヘッダ + ICMP ヘッダ + IP ヘッダ + 8)
     252         *    ・データグラム長が、ICMP の最大長より短い
     253         *   
    270254         */
    271255        if (icmp4h->code > ICMP4_REDIRECT_PORT_AND_HOST ||
     
    282266
    283267/*
    284  *  icmp_input -- ICMP のå
    285 ¥åŠ›é–¢æ•°
    286  *
    287  *    input には IF ヘッダと IP ヘッダも含まれている。
     268 *  icmp_input -- ICMP の入力関数
     269 *
     270 *    input には IF ヘッダと IP ヘッダも含まれている。
    288271 */
    289272
     
    300283        NET_COUNT_ICMP4(net_count_icmp4.in_packets, 1);
    301284
    302         /* ICMP ヘッダの長さをチェックする。*/
     285        /* ICMP ヘッダの長さをチェックする。*/
    303286        if (input->len < IF_IP4_ICMP4_HDR_SIZE) {
    304287                NET_COUNT_ICMP4(net_count_icmp4.in_err_packets, 1);
     
    309292        icmp4h = (T_ICMP4_HDR *)(input->buf + *offp);
    310293
    311         /* 4 オクテット境界のデータ長 */
     294        /* 4 オクテット境界のデータ長 */
    312295        len   = input->len - *offp;
    313296        align = (len + 3) >> 2 << 2;
    314297
    315         /* 4 オクテット境界までパディングで埋める。*/
     298        /* 4 オクテット境界までパディングで埋める。*/
    316299        if (align > len)
    317300                memset((uint8_t*)input->buf + input->len, 0, (size_t)(align - len));
    318301
    319         /* チェックサムを計算する。*/
     302        /* チェックサムを計算する。*/
    320303        if (in_cksum(icmp4h, align) != 0) {
    321304                NET_COUNT_ICMP4(net_count_icmp4.in_err_packets, 1);
     
    323306                }
    324307
    325         /* メッセージの型により分岐する。*/
     308        /* メッセージの型により分岐する。*/
    326309        switch (icmp4h->type) {
    327310        case ICMP4_ECHO_REQUEST:
     
    371354
    372355/*
    373  *  icmp_error -- ICMP エラー送信関数。
    374  *
    375  *    input には IF ヘッダと IP ヘッダも含まれている。
    376  *    icmp_error では、ネットワークバッファ input を返却しないので、
    377  *    呼出し側で、開放してから終了する。       
     356 *  icmp_error -- ICMP エラー送信関数。
     357 *
     358 *    input には IF ヘッダと IP ヘッダも含まれている。
     359 *    icmp_error では、ネットワークバッファ input を返却しないので、
     360 *    呼出し側で、開放してから終了する。
    378361 */
    379362
     
    390373        ip4hl = GET_IP4_HDR_SIZE(ip4h);
    391374
    392         /* 送信用の IP データグラムを獲得する。*/
     375        /* 送信用の IP データグラムを獲得する。*/
    393376        if (input->len - ip4hl < 8)
    394377                len = input->len - ip4hl;
     
    402385                return;
    403386
    404         /* ICMP ヘッダを設定する。*/
     387        /* ICMP ヘッダを設定する。*/
    405388        icmp4h          = GET_ICMP4_HDR(output, IF_IP4_ICMP4_HDR_OFFSET);
    406389        icmp4h->type    = ICMP4_UNREACH;
     
    408391        icmp4h->data.addr= 0;
    409392
    410         /* エラーが発生した IP ヘッダと データ 8 オクテットをコピーする。*/
     393        /* エラーが発生した IP ヘッダと データ 8 オクテットをコピーする。*/
    411394        memcpy(GET_ICMP4_SDU(output, IF_IP4_ICMP4_HDR_OFFSET),
    412395               GET_IP4_HDR(input), (size_t)(ip4hl + len));
    413396
    414         /* 4 オクテット境界のデータ長 */
     397        /* 4 オクテット境界のデータ長 */
    415398        align = (len + 3) >> 2 << 2;
    416399
    417         /* 4 オクテット境界までパディングで埋める。*/
     400        /* 4 オクテット境界までパディングで埋める。*/
    418401        if (align > len)
    419402                memset((uint8_t*)GET_ICMP4_SDU(output, IF_IP4_ICMP4_HDR_OFFSET) + ip4hl + len,
    420403                       0, (size_t)(align - len));
    421404
    422         /* チェックサムを計算する。*/
     405        /* チェックサムを計算する。*/
    423406        icmp4h->sum = 0;
    424407        icmp4h->sum = in_cksum(icmp4h, (uint_t)(ICMP4_HDR_SIZE + ip4hl + align));
    425408
    426         /* 送信する。*/
     409        /* 送信する。*/
    427410        NET_COUNT_ICMP4(net_count_icmp4.out_octets,
    428411                       output->len - GET_IF_IP4_HDR_SIZE(output));
  • EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/ip_icmp.h

    • Property svn:keywords deleted
    • Property svn:mime-type changed from text/x-chdr to text/x-chdr;charset=UTF-8
    r270 r321  
    55 *                   Tomakomai National College of Technology, JAPAN
    66 *
    7  *  上記著作権è€
    8 ã¯ï¼Œä»¥ä¸‹ã® (1)~(4) の条件か,Free Software Foundation
    9  *  によってå
    10 ¬è¡¨ã•ã‚Œã¦ã„ã‚‹ GNU General Public License の Version 2 に記
    11  *  述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
    12  *  を改変したものを含む.以下同じ)を使用・複製・改変・再é
    13 å¸ƒï¼ˆä»¥ä¸‹ï¼Œ
    14  *  利用と呼ぶ)することを無償で許諾する.
    15  *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
    16  *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
    17  *      スコード中に含まれていること.
    18  *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
    19  *      用できる形で再é
    20 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é
    21 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
    22  *      è€
    23 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—作権表示,この利用条件および下記
    24  *      の無保証規定を掲載すること.
    25  *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
    26  *      用できない形で再é
    27 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®æ¡ä»¶ã‚’満たすこと.
    28  *    (a) 再é
    29 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€
    30 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—
    31  *        作権表示,この利用条件および下記の無保証規定を掲載すること.
    32  *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
    33  *      害からも,上記著作権è€
    34 ãŠã‚ˆã³TOPPERSプロジェクトをå
    35 è²¬ã™ã‚‹ã“と.
     7 *  上記著作権者は,以下の (1)~(4) の条件か,Free Software Foundation
     8 *  によって公表されている GNU General Public License の Version 2 に記
     9 *  述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
     10 *  を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下,
     11 *  利用と呼ぶ)することを無償で許諾する.
     12 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     13 *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     14 *      スコード中に含まれていること.
     15 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     16 *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     17 *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     18 *      の無保証規定を掲載すること.
     19 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     20 *      用できない形で再配布する場合には,次の条件を満たすこと.
     21 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     22 *        作権表示,この利用条件および下記の無保証規定を掲載すること.
     23 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     24 *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
    3625 *
    37  *  本ソフトウェアは,無保証で提供されているものである.上記著作権è€
    38 ãŠ
    39  *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
    40  *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
    41  *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
     26 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     27 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
     28 *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
     29 *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
    4230 *
    4331 *  @(#) $Id$
     
    8472
    8573/*
    86  *  ICMP ヘッダの定義、RFC 792
     74 *  ICMP ヘッダの定義、RFC 792
    8775 */
    8876
    8977typedef struct t_icmp_hdr {
    90         uint8_t         type;           /* メッセージの型        */
    91         uint8_t         code;           /* サブ型            */
    92         uint16_t        sum;            /* チェックサム           */
     78        uint8_t         type;           /* メッセージの型      */
     79        uint8_t         code;           /* サブ型          */
     80        uint16_t        sum;            /* チェックサム               */
    9381        union {
    9482                struct id_seq {
     
    114102
    115103/*
    116  *  メッセージの型
     104 *  メッセージの型
    117105 */
    118106
    119 #define ICMP4_ECHO_REPLY        UINT_C(0)       /* エコー応答              */
    120 #define ICMP4_UNREACH           UINT_C(3)       /* エラー            */
    121 #define ICMP4_SOURCE_QUENCH     UINT_C(4)       /* 発信制限         */
    122 #define ICMP4_REDIRECT          UINT_C(5)       /* 方向変更         */
    123 #define ICMP4_ECHO_REQUEST      UINT_C(8)       /* エコー要求              */
    124 #define ICMP4_TIME_EXCEEDED     UINT_C(11)      /* 発信制限         */
    125 #define ICMP4_PARAMETER         UINT_C(12)      /* パラメータ異常        */
    126 #define ICMP4_TIME_REQUEST      UINT_C(13)      /* タイムスタンプ要求  */
    127 #define ICMP4_TIME_REPLY        UINT_C(14)      /* タイムスタンプ応答  */
    128 #define ICMP4_MASK_REQUEST      UINT_C(17)      /* アドレスマスク要求  */
    129 #define ICMP4_MASK_REPLY        UINT_C(18)      /* アドレスマスク応答  */
     107#define ICMP4_ECHO_REPLY        UINT_C(0)       /* エコー応答                */
     108#define ICMP4_UNREACH           UINT_C(3)       /* エラー          */
     109#define ICMP4_SOURCE_QUENCH     UINT_C(4)       /* 発信制限         */
     110#define ICMP4_REDIRECT          UINT_C(5)       /* 方向変更         */
     111#define ICMP4_ECHO_REQUEST      UINT_C(8)       /* エコー要求                */
     112#define ICMP4_TIME_EXCEEDED     UINT_C(11)      /* 発信制限         */
     113#define ICMP4_PARAMETER         UINT_C(12)      /* パラメータ異常      */
     114#define ICMP4_TIME_REQUEST      UINT_C(13)      /* タイムスタンプ要求    */
     115#define ICMP4_TIME_REPLY        UINT_C(14)      /* タイムスタンプ応答    */
     116#define ICMP4_MASK_REQUEST      UINT_C(17)      /* アドレスマスク要求    */
     117#define ICMP4_MASK_REPLY        UINT_C(18)      /* アドレスマスク応答    */
    130118
    131119/*
    132  *  サブ型
     120 *  サブ型
    133121 */
    134122
    135123/* ICMP4_UNREACH (3)    */
    136124
    137 #define ICMP4_UNREACH_NET               UINT_C(0)       /* ネットワーク           */
    138 #define ICMP4_UNREACH_HOST              UINT_C(1)       /* ホスト            */
    139 #define ICMP4_UNREACH_PROTOCOL          UINT_C(2)       /* プロトコル              */
    140 #define ICMP4_UNREACH_PORT              UINT_C(3)       /* ポート            */
    141 #define ICMP4_UNREACH_FLAG              UINT_C(4)       /* 分割                       */
    142 #define ICMP4_UNREACH_SRC_FAIL          UINT_C(5)       /* ソース経路              */
    143 #define ICMP4_UNREACH_NET_UNKNOWN       UINT_C(6)       /* ネットワーク不明     */
    144 #define ICMP4_UNREACH_HOST_UNKNOWN      UINT_C(7)       /* ホスト不明              */
    145 #define ICMP4_UNREACH_ISOLATED          UINT_C(8)       /* 分離                       */
     125#define ICMP4_UNREACH_NET               UINT_C(0)       /* ネットワーク               */
     126#define ICMP4_UNREACH_HOST              UINT_C(1)       /* ホスト          */
     127#define ICMP4_UNREACH_PROTOCOL          UINT_C(2)       /* プロトコル                */
     128#define ICMP4_UNREACH_PORT              UINT_C(3)       /* ポート          */
     129#define ICMP4_UNREACH_FLAG              UINT_C(4)       /* 分割                   */
     130#define ICMP4_UNREACH_SRC_FAIL          UINT_C(5)       /* ソース経路                */
     131#define ICMP4_UNREACH_NET_UNKNOWN       UINT_C(6)       /* ネットワーク不明     */
     132#define ICMP4_UNREACH_HOST_UNKNOWN      UINT_C(7)       /* ホスト不明                */
     133#define ICMP4_UNREACH_ISOLATED          UINT_C(8)       /* 分離                   */
    146134#define ICMP4_UNREACH_NET_PROHIB        UINT_C(9)       /*                      */
    147135#define ICMP4_UNREACH_HOST_PROHIB       UINT_C(10)      /*                      */
    148 #define ICMP4_UNREACH_TOS_NET           UINT_C(11)      /* ネットワークへの不正TOS*/
    149 #define ICMP4_UNREACH_TOS_HOST          UINT_C(12)      /* ホストへの不正TOS     */
     136#define ICMP4_UNREACH_TOS_NET           UINT_C(11)      /* ネットワークへの不正TOS*/
     137#define ICMP4_UNREACH_TOS_HOST          UINT_C(12)      /* ホストへの不正TOS   */
    150138#define ICMP4_UNREACH_FILTER_PROHIB     UINT_C(13)      /*                      */
    151139#define ICMP4_UNREACH_HOST_PRECEDENCE   UINT_C(14)      /*                      */
     
    154142/* ICMP4_REDIRECT (5)   */
    155143
    156 #define ICMP4_REDIRECT_NET              UINT_C(0)       /* ネットワーク           */
    157 #define ICMP4_REDIRECT_HOST             UINT_C(1)       /* ホスト            */
    158 #define ICMP4_REDIRECT_PORT_AND_NET     UINT_C(2)       /* ポート番号とネット  */
    159 #define ICMP4_REDIRECT_PORT_AND_HOST    UINT_C(3)       /* ポート番号とホスト  */
     144#define ICMP4_REDIRECT_NET              UINT_C(0)       /* ネットワーク               */
     145#define ICMP4_REDIRECT_HOST             UINT_C(1)       /* ホスト          */
     146#define ICMP4_REDIRECT_PORT_AND_NET     UINT_C(2)       /* ポート番号とネット    */
     147#define ICMP4_REDIRECT_PORT_AND_HOST    UINT_C(3)       /* ポート番号とホスト    */
    160148
    161149/*
    162  *  å
    163 ¨åŸŸå¤‰æ•°
     150 *  全域変数
    164151 */
    165152
    166153/*
    167  *  関数シミュレーションマクロ
     154 *  関数シミュレーションマクロ
    168155 */
    169156
     
    175162
    176163/*
    177  *  関数
     164 *  関数
    178165 */
    179166
     
    187174
    188175/*
    189  *  TINET 独自 API
     176 *  TINET 独自 API
    190177 */
    191178
  • EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/ip_input.c

    • Property svn:keywords deleted
    • Property svn:mime-type changed from text/x-csrc to text/x-csrc;charset=UTF-8
    r270 r321  
    55 *                   Tomakomai National College of Technology, JAPAN
    66 *
    7  *  上記著作権è€
    8 ã¯ï¼Œä»¥ä¸‹ã® (1)~(4) の条件か,Free Software Foundation
    9  *  によってå
    10 ¬è¡¨ã•ã‚Œã¦ã„ã‚‹ GNU General Public License の Version 2 に記
    11  *  述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
    12  *  を改変したものを含む.以下同じ)を使用・複製・改変・再é
    13 å¸ƒï¼ˆä»¥ä¸‹ï¼Œ
    14  *  利用と呼ぶ)することを無償で許諾する.
    15  *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
    16  *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
    17  *      スコード中に含まれていること.
    18  *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
    19  *      用できる形で再é
    20 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é
    21 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
    22  *      è€
    23 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—作権表示,この利用条件および下記
    24  *      の無保証規定を掲載すること.
    25  *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
    26  *      用できない形で再é
    27 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®æ¡ä»¶ã‚’満たすこと.
    28  *    (a) 再é
    29 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€
    30 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—
    31  *        作権表示,この利用条件および下記の無保証規定を掲載すること.
    32  *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
    33  *      害からも,上記著作権è€
    34 ãŠã‚ˆã³TOPPERSプロジェクトをå
    35 è²¬ã™ã‚‹ã“と.
     7 *  上記著作権者は,以下の (1)~(4) の条件か,Free Software Foundation
     8 *  によって公表されている GNU General Public License の Version 2 に記
     9 *  述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
     10 *  を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下,
     11 *  利用と呼ぶ)することを無償で許諾する.
     12 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     13 *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     14 *      スコード中に含まれていること.
     15 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     16 *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     17 *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     18 *      の無保証規定を掲載すること.
     19 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     20 *      用できない形で再配布する場合には,次の条件を満たすこと.
     21 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     22 *        作権表示,この利用条件および下記の無保証規定を掲載すること.
     23 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     24 *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
    3625 *
    37  *  本ソフトウェアは,無保証で提供されているものである.上記著作権è€
    38 ãŠ
    39  *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
    40  *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
    41  *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
     26 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     27 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
     28 *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
     29 *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
    4230 *
    4331 *  @(#) $Id$
     
    136124
    137125/*
    138  *  変数
     126 *  変数
    139127 */
    140128
     
    142130
    143131/*
    144  *  SNMP の 管理æƒ
    145 å ±ãƒ™ãƒ¼ã‚¹ (MIB)
     132 *  SNMP の 管理情報ベース (MIB)
    146133 */
    147134
     
    153140
    154141/*
    155  *  データグラム再構成キュー
     142 *  データグラム再構成キュー
    156143 */
    157144
     
    160147
    161148/*
    162  *  関数
     149 *  関数
    163150 */
    164151
     
    167154
    168155/*
    169  *  ip_get_frag_queue -- データグラム再構成キューを獲得する。
     156 *  ip_get_frag_queue -- データグラム再構成キューを獲得する。
    170157 */
    171158
     
    177164
    178165/*
    179  *  ip_freef -- データグラム再構成キューを解放する。
     166 *  ip_freef -- データグラム再構成キューを解放する。
    180167 */
    181168
     
    195182
    196183/*
    197  *  ip_frag_timer -- データグラム再構成管理タイマ
     184 *  ip_frag_timer -- データグラム再構成管理タイマ
    198185 */
    199186
     
    218205
    219206/*
    220  *  ip_reass -- データグラムを再構成する。
     207 *  ip_reass -- データグラムを再構成する。
    221208 */
    222209
     
    242229
    243230        /*
    244          *  ID、IPアドレス、上位プロトコルが異なるフラグメントがキューに有れば破棄する。
     231         *  ID、IPアドレス、上位プロトコルが異なるフラグメントがキューに有れば破棄する。
    245232         */
    246233        frag = ip_frag_queue[ix];
     
    259246                NET_COUNT_IP4(net_count_ip4[NC_IP4_FRAG_IN], 1);
    260247
    261                 /* 新規の ID なら、宛å
    262 ˆã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’保存して、キューにつなぐ。*/
     248                /* 新規の ID なら、宛先アドレスを保存して、キューにつなぐ。*/
    263249                frag_dst  [ix] = dst;
    264250                ip_frag_queue[ix] = input;
     
    266252                input = NULL;
    267253
    268                 /* 再構成タイムアウトを設定する。*/
     254                /* 再構成タイムアウトを設定する。*/
    269255                ip4h->ttl = IP4_FRAGTTL;
    270256                }
    271257        else {
    272258
    273                 /* 正しい位置に挿å
    274 ¥ã™ã‚‹ã€‚*/
     259                /* 正しい位置に挿入する。*/
    275260                prev = NULL;
    276261                while (frag != NULL &&
     
    289274                input = NULL;
    290275
    291                 /* å
    292 ¨ã¦ã®ãƒ•ãƒ©ã‚°ãƒ¡ãƒ³ãƒˆãŒæƒã£ã¦ã„るか調べる。*/
     276                /* 全てのフラグメントが揃っているか調べる。*/
    293277                off = 0;
    294278                for (frag = ip_frag_queue[ix]; frag != NULL; frag = GET_QIP4_HDR(frag)->next) {
    295279                        if ((IP4_FLGOFF_OFF(GET_QIP4_HDR(frag)->flg_off) << 3) != off) {
    296                                 /* 途中が抜けていたら終了する。*/
     280                                /* 途中が抜けていたら終了する。*/
    297281                                syscall(sig_sem(SEM_IP4_FRAG_QUEUE));
    298282                                return NULL;
     
    302286                        }
    303287
    304                 /* å
    305 ¨ã¦ã®ãƒ•ãƒ©ã‚°ãƒ¡ãƒ³ãƒˆãŒæƒã£ãŸã‚‰å†æ§‹æˆã™ã‚‹ã€‚*/
     288                /* 全てのフラグメントが揃ったら再構成する。*/
    306289                if ((GET_QIP4_HDR(prev)->flg_off & IP4_MF) == 0) {
    307290
    308                         /* ネットワークバッファを獲得する。*/
     291                        /* ネットワークバッファを獲得する。*/
    309292                        if (tget_net_buf(&input, IF_IP4_HDR_SIZE + off, TMO_IP4_FRAG_GET_NET_BUF) == E_OK) {
    310293                                NET_COUNT_IP4(net_count_ip4[NC_IP4_FRAG_IN_OK], 1);
    311294                                NET_COUNT_MIB(ip_stats.ipReasmOKs, 1);
    312295
    313                                 /* IPv4 ヘッダを設定する。*/
     296                                /* IPv4 ヘッダを設定する。*/
    314297                                frag  = ip_frag_queue[ix];
    315298                                ip4h  = GET_IP4_HDR(input);
     
    321304                                ip4h->flg_off = ip4h->id = 0;
    322305
    323                                 /* データグラムを再構成する。*/
     306                                /* データグラムを再構成する。*/
    324307                                off = IP4_HDR_SIZE;
    325308                                while (frag != NULL) {
     
    335318                                NET_COUNT_MIB(ip_stats.ipReasmFails, 1);
    336319                                }
    337                         /* キューを空にする。*/
     320                        /* キューを空にする。*/
    338321                        ip_freef(ix);
    339322                        }
     
    346329
    347330/*
    348  *  ip_init -- IP の初期化
     331 *  ip_init -- IP の初期化
    349332 */
    350333
     
    356339
    357340/*
    358  *  ip_remove_options -- IPv4 ヘッダのオプションを削除し、以降を前に詰める。
     341 *  ip_remove_options -- IPv4 ヘッダのオプションを削除し、以降を前に詰める。
    359342 */
    360343
     
    378361
    379362/*
    380  *  ip_input -- IP のå
    381 ¥åŠ›é–¢æ•°
     363 *  ip_input -- IP の入力関数
    382364 */
    383365
    384366#if defined(SUPPORT_IPSEC)
    385367/*
    386  * TODO: IPsec SPを検索し、パケットをリジェクトするかどうか判定する処理を実è£
    387 ã™ã‚‹
     368 * TODO: IPsec SPを検索し、パケットをリジェクトするかどうか判定する処理を実装する
    388369 */
    389370#endif /* of defined(SUPPORT_IPSEC) */
     
    401382        NET_COUNT_MIB(ip_stats.ipInReceives, 1);
    402383
    403         /* IP ヘッダの長さをチェックする。*/
     384        /* IP ヘッダの長さをチェックする。*/
    404385        if (input->len < IF_IP4_HDR_SIZE) {
    405386                NET_COUNT_IP4(net_count_ip4[NC_IP4_IN_ERR_SHORT], 1);
     
    411392        hlen = GET_IP4_HDR_SIZE(ip4h);
    412393
    413         /* バージョンをチェックする。*/
     394        /* バージョンをチェックする。*/
    414395        if (IP4_VHL_V(ip4h->vhl) != IPV4_VERSION) {
    415396                NET_COUNT_IP4(net_count_ip4[NC_IP4_IN_ERR_VER], 1);
     
    418399                }
    419400
    420         /* IP ヘッダの長さをチェックし、オプションを解析する。*/
     401        /* IP ヘッダの長さをチェックし、オプションを解析する。*/
    421402        if (hlen > IP4_HDR_SIZE) {
    422403                NET_COUNT_IP4(net_count_ip4[NC_IP4_OPTS], 1);
    423                 /* %%% オプションの解析 %%% */
    424                 }
    425 
    426         /* データグラム長をチェックする。*/
     404                /* %%% オプションの解析 %%% */
     405                }
     406
     407        /* データグラム長をチェックする。*/
    427408        if (ntohs(ip4h->len) > input->len - IF_HDR_SIZE) {
    428409                NET_COUNT_IP4(net_count_ip4[NC_IP4_IN_ERR_SHORT], 1);
     
    431412                }
    432413
    433         /* ネットワークバッファの長さをデータグラム長に調整する。*/
     414        /* ネットワークバッファの長さをデータグラム長に調整する。*/
    434415        input->len = (uint16_t)(ntohs(ip4h->len) + IF_HDR_SIZE);
    435416
    436         /* チェックサムをチェックする。*/
     417        /* チェックサムをチェックする。*/
    437418        if (in_cksum(ip4h, hlen) != 0) {
    438419                NET_COUNT_IP4(net_count_ip4[NC_IP4_IN_ERR_CKSUM], 1);
     
    441422                }
    442423
    443         /* IP ヘッダの長さをチェックし、上位が ICMP 以外はオプションを消去する。*/
     424        /* IP ヘッダの長さをチェックし、上位が ICMP 以外はオプションを消去する。*/
    444425        if (hlen > IP4_HDR_SIZE && ip4h->proto != IPPROTO_ICMP) {
    445426                memset((uint8_t*)ip4h + IP4_HDR_SIZE, 0, hlen - IP4_HDR_SIZE);
    446427                }
    447428
    448         /* 送信å
    449 ƒã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’チェックする。*/
     429        /* 送信元アドレスをチェックする。*/
    450430        src = ntohl(ip4h->src);
    451431        bc  = (ifp->in_ifaddr.addr & ifp->in_ifaddr.mask) | ~ifp->in_ifaddr.mask;
     
    469449#endif  /* of #ifdef SUPPORT_LOOP */
    470450
    471         /* あてå
    472 ˆã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’チェックする。*/
     451        /* あて先アドレスをチェックする。*/
    473452        dst = ntohl(ip4h->dst);
    474453
     
    476455
    477456        /*
    478          *  DHCP_CFG が定義されているときは、ローカルアドレスが未定義の
    479          *  場合もデータグラムを受信する。
     457         *  DHCP_CFG が定義されているときは、ローカルアドレスが未定義の
     458         *  場合もデータグラムを受信する。
    480459         */
    481460
     
    511490#ifdef IP4_CFG_FRAGMENT
    512491
    513         /* 分割されているかチェックする。*/
     492        /* 分割されているかチェックする。*/
    514493        if (ntohs(ip4h->flg_off) & (IP4_MF | IP4_OFFMASK)) {
    515494                if ((input = ip_reass(ip4h, input)) == NULL)
     
    519498#else   /* of #ifdef IP4_CFG_FRAGMENT */
    520499
    521         /* 分割されているかチェックする。*/
     500        /* 分割されているかチェックする。*/
    522501        if (ntohs(ip4h->flg_off) & (IP4_MF | IP4_OFFMASK)) {
    523502                T_IN4_ADDR      src;
     
    537516
    538517#if defined(SUPPORT_IPSEC)
    539         /* ここでipsec4_in_rejectを実行する */
     518        /* ここでipsec4_in_rejectを実行する */
    540519        if ((ip4h->proto != IPPROTO_ESP) && ipsec4_in_reject (input)) {
    541520                goto buf_rel;
     
    543522#endif /* of #if defined(SUPPORT_IPSEC) */
    544523
    545         /* プロトコルを選択する */
     524        /* プロトコルを選択する */
    546525        switch (ip4h->proto) {
    547526
     
    580559                NET_COUNT_MIB(ip_stats.ipInUnknownProtos, 1);
    581560
    582                 /* ローカル IP アドレスに届いたデータグラムのみ ICMP エラーを通知する。*/
     561                /* ローカル IP アドレスに届いたデータグラムのみ ICMP エラーを通知する。*/
    583562                if (dst == ifp->in_ifaddr.addr) {
    584563                        T_IN4_ADDR      src;
     
    589568                        }
    590569                /*
    591                  *  icmp_error では、ネットワークバッファ input を返却しないので
    592                  *  開放してから終了する。
     570                 *  icmp_error では、ネットワークバッファ input を返却しないので
     571                 *  開放してから終了する。
    593572                 */
    594573                break;
  • EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/ip_output.c

    • Property svn:keywords deleted
    • Property svn:mime-type changed from text/x-csrc to text/x-csrc;charset=UTF-8
    r270 r321  
    55 *                   Tomakomai National College of Technology, JAPAN
    66 *
    7  *  上記著作権è€
    8 ã¯ï¼Œä»¥ä¸‹ã® (1)~(4) の条件か,Free Software Foundation
    9  *  によってå
    10 ¬è¡¨ã•ã‚Œã¦ã„ã‚‹ GNU General Public License の Version 2 に記
    11  *  述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
    12  *  を改変したものを含む.以下同じ)を使用・複製・改変・再é
    13 å¸ƒï¼ˆä»¥ä¸‹ï¼Œ
    14  *  利用と呼ぶ)することを無償で許諾する.
    15  *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
    16  *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
    17  *      スコード中に含まれていること.
    18  *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
    19  *      用できる形で再é
    20 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é
    21 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
    22  *      è€
    23 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—作権表示,この利用条件および下記
    24  *      の無保証規定を掲載すること.
    25  *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
    26  *      用できない形で再é
    27 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®æ¡ä»¶ã‚’満たすこと.
    28  *    (a) 再é
    29 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€
    30 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—
    31  *        作権表示,この利用条件および下記の無保証規定を掲載すること.
    32  *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
    33  *      害からも,上記著作権è€
    34 ãŠã‚ˆã³TOPPERSプロジェクトをå
    35 è²¬ã™ã‚‹ã“と.
    36  *
    37  *  本ソフトウェアは,無保証で提供されているものである.上記著作権è€
    38 ãŠ
    39  *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
    40  *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
    41  *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
     7 *  上記著作権者は,以下の (1)~(4) の条件か,Free Software Foundation
     8 *  によって公表されている GNU General Public License の Version 2 に記
     9 *  述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
     10 *  を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下,
     11 *  利用と呼ぶ)することを無償で許諾する.
     12 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     13 *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     14 *      スコード中に含まれていること.
     15 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     16 *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     17 *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     18 *      の無保証規定を掲載すること.
     19 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     20 *      用できない形で再配布する場合には,次の条件を満たすこと.
     21 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     22 *        作権表示,この利用条件および下記の無保証規定を掲載すること.
     23 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     24 *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
     25 *
     26 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     27 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
     28 *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
     29 *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
    4230 *
    4331 *  @(#) $Id$
     
    120108
    121109/*
    122  *  IP output -- IP の出力関数
    123  *
    124  *    注意: バージョンとヘッダ長は上位層で設定する。
     110 *  IP output -- IP の出力関数
     111 *
     112 *    注意: バージョンとヘッダ長は上位層で設定する。
    125113 */
    126114
     
    141129
    142130#ifdef SUPPORT_IPSEC
    143         /* XXX: IPsecの処理はパケット断片化の前に行われる */
    144 
    145         /* SPDを取得する */
     131        /* XXX: IPsecの処理はパケット断片化の前に行われる */
     132
     133        /* SPDを取得する */
    146134        sp = ipsec4_getpolicybyaddr(output, IPSEC_DIR_OUTBOUND, &ipsec_error);
    147135        if (sp==NULL) {
     
    150138        }
    151139
    152         /* ポリシをチェックする*/
     140        /* ポリシをチェックする*/
    153141#if 0
    154142        switch (sp->policy) {
     
    162150
    163151        case  IPSEC_POLICY_IPSEC:
    164                 /* XXX: SH2ではここでillegal Instructionが発生する。コンパイラのバグ? */
     152                /* XXX: SH2ではここでillegal Instructionが発生する。コンパイラのバグ? */
    165153                if (sp->req == NULL) {
    166                         /* 鍵交換デーモンに対してSAの取得を要求する */
     154                        /* 鍵交換デーモンに対してSAの取得を要求する */
    167155                        goto bad;
    168156                }
     
    170158
    171159        default:
    172                 /* 不正なポリシ */
     160                /* 不正なポリシ */
    173161                goto bad;
    174162                break;
    175163        }
    176164#else /* 0 */
    177         /* XXX: コンパイラの不å
    178 ·åˆå›žé¿ã®ãŸã‚ switchをやめif文で書き直した */
     165        /* XXX: コンパイラの不具合回避のため switchをやめif文で書き直した */
    179166        policy = sp->spinitb->policy;
    180167
     
    185172        else if (policy == IPSEC_POLICY_IPSEC) {
    186173                if (sp->req == NULL)
    187                         /* 鍵交換デーモンに対してSAの取得を要求する */
     174                        /* 鍵交換デーモンに対してSAの取得を要求する */
    188175                        goto bad;
    189176        } else
     
    196183
    197184                        state.m = output;
    198                         /* XXX: ipsec4_output()å†
    199 ã§ã¯ã€ip->{len,off}をネットワークバイトオーダとする */
     185                        /* XXX: ipsec4_output()内では、ip->{len,off}をネットワークバイトオーダとする */
    200186                        error = ipsec4_output (&state, sp, 0 /* flags */ );
    201187                        output = state.m;
    202188
    203189                        if (error) {
    204                                 /* net_buf はipsec4_outputによって既に解放されている */
     190                                /* net_buf はipsec4_outputによって既に解放されている */
    205191                                switch (error) {
    206192                                default:
     
    210196                }
    211197
    212         /* ipsec4_outputに影響を受けた値を更新する */
    213         /* XXX: å¿
    214 è¦ã‹? */
     198        /* ipsec4_outputに影響を受けた値を更新する */
     199        /* XXX: 必要か? */
    215200
    216201skip_ipsec:
     
    224209
    225210        /*
    226          *  データグラムサイズがネットワークの MTU をè¶
    227 ãˆã¦ã„れば、
    228          *  分割して送信する。
     211         *  データグラムサイズがネットワークの MTU を超えていれば、
     212         *  分割して送信する。
    229213         */
    230214        if (ntohs(ip4h->len) > IF_MTU) {
     
    244228                                flen = len - off;
    245229
    246                         /* データ長は 4 オクテット境界に調整する。    */
     230                        /* データ長は 4 オクテット境界に調整する。        */
    247231                        align = (flen + 3) >> 2 << 2;
    248232
    249                         /* ネットワークバッファを獲得する。*/
     233                        /* ネットワークバッファを獲得する。*/
    250234                        if (tget_net_buf(&frag, align + IF_IP4_HDR_SIZE, TMO_IP4_FRAG_GET_NET_BUF) == E_OK) {
    251235
    252                                 /* フラグメントをコピーする。*/
     236                                /* フラグメントをコピーする。*/
    253237                                memcpy(GET_IP4_SDU(frag), (uint8_t *)ip4h + off, flen);
    254238
    255                                 /* ヘッダを埋める。*/
     239                                /* ヘッダを埋める。*/
    256240                                fip4h           = GET_IP4_HDR(frag);
    257241                                *fip4h          = *ip4h;
     
    276260                                }
    277261                        else {
    278                                 /* 獲得できなければ、送信をあきらめる。*/
     262                                /* 獲得できなければ、送信をあきらめる。*/
    279263                                syscall(rel_net_buf(output));
    280264                                NET_COUNT_IP4(net_count_ip4[NC_IP4_OUT_ERR_PACKETS], 1);
     
    291275        else {
    292276
    293                 /* ヘッダを埋める。*/
     277                /* ヘッダを埋める。*/
    294278                ip4h->id  = htons(frag_id);
    295279                frag_id ++;
     
    309293        ip4h = GET_IP4_HDR(output);
    310294
    311         /* データグラムサイズがネットワークの MTU をè¶
    312 ãˆã¦ã„ればエラー */
     295        /* データグラムサイズがネットワークの MTU を超えていればエラー */
    313296        if (ntohs(ip4h->len) > IF_MTU)
    314297                return E_PAR;
    315298
    316         /* ヘッダを埋める。*/
     299        /* ヘッダを埋める。*/
    317300        ip4h->id  = htons(frag_id);
    318301        frag_id ++;
     
    324307
    325308#ifdef ETHER_CFG_MULTICAST
    326         /* マルチキャストアドレスの場合はIPアドレスはそのまま */
     309        /* マルチキャストアドレスの場合はIPアドレスはそのまま */
    327310        gw = ntohl(ip4h->dst);
    328311        if(!IN4_IS_ADDR_MULTICAST(gw))
  • EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/ip_var.h

    • Property svn:keywords deleted
    • Property svn:mime-type changed from text/x-chdr to text/x-chdr;charset=UTF-8
    r270 r321  
    55 *                   Tomakomai National College of Technology, JAPAN
    66 *
    7  *  上記著作権è€
    8 ã¯ï¼Œä»¥ä¸‹ã® (1)~(4) の条件か,Free Software Foundation
    9  *  によってå
    10 ¬è¡¨ã•ã‚Œã¦ã„ã‚‹ GNU General Public License の Version 2 に記
    11  *  述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
    12  *  を改変したものを含む.以下同じ)を使用・複製・改変・再é
    13 å¸ƒï¼ˆä»¥ä¸‹ï¼Œ
    14  *  利用と呼ぶ)することを無償で許諾する.
    15  *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
    16  *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
    17  *      スコード中に含まれていること.
    18  *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
    19  *      用できる形で再é
    20 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é
    21 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
    22  *      è€
    23 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—作権表示,この利用条件および下記
    24  *      の無保証規定を掲載すること.
    25  *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
    26  *      用できない形で再é
    27 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®æ¡ä»¶ã‚’満たすこと.
    28  *    (a) 再é
    29 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€
    30 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—
    31  *        作権表示,この利用条件および下記の無保証規定を掲載すること.
    32  *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
    33  *      害からも,上記著作権è€
    34 ãŠã‚ˆã³TOPPERSプロジェクトをå
    35 è²¬ã™ã‚‹ã“と.
    36  *
    37  *  本ソフトウェアは,無保証で提供されているものである.上記著作権è€
    38 ãŠ
    39  *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
    40  *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
    41  *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
     7 *  上記著作権者は,以下の (1)~(4) の条件か,Free Software Foundation
     8 *  によって公表されている GNU General Public License の Version 2 に記
     9 *  述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
     10 *  を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下,
     11 *  利用と呼ぶ)することを無償で許諾する.
     12 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     13 *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     14 *      スコード中に含まれていること.
     15 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     16 *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     17 *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     18 *      の無保証規定を掲載すること.
     19 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     20 *      用できない形で再配布する場合には,次の条件を満たすこと.
     21 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     22 *        作権表示,この利用条件および下記の無保証規定を掲載すること.
     23 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     24 *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
     25 *
     26 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     27 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
     28 *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
     29 *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
    4230 *
    4331 *  @(#) $Id$
     
    8472
    8573/*
    86  *  IPv4 ヘッダ・ペイロードアクセスマクロ
     74 *  IPv4 ヘッダ・ペイロードアクセスマクロ
    8775 */
    8876
     
    9987
    10088/*
    101  *  IPv4 と IPv6 をコンパイル時に選択するためのマクロ
     89 *  IPv4 と IPv6 をコンパイル時に選択するためのマクロ
    10290 */
    10391
     
    124112
    125113/*
    126  *  IP の MSS サイズのネットワークバッファ
     114 *  IP の MSS サイズのネットワークバッファ
    127115 */
    128116
    129117typedef struct t_net_buf_ip_mss {
    130         uint16_t        len;    /* データの長さ           */
    131         uint8_t         idix;   /* mpfid のインデックス  */
    132         uint8_t         flags;  /* フラグ            */
     118        uint16_t        len;    /* データの長さ               */
     119        uint8_t         idix;   /* mpfid のインデックス        */
     120        uint8_t         flags;  /* フラグ          */
    133121#ifdef IF_ETHER_NIC_NET_BUF_ALIGN
    134122        uint8_t         nalign[IF_ETHER_NIC_NET_BUF_ALIGN];
     
    138126#endif
    139127        uint8_t         buf[IF_HDR_SIZE + IP4_MSS];
    140                                 /* バッファ本体           */
     128                                /* バッファ本体               */
    141129        } T_NET_BUF_IP_MSS;
    142130
    143131/*
    144  *  65536 オクテットサイズのネットワークバッファ
     132 *  65536 オクテットサイズのネットワークバッファ
    145133 */
    146134
    147135typedef struct t_net_buf4_65536 {
    148         uint16_t        len;    /* データの長さ           */
    149         uint8_t         idix;   /* mpfid のインデックス  */
    150         uint8_t         flags;  /* フラグ            */
     136        uint16_t        len;    /* データの長さ               */
     137        uint8_t         idix;   /* mpfid のインデックス        */
     138        uint8_t         flags;  /* フラグ          */
    151139#ifdef IF_ETHER_NIC_NET_BUF_ALIGN
    152140        uint8_t         nalign[IF_ETHER_NIC_NET_BUF_ALIGN];
     
    156144#endif
    157145        uint8_t         buf[IF_IP4_HDR_SIZE + 65536];
    158                                 /* バッファ本体           */
     146                                /* バッファ本体               */
    159147#if defined(IF_PDU_HDR_PADDING)
    160148        uint8_t         padding[IF_PDU_HDR_PADDING];
    161 #endif                          /* ヘッダの余分           */
     149#endif                          /* ヘッダの余分               */
    162150        } T_NET_BUF4_65536;
    163151
     
    165153
    166154/*
    167  *  再構成キュー用 IPv4 ヘッダの定義
     155 *  再構成キュー用 IPv4 ヘッダの定義
    168156 */
    169157
    170158typedef struct t_qip4_hdr {
    171159        uint8_t         vhl;            /* version << 4 | header length >> 2    */
    172                                         /* length は 4 octets 単位           */
     160                                        /* length は 4 octets 単位         */
    173161        uint8_t         type;           /* type of services                     */
    174162        uint16_t        len;            /* total length                         */
     
    183171        uint32_t        src;            /* source address                       */
    184172
    185         T_NET_BUF       *next;          /* 次の IPv4 フラグメント                       */
     173        T_NET_BUF       *next;          /* 次の IPv4 フラグメント                       */
    186174        } __attribute__((packed, aligned(2)))T_QIP4_HDR;
    187175
     
    196184
    197185/*
    198  *  データグラム再構成用ネットワークバッファ
     186 *  データグラム再構成用ネットワークバッファ
    199187 */
    200188
    201189typedef struct t_net_buf4_reassm {
    202         uint16_t        len;    /* データの長さ           */
    203         uint8_t         idix;   /* mpfid のインデックス  */
    204         uint8_t         flags;  /* フラグ            */
     190        uint16_t        len;    /* データの長さ               */
     191        uint8_t         idix;   /* mpfid のインデックス        */
     192        uint8_t         flags;  /* フラグ          */
    205193#ifdef IF_ETHER_NIC_NET_BUF_ALIGN
    206194        uint8_t         nalign[IF_ETHER_NIC_NET_BUF_ALIGN];
     
    210198#endif
    211199        uint8_t         buf[IP4_CFG_FRAG_REASSM_SIZE];
    212                                 /* バッファ本体           */
     200                                /* バッファ本体               */
    213201        } T_NET_BUF4_REASSM;
    214202
     
    216204
    217205/*
    218  *  TCP の再構成キューにおける IPv4 ヘッダの定義
     206 *  TCP の再構成キューにおける IPv4 ヘッダの定義
    219207 */
    220208
    221209typedef struct t_tcp_ip4_q_hdr {
    222210        uint8_t         vhl;            /* version << 4 | header length >> 2    */
    223                                         /* length は 4 octets 単位           */
     211                                        /* length は 4 octets 単位         */
    224212        uint8_t         type;           /* type of services                     */
    225213        uint16_t        len;            /* total length                         */
     
    230218        uint8_t         ttl;            /* time to live                         */
    231219        uint8_t         proto;          /* protocol                             */
    232         uint16_t        thoff;          /* TCP ヘッダのオフセット              */
     220        uint16_t        thoff;          /* TCP ヘッダのオフセット                */
    233221
    234222        T_IN4_ADDR      src;            /* source address                       */
     
    239227
    240228/*
    241  *  SNMP の 管理æƒ
    242 å ±ãƒ™ãƒ¼ã‚¹ (MIB)
     229 *  SNMP の 管理情報ベース (MIB)
    243230 */
    244231
     
    282269
    283270/*
    284  *  関数
     271 *  関数
    285272 */
    286273
  • EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/tcp.cfg

    • Property svn:keywords deleted
    • Property svn:mime-type changed from text/plain to text/plain;charset=UTF-8
    r270 r321  
    55 *                   Tomakomai National College of Technology, JAPAN
    66 *
    7  *  上記著作権è€
    8 ã¯ï¼Œä»¥ä¸‹ã® (1)~(4) の条件か,Free Software Foundation
    9  *  によってå
    10 ¬è¡¨ã•ã‚Œã¦ã„ã‚‹ GNU General Public License の Version 2 に記
    11  *  述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
    12  *  を改変したものを含む.以下同じ)を使用・複製・改変・再é
    13 å¸ƒï¼ˆä»¥ä¸‹ï¼Œ
    14  *  利用と呼ぶ)することを無償で許諾する.
    15  *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
    16  *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
    17  *      スコード中に含まれていること.
    18  *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
    19  *      用できる形で再é
    20 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é
    21 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
    22  *      è€
    23 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—作権表示,この利用条件および下記
    24  *      の無保証規定を掲載すること.
    25  *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
    26  *      用できない形で再é
    27 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®æ¡ä»¶ã‚’満たすこと.
    28  *    (a) 再é
    29 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€
    30 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—
    31  *        作権表示,この利用条件および下記の無保証規定を掲載すること.
    32  *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
    33  *      害からも,上記著作権è€
    34 ãŠã‚ˆã³TOPPERSプロジェクトをå
    35 è²¬ã™ã‚‹ã“と.
     7 *  上記著作権者は,以下の (1)~(4) の条件か,Free Software Foundation
     8 *  によって公表されている GNU General Public License の Version 2 に記
     9 *  述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
     10 *  を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下,
     11 *  利用と呼ぶ)することを無償で許諾する.
     12 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     13 *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     14 *      スコード中に含まれていること.
     15 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     16 *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     17 *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     18 *      の無保証規定を掲載すること.
     19 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     20 *      用できない形で再配布する場合には,次の条件を満たすこと.
     21 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     22 *        作権表示,この利用条件および下記の無保証規定を掲載すること.
     23 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     24 *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
    3625 *
    37  *  本ソフトウェアは,無保証で提供されているものである.上記著作権è€
    38 ãŠ
    39  *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
    40  *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
    41  *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
     26 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     27 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
     28 *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
     29 *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
    4230 *
    4331 *  @(#) $Id$
     
    4533
    4634/*
    47  *  TCP で使用するカーネルオブジェクト
     35 *  TCP で使用するカーネルオブジェクト
    4836 */
    4937
    5038#ifdef SUPPORT_TCP
    5139
    52 /* 出力タスク */
     40/* 出力タスク */
    5341
    5442CRE_TSK(TCP_OUTPUT_TASK, {
     
    6149        });
    6250
    63 /* セマフォ */
     51/* セマフォ */
    6452
    6553CRE_SEM(SEM_TCP_POST_OUTPUT,    { TA_TPRI, 0, 1 });
  • EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/tcp.h

    • Property svn:keywords deleted
    • Property svn:mime-type changed from text/x-chdr to text/x-chdr;charset=UTF-8
    r270 r321  
    55 *                   Tomakomai National College of Technology, JAPAN
    66 *
    7  *  上記著作権è€
    8 ã¯ï¼Œä»¥ä¸‹ã® (1)~(4) の条件か,Free Software Foundation
    9  *  によってå
    10 ¬è¡¨ã•ã‚Œã¦ã„ã‚‹ GNU General Public License の Version 2 に記
    11  *  述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
    12  *  を改変したものを含む.以下同じ)を使用・複製・改変・再é
    13 å¸ƒï¼ˆä»¥ä¸‹ï¼Œ
    14  *  利用と呼ぶ)することを無償で許諾する.
    15  *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
    16  *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
    17  *      スコード中に含まれていること.
    18  *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
    19  *      用できる形で再é
    20 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é
    21 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
    22  *      è€
    23 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—作権表示,この利用条件および下記
    24  *      の無保証規定を掲載すること.
    25  *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
    26  *      用できない形で再é
    27 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®æ¡ä»¶ã‚’満たすこと.
    28  *    (a) 再é
    29 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€
    30 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—
    31  *        作権表示,この利用条件および下記の無保証規定を掲載すること.
    32  *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
    33  *      害からも,上記著作権è€
    34 ãŠã‚ˆã³TOPPERSプロジェクトをå
    35 è²¬ã™ã‚‹ã“と.
     7 *  上記著作権者は,以下の (1)~(4) の条件か,Free Software Foundation
     8 *  によって公表されている GNU General Public License の Version 2 に記
     9 *  述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
     10 *  を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下,
     11 *  利用と呼ぶ)することを無償で許諾する.
     12 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     13 *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     14 *      スコード中に含まれていること.
     15 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     16 *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     17 *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     18 *      の無保証規定を掲載すること.
     19 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     20 *      用できない形で再配布する場合には,次の条件を満たすこと.
     21 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     22 *        作権表示,この利用条件および下記の無保証規定を掲載すること.
     23 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     24 *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
    3625 *
    37  *  本ソフトウェアは,無保証で提供されているものである.上記著作権è€
    38 ãŠ
    39  *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
    40  *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
    41  *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
     26 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     27 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
     28 *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
     29 *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
    4230 *
    4331 *  @(#) $Id$
     
    8472
    8573/*
    86  *  TCP ヘッダ、RFC 793 参ç
    87 §
     74 *  TCP ヘッダ、RFC 793 参照
    8875 */
    8976
    9077typedef struct t_tcp_hdr {
    91         uint16_t        sport;          /* 送信å
    92 ƒãƒãƒ¼ãƒˆç•ªå·                        */
    93         uint16_t        dport;          /* 宛å
    94 ˆãƒãƒ¼ãƒˆç•ªå·                        */
     78        uint16_t        sport;          /* 送信元ポート番号                     */
     79        uint16_t        dport;          /* 宛先ポート番号                      */
    9580
    96         uint32_t        seq;            /* SEQ 番号                           */
     81        uint32_t        seq;            /* SEQ 番号                               */
    9782
    98         uint32_t        ack;            /* ACK 番号                           */
     83        uint32_t        ack;            /* ACK 番号                               */
    9984
    100         uint8_t         doff;           /* データオフセット(上位4ビット)   */
    101         uint8_t         flags;          /* フラグ(下位6ビット)                  */
    102         uint16_t        win;            /* ウィンドサイズ                        */
     85        uint8_t         doff;           /* データオフセット(上位4ビット)     */
     86        uint8_t         flags;          /* フラグ(下位6ビット)                  */
     87        uint16_t        win;            /* ウィンドサイズ                      */
    10388
    104         uint16_t        sum;            /* チェックサム                           */
    105         uint16_t        urp;            /* 緊急ポインタ                           */
     89        uint16_t        sum;            /* チェックサム                               */
     90        uint16_t        urp;            /* 緊急ポインタ                               */
    10691        } __attribute__((packed, aligned(2)))T_TCP_HDR;
    10792
     
    10994
    11095/*
    111  *  TCP ヘッダ構造体メンバアクセスマクロ
     96 *  TCP ヘッダ構造体メンバアクセスマクロ
    11297 */
    11398
     
    117102
    118103/*
    119  *  TCP ヘッダのフラグフィールドの値の定義
     104 *  TCP ヘッダのフラグフィールドの値の定義
    120105 */
    121106
    122 #define TCP_FLG_FIN             UINT_C(0x01)    /* FIN: 最終                  */
    123 #define TCP_FLG_SYN             UINT_C(0x02)    /* SYN: 同期                  */
    124 #define TCP_FLG_RST             UINT_C(0x04)    /* RST: コネクションのリセット       */
    125 #define TCP_FLG_PUSH            UINT_C(0x08)    /* PUSH:プッシュ機能              */
    126 #define TCP_FLG_ACK             UINT_C(0x10)    /* ACK: 肯定応答            */
    127 #define TCP_FLG_URG             UINT_C(0x20)    /* URG: 緊急æƒ
    128 å ±             */
     107#define TCP_FLG_FIN             UINT_C(0x01)    /* FIN: 最終                      */
     108#define TCP_FLG_SYN             UINT_C(0x02)    /* SYN: 同期                      */
     109#define TCP_FLG_RST             UINT_C(0x04)    /* RST: コネクションのリセット     */
     110#define TCP_FLG_PUSH            UINT_C(0x08)    /* PUSH:プッシュ機能          */
     111#define TCP_FLG_ACK             UINT_C(0x10)    /* ACK: 肯定応答            */
     112#define TCP_FLG_URG             UINT_C(0x20)    /* URG: 緊急情報            */
    129113
    130114/*
    131  *  TCP オプションの定義
     115 *  TCP オプションの定義
    132116 */
    133117
    134 /* オプションの型 */
     118/* オプションの型 */
    135119
    136 #define TCP_OPT_EOL             UINT_C(0)       /* 最終                               */
    137 #define TCP_OPT_NOP             UINT_C(1)       /* 何もしない                      */
    138 #define TCP_OPT_MAXSEG          UINT_C(2)       /* 最大セグメント長             */
    139 #define TCP_OPT_WINDOW          UINT_C(3)       /* ウィンドスケーリング               */
    140 #define TCP_OPT_SACK_PERM       UINT_C(4)       /* 選択 ACK 許可            */
    141 #define TCP_OPT_SACK            UINT_C(5)       /* 選択 ACK                   */
    142 #define TCP_OPT_TIMESTAMP       UINT_C(8)       /* タイムスタンプ                */
    143 #define TCP_OPT_CC              UINT_C(11)      /* 接続カウント                   */
    144 #define TCP_OPT_CCNEW           UINT_C(12)      /* 接続カウント                   */
    145 #define TCP_OPT_CCECHO          UINT_C(13)      /* 接続カウント                   */
     120#define TCP_OPT_EOL             UINT_C(0)       /* 最終                           */
     121#define TCP_OPT_NOP             UINT_C(1)       /* 何もしない                        */
     122#define TCP_OPT_MAXSEG          UINT_C(2)       /* 最大セグメント長             */
     123#define TCP_OPT_WINDOW          UINT_C(3)       /* ウィンドスケーリング           */
     124#define TCP_OPT_SACK_PERM       UINT_C(4)       /* 選択 ACK 許可            */
     125#define TCP_OPT_SACK            UINT_C(5)       /* 選択 ACK                       */
     126#define TCP_OPT_TIMESTAMP       UINT_C(8)       /* タイムスタンプ              */
     127#define TCP_OPT_CC              UINT_C(11)      /* 接続カウント                       */
     128#define TCP_OPT_CCNEW           UINT_C(12)      /* 接続カウント                       */
     129#define TCP_OPT_CCECHO          UINT_C(13)      /* 接続カウント                       */
    146130
    147 /* オプションの長さ */
     131/* オプションの長さ */
    148132
    149 #define TCP_OPT_LEN_MAXSEG      4               /* 最大セグメント長             */
    150 #define TCP_OPT_LEN_WINDOW      3               /* ウィンドスケーリング               */
    151 #define TCP_OPT_LEN_SACK_PERM   4               /* 選択 ACK 許可            */
    152 #define TCP_OPT_LEN_SACK        5               /* 選択 ACK                   */
    153 #define TCP_OPT_LEN_TIMESTAMP   10              /* タイムスタンプ                */
    154 #define TCP_OPT_LEN_CC          6               /* 接続カウント                   */
    155 #define TCP_OPT_LEN_CCNEW       6               /* 接続カウント                   */
    156 #define TCP_OPT_LEN_CCECHO      6               /* 接続カウント                   */
     133#define TCP_OPT_LEN_MAXSEG      4               /* 最大セグメント長             */
     134#define TCP_OPT_LEN_WINDOW      3               /* ウィンドスケーリング           */
     135#define TCP_OPT_LEN_SACK_PERM   4               /* 選択 ACK 許可            */
     136#define TCP_OPT_LEN_SACK        5               /* 選択 ACK                       */
     137#define TCP_OPT_LEN_TIMESTAMP   10              /* タイムスタンプ              */
     138#define TCP_OPT_LEN_CC          6               /* 接続カウント                       */
     139#define TCP_OPT_LEN_CCNEW       6               /* 接続カウント                       */
     140#define TCP_OPT_LEN_CCECHO      6               /* 接続カウント                       */
    157141
    158142/*
    159  *  TCP 最大セグメントサイズ
     143 *  TCP 最大セグメントサイズ
    160144 */
    161145
    162146/*
    163  *  IPv4 の TCP 最大セグメントサイズ
    164  *  IP4_MSS は 576 で、標準の IPv4 ヘッダ長 (20) と
    165  *  TCP ヘッダ長 (20) を引いた値 536 であるが、512 を標準とする。
     147 *  IPv4 の TCP 最大セグメントサイズ
     148 *  IP4_MSS は 576 で、標準の IPv4 ヘッダ長 (20) と
     149 *  TCP ヘッダ長 (20) を引いた値 536 であるが、512 を標準とする。
    166150 */
    167151
     
    169153
    170154/*
    171  *  IPv6 の TCP 最大セグメントサイズ
    172  *  IPV6_MMTU は 1280 で、標準の IPv6 ヘッダ長 (40) と
    173  *  TCP ヘッダ長 (20) を引いた値 1220 であるが、1024 を標準とする。
     155 *  IPv6 の TCP 最大セグメントサイズ
     156 *  IPV6_MMTU は 1280 で、標準の IPv6 ヘッダ長 (40) と
     157 *  TCP ヘッダ長 (20) を引いた値 1220 であるが、1024 を標準とする。
    174158 */
    175159
     
    177161
    178162/*
    179  *  TCP 最小セグメントサイズ
     163 *  TCP 最小セグメントサイズ
    180164 *
    181  *  256(最小リンク MTU)- 40 = 216
     165 *  256(最小リンク MTU)- 40 = 216
    182166 */
    183167
     
    185169
    186170/*
    187  *  TCP 最大ウィンドウサイズ
     171 *  TCP 最大ウィンドウサイズ
    188172 */
    189173
  • EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/tcp_fsm.h

    • Property svn:keywords deleted
    • Property svn:mime-type changed from text/x-chdr to text/x-chdr;charset=UTF-8
    r270 r321  
    55 *                   Tomakomai National College of Technology, JAPAN
    66 *
    7  *  上記著作権è€
    8 ã¯ï¼Œä»¥ä¸‹ã® (1)~(4) の条件か,Free Software Foundation
    9  *  によってå
    10 ¬è¡¨ã•ã‚Œã¦ã„ã‚‹ GNU General Public License の Version 2 に記
    11  *  述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
    12  *  を改変したものを含む.以下同じ)を使用・複製・改変・再é
    13 å¸ƒï¼ˆä»¥ä¸‹ï¼Œ
    14  *  利用と呼ぶ)することを無償で許諾する.
    15  *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
    16  *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
    17  *      スコード中に含まれていること.
    18  *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
    19  *      用できる形で再é
    20 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é
    21 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
    22  *      è€
    23 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—作権表示,この利用条件および下記
    24  *      の無保証規定を掲載すること.
    25  *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
    26  *      用できない形で再é
    27 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®æ¡ä»¶ã‚’満たすこと.
    28  *    (a) 再é
    29 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€
    30 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—
    31  *        作権表示,この利用条件および下記の無保証規定を掲載すること.
    32  *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
    33  *      害からも,上記著作権è€
    34 ãŠã‚ˆã³TOPPERSプロジェクトをå
    35 è²¬ã™ã‚‹ã“と.
     7 *  上記著作権者は,以下の (1)~(4) の条件か,Free Software Foundation
     8 *  によって公表されている GNU General Public License の Version 2 に記
     9 *  述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
     10 *  を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下,
     11 *  利用と呼ぶ)することを無償で許諾する.
     12 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     13 *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     14 *      スコード中に含まれていること.
     15 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     16 *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     17 *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     18 *      の無保証規定を掲載すること.
     19 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     20 *      用できない形で再配布する場合には,次の条件を満たすこと.
     21 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     22 *        作権表示,この利用条件および下記の無保証規定を掲載すること.
     23 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     24 *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
    3625 *
    37  *  本ソフトウェアは,無保証で提供されているものである.上記著作権è€
    38 ãŠ
    39  *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
    40  *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
    41  *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
     26 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     27 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
     28 *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
     29 *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
    4230 *
    4331 *  @(#) $Id$
     
    8472
    8573/*
    86  *  TCP FSM 状æ
    87 ‹ã®å®šç¾©ã€RFC 793 参ç
    88 §
     74 *  TCP FSM 状態の定義、RFC 793 参照
    8975 */
    9076
    91 #define TCP_FSM_CLOSED          0       /* クローズ                         */
    92 #define TCP_FSM_LISTEN          1       /* 受動オープン                           */
    93 #define TCP_FSM_SYN_SENT        2       /* 能動オープン、SYN 送信済み                */
    94 #define TCP_FSM_SYN_RECVD       3       /* 受動オープン、SYN 受信済み                */
    95 #define TCP_FSM_ESTABLISHED     4       /* コネクション開設完了                       */
    96 #define TCP_FSM_CLOSE_WAIT      5       /* 相手から FIN 受信、APP の終了å¾
    97 ã¡     */
    98 #define TCP_FSM_FIN_WAIT_1      6       /* APP が終了、FIN 送信済み、ACK å¾
    99 ã¡     */
    100 #define TCP_FSM_CLOSING         7       /* 同時クローズ、FIN 交換済み、ACK å¾
    101 ã¡     */
    102 #define TCP_FSM_LAST_ACK        8       /* APP が終了、ACK å¾
    103 ã¡                     */
    104 #define TCP_FSM_FIN_WAIT_2      9       /* 相手からの FIN å¾
    105 ã¡                     */
    106 #define TCP_FSM_TIME_WAIT       10      /* 相手からの FIN 受信済み、時間å¾
    107 ã¡     */
     77#define TCP_FSM_CLOSED          0       /* クローズ                         */
     78#define TCP_FSM_LISTEN          1       /* 受動オープン                               */
     79#define TCP_FSM_SYN_SENT        2       /* 能動オープン、SYN 送信済み              */
     80#define TCP_FSM_SYN_RECVD       3       /* 受動オープン、SYN 受信済み              */
     81#define TCP_FSM_ESTABLISHED     4       /* コネクション開設完了                   */
     82#define TCP_FSM_CLOSE_WAIT      5       /* 相手から FIN 受信、APP の終了待ち        */
     83#define TCP_FSM_FIN_WAIT_1      6       /* APP が終了、FIN 送信済み、ACK 待ち      */
     84#define TCP_FSM_CLOSING         7       /* 同時クローズ、FIN 交換済み、ACK 待ち       */
     85#define TCP_FSM_LAST_ACK        8       /* APP が終了、ACK 待ち                       */
     86#define TCP_FSM_FIN_WAIT_2      9       /* 相手からの FIN 待ち                 */
     87#define TCP_FSM_TIME_WAIT       10      /* 相手からの FIN 受信済み、時間待ち  */
    10888
    10989/*
    110  *  関数シミュレーションマクロ
     90 *  関数シミュレーションマクロ
    11191 */
    11292
  • EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/tcp_input.c

    • Property svn:keywords deleted
    • Property svn:mime-type changed from text/x-csrc to text/x-csrc;charset=UTF-8
    r270 r321  
    55 *                   Tomakomai National College of Technology, JAPAN
    66 *
    7  *  上記著作権è€
    8 ã¯ï¼Œä»¥ä¸‹ã® (1)~(4) の条件か,Free Software Foundation
    9  *  によってå
    10 ¬è¡¨ã•ã‚Œã¦ã„ã‚‹ GNU General Public License の Version 2 に記
    11  *  述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
    12  *  を改変したものを含む.以下同じ)を使用・複製・改変・再é
    13 å¸ƒï¼ˆä»¥ä¸‹ï¼Œ
    14  *  利用と呼ぶ)することを無償で許諾する.
    15  *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
    16  *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
    17  *      スコード中に含まれていること.
    18  *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
    19  *      用できる形で再é
    20 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é
    21 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
    22  *      è€
    23 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—作権表示,この利用条件および下記
    24  *      の無保証規定を掲載すること.
    25  *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
    26  *      用できない形で再é
    27 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®æ¡ä»¶ã‚’満たすこと.
    28  *    (a) 再é
    29 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€
    30 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—
    31  *        作権表示,この利用条件および下記の無保証規定を掲載すること.
    32  *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
    33  *      害からも,上記著作権è€
    34 ãŠã‚ˆã³TOPPERSプロジェクトをå
    35 è²¬ã™ã‚‹ã“と.
     7 *  上記著作権者は,以下の (1)~(4) の条件か,Free Software Foundation
     8 *  によって公表されている GNU General Public License の Version 2 に記
     9 *  述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
     10 *  を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下,
     11 *  利用と呼ぶ)することを無償で許諾する.
     12 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     13 *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     14 *      スコード中に含まれていること.
     15 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     16 *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     17 *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     18 *      の無保証規定を掲載すること.
     19 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     20 *      用できない形で再配布する場合には,次の条件を満たすこと.
     21 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     22 *        作権表示,この利用条件および下記の無保証規定を掲載すること.
     23 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     24 *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
    3625 *
    37  *  本ソフトウェアは,無保証で提供されているものである.上記著作権è€
    38 ãŠ
    39  *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
    40  *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
    41  *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
     26 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     27 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
     28 *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
     29 *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
    4230 *
    4331 *  @(#) $Id$
     
    132120
    133121/*
    134  *  戻り値
     122 *  戻り値
    135123 *
    136  *      RET_OK          正常
    137  *      RET_DROP        エラー、セグメントを破棄する。
    138  *      RET_RST_DROP    エラー、RST を送信し、セグメントを破棄する。
     124 *      RET_OK          正常
     125 *      RET_DROP        エラー、セグメントを破棄する。
     126 *      RET_RST_DROP    エラー、RST を送信し、セグメントを破棄する。
    139127 */
    140128
     
    146134
    147135/*
    148  *  関数
     136 *  関数
    149137 */
    150138
     
    165153
    166154/*
    167  *  タスクからの Time Wait 状æ
    168 ‹ CEP 分離機能
    169  */
    170 
    171 /*
    172  *  関数
     155 *  タスクからの Time Wait 状態 CEP 分離機能
     156 */
     157
     158/*
     159 *  関数
    173160 */
    174161
     
    177164
    178165/*
    179  *  変数
     166 *  変数
    180167 */
    181168
     
    183170
    184171/*
    185  *  tcp_find_twcep -- ポート番号から Time Wait 用 TCP 通信端点を得る。
     172 *  tcp_find_twcep -- ポート番号から Time Wait 用 TCP 通信端点を得る。
    186173 *
    187  *    注意: dstaddr は、ネットワークバイトオーダ
     174 *    注意: dstaddr は、ネットワークバイトオーダ
    188175 */
    189176
     
    194181       
    195182        /*
    196          *  状æ
    197 ‹ãŒ TIME WAIT で、
    198          *  IP アドレスとポート番号が一致する通信端点を探索する。
     183         *  状態が TIME WAIT で、
     184         *  IP アドレスとポート番号が一致する通信端点を探索する。
    199185         */
    200186        for (twcep = &tcp_twcep[NUM_TCP_TW_CEP_ENTRY]; twcep -- != tcp_twcep; ) {
     
    211197
    212198/*
    213  *  å¿
    214 è¦ãªæƒ
    215 å ±ã‚’ Time Wait 用 TCP 通信端点に移して、
    216  *  標準の TCP 通信端点を開放する。
     199 *  必要な情報を Time Wait 用 TCP 通信端点に移して、
     200 *  標準の TCP 通信端点を開放する。
    217201 */
    218202
     
    222206        T_TCP_TWCEP*    twcep;
    223207
    224         /* 空きの Time Wait 用 TCP 通信端点を探索する。*/
     208        /* 空きの Time Wait 用 TCP 通信端点を探索する。*/
    225209        for (twcep = &tcp_twcep[NUM_TCP_TW_CEP_ENTRY]; twcep -- != tcp_twcep; ) {
    226210                if (twcep->fsm_state != TCP_FSM_TIME_WAIT) {
    227211
    228212                        /*
    229                          *  通信端点をロックし、
    230                          *  å¿
    231 è¦ãªæƒ
    232 å ±ã‚’ Time Wait 用 TCP 通信端点に移す。
     213                         *  通信端点をロックし、
     214                         *  必要な情報を Time Wait 用 TCP 通信端点に移す。
    233215                         */
    234216                        syscall(wai_sem(cep->semid_lock));
     
    242224                        twcep->timer_2msl       = cep->timer[TCP_TIM_2MSL];
    243225
    244                         /* 通信端点をロックを解除する。*/
     226                        /* 通信端点をロックを解除する。*/
    245227                        syscall(sig_sem(cep->semid_lock));
    246228
    247                         /* 標準 TCP 通信端点を開放する。*/
     229                        /* 標準 TCP 通信端点を開放する。*/
    248230                        tcp_close(cep);
    249231
     
    256238
    257239/*
    258  *  parse_option -- TCP ヘッダのオプションを解析する。
     240 *  parse_option -- TCP ヘッダのオプションを解析する。
    259241 */
    260242
     
    311293
    312294/*
    313  *  set_rexmt_timer -- 新しい往復時間を収集し、再送タイマを更新する。
     295 *  set_rexmt_timer -- 新しい往復時間を収集し、再送タイマを更新する。
    314296 */
    315297
     
    322304        if (cep->srtt != 0) {
    323305                /*
    324                  *  srtt: 平滑化された RTT
     306                 *  srtt: 平滑化された RTT
    325307                 *
    326                  *  計測された RTT (rtt) と現在の平滑化された RTT (srtt) の差 (delta) を求める。
     308                 *  計測された RTT (rtt) と現在の平滑化された RTT (srtt) の差 (delta) を求める。
    327309                 *
    328                  *  delta は 2 ビット左シフト ( 4 倍) した値で保持する。
    329                  *  srtt  は 5 ビット左シフト (32 倍) した値で保持されている。
     310                 *  delta は 2 ビット左シフト ( 4 倍) した値で保持する。
     311                 *  srtt  は 5 ビット左シフト (32 倍) した値で保持されている。
    330312                 *
    331313                 *    delta = rtt / 8 - srtt / 8
    332314                 *
    333                  *  新しい srtt は
     315                 *  新しい srtt は
    334316                 *
    335317                 *    srtt = rtt / 8 + srtt * 7 / 8
    336318                 *         = srtt + (rtt / 8 - srtt / 8)
    337319                 *
    338                  *  で計算する。
    339                  *  このため、rtt を 2 ビット左シフトし、srtt を (5 - 2) ビット右シフトして delta を求める。
     320                 *  で計算する。
     321                 *  このため、rtt を 2 ビット左シフトし、srtt を (5 - 2) ビット右シフトして delta を求める。
    340322                 */
    341323                delta = ((rtt - 1) << TCP_DELTA_SHIFT) - (cep->srtt >> (TCP_SRTT_SHIFT - TCP_DELTA_SHIFT));
     
    345327
    346328                /*
    347                  *  delta の絶対値 | delta | を求める。
     329                 *  delta の絶対値 | delta | を求める。
    348330                 */
    349331                if (delta < 0)
     
    351333
    352334                /*
    353                  *  rttvar: 平滑化された分散
     335                 *  rttvar: 平滑化された分散
    354336                 *
    355                  *  rttvar は 4 ビット左シフト (16 倍) した値で保持されている。
     337                 *  rttvar は 4 ビット左シフト (16 倍) した値で保持されている。
    356338                 *
    357339                 *    delta = |delta| / 4 - rttvar / 4
    358340                 *
    359                  *  新しい rttvar は
     341                 *  新しい rttvar は
    360342                 *
    361343                 *    rttvar = |delta|/ 4 + rttvar * 3 /4
    362344                 *           = rttvar + (|delta| / 4 - rttvar / 4)
    363345                 *
    364                  *  で計算する。
     346                 *  で計算する。
    365347                 */
    366348                delta -= cep->rttvar >> (TCP_RTTVAR_SHIFT - TCP_DELTA_SHIFT);
     
    371353        else {
    372354                /*
    373                  *  まだ srtt の設定が行われていないときは、今回計測された RTT を使用する。
    374                  *  平滑化された RTT (srtt) には、RTT を 5 ビット左シフト (32倍) した値。
    375                  *  平滑化された分散 (rttvar) には、RTT の 1/2 を 4 ビット左シフト (16倍) した値。
     355                 *  まだ srtt の設定が行われていないときは、今回計測された RTT を使用する。
     356                 *  平滑化された RTT (srtt) には、RTT を 5 ビット左シフト (32倍) した値。
     357                 *  平滑化された分散 (rttvar) には、RTT の 1/2 を 4 ビット左シフト (16倍) した値。
    376358                 */
    377359                cep->srtt   = rtt <<  TCP_SRTT_SHIFT;
     
    380362
    381363        /*
    382          *  rtt の測定を終了し、再送回数をリセットする。
     364         *  rtt の測定を終了し、再送回数をリセットする。
    383365         */
    384366        cep->rtt = cep->rxtshift = 0;
    385367
    386368        /*
    387          *  RTT に許される最小値 と rtt + 2 の大きな値の方を再送タイムアウトの最小値にする。
     369         *  RTT に許される最小値 と rtt + 2 の大きな値の方を再送タイムアウトの最小値にする。
    388370         */
    389371        if (rtt + 2 < TCP_TVAL_MIN)
     
    398380
    399381/*
    400  *  reassemble -- 受信セグメントを再構成する。順番通りに受信したときの処理
     382 *  reassemble -- 受信セグメントを再構成する。順番通りに受信したときの処理
    401383 */
    402384
     
    410392        if (tcph->sum > cep->rbufsz - cep->rwbuf_count) {
    411393                /*
    412                  *  受信ウィンドバッファに空きがないときは破棄する。
     394                 *  受信ウィンドバッファに空きがないときは破棄する。
    413395                 */
    414396                NET_COUNT_TCP(net_count_tcp[NC_TCP_RECV_DROP_SEGS], 1);
     
    421403                 cep->fsm_state == TCP_FSM_ESTABLISHED) {
    422404                /*
    423                  *  順番通りにセグメントを受信した時の処理
    424                  *  受信セグメントの並べ替えは不要なので
    425                  *  そのまま受信ウィンドバッファに書き込む。
     405                 *  順番通りにセグメントを受信した時の処理
     406                 *  受信セグメントの並べ替えは不要なので
     407                 *  そのまま受信ウィンドバッファに書き込む。
    426408                 */
    427409
     
    438420                qhdr = GET_TCP_Q_HDR(input, thoff);
    439421
    440                 /*  TCP ヘッダの位置を保存する。*/
     422                /*  TCP ヘッダの位置を保存する。*/
    441423                GET_TCP_IP_Q_HDR(input)->thoff = thoff;
    442424
    443                 /* SDU のオフセット(å
    444 ƒã¯ã‚¦ã‚£ãƒ³ãƒ‰ã‚µã‚¤ã‚ºï¼‰ã‚’リセットする。*/
     425                /* SDU のオフセット(元はウィンドサイズ)をリセットする。*/
    445426                qhdr->soff = 0;
    446427
    447                 /* データを受信ウィンドバッファに書き込む。*/
     428                /* データを受信ウィンドバッファに書き込む。*/
    448429                TCP_WRITE_RWBUF(cep, input, thoff);
    449430                }
     
    456437
    457438/*
    458  *  listening -- 受動オープンして,状æ
    459 ‹ãŒ LISTEN の処理
     439 *  listening -- 受動オープンして,状態が LISTEN の処理
    460440 *
    461  *    戻り値:
    462  *      RET_OK          正常
    463  *      RET_DROP        エラー、セグメントを破棄する。
    464  *      RET_RST_DROP    エラー、RST を送信し、セグメントを破棄する。
     441 *    戻り値:
     442 *      RET_OK          正常
     443 *      RET_DROP        エラー、セグメントを破棄する。
     444 *      RET_RST_DROP    エラー、RST を送信し、セグメントを破棄する。
    465445 */
    466446
     
    475455
    476456        /*
    477          *  フラグに RST がセットされていれば破棄する。
     457         *  フラグに RST がセットされていれば破棄する。
    478458         */
    479459        if (tcph->flags & TCP_FLG_RST)
     
    481461
    482462        /* 
    483          *  フラグに ACK がセットさてれいれば、
    484          *  リセットを送って破棄する。
     463         *  フラグに ACK がセットさてれいれば、
     464         *  リセットを送って破棄する。
    485465         */
    486466        if (tcph->flags & TCP_FLG_ACK)
     
    488468
    489469        /*
    490          *  フラグに SYN がセットされていなければれば破棄する。
     470         *  フラグに SYN がセットされていなければれば破棄する。
    491471         */
    492472        if ((tcph->flags & TCP_FLG_SYN) == 0)
     
    498478
    499479        /*
    500          *  次のときは破棄する。
    501          *    ・ポート番号が同一で、送受信 IP アドレス が同一。
    502          *      ただし、ローカルループバック (127.0.0.1) なら良い。
    503          *    ・マルチキャストアドレス
     480         *  次のときは破棄する。
     481         *    ・ポート番号が同一で、送受信 IP アドレス が同一。
     482         *      ただし、ローカルループバック (127.0.0.1) なら良い。
     483         *    ・マルチキャストアドレス
    504484         */
    505485
     
    511491
    512492        /*
    513          *  次のときは破棄する。
    514          *    ・ポート番号が同一で、送受信 IP アドレス が同一。
    515          *    ・マルチキャストアドレス
     493         *  次のときは破棄する。
     494         *    ・ポート番号が同一で、送受信 IP アドレス が同一。
     495         *    ・マルチキャストアドレス
    516496         */
    517497
     
    526506
    527507        /*
    528          *  次のときは破棄する。
    529          *    ・ポート番号が同一で、送受信 IP アドレス が同一。
    530          *    ・マルチキャストアドレス
     508         *  次のときは破棄する。
     509         *    ・ポート番号が同一で、送受信 IP アドレス が同一。
     510         *    ・マルチキャストアドレス
    531511         */
    532512
     
    539519                return RET_DROP;
    540520
    541         /* 相手のアドレスを記録する。*/
     521        /* 相手のアドレスを記録する。*/
    542522        IN_COPY_TO_HOST(&cep->dstaddr.ipaddr, &iph->src);
    543523        cep->dstaddr.portno = tcph->sport;
    544524
    545         /* オプションを処理する。*/
     525        /* オプションを処理する。*/
    546526        parse_option(tcph, cep);
    547527
    548         /* シーケンス番号を初期化する。*/
     528        /* シーケンス番号を初期化する。*/
    549529        if (tcp_iss == 0)
    550530                tcp_init_iss();
    551531
    552         /* 自分のシーケンス番号の初期値を記録する。*/
     532        /* 自分のシーケンス番号の初期値を記録する。*/
    553533        if (iss != 0)
    554534                cep->iss = iss;
     
    558538        tcp_iss += TCP_ISS_INCR() / 4;
    559539
    560         /* 相手のシーケンス番号の初期値を記録する。*/
     540        /* 相手のシーケンス番号の初期値を記録する。*/
    561541        cep->irs = tcph->seq;
    562542
    563         /* 送受信シーケンス番号を初期化する。*/
     543        /* 送受信シーケンス番号を初期化する。*/
    564544        init_send_seq(cep);
    565545        init_receive_seq(cep);
    566546
    567         /* 送信ウインドサイズを設定する。*/
     547        /* 送信ウインドサイズを設定する。*/
    568548        cep->snd_wnd = tcph->win;
    569549
    570         /* 最終設定 */
     550        /* 最終設定 */
    571551        cep->flags    |= TCP_CEP_FLG_ACK_NOW;
    572552        cep->fsm_state = TCP_FSM_SYN_RECVD;
     
    577557
    578558/*
    579  *  syn_sent -- 能動オープンして、状æ
    580 ‹ãŒ SYN 送信済の処理
     559 *  syn_sent -- 能動オープンして、状態が SYN 送信済の処理
    581560 *
    582  *    戻り値:
    583  *      RET_OK          正常
    584  *      RET_DROP        エラー、セグメントを破棄する。
    585  *      RET_RST_DROP    エラー、RST を送信し、セグメントを破棄する。
     561 *    戻り値:
     562 *      RET_OK          正常
     563 *      RET_DROP        エラー、セグメントを破棄する。
     564 *      RET_RST_DROP    エラー、RST を送信し、セグメントを破棄する。
    586565 */
    587566
     
    592571
    593572        /*
    594          *  相手から受信確認が送られて来ても、
     573         *  相手から受信確認が送られて来ても、
    595574         *
    596          *    ACK <= iss && 送信した最大 SEQ (snd_max) < ACK
     575         *    ACK <= iss && 送信した最大 SEQ (snd_max) < ACK
    597576         *
    598          *  なら、リセットを送ってセグメントを破棄する。
     577         *  なら、リセットを送ってセグメントを破棄する。
    599578         */
    600579        if ((tcph->flags & TCP_FLG_ACK) &&
     
    603582
    604583        /*
    605          *  RST/ACK フラグの応答があれば、ポートが開いていない
    606          *  ことを意味している。
     584         *  RST/ACK フラグの応答があれば、ポートが開いていない
     585         *  ことを意味している。
    607586         */
    608587        if (tcph->flags & TCP_FLG_RST) {
     
    615594
    616595        /*
    617          *  SYN フラグがなければセグメントを破棄する。
     596         *  SYN フラグがなければセグメントを破棄する。
    618597         */
    619598        if ((tcph->flags & TCP_FLG_SYN) == 0)
    620599                return RET_DROP;
    621600
    622         cep->snd_wnd = tcph->win;       /* snd_wnd: 相手の受信可能ウィンドサイズ  */
    623         cep->irs     = tcph->seq;       /* irs:     ç›¸æ‰‹ã®ã‚·ãƒ¼ã‚±ãƒ³ã‚¹ç•ªå·ã®åˆæœŸå€¤  */
    624         init_receive_seq(cep);          /* 送受信シーケンス番号を初期化する。          */
     601        cep->snd_wnd = tcph->win;       /* snd_wnd: 相手の受信可能ウィンドサイズ      */
     602        cep->irs     = tcph->seq;       /* irs:     相手のシーケンス番号の初期値      */
     603        init_receive_seq(cep);          /* 送受信シーケンス番号を初期化する。            */
    625604
    626605        if (tcph->flags & TCP_FLG_ACK) {
    627606                /*
    628                  *  ACK フラグがあるときの処理
     607                 *  ACK フラグがあるときの処理
    629608                 *
    630                  *  受信を期å¾
    631 ã—ている最大の SEQ (rcv_adv) を
    632                  *  受信可能なウィンドサイズ (rcv_wnd) 分進める。
    633                  */
    634                 cep->rcv_adv += cep->rcv_wnd;   /* rcv_adv: 受信を期å¾
    635 ã—ている最大の SEQ       */
    636                                                 /* rcv_wnd: 受信可能なウィンドサイズ                */
    637 
    638                 /* 未確認の最小送信 SEQ (snd_una) を SYN 分 (1 オクテット) 進める。*/
     609                 *  受信を期待している最大の SEQ (rcv_adv) を
     610                 *  受信可能なウィンドサイズ (rcv_wnd) 分進める。
     611                 */
     612                cep->rcv_adv += cep->rcv_wnd;   /* rcv_adv: 受信を期待している最大の SEQ    */
     613                                                /* rcv_wnd: 受信可能なウィンドサイズ                */
     614
     615                /* 未確認の最小送信 SEQ (snd_una) を SYN 分 (1 オクテット) 進める。*/
    639616                cep->snd_una ++;
    640617
    641618#ifdef TCP_CFG_DELAY_ACK
    642619
    643                 if (tcph->sum != 0)             /* tcph->sum は SDU 長 */
     620                if (tcph->sum != 0)             /* tcph->sum は SDU 長 */
    644621                        cep->flags |= TCP_CEP_FLG_DEL_ACK;
    645622                else
     
    654631                if (cep->flags & TCP_CEP_FLG_NEED_FIN) {
    655632                        /*
    656                          *  CEP で FIN 送信が要求されていれば、
    657                          *  切断処理を開始し、
    658                          *  CEP の状æ
    659 ‹ã‚’ FIN Wait 1 にする。
     633                         *  CEP で FIN 送信が要求されていれば、
     634                         *  切断処理を開始し、
     635                         *  CEP の状態を FIN Wait 1 にする。
    660636                         */
    661637                        cep->fsm_state = TCP_FSM_FIN_WAIT_1;
     
    665641                else {
    666642                        /*
    667                          *  相手から ACK が応答されたので、
    668                          *  CEP の状æ
    669 ‹ã‚’ コネクション開設完了状æ
    670 ‹ã«ã™ã‚‹ã€‚
     643                         *  相手から ACK が応答されたので、
     644                         *  CEP の状態を コネクション開設完了状態にする。
    671645                         */
    672646                        cep->timer[TCP_TIM_KEEP] = TCP_TVAL_KEEP_IDLE;
     
    679653                        if (cep->snd_nblk_tfn == TFN_TCP_CON_CEP) {
    680654
    681                                 /* 相手のアドレスをコピーする。*/
     655                                /* 相手のアドレスをコピーする。*/
    682656                                *cep->p_dstaddr = cep->dstaddr;
    683657
     
    715689                }
    716690        else {
    717                 /* ACK フラグがないときは、ACK を送って、CEP の状æ
    718 ‹ã‚’ SYN 受信済みにする。*/
     691                /* ACK フラグがないときは、ACK を送って、CEP の状態を SYN 受信済みにする。*/
    719692                cep->flags |= TCP_CEP_FLG_ACK_NOW;
    720693                cep->timer[TCP_TIM_REXMT] = 0;
     
    726699
    727700/*
    728  *  trim_length -- 受信した SDU 長を調整する。
     701 *  trim_length -- 受信した SDU 長を調整する。
    729702 */
    730703
     
    733706{
    734707        tcph->seq ++;
    735         if (tcph->sum > cep->rcv_wnd) {         /* 注意: tcph->sum は SDU 長 */
    736                 /*
    737                  *  SDU 長が受信ウィンドサイズより大きいときは、受信ウィンドサイズ以降は
    738                  *  破棄し、FIN に応答しないことで、破棄したデータを再送させる。
     708        if (tcph->sum > cep->rcv_wnd) {         /* 注意: tcph->sum は SDU 長 */
     709                /*
     710                 *  SDU 長が受信ウィンドサイズより大きいときは、受信ウィンドサイズ以降は
     711                 *  破棄し、FIN に応答しないことで、破棄したデータを再送させる。
    739712                 */
    740713                tcph->sum    = (uint16_t)cep->rcv_wnd;
    741714                tcph->flags &= ~TCP_FLG_FIN;
    742715                }
    743         cep->snd_wl1 = tcph->seq - 1;           /* cep->snd_wl1: ウィンド更新 SEQ 番号  */
     716        cep->snd_wl1 = tcph->seq - 1;           /* cep->snd_wl1: ウィンド更新 SEQ 番号  */
    744717
    745718#ifdef TCP_CFG_EXTENTIONS
    746         cep->rcv_up  = tcph->seq;               /* cep->rcv_up : 受信した緊急ポインタ */
     719        cep->rcv_up  = tcph->seq;               /* cep->rcv_up : 受信した緊急ポインタ     */
    747720#endif
    748721        }
    749722
    750723/*
    751  *  proc_ack2 -- ACK の処理 (2)
     724 *  proc_ack2 -- ACK の処理 (2)
    752725 *
    753  *    戻り値
     726 *    戻り値
    754727 *
    755  *      RET_OK          正常
    756  *      RET_RETURN      正常、リターンする。
    757  *      RET_DROP        エラー、セグメントを破棄する。
    758  *      RET_RST_DROP    エラー、RST を送信し、セグメントを破棄する。
     728 *      RET_OK          正常
     729 *      RET_RETURN      正常、リターンする。
     730 *      RET_DROP        エラー、セグメントを破棄する。
     731 *      RET_RST_DROP    エラー、RST を送信し、セグメントを破棄する。
    759732 */
    760733
     
    770743
    771744        /*
    772          *  相手に受信確認された ACK から、まだ確認されていない
    773          *  最小送信 SEQ (snd_una) を引くと、送信ウィンドバッファから
    774          *  削除してよいオクテット数 (acked) になる。
     745         *  相手に受信確認された ACK から、まだ確認されていない
     746         *  最小送信 SEQ (snd_una) を引くと、送信ウィンドバッファから
     747         *  削除してよいオクテット数 (acked) になる。
    775748         */
    776749        acked = tcph->ack - cep->snd_una;
     
    778751
    779752        /*
    780          *  往復時間計測 (rtt) が設定されていて、計測開始 SEQ より
    781          *  後の ACK を受信したら、タイマバックオフをキャンセルし、
    782          *  再送タイマを再設定する。
     753         *  往復時間計測 (rtt) が設定されていて、計測開始 SEQ より
     754         *  後の ACK を受信したら、タイマバックオフをキャンセルし、
     755         *  再送タイマを再設定する。
    783756         */
    784757        if (cep->rtt && SEQ_GT(tcph->ack, cep->rtseq)) {
     
    787760
    788761        /*
    789          *  å
    790 ¨ã¦ã®æœªç¢ºèªãƒ‡ãƒ¼ã‚¿ãŒ ACK されたら、再送タイマを停止し、
    791          *  再開を記憶する (さらに出力か持続)。
    792          *  もし、ACK すべき、さらに多くのデータがあるなら、再送タイマに
    793          *  現在の再送タイムアウトを設定する。
    794          */
    795         if (tcph->ack == cep->snd_max) {        /* cep->snd_max: 送信した最大 SEQ */
     762         *  全ての未確認データが ACK されたら、再送タイマを停止し、
     763         *  再開を記憶する (さらに出力か持続)。
     764         *  もし、ACK すべき、さらに多くのデータがあるなら、再送タイマに
     765         *  現在の再送タイムアウトを設定する。
     766         */
     767        if (tcph->ack == cep->snd_max) {        /* cep->snd_max: 送信した最大 SEQ */
    796768
    797769#ifdef TCP_CFG_SWBUF_CSAVE
    798770
    799771                /*
    800                  * 送信ウィンドバッファの省コピー機能が有効の場合は、
    801                  * 送信済みで、ACKが完了するまで再送タイマを変更しない。
     772                 * 送信ウィンドバッファの省コピー機能が有効の場合は、
     773                 * 送信済みで、ACKが完了するまで再送タイマを変更しない。
    802774                 */
    803775                if ((cep->flags & TCP_CEP_FLG_WBCS_MASK) == TCP_CEP_FLG_WBCS_ACKED)
     
    813785                }
    814786        else if (cep->timer[TCP_TIM_PERSIST] == 0) {
    815                 cep->timer[TCP_TIM_REXMT] = cep->rxtcur;        /* cep->rxtcur: 現在の再送タイムアウト */
    816                 }
    817 
    818         /* 相手が受信確認したデータがあるときの処理 */
     787                cep->timer[TCP_TIM_REXMT] = cep->rxtcur;        /* cep->rxtcur: 現在の再送タイムアウト */
     788                }
     789
     790        /* 相手が受信確認したデータがあるときの処理 */
    819791        if (acked) {
    820                 uint32_t cw   = cep->snd_cwnd;  /* cep->snd_cwnd: 輻輳ウィンドサイズ   */
    821                 uint32_t incr = cep->maxseg;            /* cep->maxseg:   æœ€å¤§ã‚»ã‚°ãƒ¡ãƒ³ãƒˆã‚µã‚¤ã‚º        */
    822 
    823                 /*
    824                  *  新たに相手が受信確認したデータがあったときは、
    825                  *  輻輳ウィンドサイズを大きくする。
    826                  *  輻輳ウィンドサイズ (snd_cwnd) が
    827                  *  輻輳ウィンドサイズのしきい値 (snd_ssthresh) より大きいときは
    828                  *  輻輳回避制御を行い。
     792                uint32_t cw   = cep->snd_cwnd;  /* cep->snd_cwnd: 輻輳ウィンドサイズ     */
     793                uint32_t incr = cep->maxseg;            /* cep->maxseg:   最大セグメントサイズ    */
     794
     795                /*
     796                 *  新たに相手が受信確認したデータがあったときは、
     797                 *  輻輳ウィンドサイズを大きくする。
     798                 *  輻輳ウィンドサイズ (snd_cwnd) が
     799                 *  輻輳ウィンドサイズのしきい値 (snd_ssthresh) より大きいときは
     800                 *  輻輳回避制御を行い。
    829801                 *
    830802                 *    snd_cwnd = snd_cwnd + maxseg * maxseg / snd_cwnd;
    831803                 *
    832                  *  等しいか小さいときは、スロースタート制御を行う。
     804                 *  等しいか小さいときは、スロースタート制御を行う。
    833805                 *
    834806                 *    snd_cwnd = snd_cwnd + maxseg
     
    836808                 */
    837809                if (cw > cep->snd_ssthresh)
    838                         /* 輻輳回避制御 */
     810                        /* 輻輳回避制御 */
    839811                        incr = incr * incr / cw;
    840812
     
    845817
    846818                /*
    847                  *  送信ウィンドバッファから、相手が受信確認したデータ数 (acked) のデータを削除する。
     819                 *  送信ウィンドバッファから、相手が受信確認したデータ数 (acked) のデータを削除する。
    848820                 */
    849821                if (acked > cep->swbuf_count) {
     
    858830                        }
    859831
    860                 /* 送信ウィンドバッファに空きができたことを知らせる。*/
     832                /* 送信ウィンドバッファに空きができたことを知らせる。*/
    861833                syscall(set_flg(cep->snd_flgid, TCP_CEP_EVT_SWBUF_READY));
    862834
    863835                /*
    864                  *  送達確認されていない最小送信 SEQ (snd_una) を
    865                  *  今回送達確認された ACK まで進め、
    866                  *  次の送信データの SEQ (snd_nxt) も、新しい
    867                  *  送達確認されていない最小送信 SEQ (snd_una)
    868                  *  まで進める。
     836                 *  送達確認されていない最小送信 SEQ (snd_una) を
     837                 *  今回送達確認された ACK まで進め、
     838                 *  次の送信データの SEQ (snd_nxt) も、新しい
     839                 *  送達確認されていない最小送信 SEQ (snd_una)
     840                 *  まで進める。
    869841                 */
    870842                cep->snd_una += acked;
     
    873845
    874846                /*
    875                  *  状æ
    876 ‹ã«ã‚ˆã‚Šåˆ†å²
     847                 *  状態により分岐
    877848                 */
    878849                switch (cep->fsm_state) {
    879                 case TCP_FSM_FIN_WAIT_1:        /* APP が終了、FIN 送信済み、ACK å¾
    880 ã¡ */
     850                case TCP_FSM_FIN_WAIT_1:        /* APP が終了、FIN 送信済み、ACK 待ち */
    881851                        if (ourfinisacked) {
    882852                                cep->fsm_state = TCP_FSM_FIN_WAIT_2;
     
    884854                                }
    885855                        break;
    886                 case TCP_FSM_CLOSING:           /* 同時クローズ、FIN 交換済み、ACK å¾
    887 ã¡ */
     856                case TCP_FSM_CLOSING:           /* 同時クローズ、FIN 交換済み、ACK 待ち */
    888857                        if (ourfinisacked) {
    889858                                /*
    890                                  *  送信した FIN が確認されていれば状æ
    891 ‹ã‚’変更し、
    892                                  *  すべてのタイマをリセットした後、2MSL タイマを設定する。
     859                                 *  送信した FIN が確認されていれば状態を変更し、
     860                                 *  すべてのタイマをリセットした後、2MSL タイマを設定する。
    893861                                 */
    894862                                cep->fsm_state = TCP_FSM_TIME_WAIT;
     
    897865                                }
    898866                        break;
    899                 case TCP_FSM_LAST_ACK:          /* APP が終了、ACK å¾
    900 ã¡ */
     867                case TCP_FSM_LAST_ACK:          /* APP が終了、ACK 待ち */
    901868                        if (ourfinisacked) {
    902869                                /*
    903                                  *  送信した FIN が確認されていれば、cep をクローズし、
    904                                  *  セグメントを破棄する。
     870                                 *  送信した FIN が確認されていれば、cep をクローズし、
     871                                 *  セグメントを破棄する。
    905872                                 */
    906873                                cep = tcp_close(cep);
     
    908875                                }
    909876                        break;
    910                 case TCP_FSM_TIME_WAIT:         /* 相手からの FIN 受信済み、時間å¾
    911 ã¡ */
     877                case TCP_FSM_TIME_WAIT:         /* 相手からの FIN 受信済み、時間待ち */
    912878                        /*
    913                          *  相手から FIN が再送された。もう一度2MSL タイマを設定し、
    914                          *  ACK 送信後、セグメントを破棄する。
     879                         *  相手から FIN が再送された。もう一度2MSL タイマを設定し、
     880                         *  ACK 送信後、セグメントを破棄する。
    915881                         */
    916882                        cep->timer[TCP_TIM_2MSL] = 2 * TCP_TVAL_MSL;
     
    923889
    924890/*
    925  *  proc_ack1 -- ACK の処理 (1)
     891 *  proc_ack1 -- ACK の処理 (1)
    926892 *
    927  *    戻り値:
    928  *      RET_OK          正常
    929  *      RET_RETURN      正常、リターンする。
    930  *      RET_DROP        エラー、セグメントを破棄する。
    931  *      RET_RST_DROP    エラー、RST を送信し、セグメントを破棄する。
     893 *    戻り値:
     894 *      RET_OK          正常
     895 *      RET_RETURN      正常、リターンする。
     896 *      RET_DROP        エラー、セグメントを破棄する。
     897 *      RET_RST_DROP    エラー、RST を送信し、セグメントを破棄する。
    932898 *
    933899 */
     
    939905
    940906        switch (cep->fsm_state) {
    941         case TCP_FSM_SYN_RECVD:         /* SYN を受信し、SYN 送信済み  */
    942 
    943                 /* 状æ
    944 ‹ã‚’変更する。*/
     907        case TCP_FSM_SYN_RECVD:         /* SYN を受信し、SYN 送信済み    */
     908
     909                /* 状態を変更する。*/
    945910                if (cep->flags & TCP_CEP_FLG_NEED_FIN) {
    946911                        cep->fsm_state  = TCP_FSM_FIN_WAIT_1;
     
    951916                        cep->fsm_state  = TCP_FSM_ESTABLISHED;
    952917
    953                         /* TCP 通信端点からTCP 受付口を解放する。*/
     918                        /* TCP 通信端点からTCP 受付口を解放する。*/
    954919                        cep->rep = NULL;
    955920
     
    960925                        if (cep->rcv_nblk_tfn == TFN_TCP_ACP_CEP) {
    961926
    962                                 /* 相手のアドレスをコピーする。*/
     927                                /* 相手のアドレスをコピーする。*/
    963928                                *cep->p_dstaddr = cep->dstaddr;
    964929
     
    996961                        if (cep->snd_nblk_tfn == TFN_TCP_CON_CEP) {
    997962
    998                                 /* 相手のアドレスをコピーする。*/
     963                                /* 相手のアドレスをコピーする。*/
    999964                                *cep->p_dstaddr = cep->dstaddr;
    1000965
     
    10441009
    10451010                /*
    1046                  *  SDU がなく FIN がついていなければ、tcp_move_ra2rw() を呼出す。
    1047                  */
    1048                 if (tcph->sum == 0 && (tcph->flags & TCP_FLG_FIN) == 0)         /* tcph->sum は SDU 長 */
     1011                 *  SDU がなく FIN がついていなければ、tcp_move_ra2rw() を呼出す。
     1012                 */
     1013                if (tcph->sum == 0 && (tcph->flags & TCP_FLG_FIN) == 0)         /* tcph->sum は SDU 長 */
    10491014                        tcph->flags = tcp_move_ra2rw(cep, tcph->flags);
    10501015               
    1051                 cep->snd_wl1 = tcph->seq - 1;   /* snd_wl1: ウィンド更新 SEQ */
    1052 
    1053                 /* break; 下に落ちる。*/
     1016                cep->snd_wl1 = tcph->seq - 1;   /* snd_wl1: ウィンド更新 SEQ */
     1017
     1018                /* break; 下に落ちる。*/
    10541019       
    1055         case TCP_FSM_ESTABLISHED:       /* コネクション開設完了               */
    1056         case TCP_FSM_FIN_WAIT_1:        /* 終了して、FIN 送信済み              */
    1057         case TCP_FSM_FIN_WAIT_2:        /* 終了、FIN 伝達確認受信、FINå¾
    1058 ã¡*/
    1059         case TCP_FSM_CLOSE_WAIT:        /* FIN 受信、クローズå¾
    1060 ã¡             */
    1061         case TCP_FSM_CLOSING:           /* 終了、FIN 交換済み、ACK å¾
    1062 ã¡     */
    1063         case TCP_FSM_LAST_ACK:          /* FIN 受信、終了、ACK å¾
    1064 ã¡     */
    1065         case TCP_FSM_TIME_WAIT:         /* 終了、時間å¾
    1066 ã¡             */
     1020        case TCP_FSM_ESTABLISHED:       /* コネクション開設完了           */
     1021        case TCP_FSM_FIN_WAIT_1:        /* 終了して、FIN 送信済み                */
     1022        case TCP_FSM_FIN_WAIT_2:        /* 終了、FIN 伝達確認受信、FIN待ち*/
     1023        case TCP_FSM_CLOSE_WAIT:        /* FIN 受信、クローズ待ち                */
     1024        case TCP_FSM_CLOSING:           /* 終了、FIN 交換済み、ACK 待ち   */
     1025        case TCP_FSM_LAST_ACK:          /* FIN 受信、終了、ACK 待ち     */
     1026        case TCP_FSM_TIME_WAIT:         /* 終了、時間待ち              */
    10671027
    10681028                if (SEQ_LE(tcph->ack, cep->snd_una)) {
    10691029
    10701030                        /*
    1071                          *  受信確認 ACK が 未確認の最小送信 SEQ (snd_una) と同じか以前のときの処理
    1072                          *  つまり、多重に ACK を受信したことを意味している。
     1031                         *  受信確認 ACK が 未確認の最小送信 SEQ (snd_una) と同じか以前のときの処理
     1032                         *  つまり、多重に ACK を受信したことを意味している。
    10731033                         */
    10741034
    1075                         if (tcph->sum == 0 && tcph->win == cep->snd_wnd) {      /* tcph->sum は SDU 長 */
     1035                        if (tcph->sum == 0 && tcph->win == cep->snd_wnd) {      /* tcph->sum は SDU 長 */
    10761036
    10771037                                /*
    1078                                  *  SDU がなく、相手のウィンドサイズが変更されていなければ、
    1079                                  *  すでに送信したセグメントの中で、ACK (tcph->ack) と
    1080                                  *  同じ SEQ から始まるセグメントが、途中で消失した可能性がある。
    1081                                  *  この場合は、高速再転送と高速リカバリを行う。
     1038                                 *  SDU がなく、相手のウィンドサイズが変更されていなければ、
     1039                                 *  すでに送信したセグメントの中で、ACK (tcph->ack) と
     1040                                 *  同じ SEQ から始まるセグメントが、途中で消失した可能性がある。
     1041                                 *  この場合は、高速再転送と高速リカバリを行う。
    10821042                                 */
    10831043                                NET_COUNT_TCP(net_count_tcp[NC_TCP_RECV_DUP_ACKS], 1);
     
    10861046
    10871047                                        /*
    1088                                          *  再送タイマがセットされていないとき、
    1089                                          *  または、ACK (tcph->ack) と未確認の最小送信 SEQが
    1090                                          *  一致しないときは、多重 ACK 数を 0 にする。
     1048                                         *  再送タイマがセットされていないとき、
     1049                                         *  または、ACK (tcph->ack) と未確認の最小送信 SEQが
     1050                                         *  一致しないときは、多重 ACK 数を 0 にする。
    10911051                                         */
    10921052                                        cep->dupacks = 0;
     
    10961056
    10971057                                        /*
    1098                                          *  多重 ACK 数がしきい値 (標準 3) になったら
    1099                                          *  高速再転送処理を開始する。
     1058                                         *  多重 ACK 数がしきい値 (標準 3) になったら
     1059                                         *  高速再転送処理を開始する。
    11001060                                         */
    11011061                                        uint_t          win;
    11021062
    11031063                                        /*
    1104                                          *  輻輳ウィンドサイズ(snd_cwnd)のしきい値を設定する。
     1064                                         *  輻輳ウィンドサイズ(snd_cwnd)のしきい値を設定する。
    11051065                                         *
    1106                                          *    相手の受信可能ウィンドサイズ (snd_wnd) か
    1107                                          *    輻輳ウィンドサイズ (snd_cwnd) の 1/2。
    1108                                          *    ただし、2 * maxseg 以上。
     1066                                         *    相手の受信可能ウィンドサイズ (snd_wnd) か
     1067                                         *    輻輳ウィンドサイズ (snd_cwnd) の 1/2。
     1068                                         *    ただし、2 * maxseg 以上。
    11091069                                         *
    11101070                                         */
     
    11171077                                        cep->snd_ssthresh = win * cep->maxseg;
    11181078
    1119                                         /* 再送タイマと往復時間をリセットする。*/
     1079                                        /* 再送タイマと往復時間をリセットする。*/
    11201080                                        cep->timer[TCP_TIM_REXMT] = 0;
    11211081                                        cep->rtt = 0;
    11221082
    1123                                         /* 消失したセグメントを送信する。*/
     1083                                        /* 消失したセグメントを送信する。*/
    11241084                                        cep->snd_old_nxt = cep->snd_nxt;
    11251085                                        cep->snd_nxt     = tcph->ack;
     
    11271087
    11281088                                        /*
    1129                                          *  snd_nxt をå
    1130 ƒã«æˆ»ã™ã‚ˆã†ã«è¨­å®šã—て
    1131                                          *  送信を指示する。
     1089                                         *  snd_nxt を元に戻すように設定して
     1090                                         *  送信を指示する。
    11321091                                         */
    11331092                                        cep->flags |=  TCP_CEP_FLG_POST_OUTPUT |
     
    11371096                                        sig_sem(SEM_TCP_POST_OUTPUT);
    11381097
    1139                                         /* 輻輳ウィンドサイズを更新する。*/
     1098                                        /* 輻輳ウィンドサイズを更新する。*/
    11401099                                        cep->snd_cwnd = (uint16_t)(cep->snd_ssthresh
    11411100                                                           + cep->maxseg * cep->dupacks);
     
    11471106
    11481107                                        /*
    1149                                          *  多重 ACK 数がしきい値 (標準 3) をè¶
    1150 ãˆãŸã‚‰
    1151                                          *  輻輳ウィンドサイズを増加しながら再送する。
     1108                                         *  多重 ACK 数がしきい値 (標準 3) を超えたら
     1109                                         *  輻輳ウィンドサイズを増加しながら再送する。
    11521110                                         */
    11531111                                        cep->snd_cwnd += cep->maxseg;
    11541112
    1155                                         /* 送信を指示する。*/
     1113                                        /* 送信を指示する。*/
    11561114                                        cep->flags |=  TCP_CEP_FLG_POST_OUTPUT;
    11571115                                        sig_sem(SEM_TCP_POST_OUTPUT);
     
    11661124
    11671125                /*
    1168                  *  受信確認 ACK が 未確認の最小送信 SEQ (snd_una) 以降のときの処理
     1126                 *  受信確認 ACK が 未確認の最小送信 SEQ (snd_una) 以降のときの処理
    11691127                 */
    11701128                if (cep->dupacks >= MAX_TCP_REXMT_THRESH && cep->snd_cwnd > cep->snd_ssthresh)
    11711129                        /*
    1172                          *  高速再転送を行っていたときは、輻輳ウィンドサイズをしきい値まで戻す。
     1130                         *  高速再転送を行っていたときは、輻輳ウィンドサイズをしきい値まで戻す。
    11731131                         */
    11741132                        cep->snd_cwnd = (uint16_t)cep->snd_ssthresh;
     
    11781136                if (SEQ_GT(tcph->ack, cep->snd_max))
    11791137                        /*
    1180                          *  受信した ACK が送信した最大 SEQ をè¶
    1181 ãˆã¦ã„たときの処理
     1138                         *  受信した ACK が送信した最大 SEQ を超えていたときの処理
    11821139                         */
    11831140                        return drop_after_ack(input, cep, thoff);
     
    11851142                if (cep->flags & TCP_CEP_FLG_NEED_SYN) {
    11861143                        /*
    1187                          *  SYN 送信要求を取り消して、未確認の最小送信 SEQ を進める。
     1144                         *  SYN 送信要求を取り消して、未確認の最小送信 SEQ を進める。
    11881145                         */
    11891146                        cep->flags &= ~TCP_CEP_FLG_NEED_SYN;
     
    11981155
    11991156/*
    1200  *  update_wnd -- ウィンドサイズを更新する。
     1157 *  update_wnd -- ウィンドサイズを更新する。
    12011158 *
    1202  *    戻り値: 送信がå¿
    1203 è¦ãªã‚‰ true を返す。
     1159 *    戻り値: 送信が必要なら true を返す。
    12041160 */
    12051161
     
    12091165
    12101166        /*
    1211          *  更新条件
     1167         *  更新条件
    12121168         *
    1213          *    ACK フラグがセットされている &&
    1214          *    (前回ウィンドを更新した SEQ (snd_wl1) が SEQ より前 ||
    1215          *     å‰å›žã‚¦ã‚£ãƒ³ãƒ‰ã‚’更新した SEQ (snd_wl1) が SEQ と同じ &&
    1216          *     (前回ウィンドを更新した ACK (snd_wl2) が ACK より前 ||
    1217          *      (前回ウィンドを更新した ACK (snd_wl2) が ACK と同じ &&
    1218          *       WIN が相手の受信可能ウィンドサイズ (snd_wnd) より大きい
     1169         *    ACK フラグがセットされている &&
     1170         *    (前回ウィンドを更新した SEQ (snd_wl1) が SEQ より前 ||
     1171         *     前回ウィンドを更新した SEQ (snd_wl1) が SEQ と同じ &&
     1172         *     (前回ウィンドを更新した ACK (snd_wl2) が ACK より前 ||
     1173         *      (前回ウィンドを更新した ACK (snd_wl2) が ACK と同じ &&
     1174         *       WIN が相手の受信可能ウィンドサイズ (snd_wnd) より大きい
    12191175         *       )
    12201176         *      )
     
    12321188
    12331189                if (cep->snd_wnd > cep->max_sndwnd)
    1234                         /* 今までの最大送信ウィンドサイズを更新する。*/
     1190                        /* 今までの最大送信ウィンドサイズを更新する。*/
    12351191                        cep->max_sndwnd = cep->snd_wnd;
    12361192
     
    12401196
    12411197                        /*
    1242                          *  送信ウィンドバッファ用のネットワークバッファ割り当て中で、
    1243                          *  相手の受信ウィンドが空くのをå¾
    1244 ã£ã¦ã„るときの処理
     1198                         *  送信ウィンドバッファ用のネットワークバッファ割り当て中で、
     1199                         *  相手の受信ウィンドが空くのを待っているときの処理
    12451200                         */
    12461201                        if (cep->snd_wnd > 0) {
    12471202
    12481203                                /*
    1249                                  *  相手の受信ウィンドが空いたときは、
    1250                                  *  送信ウィンドバッファ用のネットワークバッファ割り当てを再開する。
     1204                                 *  相手の受信ウィンドが空いたときは、
     1205                                 *  送信ウィンドバッファ用のネットワークバッファ割り当てを再開する。
    12511206                                 */
    12521207                                cep->flags = (cep->flags & ~TCP_CEP_FLG_WBCS_MASK)
     
    12651220
    12661221/*
    1267  *  proc_urg -- 緊急データつきのセグメントの処理
     1222 *  proc_urg -- 緊急データつきのセグメントの処理
    12681223 */
    12691224
     
    12761231            TCP_FSM_HAVE_RCVD_FIN(cep->fsm_state) == 0) {
    12771232
    1278                 /* 緊急データつきのセグメントの処理 */
     1233                /* 緊急データつきのセグメントの処理 */
    12791234
    12801235                NET_COUNT_TCP(net_count_tcp[NC_TCP_RECV_URG_SEGS], 1);
     
    12821237
    12831238                        /*
    1284                          *  緊急ポインタの位置が受信ウィンドバッファの
    1285                          *  範囲をè¶
    1286 ãˆã‚‹ã¨ãã¯ä½•ã‚‚しない。
     1239                         *  緊急ポインタの位置が受信ウィンドバッファの
     1240                         *  範囲を超えるときは何もしない。
    12871241                         */
    12881242                        tcph->urp    = 0;
     
    12911245
    12921246                if (SEQ_GT(tcph->seq + tcph->urp, cep->rcv_up))
    1293                         /* 緊急ポインタが更新されたときの処理 */
     1247                        /* 緊急ポインタが更新されたときの処理 */
    12941248                        cep->rcv_up = tcph->seq + tcph->urp;
    12951249
    1296                 if ((tcph->flags & TCP_FLG_URG) && (tcph->urp + TCP_CFG_URG_OFFSET) < tcph->sum) {      /* tcph->sum は TCP の SDU 長 */
     1250                if ((tcph->flags & TCP_FLG_URG) && (tcph->urp + TCP_CFG_URG_OFFSET) < tcph->sum) {      /* tcph->sum は TCP の SDU 長 */
    12971251
    12981252                        /*
    1299                          *  緊急ポインタの位置が、今回受信したセグメントå†
    1300 ã®å ´åˆã¯ã€
    1301                          *  コールバック関数を呼び出す。
     1253                         *  緊急ポインタの位置が、今回受信したセグメント内の場合は、
     1254                         *  コールバック関数を呼び出す。
    13021255                         */
    13031256                        cep->urg_tcph = tcph;
     
    13221275
    13231276                        if (cep->urg_tcph != NULL) {
    1324                                 /* コールバック関数å†
    1325 ã§ tcp_rcv_oob() を呼出さなかった。*/
     1277                                /* コールバック関数内で tcp_rcv_oob() を呼出さなかった。*/
    13261278                                cep->urg_tcph = NULL;
    13271279                                tcph->urp = 0;
     
    13291281                        else {
    13301282                                /*
    1331                                  *  コールバック関数å†
    1332 ã§ tcp_rcv_oob() を呼出した時は、
    1333                                  *  SDU 長の補正値を設定する。
     1283                                 *  コールバック関数内で tcp_rcv_oob() を呼出した時は、
     1284                                 *  SDU 長の補正値を設定する。
    13341285                                 */
    13351286                                tcph->urp = 1;
     
    13581309
    13591310/*
    1360  *  drop_after_ack -- 受信セグメントを破棄した後、ACK を返す (注意: 名前とは合っていない)。
     1311 *  drop_after_ack -- 受信セグメントを破棄した後、ACK を返す (注意: 名前とは合っていない)。
    13611312 *
    1362  *    戻り値:
    1363  *      RET_RETURN      正常、リターンする。
    1364  *      RET_RST_DROP    エラー、RST を送信し、セグメントを破棄する。
     1313 *    戻り値:
     1314 *      RET_RETURN      正常、リターンする。
     1315 *      RET_RST_DROP    エラー、RST を送信し、セグメントを破棄する。
    13651316 */
    13661317
     
    13711322
    13721323        /*
    1373          *    SYN 受信状æ
    1374 ‹ã§ã€ACK が送達確認されていない最小送信 SEQ (snd_una) より
    1375          *    前の値か、送信された最大 SEQ (snd_max) より後の値の場合は、相手に RST を
    1376          *    送って終了する。これは、"LAND" DoS 攻撃への防御であり、偽造された SYN
    1377          *    セグメントを送信しつづけるポート間での ACK ストームを防ぐ。
     1324         *    SYN 受信状態で、ACK が送達確認されていない最小送信 SEQ (snd_una) より
     1325         *    前の値か、送信された最大 SEQ (snd_max) より後の値の場合は、相手に RST を
     1326         *    送って終了する。これは、"LAND" DoS 攻撃への防御であり、偽造された SYN
     1327         *    セグメントを送信しつづけるポート間での ACK ストームを防ぐ。
    13781328         */
    13791329        if (cep->fsm_state == TCP_FSM_SYN_RECVD && (tcph->flags & TCP_FLG_ACK) &&
     
    13841334        syscall(rel_net_buf(input));
    13851335
    1386         /* 送信を指示する。*/
     1336        /* 送信を指示する。*/
    13871337        cep->flags |=  TCP_CEP_FLG_ACK_NOW | TCP_CEP_FLG_POST_OUTPUT;
    13881338        sig_sem(SEM_TCP_POST_OUTPUT);
     
    13911341
    13921342/*
    1393  *  close_connection -- コネクション開放処理、相手から FIN を受信した。
     1343 *  close_connection -- コネクション開放処理、相手から FIN を受信した。
    13941344 */
    13951345
     
    14161366
    14171367        switch (cep->fsm_state) {
    1418         case TCP_FSM_SYN_RECVD:         /* SYN を受信し、SYN 送信済み  */
    1419         case TCP_FSM_ESTABLISHED:       /* コネクション開設完了               */
     1368        case TCP_FSM_SYN_RECVD:         /* SYN を受信し、SYN 送信済み    */
     1369        case TCP_FSM_ESTABLISHED:       /* コネクション開設完了           */
    14201370                cep->fsm_state = TCP_FSM_CLOSE_WAIT;
    14211371                break;
    14221372
    1423         case TCP_FSM_FIN_WAIT_1:        /* APP が終了、FIN 送信済み、ACK å¾
    1424 ã¡ */
     1373        case TCP_FSM_FIN_WAIT_1:        /* APP が終了、FIN 送信済み、ACK 待ち */
    14251374                cep->fsm_state = TCP_FSM_CLOSING;
    14261375                break;
    14271376
    1428         case TCP_FSM_FIN_WAIT_2:        /* 相手からの FIN å¾
    1429 ã¡ */
     1377        case TCP_FSM_FIN_WAIT_2:        /* 相手からの FIN 待ち */
    14301378                cep->fsm_state = TCP_FSM_TIME_WAIT;
    14311379                tcp_cancel_timers(cep);
     
    14331381
    14341382                /*
    1435                  *  FIN WAIT 2 状æ
    1436 ‹ã§ã¯ã€
    1437                  *  受信は可能であるが、すでに送信は終了している。
    1438                  *  相手の送信も終了したので、å
    1439 ¥åŠ›ã‚¿ã‚¹ã‚¯ã®ã¿èµ·åºŠã™ã‚‹ã€‚
     1383                 *  FIN WAIT 2 状態では、
     1384                 *  受信は可能であるが、すでに送信は終了している。
     1385                 *  相手の送信も終了したので、入力タスクのみ起床する。
    14401386                 */
    14411387                syscall(set_flg(cep->snd_flgid, TCP_CEP_EVT_SWBUF_READY));
     
    14431389#if defined(NUM_TCP_TW_CEP_ENTRY) && NUM_TCP_TW_CEP_ENTRY > 0
    14441390
    1445                 /* 相手からの FIN に対して応答を返す。*/
     1391                /* 相手からの FIN に対して応答を返す。*/
    14461392                tcp_respond(NULL, cep, cep->rcv_nxt, cep->snd_una,
    14471393                            cep->rbufsz - cep->rwbuf_count, TCP_FLG_ACK);
     
    14501396
    14511397                /*
    1452                  *  å¿
    1453 è¦ãªæƒ
    1454 å ±ã‚’ Time Wait 用 TCP 通信端点に移して、
    1455                  *  標準の TCP 通信端点を開放する。
     1398                 *  必要な情報を Time Wait 用 TCP 通信端点に移して、
     1399                 *  標準の TCP 通信端点を開放する。
    14561400                 */
    14571401                tcp_move_twcep(cep);
     
    14611405                break;
    14621406
    1463         case TCP_FSM_TIME_WAIT:         /* 相手からの FIN 受信済み、時間å¾
    1464 ã¡ */
     1407        case TCP_FSM_TIME_WAIT:         /* 相手からの FIN 受信済み、時間待ち */
    14651408                cep->timer[TCP_TIM_2MSL] = 2 * TCP_TVAL_MSL;
    14661409                break;
     
    14691412
    14701413/*
    1471  *  tcp_input -- TCP のå
    1472 ¥åŠ›é–¢æ•°
     1414 *  tcp_input -- TCP の入力関数
    14731415 *
    1474  *      注意: input には IF ヘッダと IP ヘッダがå
    1475 ˆé ­ã«ã‚る。
     1416 *      注意: input には IF ヘッダと IP ヘッダが先頭にある。
    14761417 */
    14771418
     
    15001441        NET_COUNT_MIB(tcp_stats.tcpInSegs, 1);
    15011442
    1502         /* ヘッダ長をチェックする。*/
     1443        /* ヘッダ長をチェックする。*/
    15031444        if (input->len < IF_IP_TCP_HDR_SIZE) {
    15041445                NET_COUNT_TCP(net_count_tcp[NC_TCP_RECV_BAD_HEADERS], 1);
     
    15091450        tcph = GET_TCP_HDR(input, *offp);
    15101451
    1511         seglen  = input->len - *offp;                           /* TCP のセグメント長 */
     1452        seglen  = input->len - *offp;                           /* TCP のセグメント長 */
    15121453
    15131454        if (IN_CKSUM(input, IPPROTO_TCP, *offp, (uint_t)seglen) != 0) {
     
    15161457                }
    15171458
    1518         /* TCP ヘッダ長をチェックする。*/
     1459        /* TCP ヘッダ長をチェックする。*/
    15191460        if (TCP_HDR_LEN(tcph->doff) < TCP_HDR_SIZE || TCP_HDR_LEN(tcph->doff) > seglen) {
    15201461                NET_COUNT_TCP(net_count_tcp[NC_TCP_RECV_BAD_HEADERS], 1);
    15211462                goto drop;
    15221463                }
    1523         tcph->sum = seglen - TCP_HDR_LEN(tcph->doff);           /* ここから tcph->sum は TCP の SDU 長 */
    1524 
    1525         /*
    1526          *  SYN と FIN の両ビットがセットされていれば破棄する。nmap 等の対策
    1527          *  ただし、RFC1644 T/TCP 拡張機能と競合する。
     1464        tcph->sum = seglen - TCP_HDR_LEN(tcph->doff);           /* ここから tcph->sum は TCP の SDU 長 */
     1465
     1466        /*
     1467         *  SYN と FIN の両ビットがセットされていれば破棄する。nmap 等の対策
     1468         *  ただし、RFC1644 T/TCP 拡張機能と競合する。
    15281469         */
    15291470        if ((tcph->flags & (TCP_FLG_SYN | TCP_FLG_FIN)) == (TCP_FLG_SYN | TCP_FLG_FIN))
    15301471                goto drop;
    15311472
    1532         /* ネットワークオーダーからホストオーダーに変換する。*/
     1473        /* ネットワークオーダーからホストオーダーに変換する。*/
    15331474
    15341475        NTOHL(tcph->seq);
     
    15441485
    15451486        /*
    1546          *  状æ
    1547 ‹ãŒ Time Wait 中の CEP を探索する。
     1487         *  状態が Time Wait 中の CEP を探索する。
    15481488         */
    15491489        twcep = tcp_find_twcep(&iph->dst, tcph->dport, &iph->src, tcph->sport);
    15501490        if (twcep != NULL) {
    15511491
    1552                 if (tcph->flags & TCP_FLG_RST)          /* RST フラグを受信したときは無視する。*/
     1492                if (tcph->flags & TCP_FLG_RST)          /* RST フラグを受信したときは無視する。*/
    15531493                        goto drop;
    15541494                else {
    15551495
    15561496                        /*
    1557                          *    TCP 通信端点が Time Wait の時、相手ホストからセグメントが来たときは、
    1558                          *    相手ホストの FIN に対する自ホストの ACK セグメントが途中で
    1559                          *    損失したことを意味しているので、ACK セグメントを再送する。
     1497                         *    TCP 通信端点が Time Wait の時、相手ホストからセグメントが来たときは、
     1498                         *    相手ホストの FIN に対する自ホストの ACK セグメントが途中で
     1499                         *    損失したことを意味しているので、ACK セグメントを再送する。
    15601500                         */
    15611501
    1562                         /* ホストオーダーからネットワークオーダーに戻す。*/
     1502                        /* ホストオーダーからネットワークオーダーに戻す。*/
    15631503                        HTONS(tcph->sport);
    15641504                        HTONS(tcph->dport);
     
    15691509                }
    15701510        else
    1571                 /* 標準の TCP 通信端点を得る。*/
     1511                /* 標準の TCP 通信端点を得る。*/
    15721512                cep = tcp_find_cep(&iph->dst, tcph->dport, &iph->src, tcph->sport);
    15731513
    15741514#else   /* of #if defined(NUM_TCP_TW_CEP_ENTRY) && NUM_TCP_TW_CEP_ENTRY > 0 */
    15751515
    1576         /* TCP 通信端点を得る。*/
     1516        /* TCP 通信端点を得る。*/
    15771517        cep = tcp_find_cep(&iph->dst, tcph->dport, &iph->src, tcph->sport);
    15781518
     
    15801520
    15811521        /*
    1582          *  TCP 通信端点がない場合と CEP の状æ
    1583 ‹ãŒã‚¯ãƒ­ãƒ¼ã‚ºãªã‚‰ç ´æ£„する。
     1522         *  TCP 通信端点がない場合と CEP の状態がクローズなら破棄する。
    15841523         */
    15851524        if (cep == NULL) {
     
    15991538
    16001539        /*
    1601          *  コネクション開設済みでセグメントを受信したときは、
    1602          *  アイドル時間と生存確認タイマをリセットする。
     1540         *  コネクション開設済みでセグメントを受信したときは、
     1541         *  アイドル時間と生存確認タイマをリセットする。
    16031542         */
    16041543        cep->idle = 0;
     
    16071546                }
    16081547
    1609         /* CEP の状æ
    1610 ‹ãŒ LISTEN 以外の時は、オプションを処理する。*/
     1548        /* CEP の状態が LISTEN 以外の時は、オプションを処理する。*/
    16111549        if (cep->fsm_state != TCP_FSM_LISTEN)
    16121550                parse_option(tcph, cep);
    16131551
    16141552        /*
    1615          *  受信可能ウィンドサイズを計算する。
     1553         *  受信可能ウィンドサイズを計算する。
    16161554         *
    1617          *  rcv_nxt:     å—信を期å¾
    1618 ã—ている最小の SEQ(これ以前は受信済み)
    1619          *  rcv_adv:     å—信を期å¾
    1620 ã—ている最大の SEQ
    1621          *  rbufsz:      受信ウィンドバッファサイズ
    1622          *  rwbuf_count:  受信ウィンドバッファにあるデータ量
    1623          *  tcph->sum:   ä»Šå›žå—信した SDU サイズ
     1555         *  rcv_nxt:     受信を期待している最小の SEQ(これ以前は受信済み)
     1556         *  rcv_adv:     受信を期待している最大の SEQ
     1557         *  rbufsz:      受信ウィンドバッファサイズ
     1558         *  rwbuf_count:  受信ウィンドバッファにあるデータ量
     1559         *  tcph->sum:   今回受信した SDU サイズ
    16241560         *
    1625          *  今回受信したセグメントを順序整列キューに連結する
    1626          *  可能性があるので tcph->sum を考æ
    1627 ®ã™ã‚‹ã€‚
     1561         *  今回受信したセグメントを順序整列キューに連結する
     1562         *  可能性があるので tcph->sum を考慮する。
    16281563         *
    16291564         */
     
    16361571                cep->rcv_wnd = cep->rcv_adv - cep->rcv_nxt;
    16371572
    1638         /* CEP の状æ
    1639 ‹ã«ã‚ˆã‚Šå‡¦ç†ã‚’行う。*/
    1640 
    1641         if (cep->fsm_state == TCP_FSM_LISTEN) {         /* 受動オープン (LISTEN) の処理。*/
     1573        /* CEP の状態により処理を行う。*/
     1574
     1575        if (cep->fsm_state == TCP_FSM_LISTEN) {         /* 受動オープン (LISTEN) の処理。*/
    16421576                if ((ret = listening(input, cep, *offp, iss)) == RET_RST_DROP)
    16431577                        goto reset_drop;
    16441578                else if (ret == RET_DROP)
    16451579                        goto drop;
    1646                 trim_length(tcph, cep);                 /* 受信した SDU 長を調整する。*/
    1647 
    1648                 if (tcph->flags & TCP_FLG_ACK) {        /* ACK フラグの処理 */
     1580                trim_length(tcph, cep);                 /* 受信した SDU 長を調整する。*/
     1581
     1582                if (tcph->flags & TCP_FLG_ACK) {        /* ACK フラグの処理 */
    16491583                        if ((ret = proc_ack2(input, cep, *offp, &needoutput)) == RET_DROP)
    16501584                                goto drop;
     
    16551589                        }
    16561590                }
    1657         else if (cep->fsm_state == TCP_FSM_SYN_SENT) {  /* 能動オープン、SYN 送信済み        */
     1591        else if (cep->fsm_state == TCP_FSM_SYN_SENT) {  /* 能動オープン、SYN 送信済み      */
    16581592                if ((ret = syn_sent(tcph, cep)) == RET_RST_DROP)
    16591593                        goto reset_drop;
    16601594                else if (ret == RET_DROP)
    16611595                        goto drop;
    1662                 trim_length(tcph, cep);                 /* 受信した SDU 長を調整する。*/
    1663 
    1664                 if (tcph->flags & TCP_FLG_ACK) {        /* ACK フラグの処理 */
     1596                trim_length(tcph, cep);                 /* 受信した SDU 長を調整する。*/
     1597
     1598                if (tcph->flags & TCP_FLG_ACK) {        /* ACK フラグの処理 */
    16651599                        if ((ret = proc_ack2(input, cep, *offp, &needoutput)) == RET_DROP)
    16661600                                goto drop;
     
    16721606                }
    16731607        else {
    1674                 if (cep->fsm_state == TCP_FSM_SYN_RECVD) {      /* SYN を受信、SYN 送信済み     */
     1608                if (cep->fsm_state == TCP_FSM_SYN_RECVD) {      /* SYN を受信、SYN 送信済み     */
    16751609                        /*
    1676                          *  相手から受信確認が送られて来ても、
     1610                         *  相手から受信確認が送られて来ても、
    16771611                         *
    1678                          *    ACK <= 未確認の最小送信 SEQ (snd_una) &&
    1679                          *           é€ä¿¡ã—た最大     SEQ (snd_max) < ACK
     1612                         *    ACK <= 未確認の最小送信 SEQ (snd_una) &&
     1613                         *           送信した最大     SEQ (snd_max) < ACK
    16801614                         *
    1681                          *  なら、リセットを送ってセグメントを破棄する。
     1615                         *  なら、リセットを送ってセグメントを破棄する。
    16821616                         */
    16831617                        if ((tcph->flags & TCP_FLG_ACK) &&
     
    16881622
    16891623                /*
    1690                  *  RST フラグを受信したときの処理 (異常切断)
     1624                 *  RST フラグを受信したときの処理 (異常切断)
    16911625                 */
    16921626                if (tcph->flags & TCP_FLG_RST) {
     
    16941628                            SEQ_LT(tcph->seq, cep->last_ack_sent + cep->rcv_wnd)) {
    16951629                                /*
    1696                                  *  受信したセグメントの SEQ が、最後に送信した ACK (last_ack_sent)
    1697                                  *  から、受信ウインドウサイズまでの間の処理
     1630                                 *  受信したセグメントの SEQ が、最後に送信した ACK (last_ack_sent)
     1631                                 *  から、受信ウインドウサイズまでの間の処理
    16981632                                 */
    16991633                                switch (cep->fsm_state) {
    1700                                 case TCP_FSM_SYN_RECVD:         /* SYN を受信し、SYN 送信済み          */
    1701 
    1702                                         cep->net_error = EV_CNNRF;      /* 接続不能 */
     1634                                case TCP_FSM_SYN_RECVD:         /* SYN を受信し、SYN 送信済み            */
     1635
     1636                                        cep->net_error = EV_CNNRF;      /* 接続不能 */
    17031637                                        cep->error     = E_CLS;
    17041638                                        NET_COUNT_TCP(net_count_tcp[NC_TCP_RECV_RSTS], 1);
     
    17071641                                        break;
    17081642
    1709                                 case TCP_FSM_ESTABLISHED:       /* コネクション開設完了                       */
    1710                                 case TCP_FSM_CLOSE_WAIT:        /* FIN 受信、クローズå¾
    1711 ã¡             */
     1643                                case TCP_FSM_ESTABLISHED:       /* コネクション開設完了                   */
     1644                                case TCP_FSM_CLOSE_WAIT:        /* FIN 受信、クローズ待ち                */
    17121645                                        NET_COUNT_MIB(tcp_stats.tcpEstabResets, 1);
    17131646                                        /* fallthrough */
    17141647
    1715                                 case TCP_FSM_FIN_WAIT_1:        /* 終了して、FIN 送信済み              */
    1716                                 case TCP_FSM_FIN_WAIT_2:        /* 終了、FIN 伝達確認受信、FINå¾
    1717 ã¡     */
    1718 
    1719                                         cep->net_error = EV_CNRST;      /* 接続リセット */
     1648                                case TCP_FSM_FIN_WAIT_1:        /* 終了して、FIN 送信済み                */
     1649                                case TCP_FSM_FIN_WAIT_2:        /* 終了、FIN 伝達確認受信、FIN待ち  */
     1650
     1651                                        cep->net_error = EV_CNRST;      /* 接続リセット */
    17201652                                        cep->error     = E_CLS;
    17211653                                        NET_COUNT_TCP(net_count_tcp[NC_TCP_RECV_RSTS], 1);
    17221654                                        /* no break; */
    17231655
    1724                                 case TCP_FSM_CLOSING:           /* 終了、FIN 交換済み、ACK å¾
    1725 ã¡     */
    1726                                 case TCP_FSM_LAST_ACK:          /* FIN 受信、終了、ACK å¾
    1727 ã¡     */
     1656                                case TCP_FSM_CLOSING:           /* 終了、FIN 交換済み、ACK 待ち   */
     1657                                case TCP_FSM_LAST_ACK:          /* FIN 受信、終了、ACK 待ち     */
    17281658
    17291659                                        cep = tcp_close(cep);
     
    17351665
    17361666                /*
    1737                  *  CEP の状æ
    1738 ‹ãŒ SYN を受信し、SYN 送信済みの場合は、
    1739                  *  受信ウィンドに収まるようにデータを
    1740                  *  調整する前に、この接続によるパケットかどうかを検証する。
     1667                 *  CEP の状態が SYN を受信し、SYN 送信済みの場合は、
     1668                 *  受信ウィンドに収まるようにデータを
     1669                 *  調整する前に、この接続によるパケットかどうかを検証する。
    17411670                 *
    1742                  *    受信した相手の SEQ < 相手の SEQ の初期値 (irs)
     1671                 *    受信した相手の SEQ < 相手の SEQ の初期値 (irs)
    17431672                 *
    1744                  *  これは、"LAND" DoS 攻撃の防御である。
     1673                 *  これは、"LAND" DoS 攻撃の防御である。
    17451674                 */
    17461675                if (cep->fsm_state == TCP_FSM_SYN_RECVD && SEQ_LT(tcph->seq, cep->irs)) {
     
    17491678
    17501679                /*
    1751                  *  受信を期å¾
    1752 ã—ている最小の SEQ (rcv_nxt) - 受信した相手の SEQ が
    1753                  *  正なら、rcv_nxt 以前のデータはすでに受信しているので、その部分を
    1754                  *  削除する。
     1680                 *  受信を期待している最小の SEQ (rcv_nxt) - 受信した相手の SEQ が
     1681                 *  正なら、rcv_nxt 以前のデータはすでに受信しているので、その部分を
     1682                 *  削除する。
    17551683                 *                           <---------- rcv_wnd --------->
    17561684                 *                           rcv_nxt                      rcv_nxt + rcv_wnd
     
    17641692                 *           ^                      ^
    17651693                 *           seq                    seq + len
    1766                  *           <---------------> 削除する。
     1694                 *           <---------------> 削除する。
    17671695                 */
    17681696                todrop = cep->rcv_nxt - tcph->seq;
     
    17701698
    17711699                        /*
    1772                          *  SYN フラグがついているときは、その分 (1 オクテット)
    1773                          *  SEQ を進め、緊急ポインタと削除する長さを調整する。
     1700                         *  SYN フラグがついているときは、その分 (1 オクテット)
     1701                         *  SEQ を進め、緊急ポインタと削除する長さを調整する。
    17741702                         */
    17751703                        if (tcph->flags & TCP_FLG_SYN) {
     
    17841712
    17851713                        /*
    1786                          *  削除する長さが SDU より長い、つまり、受信を期å¾
    1787 ã—ている
    1788                          *  最小の SEQ (rcv_nxt) に達していないか、
    1789                          *  削除する長さが SDU と同じで、FIN フラグがついてなければ
    1790                          *  å
    1791 ¨ã¦å‰Šé™¤ã™ã‚‹ã€‚
     1714                         *  削除する長さが SDU より長い、つまり、受信を期待している
     1715                         *  最小の SEQ (rcv_nxt) に達していないか、
     1716                         *  削除する長さが SDU と同じで、FIN フラグがついてなければ
     1717                         *  全て削除する。
    17921718                         */
    1793                         if ( todrop >  tcph->sum ||             /* tcph->sum は TCP の SDU 長 */
     1719                        if ( todrop >  tcph->sum ||             /* tcph->sum は TCP の SDU 長 */
    17941720                            (todrop == tcph->sum && (tcph->flags & TCP_FLG_FIN) == 0)) {
    17951721                                tcph->flags &= ~TCP_FLG_FIN;
    17961722                                cep->flags |= TCP_CEP_FLG_ACK_NOW;
    1797                                 todrop = tcph->sum;             /* tcph->sum は TCP の SDU 長 */
     1723                                todrop = tcph->sum;             /* tcph->sum は TCP の SDU 長 */
    17981724                                }
    17991725
    18001726                        /*
    1801                          *  SDU を前に詰める。
     1727                         *  SDU を前に詰める。
    18021728                         */
    1803                         if (todrop < tcph->sum) {               /* tcph->sum は TCP の SDU 長 */
     1729                        if (todrop < tcph->sum) {               /* tcph->sum は TCP の SDU 長 */
    18041730                                memcpy(GET_TCP_SDU(input, *offp),
    18051731                                       GET_TCP_SDU(input, *offp) + todrop, (size_t)(tcph->sum - todrop));
     
    18071733
    18081734                        /*
    1809                          *  SEQ と SDU 長を調整する。
     1735                         *  SEQ と SDU 長を調整する。
    18101736                         */
    18111737                        tcph->seq +=     todrop;
    1812                         tcph->sum -= (uint16_t)todrop;  /* tcph->sum は TCP の SDU 長 */
     1738                        tcph->sum -= (uint16_t)todrop;  /* tcph->sum は TCP の SDU 長 */
    18131739
    18141740                        /*
    1815                          *  緊急ポインタを調整する。
     1741                         *  緊急ポインタを調整する。
    18161742                         */
    18171743                        if (tcph->urp > todrop)
     
    18261752
    18271753                /* 
    1828                  *  もしユーザタスクが終了した後に、データを受信した
    1829                  *  場合は、RST を送る。
    1830                  */
    1831                 if (cep->fsm_state == TCP_FSM_LAST_ACK && tcph->sum > 0) {      /* tcph->sum は TCP の SDU 長 */
     1754                 *  もしユーザタスクが終了した後に、データを受信した
     1755                 *  場合は、RST を送る。
     1756                 */
     1757                if (cep->fsm_state == TCP_FSM_LAST_ACK && tcph->sum > 0) {      /* tcph->sum は TCP の SDU 長 */
    18321758                        cep = tcp_close(cep);
    18331759                        goto reset_drop;
     
    18351761
    18361762                /*
    1837                  *  受信セグメントが受信ウィンドをè¶
    1838 ãˆã‚‹å ´åˆã¯ã€
    1839                  *  è¶
    1840 ãˆãŸåˆ†ã‚’削る。
     1763                 *  受信セグメントが受信ウィンドを超える場合は、
     1764                 *  超えた分を削る。
    18411765                 *
    18421766                 *       <---------- rcv_wnd --------->
     
    18511775                 *                    ^                      ^
    18521776                 *                    seq                    seq + len
    1853                  *                                     <-----> 削除する。
    1854                  */
    1855                 todrop = (tcph->seq + tcph->sum) - (cep->rcv_nxt + cep->rcv_wnd);       /* tcph->sum は TCP の SDU 長 */
     1777                 *                                     <-----> 削除する。
     1778                 */
     1779                todrop = (tcph->seq + tcph->sum) - (cep->rcv_nxt + cep->rcv_wnd);       /* tcph->sum は TCP の SDU 長 */
    18561780                if (todrop > 0) {
    1857                         if (todrop > tcph->sum) {                                       /* tcph->sum は TCP の SDU 長 */
     1781                        if (todrop > tcph->sum) {                                       /* tcph->sum は TCP の SDU 長 */
    18581782                                /*
    1859                                  *  受信した SDU のå
    1860 ¨ã¦ãŒå—信ウィンドをè¶
    1861 ãˆã‚‹å ´åˆã€‚
     1783                                 *  受信した SDU の全てが受信ウィンドを超える場合。
    18621784                                 *
    1863                                  *  TIME_WAIT 中に、新たな接続要求を受信したら
    1864                                  *  古い接続を破棄し、新たな接続を開始する。
    1865                                  *  ただし、SEQ は前より進んでいなければならない。
     1785                                 *  TIME_WAIT 中に、新たな接続要求を受信したら
     1786                                 *  古い接続を破棄し、新たな接続を開始する。
     1787                                 *  ただし、SEQ は前より進んでいなければならない。
    18661788                                 */
    18671789                                if ((tcph->flags & TCP_FLG_SYN) &&
     
    18751797
    18761798                                /*
    1877                                  *  受信ウィンドが 0 で、受信した SEQ と
    1878                                  *  受信を期å¾
    1879 ã—ている最小の SEQ が一致したときは
    1880                                  *  ACK を返す。それ以外はデータを破棄し、ACK を返す。
     1799                                 *  受信ウィンドが 0 で、受信した SEQ と
     1800                                 *  受信を期待している最小の SEQ が一致したときは
     1801                                 *  ACK を返す。それ以外はデータを破棄し、ACK を返す。
    18811802                                 */
    18821803                                if (cep->rcv_wnd == 0 && (tcph->seq == cep->rcv_nxt || tcph->sum == 0)) {
     
    18891810                                        }
    18901811                                }
    1891                         tcph->sum -= (uint16_t)todrop;  /* tcph->sum は TCP の SDU 長 */
     1812                        tcph->sum -= (uint16_t)todrop;  /* tcph->sum は TCP の SDU 長 */
    18921813                        tcph->flags &= ~(TCP_FLG_PUSH | TCP_FLG_FIN);
    18931814                        }
    18941815
    18951816                /*
    1896                  *  もし、SYN がセットされていれば、
    1897                  *  エラーなので RST を送り、接続を破棄する。
     1817                 *  もし、SYN がセットされていれば、
     1818                 *  エラーなので RST を送り、接続を破棄する。
    18981819                 */
    18991820                if (tcph->flags & TCP_FLG_SYN) {
     
    19041825
    19051826                /*
    1906                  *  もし、ACK がセットされていない場合は、
    1907                  *  状æ
    1908 ‹ãŒ SYN 受信済みか
    1909                  *  SYN を送信しようとしていれば、処理を続けるが、
    1910                  *  それ以外はセグメントを破棄して終了する。
     1827                 *  もし、ACK がセットされていない場合は、
     1828                 *  状態が SYN 受信済みか
     1829                 *  SYN を送信しようとしていれば、処理を続けるが、
     1830                 *  それ以外はセグメントを破棄して終了する。
    19111831                 */
    19121832                if ((tcph->flags & TCP_FLG_ACK) == 0) {
     
    19161836                else {
    19171837                        /*
    1918                          * ACK の処理
     1838                         * ACK の処理
    19191839                         */
    19201840                        ret = proc_ack1(input, cep, *offp, &needoutput);
     
    19301850/* step 6 */
    19311851
    1932         /* 送信ウィンドを更新する。*/
     1852        /* 送信ウィンドを更新する。*/
    19331853        if (update_wnd(tcph, cep) == true)
    19341854                needoutput = true;
    19351855
    1936         /* 緊急データを処理する。*/
     1856        /* 緊急データを処理する。*/
    19371857        proc_urg(tcph, cep);
    19381858
     
    19401860
    19411861        /*
    1942          *  SDU があるか、FIN を未受信の状æ
    1943 ‹ã§ã€æœ€åˆã« FIN を受信したとき、
    1944          *  受信セグメントキューに net_buf を追加する。
    1945          *  それ以外の場合は、セグメントを破棄する。
     1862         *  SDU があるか、FIN を未受信の状態で、最初に FIN を受信したとき、
     1863         *  受信セグメントキューに net_buf を追加する。
     1864         *  それ以外の場合は、セグメントを破棄する。
    19461865         */
    19471866        flags = tcph->flags;
    1948         if ((tcph->sum > 0 || (flags & TCP_FLG_FIN)) &&         /* tcph->sum は TCP の SDU 長 */
     1867        if ((tcph->sum > 0 || (flags & TCP_FLG_FIN)) &&         /* tcph->sum は TCP の SDU 長 */
    19491868            TCP_FSM_HAVE_RCVD_FIN(cep->fsm_state) == 0) {
    19501869                flags = reassemble(input, cep, *offp, flags);
     
    19561875
    19571876        /*
    1958          *  FIN を受信したらコネクションをクローズする。
     1877         *  FIN を受信したらコネクションをクローズする。
    19591878         */
    19601879        if (flags & TCP_FLG_FIN)
    19611880                close_connection(cep, &needoutput);
    19621881
    1963         /* 出力を行った後終了する。*/
     1882        /* 出力を行った後終了する。*/
    19641883        if (needoutput == true || (cep->flags & TCP_CEP_FLG_ACK_NOW)) {
    1965                 /* 送信を指示する。*/
     1884                /* 送信を指示する。*/
    19661885                cep->flags |=  TCP_CEP_FLG_POST_OUTPUT;
    19671886                sig_sem(SEM_TCP_POST_OUTPUT);
     
    19721891reset_drop:
    19731892        /*
    1974          *  RST 送信処理
     1893         *  RST 送信処理
    19751894         */
    19761895
     
    19781897                goto drop;
    19791898
    1980         /* ホストオーダーからネットワークオーダーに戻す。*/
     1899        /* ホストオーダーからネットワークオーダーに戻す。*/
    19811900
    19821901        HTONS(tcph->sport);
     
    19931912        else {
    19941913                if (tcph->flags & TCP_FLG_SYN)
    1995                         tcph->sum ++;           /* tcph->sum は SDU 長 */
     1914                        tcph->sum ++;           /* tcph->sum は SDU 長 */
    19961915                tcp_respond(input, cep, tcph->seq + tcph->sum, 0, rbfree, TCP_FLG_RST | TCP_FLG_ACK);
    19971916                }
    19981917
    1999         /* input は tcp_respoond で返却される。*/
     1918        /* input は tcp_respoond で返却される。*/
    20001919        NET_COUNT_TCP(net_count_tcp[NC_TCP_SEND_RSTS], 1);
    20011920        NET_COUNT_MIB(tcp_stats.tcpOutRsts, 1);
  • EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/tcp_output.c

    • Property svn:keywords deleted
    • Property svn:mime-type changed from text/x-csrc to text/x-csrc;charset=UTF-8
    r270 r321  
    55 *                   Tomakomai National College of Technology, JAPAN
    66 *
    7  *  上記著作権è€
    8 ã¯ï¼Œä»¥ä¸‹ã® (1)~(4) の条件か,Free Software Foundation
    9  *  によってå
    10 ¬è¡¨ã•ã‚Œã¦ã„ã‚‹ GNU General Public License の Version 2 に記
    11  *  述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
    12  *  を改変したものを含む.以下同じ)を使用・複製・改変・再é
    13 å¸ƒï¼ˆä»¥ä¸‹ï¼Œ
    14  *  利用と呼ぶ)することを無償で許諾する.
    15  *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
    16  *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
    17  *      スコード中に含まれていること.
    18  *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
    19  *      用できる形で再é
    20 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é
    21 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
    22  *      è€
    23 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—作権表示,この利用条件および下記
    24  *      の無保証規定を掲載すること.
    25  *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
    26  *      用できない形で再é
    27 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®æ¡ä»¶ã‚’満たすこと.
    28  *    (a) 再é
    29 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€
    30 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—
    31  *        作権表示,この利用条件および下記の無保証規定を掲載すること.
    32  *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
    33  *      害からも,上記著作権è€
    34 ãŠã‚ˆã³TOPPERSプロジェクトをå
    35 è²¬ã™ã‚‹ã“と.
     7 *  上記著作権者は,以下の (1)~(4) の条件か,Free Software Foundation
     8 *  によって公表されている GNU General Public License の Version 2 に記
     9 *  述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
     10 *  を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下,
     11 *  利用と呼ぶ)することを無償で許諾する.
     12 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     13 *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     14 *      スコード中に含まれていること.
     15 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     16 *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     17 *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     18 *      の無保証規定を掲載すること.
     19 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     20 *      用できない形で再配布する場合には,次の条件を満たすこと.
     21 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     22 *        作権表示,この利用条件および下記の無保証規定を掲載すること.
     23 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     24 *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
    3625 *
    37  *  本ソフトウェアは,無保証で提供されているものである.上記著作権è€
    38 ãŠ
    39  *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
    40  *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
    41  *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
     26 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     27 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
     28 *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
     29 *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
    4230 *
    4331 *  @(#) $Id$
     
    127115
    128116/*
    129  *  関数
     117 *  関数
    130118 */
    131119
     
    134122
    135123/*
    136  *  変数
     124 *  変数
    137125 */
    138126
    139 /* 出力時のフラグを FSM 状æ
    140 ‹ã«ã‚ˆã‚Šé¸æŠžã™ã‚‹ãŸã‚ã®è¡¨ */
     127/* 出力時のフラグを FSM 状態により選択するための表 */
    141128
    142129const static uint8_t tcp_outflags[] = {
    143         TCP_FLG_RST | TCP_FLG_ACK,      /*  0, クローズ                             */
    144         0,                              /*  1, 受動オープン                       */
    145         TCP_FLG_SYN,                    /*  2, 能動オープン、SYN 送信済み    */
    146         TCP_FLG_SYN | TCP_FLG_ACK,      /*  3, SYM を受信し、SYN 送信済み      */
    147         TCP_FLG_ACK,                    /*  4, コネクション開設完了           */
    148         TCP_FLG_ACK,                    /*  5, FIN 受信、クローズå¾
    149 ã¡             */
    150         TCP_FLG_FIN | TCP_FLG_ACK,      /*  6, 終了して、FIN 送信済み          */
    151         TCP_FLG_FIN | TCP_FLG_ACK,      /*  7, 終了、FIN 交換済み、ACK å¾
    152 ã¡     */
    153         TCP_FLG_FIN | TCP_FLG_ACK,      /*  8, FIN 受信、終了、ACK å¾
    154 ã¡             */
    155         TCP_FLG_ACK,                    /*  9, 終了、FIN 伝達確認受信、FINå¾
    156 ã¡     */
    157         TCP_FLG_ACK,                    /* 10, 終了、時間å¾
    158 ã¡                     */
     130        TCP_FLG_RST | TCP_FLG_ACK,      /*  0, クローズ                             */
     131        0,                              /*  1, 受動オープン                   */
     132        TCP_FLG_SYN,                    /*  2, 能動オープン、SYN 送信済み  */
     133        TCP_FLG_SYN | TCP_FLG_ACK,      /*  3, SYM を受信し、SYN 送信済み        */
     134        TCP_FLG_ACK,                    /*  4, コネクション開設完了               */
     135        TCP_FLG_ACK,                    /*  5, FIN 受信、クローズ待ち            */
     136        TCP_FLG_FIN | TCP_FLG_ACK,      /*  6, 終了して、FIN 送信済み            */
     137        TCP_FLG_FIN | TCP_FLG_ACK,      /*  7, 終了、FIN 交換済み、ACK 待ち       */
     138        TCP_FLG_FIN | TCP_FLG_ACK,      /*  8, FIN 受信、終了、ACK 待ち         */
     139        TCP_FLG_ACK,                    /*  9, 終了、FIN 伝達確認受信、FIN待ち      */
     140        TCP_FLG_ACK,                    /* 10, 終了、時間待ち                  */
    159141        };
    160142
    161143/*
    162  *  send_segment -- TCP 出力処理
     144 *  send_segment -- TCP 出力処理
    163145 */
    164146
     
    190172
    191173        /*
    192          *  セグメント長を、相手の最大受信セグメント長に調整する。
    193          *  もし、è¶
    194 ãˆã¦ã„る場合は、è¶
    195 ãˆãŸåˆ†ã‚’後で送信する。
    196          *  このため、FIN ビットをクリアする。
     174         *  セグメント長を、相手の最大受信セグメント長に調整する。
     175         *  もし、超えている場合は、超えた分を後で送信する。
     176         *  このため、FIN ビットをクリアする。
    197177         *
    198          *  オリジナルでは、t_maxopd を制限長にしているが、
    199          *  本実è£
    200 ã§ã¯ã€ç›¸æ‰‹ã®æœ€å¤§å—信セグメントにする。
     178         *  オリジナルでは、t_maxopd を制限長にしているが、
     179         *  本実装では、相手の最大受信セグメントにする。
    201180         */
    202181        if (len + optlen > cep->maxseg) {
     
    207186
    208187        /*
    209          *  送信バッファが空になるときは PUSH フラグを設定する。
     188         *  送信バッファが空になるときは PUSH フラグを設定する。
    210189         */
    211190        if (len && doff + len >= cep->swbuf_count)
     
    218197
    219198                /*
    220                  *  送信ウインドバッファが開放されないようにして、
    221                  *  ネットワークバッファを出力に移す。
     199                 *  送信ウインドバッファが開放されないようにして、
     200                 *  ネットワークバッファを出力に移す。
    222201                 */
    223202                cep->swbufq->flags |= NB_FLG_NOREL_IFOUT;
     
    227206
    228207                /*
    229                  *  ACK 完了状æ
    230 ‹ã§ã€ã“の関数が呼び出されることもある。
    231                  *  この時は、len を 0 にして、処理を継続する。
     208                 *  ACK 完了状態で、この関数が呼び出されることもある。
     209                 *  この時は、len を 0 にして、処理を継続する。
    232210                 */
    233211                len = 0;
     
    256234
    257235                /*
    258                  *  送信ウインドバッファが開放されないようにして、
    259                  *  ネットワークバッファを出力に移す。
     236                 *  送信ウインドバッファが開放されないようにして、
     237                 *  ネットワークバッファを出力に移す。
    260238                 */
    261239                cep->swbufq->flags |= NB_FLG_NOREL_IFOUT;
     
    265243
    266244                /*
    267                  *  ACK 完了状æ
    268 ‹ã§ã€ã“の関数が呼び出されることもある。
    269                  *  この時は、len を 0 にして、処理を継続する。
     245                 *  ACK 完了状態で、この関数が呼び出されることもある。
     246                 *  この時は、len を 0 にして、処理を継続する。
    270247                 */
    271248                len = 0;
     
    292269
    293270        /*
    294          *  TCP オプションの設定を行う。
    295          *  本実è£
    296 ã§ã¯ã€æœ€å¤§ã‚»ã‚°ãƒ¡ãƒ³ãƒˆã‚µã‚¤ã‚ºã®ã¿è¨­å®šã™ã‚‹ã€‚
     271         *  TCP オプションの設定を行う。
     272         *  本実装では、最大セグメントサイズのみ設定する。
    297273         */
    298274        if (flags & TCP_FLG_SYN) {
     
    310286                }
    311287
    312         /* TCP SDU に送信データをコピーする。*/
     288        /* TCP SDU に送信データをコピーする。*/
    313289
    314290        if (len > 0) {
     
    336312
    337313        /*
    338          * snd_max: 送信した最大 SEQ
    339          * snd_nxt: 次に送信する SEQ
     314         * snd_max: 送信した最大 SEQ
     315         * snd_nxt: 次に送信する SEQ
    340316         *
    341          *  相手から FIN を受信し、まだ FIN を送信していないか、
    342          *  送るデータがないときは、FIN を相手に届けるため、
    343          *  セグメントを送信するが、SEQ は進めない。
     317         *  相手から FIN を受信し、まだ FIN を送信していないか、
     318         *  送るデータがないときは、FIN を相手に届けるため、
     319         *  セグメントを送信するが、SEQ は進めない。
    344320         */
    345321        if ((flags & TCP_FLG_FIN) && (cep->flags & TCP_CEP_FLG_SENT_FIN) &&
     
    351327
    352328        /*
    353          *  SEQ、ACK、フラグの設定。
     329         *  SEQ、ACK、フラグの設定。
    354330         */
    355331        if (len > 0 || (flags & (TCP_FLG_SYN | TCP_FLG_FIN)) || cep->timer[TCP_TIM_PERSIST] != 0)
     
    359335
    360336        /*
    361          *  rcv_nxt: 受信を期å¾
    362 ã—ている最小の SEQ
     337         *  rcv_nxt: 受信を期待している最小の SEQ
    363338         */
    364339        tcph->ack   = htonl(cep->rcv_nxt);
     
    366341
    367342        /*
    368          *  受信ウィンドの計算
     343         *  受信ウィンドの計算
    369344         *
    370          *  rbufsz: 受信用バッファサイズ
    371          *  maxseg: 相手の最大受信セグメントサイズ       
     345         *  rbufsz: 受信用バッファサイズ
     346         *  maxseg: 相手の最大受信セグメントサイズ     
    372347         */
    373348        if (win < (cep->rbufsz / 4) && win < cep->maxseg)
     
    375350
    376351        /*
    377          *  rcv_nxt: 受信を期å¾
    378 ã—ている最小の SEQ
    379          *  rcv_adv: 受信を期å¾
    380 ã—ている最大の SEQ
     352         *  rcv_nxt: 受信を期待している最小の SEQ
     353         *  rcv_adv: 受信を期待している最大の SEQ
    381354         */
    382355        if ((int32_t)win < (int32_t)(cep->rcv_adv - cep->rcv_nxt))
     
    388361
    389362        /*
    390          *  緊急ポインタの設定
     363         *  緊急ポインタの設定
    391364         */
    392365        if (SEQ_GT(cep->snd_up, cep->snd_nxt)) {
     
    403376
    404377        /*
    405          *  チェックサムを設定する。
     378         *  チェックサムを設定する。
    406379         */
    407380        tcph->sum = 0;
     
    409382                             GET_TCP_HDR_SIZE2(output, IF_IP_TCP_HDR_OFFSET) + len);
    410383
    411         /* ネットワークバッファ長を調整する。*/
     384        /* ネットワークバッファ長を調整する。*/
    412385        output->len = (uint16_t)(GET_IF_IP_TCP_HDR_SIZE2(output, IF_IP_TCP_HDR_OFFSET) + len);
    413386
    414387        /*
    415          *  タイマの調整
     388         *  タイマの調整
    416389         */
    417390        if ((cep->flags & TCP_CEP_FLG_FORCE) == 0 || cep->timer[TCP_TIM_PERSIST] == 0) {
     
    419392
    420393                /*
    421                  *  次に送信する SEQ (snd_nxt) を今回送信するデータ数分進める。
     394                 *  次に送信する SEQ (snd_nxt) を今回送信するデータ数分進める。
    422395                 */
    423396                if (flags & TCP_FLG_SYN)
     
    431404
    432405                /*
    433                  *  次に送信する SEQ (snd_nxt) が
    434                  *  送信した最大 SEQ (snd_max) より進んでいれば、
    435                  *  送信した最大 SEQ (snd_max) を更新する。
     406                 *  次に送信する SEQ (snd_nxt) が
     407                 *  送信した最大 SEQ (snd_max) より進んでいれば、
     408                 *  送信した最大 SEQ (snd_max) を更新する。
    436409                 */
    437410                if (SEQ_GT(cep->snd_nxt, cep->snd_max)) {
    438411                        cep->snd_max = cep->snd_nxt;
    439412                        /*
    440                          *  もし、往復時間計測を行っていなければ、
    441                          *  この送信に時間を合わせる。
     413                         *  もし、往復時間計測を行っていなければ、
     414                         *  この送信に時間を合わせる。
    442415                         */
    443416                        if (cep->rtt == 0) {
    444417                                cep->rtt   = 1;
    445                                 cep->rtseq = startseq;  /* 更新前の cep->snd_nxt */
    446                                 }
    447                         }
    448 
    449                 /*
    450                  *  もし設定されていないか、ACK または保留が発生していなければ、
    451                  *  再送タイマを設定する。設定する初期値は、
    452                  * 「滑らかな往復時間 + 2 × 往復時間変動」である。
    453                  *  再送時間のバックオフに使われるシフトカウントも初期化する。
     418                                cep->rtseq = startseq;  /* 更新前の cep->snd_nxt */
     419                                }
     420                        }
     421
     422                /*
     423                 *  もし設定されていないか、ACK または保留が発生していなければ、
     424                 *  再送タイマを設定する。設定する初期値は、
     425                 * 「滑らかな往復時間 + 2 × 往復時間変動」である。
     426                 *  再送時間のバックオフに使われるシフトカウントも初期化する。
    454427                 */
    455428                if (cep->timer[TCP_TIM_REXMT] == 0 && cep->snd_nxt != cep->snd_una) {
     
    463436
    464437        /*
    465          *  次に送信する SEQ (snd_nxt) + 今回送信するデータ数 (len) が
    466          *  送信した最大 SEQ (snd_max) より進んでいれば、
    467          *  送信した最大 SEQ (snd_max) を更新する。
     438         *  次に送信する SEQ (snd_nxt) + 今回送信するデータ数 (len) が
     439         *  送信した最大 SEQ (snd_max) より進んでいれば、
     440         *  送信した最大 SEQ (snd_max) を更新する。
    468441         */
    469442        else if (SEQ_GT(cep->snd_nxt + len, cep->snd_max))
     
    483456#endif  /* of #ifdef TCP_CFG_TRACE */
    484457
    485         /* ネットワーク層 (IP) の出力関数を呼び出す。*/
     458        /* ネットワーク層 (IP) の出力関数を呼び出す。*/
    486459        if ((error = IP_OUTPUT(output, TMO_TCP_OUTPUT)) != E_OK)
    487460                goto err_ret;
    488461
    489462        /*
    490          *  相手に伝えたウィンドウサイズ (win) が 0 以上で、
    491          *  受信を期å¾
    492 ã—ている最小の SEQ (rcv_nxt) + win が
    493          *  受信を期å¾
    494 ã—ている最大の SEQ (rcv_adv) より進んでいれば
    495          *  受信を期å¾
    496 ã—ている最大の SEQ を更新する。
     463         *  相手に伝えたウィンドウサイズ (win) が 0 以上で、
     464         *  受信を期待している最小の SEQ (rcv_nxt) + win が
     465         *  受信を期待している最大の SEQ (rcv_adv) より進んでいれば
     466         *  受信を期待している最大の SEQ を更新する。
    497467         */
    498468        if (win > 0 && SEQ_GT(cep->rcv_nxt + win, cep->rcv_adv)) {
     
    501471
    502472        /*
    503          *  最後に送信した ACK (last_ack_sent) を更新する。
     473         *  最後に送信した ACK (last_ack_sent) を更新する。
    504474         */
    505475        cep->last_ack_sent = cep->rcv_nxt;
    506476
    507477        /*
    508          *  フラグの設定を行う。
     478         *  フラグの設定を行う。
    509479         */
    510480        cep->flags &= ~(TCP_CEP_FLG_ACK_NOW | TCP_CEP_FLG_DEL_ACK);
     
    516486err_ret:
    517487        /*
    518          * 以下に関係しないフラグをクリアーする。
    519          * ・送受信ウィンドバッファの省コピー機能
    520          * ・動的な通信端点の生成・削除機能
     488         * 以下に関係しないフラグをクリアーする。
     489         * ・送受信ウィンドバッファの省コピー機能
     490         * ・動的な通信端点の生成・削除機能
    521491         */
    522492        cep->flags &= (TCP_CEP_FLG_WBCS_NBUF_REQ | TCP_CEP_FLG_WBCS_MASK |
     
    527497
    528498/*
    529  *  tcp_output -- TCP 出力処理
     499 *  tcp_output -- TCP 出力処理
    530500 */
    531501
     
    540510
    541511        /*
    542          *  snd_una: 未確認の最小送信 SEQ        または、確認された最大送信 SEQ
    543          *  snd_max: 送信した最大 SEQ
     512         *  snd_una: 未確認の最小送信 SEQ        または、確認された最大送信 SEQ
     513         *  snd_max: 送信した最大 SEQ
    544514         */
    545515        idle = (cep->snd_max == cep->snd_una);
    546516
    547517        /*
    548          *  idle:   ã‚¢ã‚¤ãƒ‰ãƒ«æ™‚é–“
    549          *  rxtcur: 現在の再送タイムアウト
     518         *  idle:   アイドル時間
     519         *  rxtcur: 現在の再送タイムアウト
    550520         */
    551521        if (idle && cep->idle >= cep->rxtcur)
    552522
    553523                /*
    554                  *  snd_cwnd: 輻輳ウィンドサイズ
    555                  *  maxseg  : 相手の最大受信セグメントサイズ
     524                 *  snd_cwnd: 輻輳ウィンドサイズ
     525                 *  maxseg  : 相手の最大受信セグメントサイズ
    556526                 *
    557                  *  長時間アイドルだったのでスロースタート制御に設定する。
     527                 *  長時間アイドルだったのでスロースタート制御に設定する。
    558528                 */
    559529                cep->snd_cwnd = cep->maxseg;
     
    563533
    564534                /*
    565                  *  snd_nxt: 次に送信する SEQ、この時点では、前回送信した SEQ
    566                  *  snd_una: 未確認の最小送信 SEQ、または確認された最大送信 SEQ
     535                 *  snd_nxt: 次に送信する SEQ、この時点では、前回送信した SEQ
     536                 *  snd_una: 未確認の最小送信 SEQ、または確認された最大送信 SEQ
    567537                 *
    568                  *  doff: 送信を開始するオフセット。
    569                  *                                    swbuf_count (送信バッファにあるオクテット数)
     538                 *  doff: 送信を開始するオフセット。
     539                 *                                    swbuf_count (送信バッファにあるオクテット数)
    570540                 *    0                               V
    571541                 *    +-------------------------------------------+
     
    573543                 *    +-------------------------------------------+
    574544                 *    ^               ^
    575                  *    |<------------->snd_nxt (前回送信した SEQ)
     545                 *    |<------------->snd_nxt (前回送信した SEQ)
    576546                 *    |       doff
    577                  *    snd_una (まだ確認されていない)
     547                 *    snd_una (まだ確認されていない)
    578548                 */
    579549                doff = (uint_t)(cep->snd_nxt - cep->snd_una);
    580550
    581551                /*
    582                  *  snd_wnd:  相手の受信可能ウィンドサイズ
    583                  *  snd_cwnd: 輻輳ウィンドサイズ
     552                 *  snd_wnd:  相手の受信可能ウィンドサイズ
     553                 *  snd_cwnd: 輻輳ウィンドサイズ
    584554                 *
    585                  *  win: どちらか小さいウィンドサイズに設定する。
     555                 *  win: どちらか小さいウィンドサイズに設定する。
    586556                 */
    587557                win   = cep->snd_wnd < cep->snd_cwnd ? cep->snd_wnd : cep->snd_cwnd;
    588558       
    589                 /* 出力フラグの設定 */
     559                /* 出力フラグの設定 */
    590560                flags = tcp_outflags[cep->fsm_state];
    591561                if (cep->flags & TCP_CEP_FLG_NEED_FIN)
     
    596566
    597567                        /*
    598                          *  もし、送信ウインドサイズ (win) が 0 なら 1 オクテット送信する。
    599                          *  そうでなければ、持続タイムアウトをキャンセルし、
    600                          *  再送信回数 (rxtshift) を 0 にする。
     568                         *  もし、送信ウインドサイズ (win) が 0 なら 1 オクテット送信する。
     569                         *  そうでなければ、持続タイムアウトをキャンセルし、
     570                         *  再送信回数 (rxtshift) を 0 にする。
    601571                         */
    602572                        if (win == 0) {
    603573
    604574                                /*
    605                                  *  doff:        送信するオクテット数。
    606                                  *  swbuf_count: 送信バッファの使用中サイズ
     575                                 *  doff:        送信するオクテット数。
     576                                 *  swbuf_count: 送信バッファの使用中サイズ
    607577                                 *
    608                                  *  送信バッファに残っているオクテットが、これから
    609                                  *  送信しようとしているオクテット数より多ければ
    610                                  *  FIN フラグをクリアする。
     578                                 *  送信バッファに残っているオクテットが、これから
     579                                 *  送信しようとしているオクテット数より多ければ
     580                                 *  FIN フラグをクリアする。
    611581                                 */
    612582                                if (doff < cep->swbuf_count)
     
    616586                        else {
    617587                                /*
    618                                  *  TCP_TIM_PERSIST: 持続タイマ
    619                                  *  rxtshift:        再送信回数の log(2)
     588                                 *  TCP_TIM_PERSIST: 持続タイマ
     589                                 *  rxtshift:        再送信回数の log(2)
    620590                                 */
    621591                                cep->timer[TCP_TIM_PERSIST] = 0;
     
    625595
    626596                /*
    627                  *  len: 今回送信するオクテット数
    628                  *        swbuf_count (送信バッファにあるオクテット数)
     597                 *  len: 今回送信するオクテット数
     598                 *        swbuf_count (送信バッファにあるオクテット数)
    629599                 *                                    |
    630600                 *    0                               V
     
    634604                 *    ^               ^<------------->
    635605                 *    |               |      len
    636                  *    |<------------->snd_nxt (前回送信した SEQ)
     606                 *    |<------------->snd_nxt (前回送信した SEQ)
    637607                 *    |       doff
    638                  *    snd_una (まだ確認されていない)
     608                 *    snd_una (まだ確認されていない)
    639609                 */
    640610                if (cep->swbuf_count < win)
     
    644614
    645615                /*
    646                  *  すでに送信されていれば、SYN ビットをオフする。
    647                  *  しかし、以下の条件では送信を控える。
     616                 *  すでに送信されていれば、SYN ビットをオフする。
     617                 *  しかし、以下の条件では送信を控える。
    648618                 *
    649                  *    ・状æ
    650 ‹ãŒ SYN 送信。
    651                  *    ・セグメントがデータを含んでいる。
     619                 *    ・状態が SYN 送信。
     620                 *    ・セグメントがデータを含んでいる。
    652621                 */
    653622                if ((flags & TCP_FLG_SYN) && SEQ_GT(cep->snd_nxt, cep->snd_una)) {
    654623                        flags &= ~TCP_FLG_SYN;
    655                         doff --;                /* -1 は SYN フラグ分 */
    656                         len ++;                 /* +1 は SYN フラグ分 */
     624                        doff --;                /* -1 は SYN フラグ分 */
     625                        len ++;                 /* +1 は SYN フラグ分 */
    657626                        if (len > 0 && cep->fsm_state == TCP_FSM_SYN_SENT)
    658627                                break;
     
    667636
    668637                        /*
    669                          *  len が 0 以下なら、0 に設定する。
    670                          *  もし、送信ウィンドウサイズが 0 なら、
    671                          *  再送信タイマをキャンセルし、
    672                          *  前回送信した SEQ (snd_nxt) を
    673                          *  確認された最大送信 SEQ (snd_una) に戻す。
    674                          *  そして、持続タイマーが止まっていれば、再設定する。
     638                         *  len が 0 以下なら、0 に設定する。
     639                         *  もし、送信ウィンドウサイズが 0 なら、
     640                         *  再送信タイマをキャンセルし、
     641                         *  前回送信した SEQ (snd_nxt) を
     642                         *  確認された最大送信 SEQ (snd_una) に戻す。
     643                         *  そして、持続タイマーが止まっていれば、再設定する。
    675644                         */
    676645                        len = 0;
     
    686655
    687656                /*
    688                  *  今回送信するオクテット数 (len) は、
    689                  *  相手の最大受信セグメントサイズ (maxseg) をè¶
    690 ãˆãªã„ようにする。
     657                 *  今回送信するオクテット数 (len) は、
     658                 *  相手の最大受信セグメントサイズ (maxseg) を超えないようにする。
    691659                 */
    692660                if (len > cep->maxseg) {
     
    696664
    697665                /*
    698                  *        swbuf_count (送信バッファにあるオクテット数)
     666                 *        swbuf_count (送信バッファにあるオクテット数)
    699667                 *                                           |
    700668                 *    0                                      V
     
    704672                 *    ^               ^<------------->
    705673                 *    |               |      len
    706                  *    |<------------->snd_nxt (前回送信した SEQ)
     674                 *    |<------------->snd_nxt (前回送信した SEQ)
    707675                 *    |       doff
    708                  *    snd_una (まだ確認されていない)
     676                 *    snd_una (まだ確認されていない)
    709677                 *
    710                  *  今回送信後も、送信バッファにデータが残っていれば
    711                  *  FIN フラグをクリアする。
     678                 *  今回送信後も、送信バッファにデータが残っていれば
     679                 *  FIN フラグをクリアする。
    712680                 */
    713681                if (SEQ_LT(cep->snd_nxt + len, cep->snd_una + cep->swbuf_count))
     
    715683
    716684                /*
    717                  *  ここから win は、受信ウィンドウサイズ。
    718                  *  受信バッファの空き容量
     685                 *  ここから win は、受信ウィンドウサイズ。
     686                 *  受信バッファの空き容量
    719687                 */
    720688                win = cep->rbufsz - cep->rwbuf_count;
    721689
    722690                /*
    723                  *  愚かなウィンドウ・シンドロームの回避処理 (送信側)
     691                 *  愚かなウィンドウ・シンドロームの回避処理 (送信側)
    724692                 *
    725                  *  以下の条件で、送信を行う。
     693                 *  以下の条件で、送信を行う。
    726694                 *
    727                  *    ・フルサイズ (maxseg) のセグメントを送ることができる。
    728                  *    ・相手の最大の受信ウィンドウサイズの 1/2 のデータを
    729                  *      送ることができる。
    730                  *    ・送信バッファを空にでき、アイドルか非é
    731 å»¶ã‚ªãƒ—ションが有効なとき。
     695                 *    ・フルサイズ (maxseg) のセグメントを送ることができる。
     696                 *    ・相手の最大の受信ウィンドウサイズの 1/2 のデータを
     697                 *      送ることができる。
     698                 *    ・送信バッファを空にでき、アイドルか非遅延オプションが有効なとき。
    732699                 */
    733700                if (len) {
    734701
    735702                        /*
    736                          *  今回送信するオクテット数 (len) が
    737                          *  相手の最大受信セグメントサイズ (maxseg) に
    738                          *  一致するときは送信する。
     703                         *  今回送信するオクテット数 (len) が
     704                         *  相手の最大受信セグメントサイズ (maxseg) に
     705                         *  一致するときは送信する。
    739706                         */
    740707                        if (len == cep->maxseg) {
     
    744711
    745712                        /*
    746                          *  今回の送信で、送信バッファを空にでき、
    747                          *  アイドルか非 PUSH オプションが有効なとき。
     713                         *  今回の送信で、送信バッファを空にでき、
     714                         *  アイドルか非 PUSH オプションが有効なとき。
    748715                         */
    749716                        if ((idle || (cep->flags & TCP_CEP_FLG_NO_DELAY)) &&
     
    755722
    756723                        /*
    757                          *  max_sndwnd: 今までの最大送信ウィンドサイズ
    758                          *  snd_nxt:    次に送信する SEQ
    759                          *  snd_max:    送信した最大 SEQ
     724                         *  max_sndwnd: 今までの最大送信ウィンドサイズ
     725                         *  snd_nxt:    次に送信する SEQ
     726                         *  snd_max:    送信した最大 SEQ
    760727                         *
    761                          *  次の条件では送信を行う。
     728                         *  次の条件では送信を行う。
    762729                         *
    763                          *    ・強制送信フラグがセットされている。
    764                          *    ・データ長が相手の最大の受信ウィンドウサイズの 1/2 以上で、
    765                          *      相手の最大の受信ウィンドウサイズが 0 より大きい。
    766                          *    ・次に送信する SEQ が送信した最大 SEQ より小さい、
    767                          *      つまり、再送するとき。
     730                         *    ・強制送信フラグがセットされている。
     731                         *    ・データ長が相手の最大の受信ウィンドウサイズの 1/2 以上で、
     732                         *      相手の最大の受信ウィンドウサイズが 0 より大きい。
     733                         *    ・次に送信する SEQ が送信した最大 SEQ より小さい、
     734                         *      つまり、再送するとき。
    768735                         */
    769736                        if ((cep->flags & TCP_CEP_FLG_FORCE) ||
     
    777744
    778745                /*
    779                  *  愚かなウィンドウ・シンドロームの回避処理 (受信側)
     746                 *  愚かなウィンドウ・シンドロームの回避処理 (受信側)
    780747                 *
    781                  *  ウィンドウサイズがフルサイズの 2 倍のセグメント、あるいは
    782                  *  受信バッファ容量の 1/2 の、いずれか小さいほうの
    783                  *  サイズで増加される場合は、ウィンドウサイズの更新を行う。
     748                 *  ウィンドウサイズがフルサイズの 2 倍のセグメント、あるいは
     749                 *  受信バッファ容量の 1/2 の、いずれか小さいほうの
     750                 *  サイズで増加される場合は、ウィンドウサイズの更新を行う。
    784751                 */
    785752                if (win > 0) {
     
    787754
    788755                        /*
    789                          *  win:              受信バッファの空き容量
    790                          *  MAX_TCP_WIN_SIZE: TCP ヘッダの win フィールドに設定できる最大値
    791                          *  rcv_adv:          受信を期å¾
    792 ã—ている最大の SEQ
    793                          *  rcv_nxt:          受信を期å¾
    794 ã—ている最小の SEQ
     756                         *  win:              受信バッファの空き容量
     757                         *  MAX_TCP_WIN_SIZE: TCP ヘッダの win フィールドに設定できる最大値
     758                         *  rcv_adv:          受信を期待している最大の SEQ
     759                         *  rcv_nxt:          受信を期待している最小の SEQ
    795760                         */
    796761                        if (win < MAX_TCP_WIN_SIZE)
     
    807772       
    808773                /*
    809                  *  ACK を送信する。
     774                 *  ACK を送信する。
    810775                 */
    811776                if (cep->flags & TCP_CEP_FLG_ACK_NOW) {
     
    830795
    831796                /*
    832                  *  snd_nxt: 次に送信する SEQ
    833                  *  snd_una: 未確認の最小送信 SEQ、または確認された最大送信 SEQ
     797                 *  snd_nxt: 次に送信する SEQ
     798                 *  snd_una: 未確認の最小送信 SEQ、または確認された最大送信 SEQ
    834799                 *
    835                  *  相手から FIN を受信し、まだ FIN を送信していないか、
    836                  *  送るデータがないときは、FIN を相手に届けるため、
    837                  *  セグメントを送信する。
     800                 *  相手から FIN を受信し、まだ FIN を送信していないか、
     801                 *  送るデータがないときは、FIN を相手に届けるため、
     802                 *  セグメントを送信する。
    838803                 */
    839804                if ((flags & TCP_FLG_FIN) &&
     
    844809
    845810                /*
    846                  *  送信すべきデータがあり、再送タイマと持続タイマが切れているときは
    847                  *  持続タイマを設定する。
     811                 *  送信すべきデータがあり、再送タイマと持続タイマが切れているときは
     812                 *  持続タイマを設定する。
    848813                 */
    849814                if (cep->swbuf_count && cep->timer[TCP_TIM_REXMT  ] == 0 &&
     
    860825
    861826/*
    862  *  tcptsk_alloc_swbufq -- 送信ウィンドバッファ割り当て
     827 *  tcptsk_alloc_swbufq -- 送信ウィンドバッファ割り当て
    863828 */
    864829
     
    870835
    871836        /*
    872          *  snd_wnd:  相手の受信可能ウィンドサイズ
    873          *  snd_cwnd: 輻輳ウィンドサイズ
     837         *  snd_wnd:  相手の受信可能ウィンドサイズ
     838         *  snd_cwnd: 輻輳ウィンドサイズ
    874839         *
    875          *  win: どちらか小さいウィンドサイズに設定する。
     840         *  win: どちらか小さいウィンドサイズに設定する。
    876841         */
    877842        win = cep->snd_wnd < cep->snd_cwnd ? cep->snd_wnd : cep->snd_cwnd;
    878843
    879844        /*
    880          *  相手の受信ウィンドが閉じている場合は、開くまでå¾
    881 æ©Ÿã™ã‚‹ã€‚
     845         *  相手の受信ウィンドが閉じている場合は、開くまで待機する。
    882846         */
    883847        if (win == 0) {
     
    888852#ifdef TCP_CFG_NON_BLOCKING
    889853
    890                 /* ノンブロッキングコール */
     854                /* ノンブロッキングコール */
    891855                if (!IS_PTR_DEFINED(cep->callback)) {
    892856                        syslog(LOG_WARNING, "[TCP] no call back, CEP: %d.", GET_TCP_CEPID(cep));
    893857
    894                         /* 記憶されているタスク ID と API 機能コードをクリアーする。*/
     858                        /* 記憶されているタスク ID と API 機能コードをクリアーする。*/
    895859                        cep->snd_tskid = TA_NULL;
    896860                        cep->snd_tfn   = cep->snd_nblk_tfn = TFN_TCP_UNDEF;
     
    907871                                                   (GET_TCP_CEPID(cep) & NBA_ID_MASK)), TMO_POL)) != E_OK) {
    908872
    909                         /* ネットワークバッファを予約する。*/
     873                        /* ネットワークバッファを予約する。*/
    910874                        cep->flags = (cep->flags & ~TCP_CEP_FLG_WBCS_MASK) | TCP_CEP_FLG_WBCS_NBUF_PEND;
    911875                        }
    912876                else {
    913877
    914                         /* 送信ウィンドバッファを初期化する。*/
     878                        /* 送信ウィンドバッファを初期化する。*/
    915879                        tcp_init_swbuf(cep);
    916880
     
    921885                                uint_t len;
    922886
    923                                 /* 送信ウィンドバッファの書き込みアドレスを設定する。*/
     887                                /* 送信ウィンドバッファの書き込みアドレスを設定する。*/
    924888                                len = TCP_GET_SWBUF_ADDR(cep, cep->snd_p_buf);
    925889
    926890#ifdef TCP_CFG_NON_BLOCKING_COMPAT14
    927891
    928                                 /* コールバック関数を呼び出す。*/
     892                                /* コールバック関数を呼び出す。*/
    929893                                (*cep->callback)(GET_TCP_CEPID(cep), cep->snd_nblk_tfn, (void*)(uint32_t)len);
    930894
    931895#else   /* of #ifdef TCP_CFG_NON_BLOCKING_COMPAT14 */
    932896
    933                                 /* コールバック関数を呼び出す。*/
     897                                /* コールバック関数を呼び出す。*/
    934898                                (*cep->callback)(GET_TCP_CEPID(cep), cep->snd_nblk_tfn, (void*)&len);
    935899
     
    937901
    938902
    939                                 /* 記憶されているタスク ID と API 機能コードをクリアーする。*/
     903                                /* 記憶されているタスク ID と API 機能コードをクリアーする。*/
    940904                                cep->snd_tskid = TA_NULL;
    941905                                cep->snd_tfn   = cep->snd_nblk_tfn = TFN_TCP_UNDEF;
     
    947911                                uint_t len;
    948912
    949                                 /* 送信ウィンドバッファにデータを書き込む。*/
     913                                /* 送信ウィンドバッファにデータを書き込む。*/
    950914                                len = TCP_WRITE_SWBUF(cep, cep->snd_data, (uint_t)cep->snd_len);
    951915
    952916#ifdef TCP_CFG_EXTENTIONS
    953917
    954                                 /* 送信緊急ポインタを設定する。*/
     918                                /* 送信緊急ポインタを設定する。*/
    955919                                if (cep->snd_nblk_tfn == TFN_TCP_SND_OOB)
    956920                                        cep->snd_up = cep->snd_una + len;
     
    958922#endif  /* of #ifdef TCP_CFG_EXTENTIONS */
    959923
    960                                 /* フラグを、送信可能に設定し、強制的に送信する。*/
     924                                /* フラグを、送信可能に設定し、強制的に送信する。*/
    961925                                cep->flags |= TCP_CEP_FLG_FORCE | TCP_CEP_FLG_FORCE_CLEAR | TCP_CEP_FLG_POST_OUTPUT;
    962926#ifdef TCP_CFG_NON_BLOCKING_COMPAT14
    963927
    964                                 /* コールバック関数を呼び出す。*/
     928                                /* コールバック関数を呼び出す。*/
    965929                                (*cep->callback)(GET_TCP_CEPID(cep), cep->snd_nblk_tfn, (void*)(uint32_t)len);
    966930
    967931#else   /* of #ifdef TCP_CFG_NON_BLOCKING_COMPAT14 */
    968932
    969                                 /* コールバック関数を呼び出す。*/
     933                                /* コールバック関数を呼び出す。*/
    970934                                (*cep->callback)(GET_TCP_CEPID(cep), cep->snd_nblk_tfn, (void*)&len);
    971935
     
    973937
    974938
    975                                 /* 記憶されているタスク ID と API 機能コードをクリアーする。*/
     939                                /* 記憶されているタスク ID と API 機能コードをクリアーする。*/
    976940                                cep->snd_tskid = TA_NULL;
    977941                                cep->snd_tfn   = cep->snd_nblk_tfn = TFN_TCP_UNDEF;
     
    985949
    986950/*
    987  *  tcptsk_free_swbufq -- 送信ウィンドバッファ開放
     951 *  tcptsk_free_swbufq -- 送信ウィンドバッファ開放
    988952 */
    989953
     
    992956{
    993957        /*
    994          *  受信確認が完了し、ネットワークインタフェースからの
    995          *  出力も完了したときは、送信ウィンドバッファキューを解放する。
    996          */
    997 
    998         /* 送信ウィンドバッファの使用中サイズをリセットする。*/
     958         *  受信確認が完了し、ネットワークインタフェースからの
     959         *  出力も完了したときは、送信ウィンドバッファキューを解放する。
     960         */
     961
     962        /* 送信ウィンドバッファの使用中サイズをリセットする。*/
    999963        cep->swbuf_count = 0;
    1000964
    1001         /* 送信ウィンドバッファキューのネットワークバッファを解放する。*/
     965        /* 送信ウィンドバッファキューのネットワークバッファを解放する。*/
    1002966        syscall(rel_net_buf(cep->swbufq));
    1003967        cep->swbufq = NULL;
    1004968
    1005         /* フラグを空きに設定する。*/
     969        /* フラグを空きに設定する。*/
    1006970        cep->flags = (cep->flags & ~TCP_CEP_FLG_WBCS_MASK) | TCP_CEP_FLG_WBCS_FREE;
    1007971
    1008         /* 送信ウィンドバッファに空きができたことを知らせる。*/
     972        /* 送信ウィンドバッファに空きができたことを知らせる。*/
    1009973        syscall(set_flg(cep->snd_flgid, TCP_CEP_EVT_SWBUF_READY));
    1010974
    1011         /* 送信ウィンドバッファの空きå¾
    1012 ã¡ã®ã¨ãã¯ã€TCP 出力タスクを起動する。*/
     975        /* 送信ウィンドバッファの空き待ちのときは、TCP 出力タスクを起動する。*/
    1013976        if ((cep->flags & TCP_CEP_FLG_WBCS_NBUF_REQ) != 0) {
    1014977                sig_sem(SEM_TCP_POST_OUTPUT);
     
    1019982
    1020983/*
    1021  *  TCP 出力タスク
     984 *  TCP 出力タスク
    1022985 */
    1023986
     
    10381001#ifdef SUPPORT_INET6
    10391002
    1040         /* IPv6 のステートレス・アドレス自動設定を実行する。*/
     1003        /* IPv6 のステートレス・アドレス自動設定を実行する。*/
    10411004        in6_if_up(IF_GET_IFNET());
    10421005
     
    10451008        while (true) {
    10461009
    1047                 /* 出力がポストされるまでå¾
    1048 ã¤ã€‚*/
     1010                /* 出力がポストされるまで待つ。*/
    10491011                syscall(wai_sem(SEM_TCP_POST_OUTPUT));
    10501012
     
    10711033
    10721034                        /*
    1073                          *  ネットワークインタフェースから送信が終わっていないときは、
    1074                          *  送信を予約する。
     1035                         *  ネットワークインタフェースから送信が終わっていないときは、
     1036                         *  送信を予約する。
    10751037                         */
    10761038                        if (cep->flags & TCP_CEP_FLG_POST_OUTPUT &&
     
    10871049
    10881050                        /*
    1089                          *  送信予約中に、ネットワークインタフェースから送信が終了したら、
    1090                          *  送信を開始する。ただし、完å
    1091 ¨ã«é€ä¿¡ãŒçµ‚了したときは何もしない。
     1051                         *  送信予約中に、ネットワークインタフェースから送信が終了したら、
     1052                         *  送信を開始する。ただし、完全に送信が終了したときは何もしない。
    10921053                         */
    10931054                        if (cep->flags & TCP_CEP_FLG_RESERVE_OUTPUT) {
     
    11121073
    11131074                                        /*
    1114                                          *  tcp_con_cep のノンブロッキングコールで、
    1115                                          *  未割当のの場合は、ポート番号を割り当てる。
    1116                                          *  p_myaddr が NADR (-1) か、
    1117                                          *  自ポート番号が TCP_PORTANY なら、自動で割り当てる。
     1075                                         *  tcp_con_cep のノンブロッキングコールで、
     1076                                         *  未割当のの場合は、ポート番号を割り当てる。
     1077                                         *  p_myaddr が NADR (-1) か、
     1078                                         *  自ポート番号が TCP_PORTANY なら、自動で割り当てる。
    11181079                                         */
    11191080                                        if (cep->p_myaddr == NADR || cep->p_myaddr->portno == TCP_PORTANY)
     
    11361097                                                        syslog(LOG_WARNING, "[TCP] no call back, CEP: %d.", GET_TCP_CEPID(cep));
    11371098
    1138                                                 /* 記憶されているタスク ID と API 機能コードをクリアーする。*/
     1099                                                /* 記憶されているタスク ID と API 機能コードをクリアーする。*/
    11391100                                                cep->snd_tfn   = cep->snd_nblk_tfn = TFN_TCP_UNDEF;
    11401101                                                cep->snd_tskid = TA_NULL;
     
    11481109
    11491110                                if (cep->flags & TCP_CEP_FLG_CLOSE_AFTER_OUTPUT) {
    1150                                         /* コネクションを閉じる。*/
     1111                                        /* コネクションを閉じる。*/
    11511112                                        tcp_close(cep);
    11521113                                        cep->flags &= ~TCP_CEP_FLG_CLOSE_AFTER_OUTPUT;
     
    11541115
    11551116                                if (cep->flags & TCP_CEP_FLG_RESTORE_NEXT_OUTPUT) {
    1156                                         /* snd_nxt をå
    1157 ƒã«æˆ»ã™ã€‚*/
     1117                                        /* snd_nxt を元に戻す。*/
    11581118                                        if (SEQ_GT(cep->snd_old_nxt, cep->snd_nxt))
    11591119                                                cep->snd_nxt = cep->snd_old_nxt;
     
    11681128                        } while (ix != last_ix);
    11691129
    1170                 /* 次回は、処理した通信端点を後回しにする。*/
     1130                /* 次回は、処理した通信端点を後回しにする。*/
    11711131                last_ix = sel_ix;
    11721132                }
  • EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/tcp_seq.h

    • Property svn:keywords deleted
    • Property svn:mime-type changed from text/x-chdr to text/x-chdr;charset=UTF-8
    r270 r321  
    55 *                   Tomakomai National College of Technology, JAPAN
    66 *
    7  *  上記著作権è€
    8 ã¯ï¼Œä»¥ä¸‹ã® (1)~(4) の条件か,Free Software Foundation
    9  *  によってå
    10 ¬è¡¨ã•ã‚Œã¦ã„ã‚‹ GNU General Public License の Version 2 に記
    11  *  述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
    12  *  を改変したものを含む.以下同じ)を使用・複製・改変・再é
    13 å¸ƒï¼ˆä»¥ä¸‹ï¼Œ
    14  *  利用と呼ぶ)することを無償で許諾する.
    15  *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
    16  *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
    17  *      スコード中に含まれていること.
    18  *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
    19  *      用できる形で再é
    20 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é
    21 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
    22  *      è€
    23 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—作権表示,この利用条件および下記
    24  *      の無保証規定を掲載すること.
    25  *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
    26  *      用できない形で再é
    27 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®æ¡ä»¶ã‚’満たすこと.
    28  *    (a) 再é
    29 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€
    30 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—
    31  *        作権表示,この利用条件および下記の無保証規定を掲載すること.
    32  *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
    33  *      害からも,上記著作権è€
    34 ãŠã‚ˆã³TOPPERSプロジェクトをå
    35 è²¬ã™ã‚‹ã“と.
     7 *  上記著作権者は,以下の (1)~(4) の条件か,Free Software Foundation
     8 *  によって公表されている GNU General Public License の Version 2 に記
     9 *  述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
     10 *  を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下,
     11 *  利用と呼ぶ)することを無償で許諾する.
     12 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     13 *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     14 *      スコード中に含まれていること.
     15 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     16 *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     17 *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     18 *      の無保証規定を掲載すること.
     19 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     20 *      用できない形で再配布する場合には,次の条件を満たすこと.
     21 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     22 *        作権表示,この利用条件および下記の無保証規定を掲載すること.
     23 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     24 *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
    3625 *
    37  *  本ソフトウェアは,無保証で提供されているものである.上記著作権è€
    38 ãŠ
    39  *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
    40  *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
    41  *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
     26 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     27 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
     28 *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
     29 *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
    4230 *
    4331 *  @(#) $Id$
     
    8472
    8573/*
    86  *  SEQ と ACK 番号は、32 ビット符号付整数で比較する。
     74 *  SEQ と ACK 番号は、32 ビット符号付整数で比較する。
    8775 */
    8876
     
    9381
    9482/*
    95  *  関数シミュレーションマクロ
     83 *  関数シミュレーションマクロ
    9684 */
    9785
     
    9987
    10088/*
    101  *  å
    102 ¨åŸŸå¤‰æ•°
     89 *  全域変数
    10390 */
    10491
    105 extern T_TCP_SEQ tcp_iss;               /* TCP の SEQ の初期値 */
     92extern T_TCP_SEQ tcp_iss;               /* TCP の SEQ の初期値 */
    10693
    10794/*
    108  *  インライン関数
     95 *  インライン関数
    10996 */
    11097
    11198/*
    112  *  init_receive_seq -- 受信 SEQ 番号を初期化する。
     99 *  init_receive_seq -- 受信 SEQ 番号を初期化する。
    113100 */
    114101
     
    120107
    121108/*
    122  *  init_send_seq -- 送信 SEQ 番号を初期化する。
     109 *  init_send_seq -- 送信 SEQ 番号を初期化する。
    123110 */
    124111
  • EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/tcp_subr.c

    • Property svn:keywords deleted
    • Property svn:mime-type changed from text/x-csrc to text/x-csrc;charset=UTF-8
    r270 r321  
    55 *                   Tomakomai National College of Technology, JAPAN
    66 *
    7  *  上記著作権è€
    8 ã¯ï¼Œä»¥ä¸‹ã® (1)~(4) の条件か,Free Software Foundation
    9  *  によってå
    10 ¬è¡¨ã•ã‚Œã¦ã„ã‚‹ GNU General Public License の Version 2 に記
    11  *  述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
    12  *  を改変したものを含む.以下同じ)を使用・複製・改変・再é
    13 å¸ƒï¼ˆä»¥ä¸‹ï¼Œ
    14  *  利用と呼ぶ)することを無償で許諾する.
    15  *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
    16  *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
    17  *      スコード中に含まれていること.
    18  *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
    19  *      用できる形で再é
    20 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é
    21 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
    22  *      è€
    23 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—作権表示,この利用条件および下記
    24  *      の無保証規定を掲載すること.
    25  *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
    26  *      用できない形で再é
    27 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®æ¡ä»¶ã‚’満たすこと.
    28  *    (a) 再é
    29 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€
    30 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—
    31  *        作権表示,この利用条件および下記の無保証規定を掲載すること.
    32  *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
    33  *      害からも,上記著作権è€
    34 ãŠã‚ˆã³TOPPERSプロジェクトをå
    35 è²¬ã™ã‚‹ã“と.
     7 *  上記著作権者は,以下の (1)~(4) の条件か,Free Software Foundation
     8 *  によって公表されている GNU General Public License の Version 2 に記
     9 *  述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
     10 *  を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下,
     11 *  利用と呼ぶ)することを無償で許諾する.
     12 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     13 *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     14 *      スコード中に含まれていること.
     15 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     16 *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     17 *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     18 *      の無保証規定を掲載すること.
     19 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     20 *      用できない形で再配布する場合には,次の条件を満たすこと.
     21 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     22 *        作権表示,この利用条件および下記の無保証規定を掲載すること.
     23 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     24 *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
    3625 *
    37  *  本ソフトウェアは,無保証で提供されているものである.上記著作権è€
    38 ãŠ
    39  *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
    40  *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
    41  *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
     26 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     27 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
     28 *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
     29 *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
    4230 *
    4331 *  @(#) $Id$
     
    135123
    136124/*
    137  *  å
    138 ¨åŸŸå¤‰æ•°
    139  */
    140 
    141 /*
    142  *  TCP の SEQ の初期値、プログラムが起動して、最初に TCP セグメントを
    143  *  送受信するときに、get_tim() により初期化する。
     125 *  全域変数
     126 */
     127
     128/*
     129 *  TCP の SEQ の初期値、プログラムが起動して、最初に TCP セグメントを
     130 *  送受信するときに、get_tim() により初期化する。
    144131 */
    145132T_TCP_SEQ tcp_iss = 0;
     
    148135
    149136/*
    150  *  SNMP の 管理æƒ
    151 å ±ãƒ™ãƒ¼ã‚¹ (MIB)
     137 *  SNMP の 管理情報ベース (MIB)
    152138 */
    153139
     
    157143
    158144/*
    159  *  局所変数
    160  */
    161 
    162 static uint16_t tcp_port_auto = TCP_PORT_FIRST_AUTO;    /* 自動割り当て番号     */
    163 
    164 /*
    165  *  tcp_free_reassq -- 受信再構成キューのネットワークバッファを解放する。
     145 *  局所変数
     146 */
     147
     148static uint16_t tcp_port_auto = TCP_PORT_FIRST_AUTO;    /* 自動割り当て番号     */
     149
     150/*
     151 *  tcp_free_reassq -- 受信再構成キューのネットワークバッファを解放する。
    166152 *
    167  *    注意:
    168  *      å¿
    169 è¦ã§ã‚れば、この関数を呼び出す前に、通信端点をロックし、
    170  *      戻った後、解除するå¿
    171 è¦ãŒã‚る。
     153 *    注意:
     154 *      必要であれば、この関数を呼び出す前に、通信端点をロックし、
     155 *      戻った後、解除する必要がある。
    172156 */
    173157
     
    186170
    187171/*
    188  *  tcp_alloc_auto_port -- 自動割り当てポート番号を設定する。
     172 *  tcp_alloc_auto_port -- 自動割り当てポート番号を設定する。
    189173 */
    190174
     
    245229
    246230/*
    247  *  tcp_alloc_port -- 指定されたポート番号を設定する。
     231 *  tcp_alloc_port -- 指定されたポート番号を設定する。
    248232 */
    249233
     
    265249
    266250/*
    267  *  tcp_init -- TCP モジュールの初期化
     251 *  tcp_init -- TCP モジュールの初期化
    268252 */
    269253
     
    281265
    282266/*
    283  * tcp_init_iss シーケンス番号を初期化する。
     267 * tcp_init_iss シーケンス番号を初期化する。
    284268 */
    285269
     
    311295
    312296/*
    313  *  tcp_close -- コネクションを開放する。
     297 *  tcp_close -- コネクションを開放する。
    314298 */
    315299
     
    317301tcp_close (T_TCP_CEP *cep)
    318302{
    319         /* タイマーを停止する。*/
     303        /* タイマーを停止する。*/
    320304        tcp_cancel_timers(cep);
    321305
    322306        /*
    323          *  通信端点をロックし、
    324          *  受信再構成キューのネットワークバッファを解放する。
     307         *  通信端点をロックし、
     308         *  受信再構成キューのネットワークバッファを解放する。
    325309         */
    326310        syscall(wai_sem(cep->semid_lock));
     
    328312        syscall(sig_sem(cep->semid_lock));
    329313
    330         /* 状æ
    331 ‹ã‚’未使用にする。*/
     314        /* 状態を未使用にする。*/
    332315        cep->fsm_state = TCP_FSM_CLOSED;
    333316
    334317        /*
    335          * 以下に関係しないフラグをクリアーする。
    336          * ・送受信ウィンドバッファの省コピー機能
    337          * ・動的な通信端点の生成・削除機能
     318         * 以下に関係しないフラグをクリアーする。
     319         * ・送受信ウィンドバッファの省コピー機能
     320         * ・動的な通信端点の生成・削除機能
    338321         */
    339322        cep->flags &= (TCP_CEP_FLG_WBCS_NBUF_REQ | TCP_CEP_FLG_WBCS_MASK |
     
    343326
    344327        if (cep->snd_nblk_tfn != TFN_TCP_UNDEF || cep->rcv_nblk_tfn != TFN_TCP_UNDEF) {
    345                 /* ノンブロッキングコール */
     328                /* ノンブロッキングコール */
    346329
    347330#ifdef TCP_CFG_NON_BLOCKING_COMPAT14
     
    356339
    357340                                case TFN_TCP_ACP_CEP:
    358                                         /* TCP 通信端点からTCP 受付口を解放する。*/
     341                                        /* TCP 通信端点からTCP 受付口を解放する。*/
    359342                                        cep->rep = NULL;
    360343                                        (*cep->callback)(GET_TCP_CEPID(cep), cep->rcv_nblk_tfn, (void*)E_CLS);
     
    363346                                case TFN_TCP_RCV_BUF:
    364347
    365                                         /* 受信ウィンドバッファの空アドレスを獲得する。*/
     348                                        /* 受信ウィンドバッファの空アドレスを獲得する。*/
    366349                                        len = TCP_GET_RWBUF_ADDR(cep, cep->rcv_p_buf);
    367350
    368                                         /* 異常切断等のエラーを設定する。*/
     351                                        /* 異常切断等のエラーを設定する。*/
    369352                                        if (cep->error == E_TMOUT)
    370353                                                len = E_CLS;
     
    377360                                case TFN_TCP_RCV_DAT:
    378361
    379                                         /* 受信ウィンドバッファからデータを取り出す。*/
     362                                        /* 受信ウィンドバッファからデータを取り出す。*/
    380363                                        len = TCP_READ_RWBUF(cep, cep->rcv_data, (uint_t)cep->rcv_len);
    381364
    382                                         /* 異常切断等のエラーを設定する。*/
     365                                        /* 異常切断等のエラーを設定する。*/
    383366                                        if (cep->error == E_TMOUT)
    384367                                                len = E_CLS;
     
    402385                                        }
    403386
    404                                 /* 記憶されているタスク ID と API 機能コードをクリアーする。*/
     387                                /* 記憶されているタスク ID と API 機能コードをクリアーする。*/
    405388                                cep->rcv_tskid = TA_NULL;
    406389                                cep->rcv_tfn   = cep->rcv_nblk_tfn = TFN_TCP_UNDEF;
     
    412395
    413396                                case TFN_TCP_CON_CEP:
    414                                         /* TCP 通信端点から TCP 受付口を解放する。*/
     397                                        /* TCP 通信端点から TCP 受付口を解放する。*/
    415398                                        cep->rep = NULL;
    416399                                        (*cep->callback)(GET_TCP_CEPID(cep), cep->snd_nblk_tfn, (void*)E_CLS);
     
    430413                                        }
    431414
    432                                 /* 記憶されているタスク ID と API 機能コードをクリアーする。*/
     415                                /* 記憶されているタスク ID と API 機能コードをクリアーする。*/
    433416                                cep->snd_tskid = TA_NULL;
    434417                                cep->snd_tfn   = cep->snd_nblk_tfn = TFN_TCP_UNDEF;
     
    448431
    449432                                case TFN_TCP_ACP_CEP:
    450                                         /* TCP 通信端点からTCP 受付口を解放する。*/
     433                                        /* TCP 通信端点からTCP 受付口を解放する。*/
    451434                                        cep->rep = NULL;
    452435                                        len      = E_CLS;
     
    456439                                case TFN_TCP_RCV_BUF:
    457440
    458                                         /* 受信ウィンドバッファの空アドレスを獲得する。*/
     441                                        /* 受信ウィンドバッファの空アドレスを獲得する。*/
    459442                                        len = TCP_GET_RWBUF_ADDR(cep, cep->rcv_p_buf);
    460443
    461                                         /* 異常切断等のエラーを設定する。*/
     444                                        /* 異常切断等のエラーを設定する。*/
    462445                                        if (cep->error == E_TMOUT)
    463446                                                len = E_CLS;
     
    470453                                case TFN_TCP_RCV_DAT:
    471454
    472                                         /* 受信ウィンドバッファからデータを取り出す。*/
     455                                        /* 受信ウィンドバッファからデータを取り出す。*/
    473456                                        len = TCP_READ_RWBUF(cep, cep->rcv_data, (uint_t)cep->rcv_len);
    474457
    475                                         /* 異常切断等のエラーを設定する。*/
     458                                        /* 異常切断等のエラーを設定する。*/
    476459                                        if (cep->error == E_TMOUT)
    477460                                                len = E_CLS;
     
    495478                                        }
    496479
    497                                 /* 記憶されているタスク ID と API 機能コードをクリアーする。*/
     480                                /* 記憶されているタスク ID と API 機能コードをクリアーする。*/
    498481                                cep->rcv_tskid = TA_NULL;
    499482                                cep->rcv_tfn   = cep->rcv_nblk_tfn = TFN_TCP_UNDEF;
     
    506489
    507490                                case TFN_TCP_CON_CEP:
    508                                         /* TCP 通信端点から TCP 受付口を解放する。*/
     491                                        /* TCP 通信端点から TCP 受付口を解放する。*/
    509492                                        cep->rep = NULL;
    510493                                        len      = E_CLS;
     
    526509                                        }
    527510
    528                                 /* 記憶されているタスク ID と API 機能コードをクリアーする。*/
     511                                /* 記憶されているタスク ID と API 機能コードをクリアーする。*/
    529512                                cep->snd_tskid = TA_NULL;
    530513                                cep->snd_tfn   = cep->snd_nblk_tfn = TFN_TCP_UNDEF;
     
    536519
    537520                /*
    538                  *  通信端点をロックし、
    539                  *  送受信ウィンドバッファキューのネットワークバッファを解放する。
     521                 *  通信端点をロックし、
     522                 *  送受信ウィンドバッファキューのネットワークバッファを解放する。
    540523                 */
    541524                syscall(wai_sem(cep->semid_lock));
     
    544527                syscall(sig_sem(cep->semid_lock));
    545528
    546                 /* 未使用になったことを知らせる。*/
     529                /* 未使用になったことを知らせる。*/
    547530                syscall(set_flg(cep->est_flgid, TCP_CEP_EVT_CLOSED));
    548531                }
    549         else {  /* 非ノンブロッキングコール */
     532        else {  /* 非ノンブロッキングコール */
    550533
    551534#endif  /* of #ifdef TCP_CFG_NON_BLOCKING */
    552535
    553                 /* 記憶されているタスク ID と API 機能コードをクリアーする。*/
     536                /* 記憶されているタスク ID と API 機能コードをクリアーする。*/
    554537                cep->snd_tskid = cep->rcv_tskid = TA_NULL;
    555538                cep->snd_tfn   = cep->rcv_tfn   = TFN_TCP_UNDEF;
    556539
    557540                /*
    558                  *  通信端点をロックし、
    559                  *  送受信ウィンドバッファキューのネットワークバッファを解放する。
     541                 *  通信端点をロックし、
     542                 *  送受信ウィンドバッファキューのネットワークバッファを解放する。
    560543                 */
    561544                syscall(wai_sem(cep->semid_lock));
     
    564547                syscall(sig_sem(cep->semid_lock));
    565548
    566                 /* 未使用になったことを知らせる。*/
     549                /* 未使用になったことを知らせる。*/
    567550                syscall(set_flg(cep->est_flgid, TCP_CEP_EVT_CLOSED));
    568551
    569552                /*
    570                  * å
    571 ¥å‡ºåŠ›ã‚¿ã‚¹ã‚¯ã‚’起床して、
    572                  * 送受信不可になったことを知らせる。
     553                 * 入出力タスクを起床して、
     554                 * 送受信不可になったことを知らせる。
    573555                 */
    574556                syscall(set_flg(cep->snd_flgid, TCP_CEP_EVT_SWBUF_READY));
     
    585567
    586568/*
    587  *  tcp_drop -- TCP 接続を破棄する。
     569 *  tcp_drop -- TCP 接続を破棄する。
    588570 */
    589571
     
    603585                cep->fsm_state = TCP_FSM_CLOSED;
    604586
    605                 /* 送信と、送信後コネクションの切断を指示する。*/
     587                /* 送信と、送信後コネクションの切断を指示する。*/
    606588                cep->flags |=  TCP_CEP_FLG_POST_OUTPUT | TCP_CEP_FLG_CLOSE_AFTER_OUTPUT;
    607589                sig_sem(SEM_TCP_POST_OUTPUT);
     
    613595
    614596/*
    615  *  tcp_respond -- TCP の単一メッセージを送信する。
     597 *  tcp_respond -- TCP の単一メッセージを送信する。
    616598 */
    617599
     
    628610
    629611        /*
    630          *  output が NULL でなければ、これはå
    631 ¥åŠ›ã—たセグメントの
    632          *  net_buf で、そのまま再利用する。
     612         *  output が NULL でなければ、これは入力したセグメントの
     613         *  net_buf で、そのまま再利用する。
    633614         */
    634615        if (output != NULL) {
     
    637618
    638619                /*
    639                  * IPv4 では、IP ヘッダのオプションを削除する。
    640                  * IPv6 では、拡張ヘッダを削除する。
     620                 * IPv4 では、IP ヘッダのオプションを削除する。
     621                 * IPv6 では、拡張ヘッダを削除する。
    641622                 */
    642623                if (IP_REMOVE_OPTIONS(output) != E_OK) {
     
    647628                iph  = GET_IP_HDR(output);
    648629
    649                 /* IP アドレスを交換する。*/
     630                /* IP アドレスを交換する。*/
    650631                ipaddr = iph->src;
    651632                iph->src = iph->dst;
     
    654635#if defined(SUPPORT_INET6)
    655636
    656                 /* トラヒッククラスとフローラベルをクリアする。*/
     637                /* トラヒッククラスとフローラベルをクリアする。*/
    657638                iph->vcf = htonl(IP6_MAKE_VCF(IP6_VCF_V(ntohl(iph->vcf)), 0));
    658639
    659640#endif  /* of #if defined(SUPPORT_INET6) */
    660641
    661                 /* TCP SDU 長を 0 にする。*/
     642                /* TCP SDU 長を 0 にする。*/
    662643                SET_IP_SDU_SIZE(iph, TCP_HDR_SIZE);
    663644
    664645                tcph = GET_TCP_HDR(output, IF_IP_TCP_HDR_OFFSET);
    665646
    666                 /* ポート番号を交換する。*/
     647                /* ポート番号を交換する。*/
    667648                portno = tcph->sport;
    668649                tcph->sport = tcph->dport;
    669650                tcph->dport = portno;
    670651
    671                 /* TCP ヘッダにæƒ
    672 å ±ã‚’設定する。*/
     652                /* TCP ヘッダに情報を設定する。*/
    673653                tcph->doff = TCP_MAKE_DATA_OFF(TCP_HDR_SIZE);
    674654                }
    675655       
    676         /* cep が NULL であれば、何もしないで終了する。*/
     656        /* cep が NULL であれば、何もしないで終了する。*/
    677657        else if (cep == NULL)
    678658                return;
     
    693673
    694674        /*
    695          *  チェックサムを設定する。
     675         *  チェックサムを設定する。
    696676         */
    697677        tcph->sum = IN_CKSUM(output, IPPROTO_TCP, IF_IP_TCP_HDR_OFFSET,
    698678                             (uint_t)GET_TCP_HDR_SIZE2(output, IF_IP_TCP_HDR_OFFSET));
    699679
    700         /* ネットワークバッファ長を調整する。*/
     680        /* ネットワークバッファ長を調整する。*/
    701681        output->len = (uint16_t)GET_IF_IP_TCP_HDR_SIZE2(output, IF_IP_TCP_HDR_OFFSET);
    702682
     
    707687#endif  /* of #ifdef TCP_CFG_TRACE */
    708688
    709         /* ネットワーク層 (IP) の出力関数を呼び出す。*/
     689        /* ネットワーク層 (IP) の出力関数を呼び出す。*/
    710690        IP_OUTPUT(output, TMO_TCP_OUTPUT);
    711691        }
    712692
    713693/*
    714  *  tcp_set_header -- TCP ヘッダを設定する。
     694 *  tcp_set_header -- TCP ヘッダを設定する。
    715695 */
    716696
     
    720700        T_TCP_HDR       *tcph = GET_TCP_HDR(nbuf, thoff);
    721701
    722         /* TCP ヘッダにæƒ
    723 å ±ã‚’設定する。*/
     702        /* TCP ヘッダに情報を設定する。*/
    724703        tcph->sport     = htons(cep->myaddr.portno);
    725704        tcph->dport     = htons(cep->dstaddr.portno);
     
    729708
    730709/*
    731  *  tcp_get_segment -- TCP セグメントを獲得し、ヘッダを設定する。
     710 *  tcp_get_segment -- TCP セグメントを獲得し、ヘッダを設定する。
    732711 *
    733  *    戻り値 エラーコード
    734  *    optlen    オプションサイズ、4 オクテット単位
    735  *    len       TCP SDU サイズ
     712 *    戻り値       エラーコード
     713 *    optlen    オプションサイズ、4 オクテット単位
     714 *    len       TCP SDU サイズ
    736715 */
    737716
     
    742721        ER              error;
    743722
    744         /* IP データグラムを獲得する。*/
     723        /* IP データグラムを獲得する。*/
    745724        if ((error = IN_GET_DATAGRAM(nbuf,
    746725                                     (uint_t)(TCP_HDR_SIZE + optlen + len),
     
    754733                }
    755734
    756         /* TCP ヘッダにæƒ
    757 å ±ã‚’設定する。*/
     735        /* TCP ヘッダに情報を設定する。*/
    758736        tcp_set_header(*nbuf, cep, IF_IP_TCP_HDR_OFFSET, optlen);
    759737
     
    762740
    763741/*
    764  *  tcp_can_send_more -- 送信できるか、通信端点の状æ
    765 ‹ã‚’見る。
     742 *  tcp_can_send_more -- 送信できるか、通信端点の状態を見る。
    766743 */
    767744
     
    771748        ER      error;
    772749
    773         /* 送信できるか、CEP の FSM 状æ
    774 ‹ã‚’見る。*/
     750        /* 送信できるか、CEP の FSM 状態を見る。*/
    775751        if (!TCP_FSM_CAN_SEND_MORE(cep->fsm_state)) {
    776752                if ((error = cep->error) == E_OK)
     
    779755#ifdef TCP_CFG_NON_BLOCKING
    780756
    781                 /* タイムアウトをチェックする。*/
    782                 if (tmout == TMO_NBLK) {        /* ノンブロッキングコール */
     757                /* タイムアウトをチェックする。*/
     758                if (tmout == TMO_NBLK) {        /* ノンブロッキングコール */
    783759
    784760                        if (!IS_PTR_DEFINED(cep->callback))
     
    788764#ifdef TCP_CFG_NON_BLOCKING_COMPAT14
    789765
    790                                 /* コールバック関数を呼び出す。*/
     766                                /* コールバック関数を呼び出す。*/
    791767                                (*cep->callback)(GET_TCP_CEPID(cep), fncd, (void*)error);
    792768
    793769#else   /* of #ifdef TCP_CFG_NON_BLOCKING_COMPAT14 */
    794770
    795                                 /* コールバック関数を呼び出す。*/
     771                                /* コールバック関数を呼び出す。*/
    796772                                (*cep->callback)(GET_TCP_CEPID(cep), fncd, (void*)&error);
    797773
     
    817793#ifdef TCP_CFG_NON_BLOCKING
    818794
    819                         /* タイムアウトをチェックする。*/
    820                         if (tmout == TMO_NBLK) {        /* ノンブロッキングコール */
     795                        /* タイムアウトをチェックする。*/
     796                        if (tmout == TMO_NBLK) {        /* ノンブロッキングコール */
    821797                                if (!IS_PTR_DEFINED(cep->callback))
    822798                                        error = E_OBJ;
     
    825801#ifdef TCP_CFG_NON_BLOCKING_COMPAT14
    826802
    827                                         /* コールバック関数を呼び出す。*/
     803                                        /* コールバック関数を呼び出す。*/
    828804                                        (*cep->callback)(GET_TCP_CEPID(cep), fncd, (void*)E_OBJ);
    829805
    830806#else   /* of #ifdef TCP_CFG_NON_BLOCKING_COMPAT14 */
    831807
    832                                         /* コールバック関数を呼び出す。*/
     808                                        /* コールバック関数を呼び出す。*/
    833809                                        error = E_OBJ;
    834810                                        (*cep->callback)(GET_TCP_CEPID(cep), fncd, (void*)&error);
     
    856832
    857833/*
    858  *  tcp_can_recv_more -- 受信できるか、通信端点の状æ
    859 ‹ã‚’見る。
     834 *  tcp_can_recv_more -- 受信できるか、通信端点の状態を見る。
    860835 *
    861  *  注意: 戻り値
     836 *  注意: 戻り値
    862837 *
    863  *      E_OK    受信可能
    864  *      E_OBJ   ç›¸æ‰‹ã‹ã‚‰åˆ‡æ–­ã•ã‚ŒãŸã‹ã€ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—た。
     838 *      E_OK    受信可能
     839 *      E_OBJ   相手から切断されたか、エラーが発生した。
    865840 */
    866841
     
    869844{
    870845        /*
    871          *  受信できるか、fsm_state を見る。受信できない場合は
    872          *  長さ 0、またはエラーを返す。
     846         *  受信できるか、fsm_state を見る。受信できない場合は
     847         *  長さ 0、またはエラーを返す。
    873848         */
    874849        if (!TCP_FSM_CAN_RECV_MORE(cep->fsm_state) &&
     
    878853#ifdef TCP_CFG_NON_BLOCKING
    879854
    880                 /* タイムアウトをチェックする。*/
    881                 if (tmout == TMO_NBLK) {        /* ノンブロッキングコール */
     855                /* タイムアウトをチェックする。*/
     856                if (tmout == TMO_NBLK) {        /* ノンブロッキングコール */
    882857
    883858                        if (!IS_PTR_DEFINED(cep->callback))
     
    886861#ifdef TCP_CFG_NON_BLOCKING_COMPAT14
    887862
    888                                 /* コールバック関数を呼び出す。*/
     863                                /* コールバック関数を呼び出す。*/
    889864                                (*cep->callback)(GET_TCP_CEPID(cep), fncd, (void*)*error);
    890865
    891866#else   /* of #ifdef TCP_CFG_NON_BLOCKING_COMPAT14 */
    892867
    893                                 /* コールバック関数を呼び出す。*/
     868                                /* コールバック関数を呼び出す。*/
    894869                                (*cep->callback)(GET_TCP_CEPID(cep), fncd, (void*)error);
    895870
     
    903878
    904879                /*
    905                  *  通信端点をロックして、
    906                  *  受信ウィンドバッファキューのネットワークバッファを解放する。
     880                 *  通信端点をロックして、
     881                 *  受信ウィンドバッファキューのネットワークバッファを解放する。
    907882                 */
    908883                syscall(wai_sem(cep->semid_lock));
     
    920895#ifdef TCP_CFG_NON_BLOCKING
    921896
    922                         /* タイムアウトをチェックする。*/
    923                         if (tmout == TMO_NBLK) {        /* ノンブロッキングコール */
     897                        /* タイムアウトをチェックする。*/
     898                        if (tmout == TMO_NBLK) {        /* ノンブロッキングコール */
    924899                                if (!IS_PTR_DEFINED(cep->callback))
    925900                                        *error = E_OBJ;
     
    928903#ifdef TCP_CFG_NON_BLOCKING_COMPAT14
    929904
    930                                         /* コールバック関数を呼び出す。*/
     905                                        /* コールバック関数を呼び出す。*/
    931906                                        (*cep->callback)(GET_TCP_CEPID(cep), fncd, (void*)E_OBJ);
    932907
    933908#else   /* of #ifdef TCP_CFG_NON_BLOCKING_COMPAT14 */
    934909
    935                                         /* コールバック関数を呼び出す。*/
     910                                        /* コールバック関数を呼び出す。*/
    936911                                        *error = E_OBJ;
    937912                                        (*cep->callback)(GET_TCP_CEPID(cep), fncd, (void*)error);
     
    958933
    959934/*
    960  *  tcp_wait_rwbuf -- 受信ウィンドバッファにデータがå
    961 ¥ã‚‹ã®ã‚’å¾
    962 ã¤ã€‚
     935 *  tcp_wait_rwbuf -- 受信ウィンドバッファにデータが入るのを待つ。
    963936 */
    964937
     
    970943
    971944        if (cep->rwbuf_count == 0) {
    972                 /* 受信ウィンドバッファにデータがなければ、å
    973 ¥åŠ›ãŒã‚るまでå¾
    974 ã¤ã€‚*/
     945                /* 受信ウィンドバッファにデータがなければ、入力があるまで待つ。*/
    975946                while (cep->rwbuf_count == 0) {
    976947                        if ((error = twai_flg(cep->rcv_flgid, TCP_CEP_EVT_RWBUF_READY, TWF_ORW, &flag, tmout)) != E_OK) {
     
    980951
    981952                        /*
    982                          *  受信できるか、fsm_state を見る。受信できない状æ
    983 ‹ã§ã€
    984                          *  受信ウィンドバッファに文字がない場合は終了する。
     953                         *  受信できるか、fsm_state を見る。受信できない状態で、
     954                         *  受信ウィンドバッファに文字がない場合は終了する。
    985955                         */
    986956                        if (!TCP_FSM_CAN_RECV_MORE(cep->fsm_state) &&
     
    988958
    989959                                /*
    990                                  *  通信端点をロックして、
    991                                  *  受信ウィンドバッファキューのネットワークバッファを解放する。
     960                                 *  通信端点をロックして、
     961                                 *  受信ウィンドバッファキューのネットワークバッファを解放する。
    992962                                 */
    993963#ifdef TCP_CFG_RWBUF_CSAVE
     
    1008978
    1009979/*
    1010  *  tcp_move_ra2rw -- 受信再構成キューで再構成したセグメントを受信ウィンドバッファに書き込む。
     980 *  tcp_move_ra2rw -- 受信再構成キューで再構成したセグメントを受信ウィンドバッファに書き込む。
    1011981 */
    1012982
     
    1018988
    1019989        /*
    1020          *  受信データを受信ウィンドバッファに書き込み、
    1021          *  rcv_nxt を完了した SEQ だけ進める。
     990         *  受信データを受信ウィンドバッファに書き込み、
     991         *  rcv_nxt を完了した SEQ だけ進める。
    1022992         */
    1023993        if (TCP_FSM_HAVE_ESTABLISHED(cep->fsm_state)) {
     
    1028998                                break;
    1029999
    1030                         /* 次のセグメントに進む。*/
     1000                        /* 次のセグメントに進む。*/
    10311001                        cep->reassq = qhdr->next;
    10321002
    1033                         /* FIN フラグのみ残す。*/
     1003                        /* FIN フラグのみ残す。*/
    10341004                        flags &= TCP_FLG_FIN;
    10351005
    1036                         /* データを受信ウィンドバッファに書き込む。*/
     1006                        /* データを受信ウィンドバッファに書き込む。*/
    10371007                        TCP_WRITE_RWBUF(cep, q, (uint_t)(GET_TCP_IP_Q_HDR(q)->thoff));
    10381008                        }
     
    10461016
    10471017/*
    1048  *  tcp_write_raque -- 受信セグメントを再構成して、受信再構成キューに繋ぐ。
     1018 *  tcp_write_raque -- 受信セグメントを再構成して、受信再構成キューに繋ぐ。
    10491019 */
    10501020
     
    10571027        int32_t         len;
    10581028
    1059         /*  TCP ヘッダの位置を保存する。*/
     1029        /*  TCP ヘッダの位置を保存する。*/
    10601030        GET_TCP_IP_Q_HDR(input)->thoff = thoff;
    10611031
    10621032        /*
    1063          *  MAX_TCP_REALLOC_SIZE 以下の場合は、新たにネットワークバッファを
    1064          *  割当てて、データをコピーする。
    1065          *  このとき、IP のオプション(拡張ヘッダ)と TCP のオプションは削除する。
     1033         *  MAX_TCP_REALLOC_SIZE 以下の場合は、新たにネットワークバッファを
     1034         *  割当てて、データをコピーする。
     1035         *  このとき、IP のオプション(拡張ヘッダ)と TCP のオプションは削除する。
    10661036         */
    10671037        len  = IF_IP_TCP_HDR_SIZE + inqhdr->slen;
     
    10701040
    10711041                /*
    1072                  *  ネットワークバッファが確保できないときは割当てない。
     1042                 *  ネットワークバッファが確保できないときは割当てない。
    10731043                 */
    10741044                if (tget_net_buf(&new, (uint_t)len, TMO_TCP_GET_NET_BUF) != E_OK)
     
    10951065
    10961066        /*
    1097          *  今回追加するセグメントより前(p)と後(q)のセグメントを探す。
     1067         *  今回追加するセグメントより前(p)と後(q)のセグメントを探す。
    10981068         *
    10991069         *    +-------------------------+
     
    11181088
    11191089        /*
    1120          *  前(p)のセグメントがあれば、既に、今回と同じセグメントが
    1121          *  あることもある。その場合は、その部分またはå
    1122 ¨ã¦ã‚’破棄する。
     1090         *  前(p)のセグメントがあれば、既に、今回と同じセグメントが
     1091         *  あることもある。その場合は、その部分または全てを破棄する。
    11231092         *
    11241093         *    qhdr->seq
     
    11421111
    11431112                        /*
    1144                          *  len が正であれば、前(p) のセグメントと今回の
    1145                          *  セグメントが重なっている。
     1113                         *  len が正であれば、前(p) のセグメントと今回の
     1114                         *  セグメントが重なっている。
    11461115                         */
    11471116                        if (len >= inqhdr->slen) {
    11481117
    11491118                                /*
    1150                                  *  len が今回のセグメントと同じなら
    1151                                  *  まったく同じセグメントなので何もしない。
     1119                                 *  len が今回のセグメントと同じなら
     1120                                 *  まったく同じセグメントなので何もしない。
    11521121                                 */
    11531122                                if (new != NULL) {
     
    11601129
    11611130                        /*
    1162                          *  追加するセグメントの SDU を len 分前に詰める。
     1131                         *  追加するセグメントの SDU を len 分前に詰める。
    11631132                         */
    11641133                        inqhdr->seq  += len;
     
    11691138
    11701139        /*
    1171          *  キューにつなぐ前に、新しいネットワークバッファにデータを移す。
    1172          *  TCP のオプションは削除する。
     1140         *  キューにつなぐ前に、新しいネットワークバッファにデータを移す。
     1141         *  TCP のオプションは削除する。
    11731142         */
    11741143        if (new != NULL) {
     
    11831152
    11841153        /*
    1185          *  重なる後(q)のセグメントを調整する。
     1154         *  重なる後(q)のセグメントを調整する。
    11861155         *
    11871156         *    inqhdr->seq
     
    12031172                len = inqhdr->seq + inqhdr->slen - qhdr->seq;
    12041173                if (len <= 0)
    1205                         /* len が負なら重なっていない。*/
     1174                        /* len が負なら重なっていない。*/
    12061175                        break;
    12071176                else if (len < qhdr->slen) {
    12081177
    12091178                        /*
    1210                          *  後ろで重なっているセグメントの SDU を len 分前に詰める。
     1179                         *  後ろで重なっているセグメントの SDU を len 分前に詰める。
    12111180                         *
    12121181                         *    inqhdr->seq
     
    12521221
    12531222/*
    1254  *  tcp_rexmt_val -- 再送タイムアウト値を返す。
     1223 *  tcp_rexmt_val -- 再送タイムアウト値を返す。
    12551224 */
    12561225
     
    12681237
    12691238/*
    1270  *  tcp_init_cep -- 通信端点を初期化する。
     1239 *  tcp_init_cep -- 通信端点を初期化する。
    12711240 */
    12721241
     
    12761245#ifdef TCP_CFG_RWBUF_CSAVE
    12771246        /*
    1278          * 受信ウィンドバッファの省コピー機能を有効にした場合、
    1279          * 受信ウィンドバッファがå
    1280 ¨ã¦è§£æ”¾ã•ã‚Œãªã„ことがあるので、
    1281          * ここで解放する。
     1247         * 受信ウィンドバッファの省コピー機能を有効にした場合、
     1248         * 受信ウィンドバッファが全て解放されないことがあるので、
     1249         * ここで解放する。
    12821250         */
    12831251        if (cep->rwbufq != NULL) {
     
    12931261        cep->rbuf_rptr  = cep->rbuf_wptr = cep->rbuf;
    12941262
    1295         cep->maxseg     = DEF_TCP_SND_SEG;              /* 送信最大セグメントサイズ         */
    1296         cep->srtt       = TCP_TVAL_SRTT_BASE;           /* 滑らかな移動平均                     */
     1263        cep->maxseg     = DEF_TCP_SND_SEG;              /* 送信最大セグメントサイズ         */
     1264        cep->srtt       = TCP_TVAL_SRTT_BASE;           /* 滑らかな移動平均                     */
    12971265        cep->rttvar     = ((TCP_TVAL_RTO_BASE - TCP_TVAL_SRTT_BASE) << TCP_RTTVAR_SHIFT) / 4;
    1298                                                         /* 滑らかな分散                           */
    1299         cep->rxtcur     = TCP_TVAL_RTO_BASE;            /* 現在の再送値                           */
    1300         cep->snd_cwnd   =  MAX_TCP_WIN_SIZE;            /* 輻輳ウィンドサイズ                  */
    1301         cep->snd_ssthresh= MAX_TCP_WIN_SIZE;            /* 輻輳ウィンドサイズ(snd_cwnd)の     åˆ¶é™å€¤       */
     1266                                                        /* 滑らかな分散                               */
     1267        cep->rxtcur     = TCP_TVAL_RTO_BASE;            /* 現在の再送値                               */
     1268        cep->snd_cwnd   =  MAX_TCP_WIN_SIZE;            /* 輻輳ウィンドサイズ                    */
     1269        cep->snd_ssthresh= MAX_TCP_WIN_SIZE;            /* 輻輳ウィンドサイズ(snd_cwnd)の 制限値     */
    13021270
    13031271        /*
    1304          * 以下に関係しないフラグをクリアーする。
    1305          * ・送受信ウィンドバッファの省コピー機能
    1306          * ・動的な通信端点の生成・削除機能
     1272         * 以下に関係しないフラグをクリアーする。
     1273         * ・送受信ウィンドバッファの省コピー機能
     1274         * ・動的な通信端点の生成・削除機能
    13071275         */
    13081276        cep->flags &= (TCP_CEP_FLG_WBCS_NBUF_REQ | TCP_CEP_FLG_WBCS_MASK |
    13091277                       TCP_CEP_FLG_DYNAMIC       | TCP_CEP_FLG_VALID);
    13101278
    1311         /* セマフォを初期化する。*/
     1279        /* セマフォを初期化する。*/
    13121280        sig_sem (cep->semid_lock);
    13131281
    1314         /* フラグを初期化する。*/
     1282        /* フラグを初期化する。*/
    13151283        syscall(set_flg(cep->snd_flgid, TCP_CEP_EVT_SWBUF_READY));
    13161284        syscall(clr_flg(cep->rcv_flgid, TCP_CEP_EVT_RWBUF_READY));
     
    13181286
    13191287/*
    1320  *  tcp_notify -- ICMP エラーの処理
     1288 *  tcp_notify -- ICMP エラーの処理
    13211289 */
    13221290
     
    13341302
    13351303                /*
    1336                  *  コネクション開設済で、ホスト到達不能エラーの場合は、
    1337                  *  再送により処理する。
     1304                 *  コネクション開設済で、ホスト到達不能エラーの場合は、
     1305                 *  再送により処理する。
    13381306                 */
    13391307                if (cep->fsm_state == TCP_FSM_ESTABLISHED &&
     
    13421310
    13431311                /*
    1344                  *  コネクション開設中、同じエラーを何度か受信した場合は、
    1345                  *  å¾
    1346 ã¡çŠ¶æ
    1347 ‹ã‚’解除し、対応する関数にエラーを返させる。
     1312                 *  コネクション開設中、同じエラーを何度か受信した場合は、
     1313                 *  待ち状態を解除し、対応する関数にエラーを返させる。
    13481314                 */
    13491315                if (cep->fsm_state < TCP_FSM_ESTABLISHED && cep->rxtshift > 3 && cep->net_error != E_OK) {
     
    13541320                        cep->net_error = error;
    13551321
    1356                         /* 送信を指示する。*/
     1322                        /* 送信を指示する。*/
    13571323                        cep->flags |=  TCP_CEP_FLG_POST_OUTPUT;
    13581324                        sig_sem(SEM_TCP_POST_OUTPUT);
     
    13621328
    13631329/*
    1364  *  tcp_find_cep -- ポート番号から TCP 通信端点を得る。
     1330 *  tcp_find_cep -- ポート番号から TCP 通信端点を得る。
    13651331 *
    1366  *    注意: dstaddr は、
    1367  *          TINET-1.2 からネットワークバイトオーダ、
    1368  *          TINET-1.1 までは、ホストバイトオーダ
     1332 *    注意: dstaddr は、
     1333 *          TINET-1.2 からネットワークバイトオーダ、
     1334 *          TINET-1.1 までは、ホストバイトオーダ
    13691335 */
    13701336
     
    13751341       
    13761342        /*
    1377          *  状æ
    1378 ‹ãŒ SYN 送信済み以後は、
    1379          *  IP アドレスとポート番号が一致する通信端点を探索する。
     1343         *  状態が SYN 送信済み以後は、
     1344         *  IP アドレスとポート番号が一致する通信端点を探索する。
    13801345         */
    13811346        for (cep = &tcp_cep[tmax_tcp_cepid]; cep -- != tcp_cep; ) {
     
    13881353                }
    13891354
    1390         /* 受動オープン中の通信端点を探索する。*/     
     1355        /* 受動オープン中の通信端点を探索する。*/
    13911356        for (cep = &tcp_cep[tmax_tcp_cepid]; cep -- != tcp_cep; ) {
    13921357                if (cep->fsm_state == TCP_FSM_LISTEN &&
     
    14001365
    14011366/*
    1402  *  tcp_lock_cep -- TCP 通信端点をロックする。
     1367 *  tcp_lock_cep -- TCP 通信端点をロックする。
    14031368 */
    14041369
     
    14111376        *p_cep = NULL;
    14121377
    1413         /* TCP 通信端点 ID をチェックする。*/
     1378        /* TCP 通信端点 ID をチェックする。*/
    14141379        if (!VAID_TCP_CEPID(cepid))
    14151380                return E_ID;
    14161381
    1417         /* TCP 通信端点を得る。*/
     1382        /* TCP 通信端点を得る。*/
    14181383        cep = GET_TCP_CEP(cepid);
    14191384
    1420         /* TCP 通信端点をロックする。*/
     1385        /* TCP 通信端点をロックする。*/
    14211386        syscall(wai_sem(cep->semid_lock));
    14221387
    1423         /* TCP 通信端点をチェックする。*/
     1388        /* TCP 通信端点をチェックする。*/
    14241389        if (!VALID_TCP_CEP(cep)) {
    14251390                syscall(sig_sem(cep->semid_lock));
     
    14281393
    14291394        /*
    1430          *  API 機能コードとタスク識別子を記録する。
    1431          *  すでに記録されていれば、ペンディング中なのでエラー
     1395         *  API 機能コードとタスク識別子を記録する。
     1396         *  すでに記録されていれば、ペンディング中なのでエラー
    14321397         */
    14331398        if (IS_TFN_TCP_RCV(tfn)) {
     
    14511416                }
    14521417
    1453         /* 通信端点のロックを解除する。*/
     1418        /* 通信端点のロックを解除する。*/
    14541419        syscall(sig_sem(cep->semid_lock));
    14551420
     
    14651430
    14661431/*
    1467  *  コネクションの状æ
    1468 ‹
     1432 *  コネクションの状態
    14691433 */
    14701434
     
    14841448
    14851449/*
    1486  *  trace_putchar -- シリアルポートへの文字出力
     1450 *  trace_putchar -- シリアルポートへの文字出力
    14871451 */
    14881452
     
    14951459
    14961460/*
    1497  *  シリアルポートへの書式付文字列出力ライブラリ
    1498  */
    1499 
    1500 /*
    1501  *  数値変換のための変換表
     1461 *  シリアルポートへの書式付文字列出力ライブラリ
     1462 */
     1463
     1464/*
     1465 *  数値変換のための変換表
    15021466 */
    15031467
     
    15061470
    15071471/*
    1508  *  convert -- trace_printf の数値変換
     1472 *  convert -- trace_printf の数値変換
    15091473 */
    15101474
     
    15431507
    15441508/*
    1545  *  trace_printf -- シリアルポートへの書式付文字列出力
     1509 *  trace_printf -- シリアルポートへの書式付文字列出力
    15461510 */
    15471511
     
    15561520        va_start(ap, fmt);
    15571521        while ((ch = *fmt ++) != '\0') {
    1558                 if (ch != '%') {                /* 書式指定以外 */
     1522                if (ch != '%') {                /* 書式指定以外 */
    15591523                        trace_putchar(portid, (char)ch);
    15601524                        continue;
     
    15631527                width = longflag = 0;
    15641528                padchar = ' ';
    1565                 if ((ch = *fmt ++) == '0') {    /* 上位桁の 0 */
     1529                if ((ch = *fmt ++) == '0') {    /* 上位桁の 0 */
    15661530                        padchar = '0';
    15671531                        ch = *fmt ++;
    15681532                        }
    15691533
    1570                 while ('0' <= ch && ch <= '9') {        /* 出力å¹
    1571  */
     1534                while ('0' <= ch && ch <= '9') {        /* 出力幅 */
    15721535                        width = width * 10 + ch - '0';
    15731536                        ch = *fmt ++;
    15741537                        }
    15751538
    1576                 while (ch == 'l') {             /* long (long) の指定 */
     1539                while (ch == 'l') {             /* long (long) の指定 */
    15771540                        longflag ++;
    15781541                        ch = *fmt ++;
     
    16351598
    16361599/*
    1637  *  TCP フラグ文字列
     1600 *  TCP フラグ文字列
    16381601 */
    16391602
     
    16541617
    16551618/*
    1656  *  送信 TCP ヘッダのトレース出力
     1619 *  送信 TCP ヘッダのトレース出力
    16571620 */
    16581621
     
    17051668
    17061669/*
    1707  *  受信 TCP ヘッダのトレース出力
     1670 *  受信 TCP ヘッダのトレース出力
    17081671 *
    1709  *    注意: TCP ヘッダå†
    1710 ã¯ã€ã™ã§ã«ãƒ›ã‚¹ãƒˆãƒã‚¤ãƒˆã‚ªãƒ¼ãƒ€
     1672 *    注意: TCP ヘッダ内は、すでにホストバイトオーダ
    17111673 */
    17121674
  • EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/tcp_subr_cs.c

    • Property svn:keywords deleted
    • Property svn:mime-type changed from text/x-csrc to text/x-csrc;charset=UTF-8
    r270 r321  
    55 *                   Tomakomai National College of Technology, JAPAN
    66 *
    7  *  上記著作権è€
    8 ã¯ï¼Œä»¥ä¸‹ã® (1)~(4) の条件か,Free Software Foundation
    9  *  によってå
    10 ¬è¡¨ã•ã‚Œã¦ã„ã‚‹ GNU General Public License の Version 2 に記
    11  *  述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
    12  *  を改変したものを含む.以下同じ)を使用・複製・改変・再é
    13 å¸ƒï¼ˆä»¥ä¸‹ï¼Œ
    14  *  利用と呼ぶ)することを無償で許諾する.
    15  *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
    16  *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
    17  *      スコード中に含まれていること.
    18  *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
    19  *      用できる形で再é
    20 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é
    21 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
    22  *      è€
    23 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—作権表示,この利用条件および下記
    24  *      の無保証規定を掲載すること.
    25  *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
    26  *      用できない形で再é
    27 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®æ¡ä»¶ã‚’満たすこと.
    28  *    (a) 再é
    29 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€
    30 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—
    31  *        作権表示,この利用条件および下記の無保証規定を掲載すること.
    32  *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
    33  *      害からも,上記著作権è€
    34 ãŠã‚ˆã³TOPPERSプロジェクトをå
    35 è²¬ã™ã‚‹ã“と.
     7 *  上記著作権者は,以下の (1)~(4) の条件か,Free Software Foundation
     8 *  によって公表されている GNU General Public License の Version 2 に記
     9 *  述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
     10 *  を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下,
     11 *  利用と呼ぶ)することを無償で許諾する.
     12 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     13 *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     14 *      スコード中に含まれていること.
     15 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     16 *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     17 *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     18 *      の無保証規定を掲載すること.
     19 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     20 *      用できない形で再配布する場合には,次の条件を満たすこと.
     21 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     22 *        作権表示,この利用条件および下記の無保証規定を掲載すること.
     23 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     24 *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
    3625 *
    37  *  本ソフトウェアは,無保証で提供されているものである.上記著作権è€
    38 ãŠ
    39  *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
    40  *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
    41  *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
     26 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     27 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
     28 *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
     29 *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
    4230 *
    4331 *  @(#) $Id$
     
    137125
    138126/*
    139  *  TCP 通信端点の送信ウィンドバッファの省コピー機能が有効な場合
    140  *  ただし、通信端点の送信ウィンドバッファ(cep->sbuf)の値により、
    141  *  TCP 通信端点毎に送信ウィンドバッファの省コピー機能を使用するか、
    142  *  使用しないかを切り替える。
    143  */
    144 
    145 /*
    146  *  tcp_drop_swbuf -- 送信ウィンドバッファから指定されたオクテット分削除する(選択)。
     127 *  TCP 通信端点の送信ウィンドバッファの省コピー機能が有効な場合
     128 *  ただし、通信端点の送信ウィンドバッファ(cep->sbuf)の値により、
     129 *  TCP 通信端点毎に送信ウィンドバッファの省コピー機能を使用するか、
     130 *  使用しないかを切り替える。
     131 */
     132
     133/*
     134 *  tcp_drop_swbuf -- 送信ウィンドバッファから指定されたオクテット分削除する(選択)。
    147135 */
    148136
     
    157145
    158146/*
    159  *  tcp_write_swbuf -- 送信ウィンドバッファにデータを書き込む(選択)。
     147 *  tcp_write_swbuf -- 送信ウィンドバッファにデータを書き込む(選択)。
    160148 */
    161149
     
    170158
    171159/*
    172  *  tcp_read_swbuf -- 送信ウィンドバッファからデータを読み出す(選択)。
     160 *  tcp_read_swbuf -- 送信ウィンドバッファからデータを読み出す(選択)。
    173161 */
    174162
     
    181169
    182170/*
    183  *  tcp_wait_swbuf -- 送信ウィンドバッファと相手の受信ウィンドが開くのをå¾
    184 ã¤ï¼ˆé¸æŠžï¼‰ã€‚
     171 *  tcp_wait_swbuf -- 送信ウィンドバッファと相手の受信ウィンドが開くのを待つ(選択)。
    185172 */
    186173
     
    195182
    196183/*
    197  *  tcp_get_swbuf_addr -- 送信ウィンドバッファの空きアドレスを獲得する(選択)。
     184 *  tcp_get_swbuf_addr -- 送信ウィンドバッファの空きアドレスを獲得する(選択)。
    198185 */
    199186
     
    208195
    209196/*
    210  *  tcp_send_swbuf -- 送信ウィンドバッファのデータを送信可能にする(選択)。
     197 *  tcp_send_swbuf -- 送信ウィンドバッファのデータを送信可能にする(選択)。
    211198 */
    212199
     
    221208
    222209/*
    223  *  tcp_free_swbufq -- 送信ウィンドバッファキューの解放を指示する(選択)。
     210 *  tcp_free_swbufq -- 送信ウィンドバッファキューの解放を指示する(選択)。
    224211 */
    225212
     
    232219
    233220/*
    234  *  tcp_alloc_swbuf -- 送信ウィンドバッファ用のネットワークバッファの割り当てを指示する(選択)。
     221 *  tcp_alloc_swbuf -- 送信ウィンドバッファ用のネットワークバッファの割り当てを指示する(選択)。
    235222 */
    236223
     
    243230
    244231/*
    245  *  tcp_is_swbuf_full -- 送信ウィンドバッファが満杯かチェックする(選択)。
     232 *  tcp_is_swbuf_full -- 送信ウィンドバッファが満杯かチェックする(選択)。
    246233 */
    247234
     
    258245
    259246/*
    260  *  tcp_drop_swbuf_cs -- 送信ウィンドバッファから指定されたオクテット分削除する(専用)。
     247 *  tcp_drop_swbuf_cs -- 送信ウィンドバッファから指定されたオクテット分削除する(専用)。
    261248 */
    262249
     
    265252{
    266253
    267         /*送信ウィンドバッファから指定されたオクテット分削除する。*/
     254        /*送信ウィンドバッファから指定されたオクテット分削除する。*/
    268255        cep->swbuf_count -= (uint16_t)len;
    269256
    270         /* 送信済みで、ACKå¾
    271 ã¡ã®æ™‚は、ACK完了に変更する。*/
     257        /* 送信済みで、ACK待ちの時は、ACK完了に変更する。*/
    272258        if (len > 0 && (cep->flags & TCP_CEP_FLG_WBCS_MASK) == TCP_CEP_FLG_WBCS_SENT) {
    273259                cep->flags = (cep->flags & ~TCP_CEP_FLG_WBCS_MASK) | TCP_CEP_FLG_WBCS_ACKED;
     
    277263
    278264/*
    279  *  tcp_write_swbuf_cs -- 送信ウィンドバッファにデータを書き込む(専用)。
     265 *  tcp_write_swbuf_cs -- 送信ウィンドバッファにデータを書き込む(専用)。
    280266 */
    281267
     
    285271        ER_UINT error;
    286272
    287         /* 通信端点をロックする。*/
     273        /* 通信端点をロックする。*/
    288274        syscall(wai_sem(cep->semid_lock));
    289275
     
    298284                 *   <---------------- error --------------->
    299285                 *              ^
    300                  *              net_buf で 4 オクテット境界にアラインされている。
     286                 *              net_buf で 4 オクテット境界にアラインされている。
    301287                 *
    302                  *  tcp_output と ip_output で、チェックサムを計算するとき、
    303                  *  n が 4 オクテット境界になるように SDU の後ろに 0 を
    304                  *  パッディングする。その分を考æ
    305 ®ã—て送信ウィンドバッファの
    306                  *  空きサイズを 4 オクテット境界に調整する。
     288                 *  tcp_output と ip_output で、チェックサムを計算するとき、
     289                 *  n が 4 オクテット境界になるように SDU の後ろに 0 を
     290                 *  パッディングする。その分を考慮して送信ウィンドバッファの
     291                 *  空きサイズを 4 オクテット境界に調整する。
    307292                 */
    308293                error = (uint_t)(((error - IF_IP_TCP_HDR_SIZE) >> 2 << 2) + IF_IP_TCP_HDR_SIZE);
     
    313298                        len = (uint_t)(error - IF_IP_TCP_HDR_SIZE);
    314299
    315                 /* 送信ウインドサイズによりサイズを調整する。*/
     300                /* 送信ウインドサイズによりサイズを調整する。*/
    316301                if (len > cep->snd_wnd)
    317302                        len = cep->snd_wnd;
     
    319304                        len = cep->snd_cwnd;
    320305
    321                 /* 相手の最大受信セグメントサイズ (maxseg) をè¶
    322 ãˆãªã„ようにする。*/
     306                /* 相手の最大受信セグメントサイズ (maxseg) を超えないようにする。*/
    323307                if (len > cep->maxseg)
    324308                        len = cep->maxseg;
    325309
    326                 /* データを移す。*/
     310                /* データを移す。*/
    327311                memcpy(cep->sbuf_wptr, (void*)((uint8_t*)data), (size_t)len);
    328312                cep->sbuf_wptr   += len;
     
    330314                error             = len;
    331315
    332                 /* ネットワークバッファ長と IP データグラム長を設定する。*/
     316                /* ネットワークバッファ長と IP データグラム長を設定する。*/
    333317                cep->swbufq->len = (uint16_t)(cep->swbuf_count + IF_IP_TCP_HDR_SIZE);
    334318                SET_IP_SDU_SIZE(GET_IP_HDR(cep->swbufq), cep->swbuf_count + TCP_HDR_SIZE);
    335319
    336                 /* フラグを、送信可能に設定する。*/
     320                /* フラグを、送信可能に設定する。*/
    337321                cep->flags = (cep->flags & ~TCP_CEP_FLG_WBCS_MASK) | TCP_CEP_FLG_WBCS_SEND_READY;
    338322                }
    339323
    340         else {  /* 送信ウインドバッファが不正 */
     324        else {  /* 送信ウインドバッファが不正 */
    341325                syslog(LOG_WARNING, "[TCP] illegal window buff for send, CEP: %d, %4d < %4d.",
    342326                                    GET_TCP_CEPID(cep), error, IF_IP_TCP_HDR_SIZE);
    343327
    344                 /* 送信ウィンドバッファキューのネットワークバッファを解放する。*/
     328                /* 送信ウィンドバッファキューのネットワークバッファを解放する。*/
    345329                tcp_free_swbufq_cs(cep);
    346330                }
    347331
    348         /* 通信端点のロックを解除する。*/
     332        /* 通信端点のロックを解除する。*/
    349333        syscall(sig_sem(cep->semid_lock));
    350334
     
    353337
    354338/*
    355  *  tcp_wait_swbuf_cs -- 送信ウィンドバッファと相手の受信ウィンドが開くのをå¾
    356 ã¤ï¼ˆå°‚用)。
     339 *  tcp_wait_swbuf_cs -- 送信ウィンドバッファと相手の受信ウィンドが開くのを待つ(専用)。
    357340 */
    358341
     
    366349
    367350
    368         /* 送信ウィンドバッファが割当て済みで、空きがあれば終了する。*/
     351        /* 送信ウィンドバッファが割当て済みで、空きがあれば終了する。*/
    369352        if ((cep->flags & TCP_CEP_FLG_WBCS_MASK) == TCP_CEP_FLG_WBCS_NBUF_READY &&
    370353            (cep->swbuf_count + IF_IP_TCP_HDR_SIZE) < net_buf_siz(cep->swbufq))
    371354                return E_OK;
    372355
    373         /* 送信中であれば、終了するまでå¾
    374 æ©Ÿã™ã‚‹ã€‚*/
     356        /* 送信中であれば、終了するまで待機する。*/
    375357        while ((cep->flags & TCP_CEP_FLG_WBCS_MASK) != TCP_CEP_FLG_WBCS_FREE) {
    376358
    377                 /* 送信å¾
    378 ã¡ã®æ™‚é–“ã‚’ tmout から減ずる。*/
     359                /* 送信待ちの時間を tmout から減ずる。*/
    379360                if (!(tmout == TMO_POL || tmout == TMO_FEVR))
    380361                        syscall(get_tim(&before));
     
    385366                syscall(clr_flg(cep->snd_flgid, (FLGPTN)(~TCP_CEP_EVT_SWBUF_READY)));
    386367
    387                 /* 送信å¾
    388 ã¡ã®æ™‚é–“ã‚’ tmout から減ずる。*/
     368                /* 送信待ちの時間を tmout から減ずる。*/
    389369                if (!(tmout == TMO_POL || tmout == TMO_FEVR)) {
    390370                        syscall(get_tim(&after));
     
    395375
    396376                /*
    397                  *  送信できるか、CEP の FSM 状æ
    398 ‹ã‚’見る。
    399                  *  送信ウインドバッファが空くまでå¾
    400 ã¤é–“に、送信不能になった場合は、
    401                  *  コネクションが切断されたことを意味している。
     377                 *  送信できるか、CEP の FSM 状態を見る。
     378                 *  送信ウインドバッファが空くまで待つ間に、送信不能になった場合は、
     379                 *  コネクションが切断されたことを意味している。
    402380                 */
    403381                if (!TCP_FSM_CAN_SEND_MORE(cep->fsm_state))
     
    405383                }
    406384
    407         /* 相手の受信ウィンドが閉じている場合は、開くまでå¾
    408 æ©Ÿã™ã‚‹ã€‚*/
     385        /* 相手の受信ウィンドが閉じている場合は、開くまで待機する。*/
    409386        while (true) {
    410387
    411388                /*
    412                  *  snd_wnd:  相手の受信可能ウィンドサイズ
    413                  *  snd_cwnd: 輻輳ウィンドサイズ
     389                 *  snd_wnd:  相手の受信可能ウィンドサイズ
     390                 *  snd_cwnd: 輻輳ウィンドサイズ
    414391                 *
    415                  *  win: どちらか小さいウィンドサイズに設定する。
     392                 *  win: どちらか小さいウィンドサイズに設定する。
    416393                 */
    417394                win = cep->snd_wnd < cep->snd_cwnd ? cep->snd_wnd : cep->snd_cwnd;
     
    419396                        break;
    420397
    421                 /* 開きå¾
    422 ã¡ã®æ™‚é–“ã‚’ tmout から減ずる。*/
     398                /* 開き待ちの時間を tmout から減ずる。*/
    423399                if (!(tmout == TMO_POL || tmout == TMO_FEVR))
    424400                        syscall(get_tim(&before));
     
    429405                syscall(clr_flg(cep->snd_flgid, (FLGPTN)(~TCP_CEP_EVT_SWBUF_READY)));
    430406
    431                 /* 開きå¾
    432 ã¡ã®æ™‚é–“ã‚’ tmout から減ずる。*/
     407                /* 開き待ちの時間を tmout から減ずる。*/
    433408                if (!(tmout == TMO_POL || tmout == TMO_FEVR)) {
    434409                        syscall(get_tim(&after));
     
    439414
    440415                /*
    441                  *  送信できるか、CEP の FSM 状æ
    442 ‹ã‚’見る。
    443                  *  送信ウインドバッファが空くまでå¾
    444 ã¤é–“に、送信不能になった場合は、
    445                  *  コネクションが切断されたことを意味している。
     416                 *  送信できるか、CEP の FSM 状態を見る。
     417                 *  送信ウインドバッファが空くまで待つ間に、送信不能になった場合は、
     418                 *  コネクションが切断されたことを意味している。
    446419                 */
    447420                if (!TCP_FSM_CAN_SEND_MORE(cep->fsm_state))
     
    449422                }
    450423
    451         /* ネットワークバッファを獲得する。*/
     424        /* ネットワークバッファを獲得する。*/
    452425        if ((error = tcp_get_segment(&cep->swbufq, cep, 0,
    453426                                     TCP_CFG_SWBUF_CSAVE_MIN_SIZE,
     
    456429                return error;
    457430
    458         /* 送信ウィンドバッファを初期化する。*/
     431        /* 送信ウィンドバッファを初期化する。*/
    459432        tcp_init_swbuf(cep);
    460433
     
    463436
    464437/*
    465  *  tcp_get_swbuf_addr_cs -- 送信ウィンドバッファの空きアドレスを獲得する(専用)。
     438 *  tcp_get_swbuf_addr_cs -- 送信ウィンドバッファの空きアドレスを獲得する(専用)。
    466439 */
    467440
     
    471444        ER_UINT error;
    472445
    473         /* 通信端点をロックする。*/
     446        /* 通信端点をロックする。*/
    474447        syscall(wai_sem(cep->semid_lock));
    475448
     
    483456                 *   <---------------- error --------------->
    484457                 *              ^
    485                  *              net_buf で 4 オクテット境界にアラインされている。
     458                 *              net_buf で 4 オクテット境界にアラインされている。
    486459                 *
    487                  *  tcp_output と ip_output で、チェックサムを計算するとき、
    488                  *  n が 4 オクテット境界になるように SDU の後ろに 0 を
    489                  *  パッディングする。その分を考æ
    490 ®ã—て送信ウィンドバッファの
    491                  *  空きサイズを 4 オクテット境界に調整する。
     460                 *  tcp_output と ip_output で、チェックサムを計算するとき、
     461                 *  n が 4 オクテット境界になるように SDU の後ろに 0 を
     462                 *  パッディングする。その分を考慮して送信ウィンドバッファの
     463                 *  空きサイズを 4 オクテット境界に調整する。
    492464                 */
    493465                error = (uint_t)(((error - IF_IP_TCP_HDR_SIZE) >> 2 << 2) - cep->swbuf_count);
    494466
    495                 /* 送信ウインドサイズによりサイズを調整する。*/
     467                /* 送信ウインドサイズによりサイズを調整する。*/
    496468                if (error > cep->snd_wnd)
    497469                        error = cep->snd_wnd;
     
    499471                        error = cep->snd_cwnd;
    500472
    501                 /* 相手の最大受信セグメントサイズ (maxseg) をè¶
    502 ãˆãªã„ようにする。*/
     473                /* 相手の最大受信セグメントサイズ (maxseg) を超えないようにする。*/
    503474                if (error > cep->maxseg)
    504475                        error = cep->maxseg;
    505476
    506                 /* 送信ウィンドバッファの空きデータ長を設定し、その値を返す。*/
     477                /* 送信ウィンドバッファの空きデータ長を設定し、その値を返す。*/
    507478                cep->get_buf_len = error;
    508479
    509                 /* 送信ウィンドバッファの空きアドレスのå
    510 ˆé ­ã‚’設定する。*/
     480                /* 送信ウィンドバッファの空きアドレスの先頭を設定する。*/
    511481                *p_buf = cep->sbuf_wptr;
    512482                }
    513483
    514         else {  /* ネットワークバッファが不正 */
    515 
    516                 /* 送信ウィンドバッファキューのネットワークバッファを解放する。*/
     484        else {  /* ネットワークバッファが不正 */
     485
     486                /* 送信ウィンドバッファキューのネットワークバッファを解放する。*/
    517487                tcp_free_swbufq_cs(cep);
    518488                }
    519489
    520         /* 通信端点のロックを解除する。*/
     490        /* 通信端点のロックを解除する。*/
    521491        syscall(sig_sem(cep->semid_lock));
    522492
     
    525495
    526496/*
    527  *  tcp_send_swbuf_cs -- 送信ウィンドバッファのデータを送信可能にする(専用)。
     497 *  tcp_send_swbuf_cs -- 送信ウィンドバッファのデータを送信可能にする(専用)。
    528498 */
    529499
     
    531501tcp_send_swbuf_cs (T_TCP_CEP *cep, uint_t len)
    532502{
    533         /* 通信端点をロックする。*/
     503        /* 通信端点をロックする。*/
    534504        syscall(wai_sem(cep->semid_lock));
    535505
     
    537507        cep->swbuf_count += len;
    538508
    539         /* ネットワークバッファ長と IP データグラム長を設定する。*/
     509        /* ネットワークバッファ長と IP データグラム長を設定する。*/
    540510        cep->swbufq->len = (uint16_t)(cep->swbuf_count + IF_IP_TCP_HDR_SIZE);
    541511        SET_IP_SDU_SIZE(GET_IP_HDR(cep->swbufq), len + TCP_HDR_SIZE);
    542512
    543         /* tcp_get_buf の割当て長をリセットする。*/
     513        /* tcp_get_buf の割当て長をリセットする。*/
    544514        cep->get_buf_len = 0;
    545515
    546         /* 通信端点のロックを解除する。*/
     516        /* 通信端点のロックを解除する。*/
    547517        syscall(sig_sem(cep->semid_lock));
    548518
    549         /* フラグを、送信可能に設定し、強制的に送信する。*/
     519        /* フラグを、送信可能に設定し、強制的に送信する。*/
    550520        cep->flags = (cep->flags & ~TCP_CEP_FLG_WBCS_MASK) | TCP_CEP_FLG_WBCS_SEND_READY
    551521                                                       | TCP_CEP_FLG_FORCE
     
    555525
    556526/*
    557  *  tcp_free_swbufq_cs -- 送信ウィンドバッファキューの解放を指示する(専用)。
     527 *  tcp_free_swbufq_cs -- 送信ウィンドバッファキューの解放を指示する(専用)。
    558528 *
    559  *    注意:
    560  *      å¿
    561 è¦ã§ã‚れば、この関数を呼び出す前に、通信端点をロックし、
    562  *      戻った後、解除するå¿
    563 è¦ãŒã‚る。
     529 *    注意:
     530 *      必要であれば、この関数を呼び出す前に、通信端点をロックし、
     531 *      戻った後、解除する必要がある。
    564532 */
    565533
     
    567535tcp_free_swbufq_cs (T_TCP_CEP *cep)
    568536{
    569         /* 送信ウィンドバッファの空きå¾
    570 ã¡ã‚’取り消す。*/
     537        /* 送信ウィンドバッファの空き待ちを取り消す。*/
    571538        cep->flags &= ~TCP_CEP_FLG_WBCS_NBUF_REQ;
    572539
    573540        if ((cep->flags & TCP_CEP_FLG_WBCS_MASK) != TCP_CEP_FLG_WBCS_FREE) {
    574541                /*
    575                  *  送信ウィンドバッファを削除するために、フラグを ACK 完了に設定し、
    576                  *  TCP 出力タスクを起動する。
     542                 *  送信ウィンドバッファを削除するために、フラグを ACK 完了に設定し、
     543                 *  TCP 出力タスクを起動する。
    577544                 */
    578545                cep->flags = (cep->flags & ~TCP_CEP_FLG_WBCS_MASK) | TCP_CEP_FLG_WBCS_ACKED;
     
    582549
    583550/*
    584  *  tcp_alloc_swbuf_cs -- 送信ウィンドバッファ用のネットワークバッファの割り当てを指示する(専用)。
     551 *  tcp_alloc_swbuf_cs -- 送信ウィンドバッファ用のネットワークバッファの割り当てを指示する(専用)。
    585552 */
    586553
     
    591558
    592559        /*
    593          *  送信ウィンドバッファが未使用の場合のみ、
    594          *  送信ウィンドバッファ用のネットワークバッファの割り当てを指示する。
     560         *  送信ウィンドバッファが未使用の場合のみ、
     561         *  送信ウィンドバッファ用のネットワークバッファの割り当てを指示する。
    595562         */
    596563        if ((cep->flags & TCP_CEP_FLG_WBCS_MASK) == TCP_CEP_FLG_WBCS_FREE)
     
    599566
    600567/*
    601  *  tcp_is_swbuf_full_cs -- 送信ウィンドバッファが満杯かチェックする(専用)。
     568 *  tcp_is_swbuf_full_cs -- 送信ウィンドバッファが満杯かチェックする(専用)。
    602569 */
    603570
     
    610577
    611578/*
    612  *  tcp_init_swbuf -- 送信ウィンドバッファを初期化する(専用)。
     579 *  tcp_init_swbuf -- 送信ウィンドバッファを初期化する(専用)。
    613580 *
    614  *    注意: tcp_get_segment でネットワークバッファを獲得した
    615  *          直後に呼び出すこと。
     581 *    注意: tcp_get_segment でネットワークバッファを獲得した
     582 *          直後に呼び出すこと。
    616583 */
    617584
     
    619586tcp_init_swbuf (T_TCP_CEP *cep)
    620587{
    621         /* 送信ウインドバッファの使用中サイズをリセットする。*/
     588        /* 送信ウインドバッファの使用中サイズをリセットする。*/
    622589        cep->swbuf_count = 0;
    623590
    624         /* 送信ウインドバッファのアドレスを設定する。*/
     591        /* 送信ウインドバッファのアドレスを設定する。*/
    625592        cep->sbuf_wptr = cep->sbuf_rptr = GET_TCP_SDU(cep->swbufq, IF_IP_TCP_HDR_OFFSET);
    626593
    627         /* フラグを、ネットワークバッファ割当て済みに設定する。*/
     594        /* フラグを、ネットワークバッファ割当て済みに設定する。*/
    628595        cep->flags = (cep->flags & ~(TCP_CEP_FLG_WBCS_NBUF_REQ | TCP_CEP_FLG_WBCS_MASK))
    629596                                 |   TCP_CEP_FLG_WBCS_NBUF_READY;
     
    631598
    632599/*
    633  *  tcp_push_res_nbuf -- ネットワークバッファを予約する(専用)。
     600 *  tcp_push_res_nbuf -- ネットワークバッファを予約する(専用)。
    634601 */
    635602
     
    649616                if ((cep->flags & TCP_CEP_FLG_WBCS_MASK) == TCP_CEP_FLG_WBCS_NBUF_PEND) {
    650617
    651                         /* ネットワークバッファを予約する。*/
     618                        /* ネットワークバッファを予約する。*/
    652619                        cep->swbufq = nbuf;
    653620                        nbuf = NULL;
    654621
    655                         /* フラグを予約に設定する。*/
     622                        /* フラグを予約に設定する。*/
    656623                        cep->flags = (cep->flags & ~TCP_CEP_FLG_WBCS_MASK) | TCP_CEP_FLG_WBCS_NBUF_RSVD;
    657624                        sel_ix = ix;
     
    668635
    669636/*
    670  *  tcp_pull_res_nbuf -- 予約してあるネットワークバッファ返す(専用)。
     637 *  tcp_pull_res_nbuf -- 予約してあるネットワークバッファ返す(専用)。
    671638 */
    672639
     
    680647        if ((cep->flags & TCP_CEP_FLG_WBCS_MASK) == TCP_CEP_FLG_WBCS_NBUF_RSVD) {
    681648
    682                 /* 予約してあるネットワークバッファを返す。*/
     649                /* 予約してあるネットワークバッファを返す。*/
    683650                nbuf = cep->swbufq;
    684651                cep->swbufq = NULL;
    685652
    686                 /* TCP 出力タスクを起動する。*/
     653                /* TCP 出力タスクを起動する。*/
    687654                sig_sem(SEM_TCP_POST_OUTPUT);
    688655                }
     
    700667
    701668/*
    702  *  TCP 通信端点の受信ウィンドバッファの省コピー機能が有効な場合
    703  *  ただし、通信端点の受信ウィンドバッファ(cep->rbuf)の値により、
    704  *  TCP 通信端点毎に受信ウィンドバッファの省コピー機能を使用するか、
    705  *  使用しないかを切り替える。
    706  */
    707 
    708 /*
    709  *  tcp_drop_rwbuf -- 受信ウィンドバッファキューの最初のネットワークバッファを解放する。
     669 *  TCP 通信端点の受信ウィンドバッファの省コピー機能が有効な場合
     670 *  ただし、通信端点の受信ウィンドバッファ(cep->rbuf)の値により、
     671 *  TCP 通信端点毎に受信ウィンドバッファの省コピー機能を使用するか、
     672 *  使用しないかを切り替える。
     673 */
     674
     675/*
     676 *  tcp_drop_rwbuf -- 受信ウィンドバッファキューの最初のネットワークバッファを解放する。
    710677 */
    711678
     
    720687
    721688/*
    722  *  tcp_read_rwbuf -- 受信ウィンドバッファから指定されたオクテット分読み出す。
     689 *  tcp_read_rwbuf -- 受信ウィンドバッファから指定されたオクテット分読み出す。
    723690 */
    724691
     
    733700
    734701/*
    735  *  tcp_get_rwbuf_addr -- 受信ウィンドバッファの空きアドレスを獲得する。
     702 *  tcp_get_rwbuf_addr -- 受信ウィンドバッファの空きアドレスを獲得する。
    736703 */
    737704
     
    746713
    747714/*
    748  *  tcp_free_rwbufq -- 受信ウィンドバッファキューを解放する。
     715 *  tcp_free_rwbufq -- 受信ウィンドバッファキューを解放する。
    749716 */
    750717
     
    757724
    758725/*
    759  *  tcp_write_rwbuf -- 受信ウィンドバッファにデータを書き込む。
     726 *  tcp_write_rwbuf -- 受信ウィンドバッファにデータを書き込む。
    760727 */
    761728
     
    772739
    773740/*
    774  *  TCP 通信端点の受信ウィンドバッファの省コピー機能が有効
    775  */
    776 
    777 /*
    778  *  tcp_drop_rwbuf -- 受信ウィンドバッファキューの最初のネットワークバッファを解放する。
     741 *  TCP 通信端点の受信ウィンドバッファの省コピー機能が有効
     742 */
     743
     744/*
     745 *  tcp_drop_rwbuf -- 受信ウィンドバッファキューの最初のネットワークバッファを解放する。
    779746 */
    780747
     
    789756                cep->rwbuf_count -= len;
    790757
    791                 /* ネットワークバッファにデータが無くなったら解放する。*/
     758                /* ネットワークバッファにデータが無くなったら解放する。*/
    792759                if (len == qhdr->slen) {
    793760                        T_NET_BUF *next;
     
    811778
    812779/*
    813  *  tcp_read_rwbuf -- 受信ウィンドバッファから指定されたオクテット分読み出す。
     780 *  tcp_read_rwbuf -- 受信ウィンドバッファから指定されたオクテット分読み出す。
    814781 */
    815782
     
    821788        uint8_t         *buf = (uint8_t*)data;
    822789
    823         /* 通信端点をロックする。*/
     790        /* 通信端点をロックする。*/
    824791        syscall(wai_sem(cep->semid_lock));
    825792
    826793        /*
    827          *  受信ウィンドバッファキューにネットワークバッファが無くなるか
    828          *  len が 0 になるまで続ける。
     794         *  受信ウィンドバッファキューにネットワークバッファが無くなるか
     795         *  len が 0 になるまで続ける。
    829796         */
    830797        while (cep->rwbufq != NULL && len > 0) {
     
    832799
    833800                /*
    834                  *  len と受信ウィンドバッファキューのå
    835 ˆé ­ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒãƒƒãƒ•ã‚¡ã®
    836                  *  データ数の小さい方を移すデータ数にする。
     801                 *  len と受信ウィンドバッファキューの先頭ネットワークバッファの
     802                 *  データ数の小さい方を移すデータ数にする。
    837803                 */
    838804                if (len > qhdr->slen)
     
    846812
    847813                /*
    848                  *  受信ウィンドバッファキューのネットワークバッファに
    849                  *  データが無くなったら解放する。
     814                 *  受信ウィンドバッファキューのネットワークバッファに
     815                 *  データが無くなったら解放する。
    850816                 */
    851817                tcp_drop_rwbuf_cs(cep, blen);
     
    856822                }
    857823
    858         /* 通信端点のロックを解除する。*/
     824        /* 通信端点のロックを解除する。*/
    859825        syscall(sig_sem(cep->semid_lock));
    860826
     
    863829
    864830/*
    865  *  tcp_get_rwbuf_addr -- 受信ウィンドバッファの空きアドレスを獲得する。
     831 *  tcp_get_rwbuf_addr -- 受信ウィンドバッファの空きアドレスを獲得する。
    866832 */
    867833
     
    872838        uint_t          len;
    873839
    874         /* 通信端点をロックする。*/
     840        /* 通信端点をロックする。*/
    875841        syscall(wai_sem(cep->semid_lock));
    876842
    877843        if (cep->rwbufq == NULL) {
    878844
    879                 /* 受信ウィンドバッファがå
    880 ¨ã¦é–‹æ”¾ã•ã‚Œã¦ã„るとき。*/
     845                /* 受信ウィンドバッファが全て開放されているとき。*/
    881846                *p_buf = NULL;
    882847                len = 0;
     
    884849        else {
    885850
    886                 /* 受信ウィンドバッファのデータのアドレスのå
    887 ˆé ­ã‚’設定する。*/
     851                /* 受信ウィンドバッファのデータのアドレスの先頭を設定する。*/
    888852                qhdr = GET_TCP_Q_HDR(cep->rwbufq, GET_TCP_IP_Q_HDR(cep->rwbufq)->thoff);
    889853                *p_buf = GET_TCP_SDU(cep->rwbufq, GET_TCP_IP_Q_HDR(cep->rwbufq)->thoff) + qhdr->soff;
    890854
    891                 /* 受信ウィンドバッファのデータ長を計算する。*/
     855                /* 受信ウィンドバッファのデータ長を計算する。*/
    892856                len = qhdr->slen;
    893857                }
    894858
    895         /* 通信端点のロックを解除する。*/
     859        /* 通信端点のロックを解除する。*/
    896860        syscall(sig_sem(cep->semid_lock));
    897861
    898         /* 受信ウィンドバッファのデータ長を設定し、その値を返す。*/
     862        /* 受信ウィンドバッファのデータ長を設定し、その値を返す。*/
    899863        cep->rcv_buf_len = len;
    900864        return len;
     
    902866
    903867/*
    904  *  tcp_free_rwbufq -- 受信ウィンドバッファキューを解放する。
     868 *  tcp_free_rwbufq -- 受信ウィンドバッファキューを解放する。
    905869 *
    906  *    注意:
    907  *      å¿
    908 è¦ã§ã‚れば、この関数を呼び出す前に、通信端点をロックし、
    909  *      戻った後、解除するå¿
    910 è¦ãŒã‚る。
     870 *    注意:
     871 *      必要であれば、この関数を呼び出す前に、通信端点をロックし、
     872 *      戻った後、解除する必要がある。
    911873 */
    912874
     
    930892                        }
    931893
    932                 /* 受信ウィンドバッファの使用中サイズをリセットする。*/
     894                /* 受信ウィンドバッファの使用中サイズをリセットする。*/
    933895                cep->rwbuf_count = 0;
    934896                }
     
    936898
    937899/*
    938  *  tcp_write_rwbuf -- 受信ウィンドバッファにデータを書き込む。
     900 *  tcp_write_rwbuf -- 受信ウィンドバッファにデータを書き込む。
    939901 *
    940  *    注意:
    941  *      å
    942 ¥åŠ› input は、T_TCP_Q_HDR によりリンクされ、
    943  *      並べ替えが終了していなければならない。また、
    944  *      追加するデータは、受信ウィンドバッファに収まること。
     902 *    注意:
     903 *      入力 input は、T_TCP_Q_HDR によりリンクされ、
     904 *      並べ替えが終了していなければならない。また、
     905 *      追加するデータは、受信ウィンドバッファに収まること。
    945906 */
    946907
     
    952913        uint_t          inlen, last;
    953914
    954         /* 通信端点をロックする。*/
     915        /* 通信端点をロックする。*/
    955916        syscall(wai_sem(cep->semid_lock));
    956917
     
    965926
    966927                /*
    967                  *  TCP 通信端点の受信ウィンドバッファの省コピー機能の、
    968                  *  受信ウィンドバッファキューの最大エントリ数をè¶
    969 ãˆã‚‹ã¨ãã¯ã€
    970                  *  受信したセグメントを破棄する。
    971                  *  ただし、SDU 長が 0 のセグメントと FIN セグメントは破棄しない。
    972                  *  なお、正常に受信したセグメントも破棄するため、再送回数が増加する。
     928                 *  TCP 通信端点の受信ウィンドバッファの省コピー機能の、
     929                 *  受信ウィンドバッファキューの最大エントリ数を超えるときは、
     930                 *  受信したセグメントを破棄する。
     931                 *  ただし、SDU 長が 0 のセグメントと FIN セグメントは破棄しない。
     932                 *  なお、正常に受信したセグメントも破棄するため、再送回数が増加する。
    973933                 */
    974934                syscall(rel_net_buf(input));
    975935
    976                 /* 通信端点のロックを解除する。*/
     936                /* 通信端点のロックを解除する。*/
    977937                syscall(sig_sem(cep->semid_lock));
    978938                return;
     
    985945        qhdr  = (T_TCP_Q_HDR*)GET_TCP_HDR(input, thoff);
    986946
    987         /* 受信済みシーケンス番号を更新する。*/
     947        /* 受信済みシーケンス番号を更新する。*/
    988948        cep->rcv_nxt += inlen;
    989949
    990         /* 緊急データの SDU 補正を行う。*/
     950        /* 緊急データの SDU 補正を行う。*/
    991951        if (qhdr->urp > 0 && inlen > 0) {
    992952                inlen      -= qhdr->urp;
     
    997957        last  = cep->rwbuf_count;
    998958
    999         /* ネットワークバッファを受信ウィンドバッファキューの最後に連結する。*/
     959        /* ネットワークバッファを受信ウィンドバッファキューの最後に連結する。*/
    1000960        qhdr->next = NULL;
    1001961        nextp = &cep->rwbufq;
     
    1005965
    1006966        /*
    1007          *  FIN フラグが付いたセグメントは inlen == 0 になることもある。
    1008          *  これは、アプリケーションに、相手からこれ以上データが送られて
    1009          *  こないことを知らせるためである。
     967         *  FIN フラグが付いたセグメントは inlen == 0 になることもある。
     968         *  これは、アプリケーションに、相手からこれ以上データが送られて
     969         *  こないことを知らせるためである。
    1010970         */
    1011971        if (inlen > 0) {
     
    1015975                }
    1016976
    1017         /* 通信端点のロックを解除する。*/
     977        /* 通信端点のロックを解除する。*/
    1018978        syscall(sig_sem(cep->semid_lock));
    1019979
    1020980#ifdef TCP_CFG_NON_BLOCKING
    1021981
    1022         if (cep->rcv_nblk_tfn == TFN_TCP_RCV_BUF) {     /* ノンブロッキングコール */
     982        if (cep->rcv_nblk_tfn == TFN_TCP_RCV_BUF) {     /* ノンブロッキングコール */
    1023983
    1024984                int_t   len;
     
    1028988
    1029989                /*
    1030                  *  FIN フラグが付いたセグメントは inlen == 0 になることもある。
    1031                  *  これは、アプリケーションに、相手からこれ以上データが送られて
    1032                  *  こないことを知らせるためである。
     990                 *  FIN フラグが付いたセグメントは inlen == 0 になることもある。
     991                 *  これは、アプリケーションに、相手からこれ以上データが送られて
     992                 *  こないことを知らせるためである。
    1033993                 */
    1034994                if (len > 0 || inlen == 0) {
    1035995
    1036                         /* tcp_rcv_buf の割当て長を設定する。*/
     996                        /* tcp_rcv_buf の割当て長を設定する。*/
    1037997                        cep->rcv_buf_len = len;
    1038998
    1039                         /* 受信ウィンドバッファのアドレスを返す。*/
     999                        /* 受信ウィンドバッファのアドレスを返す。*/
    10401000                        *cep->rcv_p_buf = GET_TCP_SDU(cep->rwbufq,
    10411001                                          GET_TCP_IP_Q_HDR(cep->rwbufq)->thoff) + qhdr->soff;
     
    10591019
    10601020                                /*
    1061                                  *  通信端点をロックして、
    1062                                  *  受信ウィンドバッファキューのネットワークバッファを解放する。
     1021                                 *  通信端点をロックして、
     1022                                 *  受信ウィンドバッファキューのネットワークバッファを解放する。
    10631023                                 */
    10641024                                syscall(wai_sem(cep->semid_lock));
     
    10681028                        }
    10691029
    1070                 /* 記憶されているタスク ID と API 機能コードをクリアーする。*/
     1030                /* 記憶されているタスク ID と API 機能コードをクリアーする。*/
    10711031                cep->rcv_tskid = TA_NULL;
    10721032                cep->rcv_tfn   = cep->rcv_nblk_tfn = TFN_TCP_UNDEF;
    10731033                }
    10741034
    1075         else if (cep->rcv_nblk_tfn == TFN_TCP_RCV_DAT) {        /* ノンブロッキングコール */
     1035        else if (cep->rcv_nblk_tfn == TFN_TCP_RCV_DAT) {        /* ノンブロッキングコール */
    10761036                int_t   len;
    10771037
    1078                 /* 受信ウィンドバッファからデータを取り出す。*/
     1038                /* 受信ウィンドバッファからデータを取り出す。*/
    10791039                if ((len = tcp_read_rwbuf_cs(cep, cep->rcv_data, (uint_t)cep->rcv_len)) > 0) {
    1080                         /* 相手にウィンドウサイズが変わったことを知らせるため出力をポストする。*/
     1040                        /* 相手にウィンドウサイズが変わったことを知らせるため出力をポストする。*/
    10811041                        cep->flags |= TCP_CEP_FLG_POST_OUTPUT;
    10821042                        sig_sem(SEM_TCP_POST_OUTPUT);
     
    10841044
    10851045                /*
    1086                  *  FIN フラグが付いたセグメントは inlen == 0 になることもある。
    1087                  *  これは、アプリケーションに、相手からこれ以上データが送られて
    1088                  *  こないことを知らせるためである。
     1046                 *  FIN フラグが付いたセグメントは inlen == 0 になることもある。
     1047                 *  これは、アプリケーションに、相手からこれ以上データが送られて
     1048                 *  こないことを知らせるためである。
    10891049                 */
    10901050                if (len > 0 || inlen == 0) {
     
    11061066                        }
    11071067
    1108                 /* 記憶されているタスク ID と API 機能コードをクリアーする。*/
     1068                /* 記憶されているタスク ID と API 機能コードをクリアーする。*/
    11091069                cep->rcv_tskid = TA_NULL;
    11101070                cep->rcv_tfn   = cep->rcv_nblk_tfn = TFN_TCP_UNDEF;
     
    11161076                if (inlen == 0 && cep->rwbuf_count == 0) {
    11171077                        /*
    1118                          *  受信ウィンドバッファå†
    1119 ã®ãƒ‡ãƒ¼ã‚¿æ•°ãŒ 0 で、
    1120                          *  相手から FIN フラグが付いたセグメントを受信したときは、
    1121                          *  通信端点をロックして、
    1122                          *  受信ウィンドバッファキューのネットワークバッファを解放する。
     1078                         *  受信ウィンドバッファ内のデータ数が 0 で、
     1079                         *  相手から FIN フラグが付いたセグメントを受信したときは、
     1080                         *  通信端点をロックして、
     1081                         *  受信ウィンドバッファキューのネットワークバッファを解放する。
    11231082                         */
    11241083                        syscall(wai_sem(cep->semid_lock));
     
    11281087
    11291088                /*
    1130                  *  受信ウィンドバッファにデータがå
    1131 ¥ã‚‹ã‹ã€ inlen == 0 の時、å
    1132 ¥åŠ›ã‚¿ã‚¹ã‚¯ã‚’起床する。
    1133                  *  FIN フラグが付いたセグメントは inlen == 0 になることもある。
    1134                  *  これは、アプリケーションに、相手からこれ以上データが送られて
    1135                  *  こないことを知らせるためである。
     1089                 *  受信ウィンドバッファにデータが入るか、 inlen == 0 の時、入力タスクを起床する。
     1090                 *  FIN フラグが付いたセグメントは inlen == 0 になることもある。
     1091                 *  これは、アプリケーションに、相手からこれ以上データが送られて
     1092                 *  こないことを知らせるためである。
    11361093                 */
    11371094                if ((last == 0 && cep->rwbuf_count > 0) || inlen == 0) {
  • EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/tcp_subr_ncs.c

    • Property svn:keywords deleted
    • Property svn:mime-type changed from text/x-csrc to text/x-csrc;charset=UTF-8
    r270 r321  
    55 *                   Tomakomai National College of Technology, JAPAN
    66 *
    7  *  上記著作権è€
    8 ã¯ï¼Œä»¥ä¸‹ã® (1)~(4) の条件か,Free Software Foundation
    9  *  によってå
    10 ¬è¡¨ã•ã‚Œã¦ã„ã‚‹ GNU General Public License の Version 2 に記
    11  *  述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
    12  *  を改変したものを含む.以下同じ)を使用・複製・改変・再é
    13 å¸ƒï¼ˆä»¥ä¸‹ï¼Œ
    14  *  利用と呼ぶ)することを無償で許諾する.
    15  *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
    16  *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
    17  *      スコード中に含まれていること.
    18  *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
    19  *      用できる形で再é
    20 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é
    21 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
    22  *      è€
    23 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—作権表示,この利用条件および下記
    24  *      の無保証規定を掲載すること.
    25  *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
    26  *      用できない形で再é
    27 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®æ¡ä»¶ã‚’満たすこと.
    28  *    (a) 再é
    29 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€
    30 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—
    31  *        作権表示,この利用条件および下記の無保証規定を掲載すること.
    32  *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
    33  *      害からも,上記著作権è€
    34 ãŠã‚ˆã³TOPPERSプロジェクトをå
    35 è²¬ã™ã‚‹ã“と.
     7 *  上記著作権者は,以下の (1)~(4) の条件か,Free Software Foundation
     8 *  によって公表されている GNU General Public License の Version 2 に記
     9 *  述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
     10 *  を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下,
     11 *  利用と呼ぶ)することを無償で許諾する.
     12 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     13 *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     14 *      スコード中に含まれていること.
     15 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     16 *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     17 *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     18 *      の無保証規定を掲載すること.
     19 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     20 *      用できない形で再配布する場合には,次の条件を満たすこと.
     21 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     22 *        作権表示,この利用条件および下記の無保証規定を掲載すること.
     23 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     24 *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
    3625 *
    37  *  本ソフトウェアは,無保証で提供されているものである.上記著作権è€
    38 ãŠ
    39  *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
    40  *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
    41  *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
     26 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     27 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
     28 *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
     29 *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
    4230 *
    4331 *  @(#) $Id$
     
    135123
    136124/*
    137  *  TCP 通信端点の送信ウィンドバッファの省コピー機能が無効
    138  */
    139 
    140 /*
    141  *  tcp_read_swbuf -- 送信ウィンドバッファからデータを読み出す。
     125 *  TCP 通信端点の送信ウィンドバッファの省コピー機能が無効
     126 */
     127
     128/*
     129 *  tcp_read_swbuf -- 送信ウィンドバッファからデータを読み出す。
    142130 */
    143131
     
    147135        uint8_t *wptr, *rptr;
    148136
    149         /* SDU の大きさをチェックする。*/
     137        /* SDU の大きさをチェックする。*/
    150138        if (GET_IP_SDU_SIZE(GET_IP_HDR(output)) < GET_TCP_HDR_SIZE2(output, IF_IP_TCP_HDR_OFFSET) + len) {
    151139                syslog(LOG_INFO, "[TCP] shrink SUD len: %d -> %d",
     
    156144        wptr = GET_TCP_SDU(output, IF_IP_TCP_HDR_OFFSET);
    157145
    158         /* 通信端点をロックする。*/
     146        /* 通信端点をロックする。*/
    159147        syscall(wai_sem(cep->semid_lock));
    160148
     
    162150        if (rptr - (uint8_t*)cep->sbuf > cep->sbufsz) {
    163151
    164                 /* 転送開始が送信ウィンドバッファの終わりをè¶
    165 ãˆã‚‹ã¨ãã®å‡¦ç†ã€€*/
     152                /* 転送開始が送信ウィンドバッファの終わりを超えるときの処理 */
    166153                rptr = (uint8_t*)cep->sbuf_rptr - (cep->sbufsz - doff);
    167154                }
     
    169156                uint_t sub;
    170157
    171                 /* 転送範囲がラウンドするときの処理 */
     158                /* 転送範囲がラウンドするときの処理 */
    172159                sub = (uint_t)(cep->sbufsz - (rptr - (uint8_t*)cep->sbuf));
    173160                memcpy((void*)wptr, rptr, (size_t)sub);
     
    181168        NET_COUNT_TCP(net_count_tcp[NC_TCP_SEND_DATA_OCTETS], len);
    182169
    183         /* 通信端点のロックを解除する。*/
     170        /* 通信端点のロックを解除する。*/
    184171        syscall(sig_sem(cep->semid_lock));
    185172        }
    186173
    187174/*
    188  *  tcp_drop_swbuf -- 送信ウィンドバッファから指定されたオクテット分削除する。
     175 *  tcp_drop_swbuf -- 送信ウィンドバッファから指定されたオクテット分削除する。
    189176 */
    190177
     
    194181        uint_t  last;
    195182
    196         /* 通信端点をロックする。*/
     183        /* 通信端点をロックする。*/
    197184        syscall(wai_sem(cep->semid_lock));
    198185
     
    200187
    201188        if (cep->sbuf_rptr + len > (uint8_t*)cep->sbuf + cep->sbufsz)
    202                 /* ラウンドするときの計算 */
     189                /* ラウンドするときの計算 */
    203190                cep->sbuf_rptr -= cep->sbufsz - len;
    204191        else
     
    206193        cep->swbuf_count -= (uint16_t)len;
    207194
    208         /* 通信端点のロックを解除する。*/
     195        /* 通信端点のロックを解除する。*/
    209196        syscall(sig_sem(cep->semid_lock));
    210197
    211198#ifdef TCP_CFG_NON_BLOCKING
    212199
    213         if (cep->snd_nblk_tfn == TFN_TCP_GET_BUF) {     /* ノンブロッキングコール */
    214 
    215                 /* 通信端点をロックする。*/
     200        if (cep->snd_nblk_tfn == TFN_TCP_GET_BUF) {     /* ノンブロッキングコール */
     201
     202                /* 通信端点をロックする。*/
    216203                syscall(wai_sem(cep->semid_lock));
    217204
    218                 /* 送信データ長を計算する。*/
     205                /* 送信データ長を計算する。*/
    219206                if (cep->sbufsz - cep->swbuf_count > cep->sbufsz - (cep->sbuf_wptr - (uint8_t*)cep->sbuf))
    220                         /* 書込みポインタがラウンドするときは、書込みポインタから送信ウィンドバッファの終わりまで */
     207                        /* 書込みポインタがラウンドするときは、書込みポインタから送信ウィンドバッファの終わりまで */
    221208                        len = (uint_t)(cep->sbufsz - (cep->sbuf_wptr - (uint8_t*)cep->sbuf));
    222209                else
    223210                        len = cep->sbufsz - cep->swbuf_count;
    224211
    225                 /* 通信端点のロックを解除する。*/
     212                /* 通信端点のロックを解除する。*/
    226213                syscall(sig_sem(cep->semid_lock));
    227214
    228215                if (len > 0) {
    229216
    230                         /* tcp_get_buf の割当て長を設定する。*/
     217                        /* tcp_get_buf の割当て長を設定する。*/
    231218                        cep->get_buf_len = len;
    232219
    233                         /* 送信ウィンドバッファのアドレスを返す。*/
     220                        /* 送信ウィンドバッファのアドレスを返す。*/
    234221                        *cep->snd_p_buf = cep->sbuf_wptr;
    235222
     
    248235                                syslog(LOG_WARNING, "[TCP] no call back, CEP: %d.", GET_TCP_CEPID(cep));
    249236
    250                         /* 記憶されているタスク ID と API 機能コードをクリアーする。*/
     237                        /* 記憶されているタスク ID と API 機能コードをクリアーする。*/
    251238                        cep->snd_tskid = TA_NULL;
    252239                        cep->snd_tfn   = cep->snd_nblk_tfn = TFN_TCP_UNDEF;
     
    257244
    258245        else if (cep->snd_nblk_tfn == TFN_TCP_SND_DAT ||
    259                  cep->snd_nblk_tfn == TFN_TCP_SND_OOB) {        /* ノンブロッキングコール */
     246                 cep->snd_nblk_tfn == TFN_TCP_SND_OOB) {        /* ノンブロッキングコール */
    260247
    261248#else   /* of #ifdef TCP_CFG_EXTENTIONS */
    262249
    263         else if (cep->snd_nblk_tfn == TFN_TCP_SND_DAT) {        /* ノンブロッキングコール */
     250        else if (cep->snd_nblk_tfn == TFN_TCP_SND_DAT) {        /* ノンブロッキングコール */
    264251
    265252#endif  /* of #ifdef TCP_CFG_EXTENTIONS */
     
    267254                ER_UINT error;
    268255
    269                 /* 送信ウィンドバッファにデータを書き込む。*/
     256                /* 送信ウィンドバッファにデータを書き込む。*/
    270257                error = TCP_WRITE_SWBUF(cep, cep->snd_data, (uint_t)cep->snd_len);
    271258
    272259#ifdef TCP_CFG_EXTENTIONS
    273260
    274                 /* 送信緊急ポインタを設定する。*/
     261                /* 送信緊急ポインタを設定する。*/
    275262                if (cep->snd_nblk_tfn == TFN_TCP_SND_OOB)
    276263                        cep->snd_up = cep->snd_una + error;
     
    293280                        syslog(LOG_WARNING, "[TCP] no call back, CEP: %d.", GET_TCP_CEPID(cep));
    294281
    295                 /* 記憶されているタスク ID と API 機能コードをクリアーする。*/
     282                /* 記憶されているタスク ID と API 機能コードをクリアーする。*/
    296283                cep->snd_tskid = TA_NULL;
    297284                cep->snd_tfn   = cep->snd_nblk_tfn = TFN_TCP_UNDEF;
     
    301288#endif  /* of #ifdef TCP_CFG_NON_BLOCKING */
    302289
    303                 /* 送信ウィンドバッファに空きが出来たら出力タスクを起床する。*/
     290                /* 送信ウィンドバッファに空きが出来たら出力タスクを起床する。*/
    304291                if (last == cep->sbufsz && cep->swbuf_count < cep->sbufsz)
    305292                        syscall(set_flg(cep->snd_flgid, TCP_CEP_EVT_SWBUF_READY));
     
    312299
    313300        if (cep->swbuf_count > 0) {
    314                 /* 送信ウィンドバッファにデータがあれば出力をポストする。*/
     301                /* 送信ウィンドバッファにデータがあれば出力をポストする。*/
    315302                cep->flags |= TCP_CEP_FLG_POST_OUTPUT;
    316303                sig_sem(SEM_TCP_POST_OUTPUT);
     
    319306
    320307/*
    321  *  tcp_write_swbuf -- 送信ウィンドバッファにデータを書き込む。
     308 *  tcp_write_swbuf -- 送信ウィンドバッファにデータを書き込む。
    322309 */
    323310
     
    327314        uint_t  offset;
    328315
    329         /* 通信端点をロックする。*/
     316        /* 通信端点をロックする。*/
    330317        syscall(wai_sem(cep->semid_lock));
    331318
    332         /* len と送信ウィンドバッファの空きの小さい方を移すデータ数にする。*/
     319        /* len と送信ウィンドバッファの空きの小さい方を移すデータ数にする。*/
    333320        if (len > (cep->sbufsz - cep->swbuf_count))
    334321                len = cep->sbufsz - cep->swbuf_count;
    335322
    336         /* 書き込みポインタがラウンドするときの処理 */
     323        /* 書き込みポインタがラウンドするときの処理 */
    337324        if (len > cep->sbufsz - (cep->sbuf_wptr - (uint8_t*)cep->sbuf)) {
    338325                offset = (uint_t)(cep->sbufsz - (cep->sbuf_wptr -(uint8_t*)cep->sbuf));
     
    348335        cep->swbuf_count += len - offset;
    349336
    350         /* 通信端点のロックを解除する。*/
     337        /* 通信端点のロックを解除する。*/
    351338        syscall(sig_sem(cep->semid_lock));
    352339
     
    355342
    356343/*
    357  *  tcp_wait_swbuf -- 送信ウィンドバッファが空くのをå¾
    358 ã¤ã€‚
     344 *  tcp_wait_swbuf -- 送信ウィンドバッファが空くのを待つ。
    359345 */
    360346
     
    367353        while (cep->swbuf_count >= cep->sbufsz) {
    368354                /*
    369                  *  送信ウィンドバッファの空きがなければ、出力をポストして、
    370                  *  送信ウィンドバッファが空くまでå¾
    371 ã¤ã€‚
     355                 *  送信ウィンドバッファの空きがなければ、出力をポストして、
     356                 *  送信ウィンドバッファが空くまで待つ。
    372357                 */
    373358                cep->flags |= TCP_CEP_FLG_POST_OUTPUT;
     
    380365
    381366                /*
    382                  *  送信できるか、CEP の FSM 状æ
    383 ‹ã‚’見る。
    384                  *  送信ウィンドバッファが空くまでå¾
    385 ã¤é–“に、送信不能になった場合は、
    386                  *  コネクションが切断されたことを意味している。
     367                 *  送信できるか、CEP の FSM 状態を見る。
     368                 *  送信ウィンドバッファが空くまで待つ間に、送信不能になった場合は、
     369                 *  コネクションが切断されたことを意味している。
    387370                 */
    388371                if (!TCP_FSM_CAN_SEND_MORE(cep->fsm_state)) {
     
    394377        }
    395378/*
    396  *  tcp_get_swbuf_addr -- 送信ウィンドバッファの空きアドレスを獲得する。
     379 *  tcp_get_swbuf_addr -- 送信ウィンドバッファの空きアドレスを獲得する。
    397380 */
    398381
     
    402385        uint_t  len;
    403386
    404         /* 通信端点をロックする。*/
     387        /* 通信端点をロックする。*/
    405388        syscall(wai_sem(cep->semid_lock));
    406389
    407         /* 送信ウィンドバッファの空きアドレスのå
    408 ˆé ­ã‚’設定する。*/
     390        /* 送信ウィンドバッファの空きアドレスの先頭を設定する。*/
    409391        *p_buf = cep->sbuf_wptr;
    410392
    411         /* 送信ウィンドバッファの空きサイズを計算する。*/
     393        /* 送信ウィンドバッファの空きサイズを計算する。*/
    412394        if (cep->sbufsz - cep->swbuf_count > cep->sbufsz - (cep->sbuf_wptr - (uint8_t*)cep->sbuf))
    413                 /* 書込みポインタがラウンドするときは、書込みポインタから送信ウィンドバッファの終わりまで */
     395                /* 書込みポインタがラウンドするときは、書込みポインタから送信ウィンドバッファの終わりまで */
    414396                len = (uint_t)(cep->sbufsz - (cep->sbuf_wptr - (uint8_t*)cep->sbuf));
    415397        else
    416398                len = cep->sbufsz - cep->swbuf_count;
    417399
    418         /* 通信端点のロックを解除する。*/
     400        /* 通信端点のロックを解除する。*/
    419401        syscall(sig_sem(cep->semid_lock));
    420402
    421         /* 送信ウィンドバッファの空きデータ長を設定し、その値を返す。*/
     403        /* 送信ウィンドバッファの空きデータ長を設定し、その値を返す。*/
    422404        cep->get_buf_len = len;
    423405        return (ER_UINT)len;
     
    425407
    426408/*
    427  *  tcp_send_swbuf -- 送信ウィンドバッファのデータを送信可能にする。
     409 *  tcp_send_swbuf -- 送信ウィンドバッファのデータを送信可能にする。
    428410 */
    429411
     
    431413tcp_send_swbuf_ncs (T_TCP_CEP *cep, uint_t len)
    432414{
    433         /* 通信端点をロックする。*/
     415        /* 通信端点をロックする。*/
    434416        syscall(wai_sem(cep->semid_lock));
    435417
     
    437419        cep->swbuf_count += len;
    438420
    439         /* 書込みポインタがラウンドするときの処理 */
     421        /* 書込みポインタがラウンドするときの処理 */
    440422        if (cep->sbuf_wptr >= (uint8_t*)cep->sbuf + cep->sbufsz)
    441423                cep->sbuf_wptr  = (uint8_t*)cep->sbuf;
    442424
    443         /* tcp_get_buf の割当て長をリセットする。*/
     425        /* tcp_get_buf の割当て長をリセットする。*/
    444426        cep->get_buf_len = 0;
    445427
    446         /* 通信端点のロックを解除する。*/
     428        /* 通信端点のロックを解除する。*/
    447429        syscall(sig_sem(cep->semid_lock));
    448430
    449         /* 送信ウィンドバッファがフルのときは強制的に送信する。*/
     431        /* 送信ウィンドバッファがフルのときは強制的に送信する。*/
    450432        if (cep->swbuf_count >= cep->sbufsz)
    451433                cep->flags |= TCP_CEP_FLG_FORCE | TCP_CEP_FLG_FORCE_CLEAR;
     
    453435
    454436/*
    455  *  tcp_is_swbuf_full -- 送信ウィンドバッファが満杯かチェックする。
     437 *  tcp_is_swbuf_full -- 送信ウィンドバッファが満杯かチェックする。
    456438 */
    457439
     
    467449
    468450/*
    469  *  TCP 通信端点の受信ウィンドバッファの省コピー機能が無効
    470  */
    471 
    472 /*
    473  *  tcp_drop_rwbuf -- 受信ウィンドバッファから指定されたオクテット分削除する。
     451 *  TCP 通信端点の受信ウィンドバッファの省コピー機能が無効
     452 */
     453
     454/*
     455 *  tcp_drop_rwbuf -- 受信ウィンドバッファから指定されたオクテット分削除する。
    474456 */
    475457
     
    480462        cep->rbuf_rptr  += len;
    481463
    482         /* 読み出しポインタがラウンドするときの処理 */
     464        /* 読み出しポインタがラウンドするときの処理 */
    483465        if (cep->rbuf_rptr >= (uint8_t*)cep->rbuf + cep->rbufsz)
    484466                cep->rbuf_rptr  = (uint8_t*)cep->rbuf;
     
    486468
    487469/*
    488  *  tcp_read_rwbuf -- 受信ウィンドバッファから指定されたオクテット分読み出す。
     470 *  tcp_read_rwbuf -- 受信ウィンドバッファから指定されたオクテット分読み出す。
    489471 */
    490472
     
    494476        uint_t  offset;
    495477
    496         /* 通信端点をロックする。*/
     478        /* 通信端点をロックする。*/
    497479        syscall(wai_sem(cep->semid_lock));
    498480
    499         /* len と受信ウィンドバッファのデータ数の小さい方を取り出すデータ数にする。*/
     481        /* len と受信ウィンドバッファのデータ数の小さい方を取り出すデータ数にする。*/
    500482        if (len > cep->rwbuf_count)
    501483                len = cep->rwbuf_count;
    502484
    503         /* 読み出しポインタがラウンドするときの処理 */
     485        /* 読み出しポインタがラウンドするときの処理 */
    504486        if (len > cep->rbufsz - (cep->rbuf_rptr - (uint8_t*)cep->rbuf)) {
    505487                offset = (uint_t)(cep->rbufsz - (cep->rbuf_rptr -(uint8_t*)cep->rbuf));
     
    515497        cep->rbuf_rptr  += len - offset;
    516498
    517         /* 通信端点のロックを解除する。*/
     499        /* 通信端点のロックを解除する。*/
    518500        syscall(sig_sem(cep->semid_lock));
    519501
     
    522504
    523505/*
    524  *  tcp_get_rwbuf_addr -- 受信ウィンドバッファの空きアドレスを獲得する。
     506 *  tcp_get_rwbuf_addr -- 受信ウィンドバッファの空きアドレスを獲得する。
    525507 */
    526508
     
    530512        uint_t  len;
    531513
    532         /* 通信端点をロックする。*/
     514        /* 通信端点をロックする。*/
    533515        syscall(wai_sem(cep->semid_lock));
    534516
    535         /* 受信ウィンドバッファのデータ長を計算する。*/
     517        /* 受信ウィンドバッファのデータ長を計算する。*/
    536518        if (cep->rwbuf_count > cep->rbufsz - (cep->rbuf_rptr - (uint8_t*)cep->rbuf))
    537                 /* ポインタがラウンドするときは受信ウィンドバッファの終わりまで */
     519                /* ポインタがラウンドするときは受信ウィンドバッファの終わりまで */
    538520                len = (uint_t)(cep->rbufsz - (cep->rbuf_rptr - (uint8_t*)cep->rbuf));
    539521        else
    540522                len = cep->rwbuf_count;
    541523
    542         /* 受信ウィンドバッファのデータのアドレスのå
    543 ˆé ­ã‚’設定する。*/
     524        /* 受信ウィンドバッファのデータのアドレスの先頭を設定する。*/
    544525        *p_buf = cep->rbuf_rptr;
    545526
    546         /* 通信端点のロックを解除する。*/
     527        /* 通信端点のロックを解除する。*/
    547528        syscall(sig_sem(cep->semid_lock));
    548529
    549         /* 受信ウィンドバッファのデータ長を設定し、その値を返す。*/
     530        /* 受信ウィンドバッファのデータ長を設定し、その値を返す。*/
    550531        cep->rcv_buf_len = len;
    551532        return len;
     
    553534
    554535/*
    555  *  tcp_write_rwbuf -- 受信ウィンドバッファにデータを書き込む。
     536 *  tcp_write_rwbuf -- 受信ウィンドバッファにデータを書き込む。
    556537 *
    557  *    注意:
    558  *      å
    559 ¥åŠ› input は、T_TCP_Q_HDR によりリンクされ、
    560  *      並べ替えが終了していなければならない。また、
    561  *      追加するデータは、受信ウィンドバッファに収まること。
     538 *    注意:
     539 *      入力 input は、T_TCP_Q_HDR によりリンクされ、
     540 *      並べ替えが終了していなければならない。また、
     541 *      追加するデータは、受信ウィンドバッファに収まること。
    562542 */
    563543
     
    568548        uint_t          offset, inlen, last;
    569549
    570         /* 通信端点をロックする。*/
     550        /* 通信端点をロックする。*/
    571551        syscall(wai_sem(cep->semid_lock));
    572552
    573553        qhdr  = (T_TCP_Q_HDR*)GET_TCP_HDR(input, thoff);
    574554
    575         /* 受信済みシーケンス番号を更新する。*/
     555        /* 受信済みシーケンス番号を更新する。*/
    576556        cep->rcv_nxt += qhdr->slen;
    577557
     
    579559        inlen = qhdr->slen;
    580560
    581         /* 緊急データの SDU 補正を行う。*/
     561        /* 緊急データの SDU 補正を行う。*/
    582562        if (qhdr->urp > 0 && inlen > 0) {
    583563                inlen      -= qhdr->urp;
     
    587567
    588568        /*
    589          *  FIN フラグが付いたセグメントは inlen == 0 になることもある。
    590          *  これは、アプリケーションに、相手からこれ以上データが送られて
    591          *  こないことを知らせるためである。
     569         *  FIN フラグが付いたセグメントは inlen == 0 になることもある。
     570         *  これは、アプリケーションに、相手からこれ以上データが送られて
     571         *  こないことを知らせるためである。
    592572         */
    593573        if (inlen > 0) {
    594574
    595                 /* 書き込みポインタがラウンドするときの処理 */
     575                /* 書き込みポインタがラウンドするときの処理 */
    596576                if (inlen > cep->rbufsz - (cep->rbuf_wptr - (uint8_t*)cep->rbuf)) {
    597577                        offset = (uint_t)(cep->rbufsz - (cep->rbuf_wptr - (uint8_t*)cep->rbuf));
     
    616596#ifdef TCP_CFG_NON_BLOCKING
    617597
    618         if (cep->rcv_nblk_tfn == TFN_TCP_RCV_BUF) {     /* ノンブロッキングコール */
     598        if (cep->rcv_nblk_tfn == TFN_TCP_RCV_BUF) {     /* ノンブロッキングコール */
    619599
    620600                int_t   len;
    621601
    622                 /* 受信ウィンドバッファの空きデータ長を計算する。*/
     602                /* 受信ウィンドバッファの空きデータ長を計算する。*/
    623603                if (cep->rwbuf_count > cep->rbufsz - (cep->rbuf_rptr - (uint8_t*)cep->rbuf)) {
    624                         /* ポインタがラウンドするときは受信ウィンドバッファの終わりまで */
     604                        /* ポインタがラウンドするときは受信ウィンドバッファの終わりまで */
    625605                        len = (uint_t)(cep->rbufsz - (cep->rbuf_rptr - (uint8_t*)cep->rbuf));
    626606                        }
     
    628608                        len = cep->rwbuf_count;
    629609
    630                 /* 通信端点のロックを解除する。*/
     610                /* 通信端点のロックを解除する。*/
    631611                syscall(sig_sem(cep->semid_lock));
    632612
    633613                /*
    634                  *  FIN フラグが付いたセグメントは inlen == 0 になることもある。
    635                  *  これは、アプリケーションに、相手からこれ以上データが送られて
    636                  *  こないことを知らせるためである。
     614                 *  FIN フラグが付いたセグメントは inlen == 0 になることもある。
     615                 *  これは、アプリケーションに、相手からこれ以上データが送られて
     616                 *  こないことを知らせるためである。
    637617                 */
    638618                if (len > 0 || inlen == 0) {
    639619
    640                         /* tcp_rcv_buf の割当て長を設定する。*/
     620                        /* tcp_rcv_buf の割当て長を設定する。*/
    641621                        cep->rcv_buf_len = len;
    642622
    643                         /* 受信ウィンドバッファのアドレスを返す。*/
     623                        /* 受信ウィンドバッファのアドレスを返す。*/
    644624                        *cep->rcv_p_buf = cep->rbuf_rptr;
    645625
     
    663643
    664644                                /*
    665                                  *  通信端点をロックして、
    666                                  *  受信ウィンドバッファキューのネットワークバッファを解放する。
     645                                 *  通信端点をロックして、
     646                                 *  受信ウィンドバッファキューのネットワークバッファを解放する。
    667647                                 */
    668648                                syscall(wai_sem(cep->semid_lock));
     
    672652                        }
    673653
    674                 /* 記憶されているタスク ID と API 機能コードをクリアーする。*/
     654                /* 記憶されているタスク ID と API 機能コードをクリアーする。*/
    675655                cep->rcv_tskid = TA_NULL;
    676656                cep->rcv_tfn   = cep->rcv_nblk_tfn = TFN_TCP_UNDEF;
    677657                }
    678658
    679         else if (cep->rcv_nblk_tfn == TFN_TCP_RCV_DAT) {        /* ノンブロッキングコール */
     659        else if (cep->rcv_nblk_tfn == TFN_TCP_RCV_DAT) {        /* ノンブロッキングコール */
    680660                ER_UINT len;
    681661
    682                 /* 通信端点のロックを解除する。*/
     662                /* 通信端点のロックを解除する。*/
    683663                syscall(sig_sem(cep->semid_lock));
    684664
    685                 /* 受信ウィンドバッファからデータを取り出す。*/
     665                /* 受信ウィンドバッファからデータを取り出す。*/
    686666                if ((len = TCP_READ_RWBUF(cep, cep->rcv_data, (uint_t)cep->rcv_len)) > 0) {
    687                         /* 相手にウィンドウサイズが変わったことを知らせるため出力をポストする。*/
     667                        /* 相手にウィンドウサイズが変わったことを知らせるため出力をポストする。*/
    688668                        cep->flags |= TCP_CEP_FLG_POST_OUTPUT;
    689669                        sig_sem(SEM_TCP_POST_OUTPUT);
     
    691671
    692672                /*
    693                  *  FIN フラグが付いたセグメントは inlen == 0 になることもある。
    694                  *  これは、アプリケーションに、相手からこれ以上データが送られて
    695                  *  こないことを知らせるためである。
     673                 *  FIN フラグが付いたセグメントは inlen == 0 になることもある。
     674                 *  これは、アプリケーションに、相手からこれ以上データが送られて
     675                 *  こないことを知らせるためである。
    696676                 */
    697677                if (len > 0 || inlen == 0) {
     
    713693                        }
    714694
    715                 /* 記憶されているタスク ID と API 機能コードをクリアーする。*/
     695                /* 記憶されているタスク ID と API 機能コードをクリアーする。*/
    716696                cep->rcv_tskid = TA_NULL;
    717697                cep->rcv_tfn   = cep->rcv_nblk_tfn = TFN_TCP_UNDEF;
     
    722702#endif  /* of #ifdef TCP_CFG_NON_BLOCKING */
    723703
    724                 /* 通信端点のロックを解除する。*/
     704                /* 通信端点のロックを解除する。*/
    725705                syscall(sig_sem(cep->semid_lock));
    726706
    727707                if (inlen == 0 && cep->rwbuf_count == 0) {
    728708                        /*
    729                          *  受信ウィンドバッファå†
    730 ã®ãƒ‡ãƒ¼ã‚¿æ•°ãŒ 0 で、
    731                          *  相手から FIN フラグが付いたセグメントを受信したときは、
    732                          *  通信端点をロックして、
    733                          *  受信ウィンドバッファキューのネットワークバッファを解放する。
     709                         *  受信ウィンドバッファ内のデータ数が 0 で、
     710                         *  相手から FIN フラグが付いたセグメントを受信したときは、
     711                         *  通信端点をロックして、
     712                         *  受信ウィンドバッファキューのネットワークバッファを解放する。
    734713                         */
    735714                        syscall(wai_sem(cep->semid_lock));
     
    739718
    740719                /*
    741                  *  受信ウィンドバッファにデータがå
    742 ¥ã‚‹ã‹ã€ inlen == 0 の時、å
    743 ¥åŠ›ã‚¿ã‚¹ã‚¯ã‚’起床する。
    744                  *  FIN フラグが付いたセグメントは inlen == 0 になることもある。
    745                  *  これは、アプリケーションに、相手からこれ以上データが送られて
    746                  *  こないことを知らせるためである。
     720                 *  受信ウィンドバッファにデータが入るか、 inlen == 0 の時、入力タスクを起床する。
     721                 *  FIN フラグが付いたセグメントは inlen == 0 になることもある。
     722                 *  これは、アプリケーションに、相手からこれ以上データが送られて
     723                 *  こないことを知らせるためである。
    747724                 */
    748725                if ((last == 0 && cep->rwbuf_count > 0) || inlen == 0)
  • EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/tcp_timer.c

    • Property svn:keywords deleted
    • Property svn:mime-type changed from text/x-csrc to text/x-csrc;charset=UTF-8
    r270 r321  
    55 *                   Tomakomai National College of Technology, JAPAN
    66 *
    7  *  上記著作権è€
    8 ã¯ï¼Œä»¥ä¸‹ã® (1)~(4) の条件か,Free Software Foundation
    9  *  によってå
    10 ¬è¡¨ã•ã‚Œã¦ã„ã‚‹ GNU General Public License の Version 2 に記
    11  *  述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
    12  *  を改変したものを含む.以下同じ)を使用・複製・改変・再é
    13 å¸ƒï¼ˆä»¥ä¸‹ï¼Œ
    14  *  利用と呼ぶ)することを無償で許諾する.
    15  *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
    16  *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
    17  *      スコード中に含まれていること.
    18  *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
    19  *      用できる形で再é
    20 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é
    21 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
    22  *      è€
    23 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—作権表示,この利用条件および下記
    24  *      の無保証規定を掲載すること.
    25  *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
    26  *      用できない形で再é
    27 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®æ¡ä»¶ã‚’満たすこと.
    28  *    (a) 再é
    29 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€
    30 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—
    31  *        作権表示,この利用条件および下記の無保証規定を掲載すること.
    32  *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
    33  *      害からも,上記著作権è€
    34 ãŠã‚ˆã³TOPPERSプロジェクトをå
    35 è²¬ã™ã‚‹ã“と.
     7 *  上記著作権者は,以下の (1)~(4) の条件か,Free Software Foundation
     8 *  によって公表されている GNU General Public License の Version 2 に記
     9 *  述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
     10 *  を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下,
     11 *  利用と呼ぶ)することを無償で許諾する.
     12 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     13 *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     14 *      スコード中に含まれていること.
     15 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     16 *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     17 *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     18 *      の無保証規定を掲載すること.
     19 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     20 *      用できない形で再配布する場合には,次の条件を満たすこと.
     21 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     22 *        作権表示,この利用条件および下記の無保証規定を掲載すること.
     23 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     24 *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
    3625 *
    37  *  本ソフトウェアは,無保証で提供されているものである.上記著作権è€
    38 ãŠ
    39  *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
    40  *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
    41  *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
     26 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     27 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
     28 *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
     29 *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
    4230 *
    4331 *  @(#) $Id$
     
    123111
    124112/*
    125  *  局所関数
     113 *  局所関数
    126114 */
    127115
     
    135123
    136124/*
    137  *  バックオフ時間
     125 *  バックオフ時間
    138126 *
    139  *  再送を行うたびに、タイムアウトの時間を延長する。
     127 *  再送を行うたびに、タイムアウトの時間を延長する。
    140128 */
    141129
     
    147135        };
    148136
    149 #define TCP_TOTAL_BACK_OFF      511     /* バックオフ時間の合計 */
    150 
    151 /*
    152  *  tcp_timers -- タイムアウト処理
     137#define TCP_TOTAL_BACK_OFF      511     /* バックオフ時間の合計 */
     138
     139/*
     140 *  tcp_timers -- タイムアウト処理
    153141 */
    154142
     
    162150
    163151        /*
    164          *  再送タイマ
     152         *  再送タイマ
    165153         */
    166154        case TCP_TIM_REXMT:
    167155       
    168156                /*
    169                  *  最大再送回数 (TCP_MAX_REXMT_SHIFT、標準 12 回) になったときは、
    170                  *  コネクションを切断する。
     157                 *  最大再送回数 (TCP_MAX_REXMT_SHIFT、標準 12 回) になったときは、
     158                 *  コネクションを切断する。
    171159                 */
    172160                if (++ cep->rxtshift > TCP_MAX_REXMT_SHIFT) {
     
    178166
    179167                /*
    180                  *  再送タイムアウトを計算する。
     168                 *  再送タイムアウトを計算する。
    181169                 */
    182170                cep->rxtcur = tcp_range_set((T_TCP_TIME)(tcp_rexmt_val(cep) * tcp_back_off[cep->rxtshift]),
     
    186174
    187175                /*
    188                  *  srtt:   å¹³æ»‘化された RTT
    189                  *  rttvar: 平滑化された分散
     176                 *  srtt:   平滑化された RTT
     177                 *  rttvar: 平滑化された分散
    190178                 *
    191                  *  再送回数が最大再送回数の 1/4 になったときは、
    192                  *  平滑化された分散 (rttvar) に srtt を加算し、
    193                  *  平滑化された RTT を 0 にする。
     179                 *  再送回数が最大再送回数の 1/4 になったときは、
     180                 *  平滑化された分散 (rttvar) に srtt を加算し、
     181                 *  平滑化された RTT を 0 にする。
    194182                 * 
    195183                 */
     
    200188
    201189                /*
    202                  *  snd_nxt: 次に送信する SEQ、この時点では、前回送信した SEQ
    203                  *  snd_una: 未確認の最小送信 SEQ        または、確認された最大送信 SEQ
     190                 *  snd_nxt: 次に送信する SEQ、この時点では、前回送信した SEQ
     191                 *  snd_una: 未確認の最小送信 SEQ        または、確認された最大送信 SEQ
    204192                 *
    205                  *  前回送信した SEQ (snd_nxt) を
    206                  *  確認された最大送信 SEQ (snd_una) まで戻す。
     193                 *  前回送信した SEQ (snd_nxt) を
     194                 *  確認された最大送信 SEQ (snd_una) まで戻す。
    207195                 */
    208196                cep->snd_nxt = cep->snd_una;
     
    210198
    211199                /*
    212                  *  rtt: 往復時間の計測を中止する。
     200                 *  rtt: 往復時間の計測を中止する。
    213201                 */
    214202                cep->rtt     = 0;
    215203
    216204                /*
    217                  *  送信ウインドの設定
     205                 *  送信ウインドの設定
    218206                 *
    219                  *  snd_wnd:  相手の受信可能ウィンドサイズ
    220                  *  snd_cwnd: 輻輳ウィンドサイズ
    221                  *  maxseg  : 相手の最大受信セグメントサイズ
     207                 *  snd_wnd:  相手の受信可能ウィンドサイズ
     208                 *  snd_cwnd: 輻輳ウィンドサイズ
     209                 *  maxseg  : 相手の最大受信セグメントサイズ
    222210                 *
    223                  *  相手の受信可能ウィンドサイズ (snd_wnd) か、
    224                  *  輻輳ウィンドサイズ (snd_cwnd) の
    225                  *  どちらか小さいサイズの 1/2 を、更に
    226                  *  相手の最大受信セグメントサイズ (maxseg) で割った値。
    227                  *  ただし、2 以上
     211                 *  相手の受信可能ウィンドサイズ (snd_wnd) か、
     212                 *  輻輳ウィンドサイズ (snd_cwnd) の
     213                 *  どちらか小さいサイズの 1/2 を、更に
     214                 *  相手の最大受信セグメントサイズ (maxseg) で割った値。
     215                 *  ただし、2 以上
    228216                 */
    229217                if (cep->snd_wnd < cep->snd_cwnd)
     
    236224
    237225                /*
    238                  *  輻輳ウィンドサイズ (snd_cwnd) は
    239                  *  相手の受信可能ウィンドサイズ (snd_wnd) に、
    240                  *  輻輳ウィンドサイズのしきい値 (snd_ssthresh) は
    241                  *  相手の受信可能ウィンドサイズ (snd_wnd) の win 倍に
    242                  *  設定する。
     226                 *  輻輳ウィンドサイズ (snd_cwnd) は
     227                 *  相手の受信可能ウィンドサイズ (snd_wnd) に、
     228                 *  輻輳ウィンドサイズのしきい値 (snd_ssthresh) は
     229                 *  相手の受信可能ウィンドサイズ (snd_wnd) の win 倍に
     230                 *  設定する。
    243231                 */
    244232                cep->snd_cwnd     = cep->maxseg;
     
    246234                cep->dupacks      = 0;
    247235
    248                 /* 出力をポストする。*/
     236                /* 出力をポストする。*/
    249237                cep->flags |= TCP_CEP_FLG_POST_OUTPUT;
    250238                sig_sem(SEM_TCP_POST_OUTPUT);
     
    252240
    253241        /*
    254          *  持続タイマ     
     242         *  持続タイマ       
    255243         */
    256244        case TCP_TIM_PERSIST:
    257245
    258246                /*
    259                  *  最大再送回数 (TCP_MAX_REXMT_SHIFT、標準 12 回) をè¶
    260 ãˆã¦ã„て、
    261                  *  アイドル時間が、保留タイマの標準値 (TCP_TVAL_KEEP_IDLE、
    262                  *  標準 2 * 60 * 60 秒) 以上か、
    263                  *  再送タイムアウト値 * バックオフ時間の合計以上なら
    264                  *  コネクションを切断する。
     247                 *  最大再送回数 (TCP_MAX_REXMT_SHIFT、標準 12 回) を超えていて、
     248                 *  アイドル時間が、保留タイマの標準値 (TCP_TVAL_KEEP_IDLE、
     249                 *  標準 2 * 60 * 60 秒) 以上か、
     250                 *  再送タイムアウト値 * バックオフ時間の合計以上なら
     251                 *  コネクションを切断する。
    265252                 */
    266253                if (cep->rxtshift > TCP_MAX_REXMT_SHIFT &&
     
    272259                        }
    273260
    274                 /* 持続タイマを再設定し、出力をポストする。*/
     261                /* 持続タイマを再設定し、出力をポストする。*/
    275262                tcp_set_persist_timer(cep);
    276263
     
    280267
    281268        /*
    282          *  保留 (keep alive) タイマ
     269         *  保留 (keep alive) タイマ
    283270         */
    284271        case TCP_TIM_KEEP:
    285272
    286273                /*
    287                  *  コネクションが開設されるまでにタイムアウトしたら
    288                  *  コネクションの開設を中止する。
     274                 *  コネクションが開設されるまでにタイムアウトしたら
     275                 *  コネクションの開設を中止する。
    289276                 */
    290277                if (cep->fsm_state < TCP_FSM_ESTABLISHED) {
     
    320307
    321308        /*
    322          *  2MSL タイマ             
     309         *  2MSL タイマ           
    323310         */
    324311        case TCP_TIM_2MSL:
     
    336323
    337324/*
    338  *  tcp_cancel_timers -- å
    339 ¨ã¦ã®ã‚¿ã‚¤ãƒžã‚’キャンセルする。
     325 *  tcp_cancel_timers -- 全てのタイマをキャンセルする。
    340326 */
    341327
     
    352338
    353339/*
    354  *  tcp_tw_timo -- Time Wait 用 TCP 通信端点のタイムアウト処理
     340 *  tcp_tw_timo -- Time Wait 用 TCP 通信端点のタイムアウト処理
    355341 */
    356342
     
    364350
    365351        /*
    366          *  Time Wait 用 TCP 通信端点でタイムアウトのエントリを探索し、
    367          *  探索したエントリを空きにする。
     352         *  Time Wait 用 TCP 通信端点でタイムアウトのエントリを探索し、
     353         *  探索したエントリを空きにする。
    368354         */
    369355        frees = 0;
     
    375361
    376362        /*
    377          *  Time Wait 用 TCP 通信端点の空きエントリが発生したら
    378          *  標準 TCP 通信端点で Time Wait 中の TCP 通信端点を探索し、
    379          *  å¿
    380 è¦ãªæƒ
    381 å ±ã‚’ Time Wait 用 TCP 通信端点に移して、
    382          *  標準の TCP 通信端点を開放する。
     363         *  Time Wait 用 TCP 通信端点の空きエントリが発生したら
     364         *  標準 TCP 通信端点で Time Wait 中の TCP 通信端点を探索し、
     365         *  必要な情報を Time Wait 用 TCP 通信端点に移して、
     366         *  標準の TCP 通信端点を開放する。
    383367         */
    384368        if (frees > 0) {
     
    391375
    392376                /*
    393                  *  もっとも長い間 Time Wait している TCP 通信端点を開放する。
     377                 *  もっとも長い間 Time Wait している TCP 通信端点を開放する。
    394378                 */
    395379                while (waits > 0) {
     
    414398
    415399/*
    416  *  tcp_slow_timo -- 500 [ms] 毎に呼出される TCP タイムアウト関数
     400 *  tcp_slow_timo -- 500 [ms] 毎に呼出される TCP タイムアウト関数
    417401 */
    418402
     
    456440
    457441/*
    458  *  tcp_fast_timo -- 200 [ms] 毎に呼出される TCP タイムアウト関数
     442 *  tcp_fast_timo -- 200 [ms] 毎に呼出される TCP タイムアウト関数
    459443 */
    460444
     
    480464
    481465/*
    482  *  tcp_range_set -- 時間を指定した範囲に設定する。
     466 *  tcp_range_set -- 時間を指定した範囲に設定する。
    483467 */
    484468
     
    495479
    496480/*
    497  *  tcp_set_persist_timer -- 持続タイマの設定
     481 *  tcp_set_persist_timer -- 持続タイマの設定
    498482 */
    499483
     
    504488
    505489        /*
    506          *  srtt:   å¹³æ»‘化された RTT
    507          *  rttvar: 平滑化された分散
     490         *  srtt:   平滑化された RTT
     491         *  rttvar: 平滑化された分散
    508492         */
    509493        time = ((cep->srtt >> 2) + cep->rttvar) >> 1;
    510494
    511495        /*
    512          *  再送タイマも設定されていれば回復不能エラー
     496         *  再送タイマも設定されていれば回復不能エラー
    513497         */
    514498        if (cep->timer[TCP_TIM_REXMT])
     
    516500
    517501        /*
    518          *  持続タイマを設定する。
     502         *  持続タイマを設定する。
    519503         */
    520504        cep->timer[TCP_TIM_PERSIST] = tcp_range_set((T_TCP_TIME)(time * tcp_back_off[cep->rxtshift]),
     
    523507
    524508        /*
    525          *  再送回数を更新する。
     509         *  再送回数を更新する。
    526510         */
    527511        if (cep->rxtshift < TCP_MAX_REXMT_SHIFT)
  • EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/tcp_timer.h

    • Property svn:keywords deleted
    • Property svn:mime-type changed from text/x-chdr to text/x-chdr;charset=UTF-8
    r270 r321  
    55 *                   Tomakomai National College of Technology, JAPAN
    66 *
    7  *  上記著作権è€
    8 ã¯ï¼Œä»¥ä¸‹ã® (1)~(4) の条件か,Free Software Foundation
    9  *  によってå
    10 ¬è¡¨ã•ã‚Œã¦ã„ã‚‹ GNU General Public License の Version 2 に記
    11  *  述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
    12  *  を改変したものを含む.以下同じ)を使用・複製・改変・再é
    13 å¸ƒï¼ˆä»¥ä¸‹ï¼Œ
    14  *  利用と呼ぶ)することを無償で許諾する.
    15  *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
    16  *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
    17  *      スコード中に含まれていること.
    18  *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
    19  *      用できる形で再é
    20 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é
    21 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
    22  *      è€
    23 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—作権表示,この利用条件および下記
    24  *      の無保証規定を掲載すること.
    25  *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
    26  *      用できない形で再é
    27 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®æ¡ä»¶ã‚’満たすこと.
    28  *    (a) 再é
    29 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€
    30 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—
    31  *        作権表示,この利用条件および下記の無保証規定を掲載すること.
    32  *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
    33  *      害からも,上記著作権è€
    34 ãŠã‚ˆã³TOPPERSプロジェクトをå
    35 è²¬ã™ã‚‹ã“と.
     7 *  上記著作権者は,以下の (1)~(4) の条件か,Free Software Foundation
     8 *  によって公表されている GNU General Public License の Version 2 に記
     9 *  述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
     10 *  を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下,
     11 *  利用と呼ぶ)することを無償で許諾する.
     12 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     13 *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     14 *      スコード中に含まれていること.
     15 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     16 *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     17 *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     18 *      の無保証規定を掲載すること.
     19 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     20 *      用できない形で再配布する場合には,次の条件を満たすこと.
     21 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     22 *        作権表示,この利用条件および下記の無保証規定を掲載すること.
     23 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     24 *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
    3625 *
    37  *  本ソフトウェアは,無保証で提供されているものである.上記著作権è€
    38 ãŠ
    39  *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
    40  *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
    41  *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
     26 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     27 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
     28 *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
     29 *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
    4230 *
    4331 *  @(#) $Id$
     
    8371#define _TCP_TIMER_H_
    8472
    85 /* TCP タイマ変数 */
     73/* TCP タイマ変数 */
    8674
    87 #define NUM_TCP_TIMERS          4       /* TCP のタイマ数  */
     75#define NUM_TCP_TIMERS          4       /* TCP のタイマ数    */
    8876
    89 #define TCP_TIM_REXMT           0       /* 再送タイマ              */
    90 #define TCP_TIM_PERSIST         1       /* 持続タイマ              */
    91 #define TCP_TIM_KEEP            2       /* 保留 (keep alive) タイマ*/
    92 #define TCP_TIM_2MSL            3       /* 2MSL タイマ               */
     77#define TCP_TIM_REXMT           0       /* 再送タイマ                */
     78#define TCP_TIM_PERSIST         1       /* 持続タイマ                */
     79#define TCP_TIM_KEEP            2       /* 保留 (keep alive) タイマ*/
     80#define TCP_TIM_2MSL            3       /* 2MSL タイマ             */
    9381
    94 /* MSL: Maximum Segment Lifetime, 最大セグメント生存時間             */
     82/* MSL: Maximum Segment Lifetime, 最大セグメント生存時間           */
    9583
    9684/*
    97  *  TCP/IP のタイマの定義
     85 *  TCP/IP のタイマの定義
    9886 */
    9987
     
    10391#define TCP_SLOW_HZ             (ULONG_C(1000)/TCP_SLOW_TMO/NET_TIMER_CYCLE)    /* Hz   */
    10492
    105 /* TCP タイマ値 */
     93/* TCP タイマ値 */
    10694
    10795#define TCP_TVAL_MSL            (TCP_SLOW_HZ * 30)
    108                                         /* 最大セグメント生存時間    */
     96                                        /* 最大セグメント生存時間  */
    10997
    110 #define TCP_TVAL_SRTT_BASE      0       /* 滑らかな往復時間の基準値*/
     98#define TCP_TVAL_SRTT_BASE      0       /* 滑らかな往復時間の基準値*/
    11199
    112100#define TCP_TVAL_RTO_BASE       (TCP_SLOW_HZ * 3)
    113                 /* æƒ
    114 å ±ãŒå¾—られない場合の再送タイムアウトの基準値      */
     101                /* 情報が得られない場合の再送タイムアウトの基準値      */
    115102
    116103#define TCP_TVAL_MIN_PERSIST    (TCP_SLOW_HZ * 5)
    117                                 /* 持続タイムアウトの最小値 */
     104                                /* 持続タイムアウトの最小値 */
    118105#define TCP_TVAL_MAX_PERSIST    (TCP_SLOW_HZ * 60)
    119                                 /* 持続タイムアウトの最大値 */
     106                                /* 持続タイムアウトの最大値 */
    120107
    121108#define TCP_TVAL_KEEP_INIT      (TCP_SLOW_HZ * 75)
    122                                         /* 保留タイマの初期値  */
     109                                        /* 保留タイマの初期値    */
    123110#define TCP_TVAL_KEEP_IDLE      (TCP_SLOW_HZ * 2 * 60 * 60)
    124                                         /* 保留タイマ起動までの標準値*/
     111                                        /* 保留タイマ起動までの標準値*/
    125112#define TCP_TVAL_KEEP_INTERVAL  (TCP_SLOW_HZ * 75)
    126                                         /* 保留タイマインターバルの標準値*/
    127 #define TCP_TVAL_KEEP_COUNT     8       /* 保留タイムアウトの最大値*/
     113                                        /* 保留タイマインターバルの標準値*/
     114#define TCP_TVAL_KEEP_COUNT     8       /* 保留タイムアウトの最大値*/
    128115
    129116#define TCP_TVAL_MIN            (TCP_SLOW_HZ * 3)
    130                                         /* 時間の最小単位        */
     117                                        /* 時間の最小単位      */
    131118#define TCP_TVAL_MAX_REXMT      (TCP_SLOW_HZ * 64)
    132                                         /* 最大再送時間           */
     119                                        /* 最大再送時間               */
    133120
    134121/*
    135  *  以下の変数の値はマクロで設定する。
     122 *  以下の変数の値はマクロで設定する。
    136123 *
    137124 *  tcp_maixidle   = tcp_keepcnt * tcp_keepintvl
     
    143130
    144131/*
    145  *  その他の定数
     132 *  その他の定数
    146133 */
    147134
    148 #define TCP_MAX_REXMT_SHIFT     12      /* 最大再送回数           */
     135#define TCP_MAX_REXMT_SHIFT     12      /* 最大再送回数               */
    149136
    150 /* TCP タイマ値の型 */
     137/* TCP タイマ値の型 */
    151138
    152139typedef int16_t T_TCP_TIME;
    153140
    154141/*
    155  *  関数
     142 *  関数
    156143 */
    157144
  • EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/tcp_usrreq.c

    • Property svn:keywords deleted
    • Property svn:mime-type changed from text/x-csrc to text/x-csrc;charset=UTF-8
    r270 r321  
    55 *                   Tomakomai National College of Technology, JAPAN
    66 *
    7  *  上記著作権è€
    8 ã¯ï¼Œä»¥ä¸‹ã® (1)~(4) の条件か,Free Software Foundation
    9  *  によってå
    10 ¬è¡¨ã•ã‚Œã¦ã„ã‚‹ GNU General Public License の Version 2 に記
    11  *  述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
    12  *  を改変したものを含む.以下同じ)を使用・複製・改変・再é
    13 å¸ƒï¼ˆä»¥ä¸‹ï¼Œ
    14  *  利用と呼ぶ)することを無償で許諾する.
    15  *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
    16  *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
    17  *      スコード中に含まれていること.
    18  *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
    19  *      用できる形で再é
    20 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é
    21 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
    22  *      è€
    23 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—作権表示,この利用条件および下記
    24  *      の無保証規定を掲載すること.
    25  *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
    26  *      用できない形で再é
    27 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®æ¡ä»¶ã‚’満たすこと.
    28  *    (a) 再é
    29 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€
    30 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—
    31  *        作権表示,この利用条件および下記の無保証規定を掲載すること.
    32  *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
    33  *      害からも,上記著作権è€
    34 ãŠã‚ˆã³TOPPERSプロジェクトをå
    35 è²¬ã™ã‚‹ã“と.
     7 *  上記著作権者は,以下の (1)~(4) の条件か,Free Software Foundation
     8 *  によって公表されている GNU General Public License の Version 2 に記
     9 *  述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
     10 *  を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下,
     11 *  利用と呼ぶ)することを無償で許諾する.
     12 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     13 *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     14 *      スコード中に含まれていること.
     15 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     16 *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     17 *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     18 *      の無保証規定を掲載すること.
     19 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     20 *      用できない形で再配布する場合には,次の条件を満たすこと.
     21 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     22 *        作権表示,この利用条件および下記の無保証規定を掲載すること.
     23 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     24 *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
    3625 *
    37  *  本ソフトウェアは,無保証で提供されているものである.上記著作権è€
    38 ãŠ
    39  *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
    40  *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
    41  *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
     26 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     27 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
     28 *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
     29 *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
    4230 *
    4331 *  @(#) $Id$
     
    132120
    133121/*
    134  *  IPv4 と IPv6 の切り替えマクロ
     122 *  IPv4 と IPv6 の切り替えマクロ
    135123 */
    136124
     
    152140
    153141/*
    154  *  TINET をライブラリ化しない場合は、å
    155 ¨ã¦ã®æ©Ÿèƒ½ã‚’
    156  *  オブジェクトファイルに出力するため、マクロを有効にする。
     142 *  TINET をライブラリ化しない場合は、全ての機能を
     143 *  オブジェクトファイルに出力するため、マクロを有効にする。
    157144 */
    158145
     
    182169
    183170/*
    184  *  tcp_cre_rep -- TCP 受付口の生成【拡張機能】
     171 *  tcp_cre_rep -- TCP 受付口の生成【拡張機能】
    185172 */
    186173
     
    195182        ER              error;
    196183
    197         /* TCP 受付口 ID をチェックする。*/
     184        /* TCP 受付口 ID をチェックする。*/
    198185        if (!VAID_TCP_REPID(repid))
    199186                return E_ID;
    200187
    201         /* pk_crep が NULL ならエラー */
     188        /* pk_crep が NULL ならエラー */
    202189        if (pk_crep == NULL)
    203190                return E_PAR;
    204191
    205         /* TCP 受付口を得る。*/
     192        /* TCP 受付口を得る。*/
    206193        rep = GET_TCP_REP(repid);
    207194
    208         /* TCP 受付口が、動的生成用でなければエラー */
     195        /* TCP 受付口が、動的生成用でなければエラー */
    209196        if (!DYNAMIC_TCP_REP(rep))
    210197                return E_ID;
    211198
    212         /* 受付口をロックする。*/
     199        /* 受付口をロックする。*/
    213200        syscall(wai_sem(rep->semid_lock));
    214201
    215202        /*
    216          * TCP 受付口をチェックする。生成済みであればエラー
     203         * TCP 受付口をチェックする。生成済みであればエラー
    217204         */
    218205        if (VALID_TCP_REP(rep))
     
    220207        else {
    221208
    222                 /* TCP 受付口生成æƒ
    223 å ±ã‚’コピーする。*/
    224                 rep->repatr = pk_crep->repatr;          /* 受付口属性              */
    225                 rep->myaddr = pk_crep->myaddr;          /* 自分のアドレス        */
    226 
    227                 /* TCP 受付口を生成済みにする。*/
     209                /* TCP 受付口生成情報をコピーする。*/
     210                rep->repatr = pk_crep->repatr;          /* 受付口属性                */
     211                rep->myaddr = pk_crep->myaddr;          /* 自分のアドレス      */
     212
     213                /* TCP 受付口を生成済みにする。*/
    228214                rep->flags |= TCP_REP_FLG_VALID;
    229215                error = E_OK;
    230216                }
    231217
    232         /* 受付口のロックを解除する。*/
     218        /* 受付口のロックを解除する。*/
    233219        syscall(sig_sem(rep->semid_lock));
    234220
     
    245231
    246232/*
    247  *  tcp_find_cep_rep -- TCP 受付口をリンクしている TCP 通信端点を得る。
     233 *  tcp_find_cep_rep -- TCP 受付口をリンクしている TCP 通信端点を得る。
    248234 */
    249235
     
    262248
    263249/*
    264  *  tcp_del_rep -- TCP 受付口の削除【拡張機能】
     250 *  tcp_del_rep -- TCP 受付口の削除【拡張機能】
    265251 */
    266252
     
    273259        ER              error = E_OK;
    274260
    275         /* TCP 受付口 ID をチェックする。*/
     261        /* TCP 受付口 ID をチェックする。*/
    276262        if (!VAID_TCP_REPID(repid))
    277263                return E_ID;
    278264
    279         /* TCP 受付口を得る。*/
     265        /* TCP 受付口を得る。*/
    280266        rep = GET_TCP_REP(repid);
    281267
    282         /* TCP 受付口が、動的生成用でなければエラー */
     268        /* TCP 受付口が、動的生成用でなければエラー */
    283269        if (!DYNAMIC_TCP_REP(rep))
    284270                return E_ID;
    285271
    286         /* 受付口をロックする。*/
     272        /* 受付口をロックする。*/
    287273        syscall(wai_sem(rep->semid_lock));
    288274
    289         /* TCP 受付口をチェックする。未生成の場合はエラー */
     275        /* TCP 受付口をチェックする。未生成の場合はエラー */
    290276        if (!VALID_TCP_REP(rep))
    291277                error = E_NOEXS;
     
    293279                if ((cep = tcp_find_cep_rep(rep)) != NULL) {
    294280                        /*
    295                          * すでに受動オープンしているとき
    296                          *(tcp_acp_cep が呼ばれているとき)は、
    297                          * tcp_acp_cep を終了させる。
     281                         * すでに受動オープンしているとき
     282                         *(tcp_acp_cep が呼ばれているとき)は、
     283                         * tcp_acp_cep を終了させる。
    298284                         */
    299285
    300                         /* 通信端点をロックする。*/
     286                        /* 通信端点をロックする。*/
    301287                        syscall(wai_sem(cep->semid_lock));
    302288
    303289                        /*
    304                          *  通信端点から受付口を解放し、
    305                          *  イベントフラグをクローズに設定する。
     290                         *  通信端点から受付口を解放し、
     291                         *  イベントフラグをクローズに設定する。
    306292                         */
    307293                        cep->rep = NULL;
     
    338324                        cep->rcv_tfn   = TFN_TCP_UNDEF;
    339325
    340                         /* 通信端点のロックを解除する。*/
     326                        /* 通信端点のロックを解除する。*/
    341327                        syscall(sig_sem(cep->semid_lock));
    342328
     
    345331                        error = E_OK;
    346332
    347                 /* TCP 受付口を未生成にする。*/
     333                /* TCP 受付口を未生成にする。*/
    348334                rep->flags &= ~TCP_REP_FLG_VALID;
    349335                }
    350336
    351         /* 受付口のロックを解除する。*/
     337        /* 受付口のロックを解除する。*/
    352338        syscall(sig_sem(rep->semid_lock));
    353339
     
    360346
    361347/*
    362  *  tcp_cre_cep -- TCP 通信端点の生成【拡張機能】
     348 *  tcp_cre_cep -- TCP 通信端点の生成【拡張機能】
    363349 */
    364350
     
    373359        ER              error;
    374360
    375         /* TCP 通信端点 ID をチェックする。*/
     361        /* TCP 通信端点 ID をチェックする。*/
    376362        if (!VAID_TCP_CEPID(cepid))
    377363                return E_ID;
    378364
    379         /* pk_ccep が NULL ならエラー */
     365        /* pk_ccep が NULL ならエラー */
    380366        if (pk_ccep == NULL)
    381367                return E_PAR;
    382368
    383         /* TCP 通信端点を得る。*/
     369        /* TCP 通信端点を得る。*/
    384370        cep = GET_TCP_CEP(cepid);
    385371
    386         /* TCP 通信端点が、動的生成用でなければエラー */
     372        /* TCP 通信端点が、動的生成用でなければエラー */
    387373        if (!DYNAMIC_TCP_CEP(cep))
    388374                return E_ID;
    389375
    390         /* 通信端点をロックする。*/
     376        /* 通信端点をロックする。*/
    391377        syscall(wai_sem(cep->semid_lock));
    392378
    393379        /*
    394          * TCP 通信端点をチェックする。生成済みであればエラー
     380         * TCP 通信端点をチェックする。生成済みであればエラー
    395381         */
    396382        if (VALID_TCP_CEP(cep))
     
    398384        else {
    399385
    400                 /* TCP 通信端点生成æƒ
    401 å ±ã‚’コピーする。*/
    402                 cep->cepatr   = pk_ccep->cepatr;                /* 通信端点属性                   */
    403                 cep->sbuf     = pk_ccep->sbuf;                  /* 送信用ウィンドバッファ    */
    404                 cep->sbufsz   = pk_ccep->sbufsz;                /* 送信用ウィンドバッファサイズ   */
    405                 cep->rbuf     = pk_ccep->rbuf;                  /* 受信用ウィンドバッファ    */
    406                 cep->rbufsz   = pk_ccep->rbufsz;                /* 受信用ウィンドバッファサイズ   */
    407                 cep->callback = (void*)pk_ccep->callback;       /* コールバック                   */
    408 
    409                 /* TCP 通信端点を生成済みにする。*/
     386                /* TCP 通信端点生成情報をコピーする。*/
     387                cep->cepatr   = pk_ccep->cepatr;                /* 通信端点属性                       */
     388                cep->sbuf     = pk_ccep->sbuf;                  /* 送信用ウィンドバッファ  */
     389                cep->sbufsz   = pk_ccep->sbufsz;                /* 送信用ウィンドバッファサイズ       */
     390                cep->rbuf     = pk_ccep->rbuf;                  /* 受信用ウィンドバッファ  */
     391                cep->rbufsz   = pk_ccep->rbufsz;                /* 受信用ウィンドバッファサイズ       */
     392                cep->callback = (void*)pk_ccep->callback;       /* コールバック                       */
     393
     394                /* TCP 通信端点を生成済みにする。*/
    410395                cep->flags |= TCP_CEP_FLG_VALID;
    411396                error = E_OK;
    412397                }
    413398
    414         /* 通信端点のロックを解除する。*/
     399        /* 通信端点のロックを解除する。*/
    415400        syscall(sig_sem(cep->semid_lock));
    416401
     
    423408
    424409/*
    425  *  tcp_del_cep -- TCP 通信端点の削除【拡張機能】
     410 *  tcp_del_cep -- TCP 通信端点の削除【拡張機能】
    426411 */
    427412
     
    436421        ER              error;
    437422
    438         /* TCP 通信端点 ID をチェックする。*/
     423        /* TCP 通信端点 ID をチェックする。*/
    439424        if (!VAID_TCP_CEPID(cepid))
    440425                return E_ID;
    441426
    442         /* TCP 通信端点を得る。*/
     427        /* TCP 通信端点を得る。*/
    443428        cep = GET_TCP_CEP(cepid);
    444429
    445         /* TCP 通信端点が、動的生成用でなければエラー */
     430        /* TCP 通信端点が、動的生成用でなければエラー */
    446431        if (!DYNAMIC_TCP_CEP(cep))
    447432                return E_ID;
    448433
    449         /* 通信端点をロックする。*/
     434        /* 通信端点をロックする。*/
    450435        syscall(wai_sem(cep->semid_lock));
    451436
    452437        /*
    453          * TCP 通信端点をチェックする。以下の場合はエラー
    454          * ・未生成。
    455          * ・使用中。
     438         * TCP 通信端点をチェックする。以下の場合はエラー
     439         * ・未生成。
     440         * ・使用中。
    456441         */
    457442        if (!VALID_TCP_CEP(cep))
     
    461446        else {
    462447
    463                 /* TCP 通信端点を未生成にする。*/
     448                /* TCP 通信端点を未生成にする。*/
    464449                cep->flags &= ~TCP_CEP_FLG_VALID;
    465450                error = E_OK;
    466451                }
    467452
    468         /* 通信端点のロックを解除する。*/
     453        /* 通信端点のロックを解除する。*/
    469454        syscall(sig_sem(cep->semid_lock));
    470455
     
    479464
    480465/*
    481  *  tcp_acp_cep -- 接続要求å¾
    482 ã¡ (受動オープン)【標準機能】
     466 *  tcp_acp_cep -- 接続要求待ち (受動オープン)【標準機能】
    483467 */
    484468
     
    493477        FLGPTN          flag;
    494478
    495         /* TCP 受付口をチェックする。*/
     479        /* TCP 受付口をチェックする。*/
    496480        if (!VAID_TCP_REPID(repid))
    497481                return E_ID;
     
    499483#ifdef TCP_CFG_NON_BLOCKING
    500484
    501         /* p_dstaddr が NULL ならエラー */
     485        /* p_dstaddr が NULL ならエラー */
    502486        if (p_dstaddr == NULL)
    503487                return E_PAR;
     
    505489#else   /* of #ifdef TCP_CFG_NON_BLOCKING */
    506490
    507         /* p_dstaddr が NULL か、tmout が TMO_NBLK ならエラー */
     491        /* p_dstaddr が NULL か、tmout が TMO_NBLK ならエラー */
    508492        if (p_dstaddr == NULL || tmout == TMO_NBLK)
    509493                return E_PAR;
     
    512496
    513497        /*
    514          *  CEP をロックし、API 機能コードとタスク識別子を記録する。
    515          *  すでに記録されていれば、ペンディング中なのでエラー
     498         *  CEP をロックし、API 機能コードとタスク識別子を記録する。
     499         *  すでに記録されていれば、ペンディング中なのでエラー
    516500         */
    517501        if ((error = tcp_lock_cep(cepid, &cep, TFN_TCP_ACP_CEP)) != E_OK)
    518502                return error;
    519503
    520         /* CEP の FSM がクローズ状æ
    521 ‹ã§ãªã‘ればエラー。*/
     504        /* CEP の FSM がクローズ状態でなければエラー。*/
    522505        if (cep->fsm_state != TCP_FSM_CLOSED) {
    523506                error = E_OBJ;
     
    526509        syscall(clr_flg(cep->est_flgid, (FLGPTN)(~TCP_CEP_EVT_CLOSED)));
    527510
    528         /* TCP 通信端点を初期化する。*/
     511        /* TCP 通信端点を初期化する。*/
    529512        tcp_init_cep(cep);
    530513
    531         /* TCP 受付口を得る。*/
     514        /* TCP 受付口を得る。*/
    532515        rep = GET_TCP_REP(repid);
    533516
    534517#ifdef TCP_CFG_EXTENTIONS
    535518
    536         /* TCP 受付口をロックする。*/
     519        /* TCP 受付口をロックする。*/
    537520        syscall(wai_sem(rep->semid_lock));
    538521
    539         /* TCP 受付口をチェックする。*/
     522        /* TCP 受付口をチェックする。*/
    540523        if (!VALID_TCP_REP(rep)) {
    541524                syscall(sig_sem(rep->semid_lock));
     
    546529#endif  /* of #ifdef TCP_CFG_EXTENTIONS */
    547530
    548         /* TCP 通信端点にTCP受付口を記録する。*/
     531        /* TCP 通信端点にTCP受付口を記録する。*/
    549532        cep->rep = rep;
    550533
    551534#ifdef TCP_CFG_EXTENTIONS
    552535
    553         /* TCP 受付口のロックを解除する。*/
     536        /* TCP 受付口のロックを解除する。*/
    554537        syscall(sig_sem(rep->semid_lock));
    555538
    556539#endif  /* of #ifdef TCP_CFG_EXTENTIONS */
    557540
    558         /* TCP 受付口のアドレスをコピーする。*/
     541        /* TCP 受付口のアドレスをコピーする。*/
    559542        cep->myaddr = rep->myaddr;
    560543
    561         /* 通信端点を設定する。*/
     544        /* 通信端点を設定する。*/
    562545        cep->fsm_state = TCP_FSM_LISTEN;
    563546
    564547#ifdef TCP_CFG_NON_BLOCKING
    565548
    566         /* タイムアウトをチェックする。*/
     549        /* タイムアウトをチェックする。*/
    567550        if (tmout == TMO_NBLK) {
    568                 /* ノンブロッキングコール */
     551                /* ノンブロッキングコール */
    569552                cep->p_dstaddr    = p_dstaddr;
    570553                cep->rcv_nblk_tfn = TFN_TCP_ACP_CEP;
     
    576559
    577560                /*
    578                  *  FSM が ESTABLISHED になるまでå¾
    579 ã¤ã€‚
    580                  *  FSM が CLOSED になった場合は、エラーが発生したことを意味している。
     561                 *  FSM が ESTABLISHED になるまで待つ。
     562                 *  FSM が CLOSED になった場合は、エラーが発生したことを意味している。
    581563                 */
    582564                error = twai_flg(cep->est_flgid, (TCP_CEP_EVT_CLOSED |
     
    592574
    593575                if (error == E_OK) {
    594                         /* 相手のアドレスをコピーする。*/
     576                        /* 相手のアドレスをコピーする。*/
    595577                        *p_dstaddr = cep->dstaddr;
    596578                        }
    597579                else {
    598580                        /*
    599                          *  通信端点から受付口を解放し、
    600                          *  イベントフラグをクローズに設定する。
     581                         *  通信端点から受付口を解放し、
     582                         *  イベントフラグをクローズに設定する。
    601583                         */
    602584                        cep->rep = NULL;
     
    622604
    623605/*
    624  *  tcp_con_cep -- 接続要求 (能動オープン)【標準機能】
     606 *  tcp_con_cep -- 接続要求 (能動オープン)【標準機能】
    625607 */
    626608
     
    637619
    638620        /*
    639          *  p_dstaddr または p_myaddr が NULL か、
    640          *  あてå
    641 ˆãŒãƒžãƒ«ãƒã‚­ãƒ£ã‚¹ãƒˆã‚¢ãƒ‰ãƒ¬ã‚¹ãªã‚‰ã‚¨ãƒ©ãƒ¼
     621         *  p_dstaddr または p_myaddr が NULL か、
     622         *  あて先がマルチキャストアドレスならエラー
    642623         */
    643624        if (p_myaddr == NULL || p_dstaddr == NULL || IN_IS_ADDR_MULTICAST(&p_dstaddr->ipaddr))
     
    647628
    648629        /*
    649          *  p_dstaddr または p_myaddr が NULL 、
    650          *  あてå
    651 ˆãŒãƒžãƒ«ãƒã‚­ãƒ£ã‚¹ãƒˆã‚¢ãƒ‰ãƒ¬ã‚¹ã‹ã€
    652          *  tmout が TMO_NBLK ならエラー
     630         *  p_dstaddr または p_myaddr が NULL 、
     631         *  あて先がマルチキャストアドレスか、
     632         *  tmout が TMO_NBLK ならエラー
    653633         */
    654634        if (p_myaddr == NULL || p_dstaddr == NULL ||
     
    659639
    660640        /*
    661          *  CEP をロックし、API 機能コードとタスク識別子を記録する。
    662          *  すでに記録されていれば、ペンディング中なのでエラー
     641         *  CEP をロックし、API 機能コードとタスク識別子を記録する。
     642         *  すでに記録されていれば、ペンディング中なのでエラー
    663643         */
    664644        if ((error = tcp_lock_cep(cepid, &cep, TFN_TCP_CON_CEP)) != E_OK)
    665645                return error;
    666646
    667         /* CEP の FSM がクローズ状æ
    668 ‹ã§ãªã‘ればエラー。*/
     647        /* CEP の FSM がクローズ状態でなければエラー。*/
    669648        if (cep->fsm_state != TCP_FSM_CLOSED) {
    670649                error = E_OBJ;
     
    673652        syscall(clr_flg(cep->est_flgid, (FLGPTN)(~TCP_CEP_EVT_CLOSED)));
    674653
    675         /* シーケンス番号を初期化する。*/
     654        /* シーケンス番号を初期化する。*/
    676655        if (tcp_iss == 0)
    677656                tcp_init_iss();
    678657
    679         /* 通信端点を初期化する。*/
     658        /* 通信端点を初期化する。*/
    680659        tcp_init_cep(cep);
    681660
    682661        /*
    683          *  p_myaddr が NADR (-1) ではなく、自 IP アドレスが ANY でなければ、
    684          *  指定された IP アドレスを割り当てる。
     662         *  p_myaddr が NADR (-1) ではなく、自 IP アドレスが ANY でなければ、
     663         *  指定された IP アドレスを割り当てる。
    685664         */
    686665        if (p_myaddr != NADR && !IN_IS_ADDR_ANY(&p_myaddr->ipaddr))
     
    696675                }
    697676
    698         /* 通信端点を設定する。*/
     677        /* 通信端点を設定する。*/
    699678        cep->fsm_state = TCP_FSM_SYN_SENT;
    700679        cep->dstaddr   = *p_dstaddr;
     
    706685#ifdef TCP_CFG_NON_BLOCKING
    707686
    708         /* タイムアウトをチェックする。*/
     687        /* タイムアウトをチェックする。*/
    709688        if (tmout == TMO_NBLK) {
    710                 /* ノンブロッキングコール */
     689                /* ノンブロッキングコール */
    711690                cep->p_dstaddr    = p_dstaddr;
    712691                cep->p_myaddr     = p_myaddr;
    713692                cep->snd_nblk_tfn = TFN_TCP_CON_CEP;
    714693
    715                 /* コネクションの開設をポストする。*/
     694                /* コネクションの開設をポストする。*/
    716695                cep->flags |= TCP_CEP_FLG_POST_OUTPUT;
    717696                sig_sem(SEM_TCP_POST_OUTPUT);
     
    723702
    724703                /*
    725                  *  p_myaddr が NADR (-1) か、
    726                  *  自ポート番号が TCP_PORTANY なら、自動で割り当てる。
     704                 *  p_myaddr が NADR (-1) か、
     705                 *  自ポート番号が TCP_PORTANY なら、自動で割り当てる。
    727706                 */
    728707                if (p_myaddr == NADR || p_myaddr->portno == TCP_PORTANY)
     
    731710                        goto err_ret;
    732711
    733                 /* コネクションの開設をポストする。*/
     712                /* コネクションの開設をポストする。*/
    734713                cep->flags |= TCP_CEP_FLG_POST_OUTPUT;
    735714                sig_sem(SEM_TCP_POST_OUTPUT);
    736715
    737716                /*
    738                  *  イベントが ESTABLISHED になるまでå¾
    739 ã¤ã€‚
    740                  *  イベントが CLOSED になった場合は、何らかのエラーが発生したか、
    741                  *  接続要求が拒否されたことを意味している。
     717                 *  イベントが ESTABLISHED になるまで待つ。
     718                 *  イベントが CLOSED になった場合は、何らかのエラーが発生したか、
     719                 *  接続要求が拒否されたことを意味している。
    742720                 */
    743721                error = twai_flg(cep->est_flgid, (TCP_CEP_EVT_CLOSED |
     
    754732                if (error != E_OK) {
    755733                        /*
    756                          *  通信端点から受付口を解放し、
    757                          *  イベントフラグをクローズに設定する。
     734                         *  通信端点から受付口を解放し、
     735                         *  イベントフラグをクローズに設定する。
    758736                         */
    759737                        cep->rep = NULL;
     
    779757
    780758/*
    781  *  tcp_user_closed -- ユーザからのコネクションの開放
     759 *  tcp_user_closed -- ユーザからのコネクションの開放
    782760 */
    783761
     
    787765        switch (cep->fsm_state) {
    788766
    789         case TCP_FSM_CLOSED:            /* クローズ */
    790         case TCP_FSM_LISTEN:            /* 受動オープン   */
     767        case TCP_FSM_CLOSED:            /* クローズ */
     768        case TCP_FSM_LISTEN:            /* 受動オープン       */
    791769                cep->fsm_state = TCP_FSM_CLOSED;
    792770                cep = tcp_close(cep);
    793771                break;
    794772
    795         case TCP_FSM_SYN_SENT:          /* 能動オープン、SYN 送信済み        */
    796         case TCP_FSM_SYN_RECVD:         /* SYN を受信し、SYN 送信済み  */
     773        case TCP_FSM_SYN_SENT:          /* 能動オープン、SYN 送信済み      */
     774        case TCP_FSM_SYN_RECVD:         /* SYN を受信し、SYN 送信済み    */
    797775                cep->flags |= TCP_CEP_FLG_NEED_FIN;
    798776                break;
    799777
    800         case TCP_FSM_ESTABLISHED:       /* コネクション開設完了       */
     778        case TCP_FSM_ESTABLISHED:       /* コネクション開設完了   */
    801779                cep->fsm_state = TCP_FSM_FIN_WAIT_1;
    802780                break;
    803781
    804         case TCP_FSM_CLOSE_WAIT:        /* 相手から FIN 受信、APP の終了å¾
    805 ã¡ */
     782        case TCP_FSM_CLOSE_WAIT:        /* 相手から FIN 受信、APP の終了待ち */
    806783                cep->fsm_state = TCP_FSM_LAST_ACK;
    807784                break;
     
    814791
    815792/*
    816  *  tcp_cls_cep -- 通信端点のクローズ【標準機能】
     793 *  tcp_cls_cep -- 通信端点のクローズ【標準機能】
    817794 */
    818795
     
    826803#ifndef TCP_CFG_NON_BLOCKING
    827804
    828         /* tmout が TMO_NBLK ならエラー */
     805        /* tmout が TMO_NBLK ならエラー */
    829806        if (tmout == TMO_NBLK)
    830807                return E_PAR;
     
    833810
    834811        /*
    835          *  CEP をロックし、API 機能コードとタスク識別子を記録する。
    836          *  すでに記録されていれば、ペンディング中なのでエラー
     812         *  CEP をロックし、API 機能コードとタスク識別子を記録する。
     813         *  すでに記録されていれば、ペンディング中なのでエラー
    837814         */
    838815        if ((error = tcp_lock_cep(cepid, &cep, TFN_TCP_CLS_CEP)) != E_OK)
     
    841818#ifdef TCP_CFG_NON_BLOCKING
    842819
    843         /* タイムアウトをチェックする。*/
    844         if (tmout == TMO_NBLK) {                                /* ノンブロッキングコール */
     820        /* タイムアウトをチェックする。*/
     821        if (tmout == TMO_NBLK) {                                /* ノンブロッキングコール */
    845822
    846823                if (!IS_PTR_DEFINED(cep->callback))
    847824                        error = E_OBJ;
    848                 else if (cep->fsm_state == TCP_FSM_CLOSED) {    /* すでにクローズされているとき */
     825                else if (cep->fsm_state == TCP_FSM_CLOSED) {    /* すでにクローズされているとき */
    849826
    850827#ifdef TCP_CFG_NON_BLOCKING_COMPAT14
     
    864841                        }
    865842                else {
    866                         /* NBLK のAPI 機能コードを設定する。*/
     843                        /* NBLK のAPI 機能コードを設定する。*/
    867844                        cep->rcv_nblk_tfn = TFN_TCP_CLS_CEP;
    868845
    869                         if ((cep = tcp_user_closed(cep)) != NULL) {     /* コネクションを切断する。*/
    870                                 /* 切断セグメント出力をポストする。*/
     846                        if ((cep = tcp_user_closed(cep)) != NULL) {     /* コネクションを切断する。*/
     847                                /* 切断セグメント出力をポストする。*/
    871848                                cep->flags |= TCP_CEP_FLG_POST_OUTPUT;
    872849                                sig_sem(SEM_TCP_POST_OUTPUT);
    873850                                }
    874851
    875                         /*  cep が NULL で戻ってきた場合は、
    876                          *  既にコネクションが切断されていることを意味している。
    877                          *  また、この場合コールバック関数が呼び出されている。
     852                        /*  cep が NULL で戻ってきた場合は、
     853                         *  既にコネクションが切断されていることを意味している。
     854                         *  また、この場合コールバック関数が呼び出されている。
    878855                         */
    879856                        return E_WBLK;
    880857                        }
    881858                }
    882         else {                                                  /* 非ノンブロッキングコール */
    883 
    884 #endif  /* of #ifdef TCP_CFG_NON_BLOCKING */
    885 
    886                 if ((cep = tcp_user_closed(cep)) == NULL) {     /* コネクションを切断する。*/
    887 
    888                         /*  cep が NULL で戻ってきた場合は、
    889                          *  既にコネクションが切断されていることを意味している。
     859        else {                                                  /* 非ノンブロッキングコール */
     860
     861#endif  /* of #ifdef TCP_CFG_NON_BLOCKING */
     862
     863                if ((cep = tcp_user_closed(cep)) == NULL) {     /* コネクションを切断する。*/
     864
     865                        /*  cep が NULL で戻ってきた場合は、
     866                         *  既にコネクションが切断されていることを意味している。
    890867                         */
    891868                        return error;
    892869                        }
    893870                else {
    894                         /* 切断セグメント出力をポストする。*/
     871                        /* 切断セグメント出力をポストする。*/
    895872                        cep->flags |= TCP_CEP_FLG_POST_OUTPUT;
    896873                        sig_sem(SEM_TCP_POST_OUTPUT);
    897874
    898                         /* イベントフラグが CLOSED になるまでå¾
    899 ã¤ã€‚*/
     875                        /* イベントフラグが CLOSED になるまで待つ。*/
    900876                        error = twai_flg(cep->est_flgid, TCP_CEP_EVT_CLOSED, TWF_ORW, &flag, tmout);
    901877                        if (error == E_OK && cep->error != E_OK)
     
    904880                        if (error != E_OK) {
    905881                                if (error == E_RLWAI) {
    906                                         /* tcp_cls_cep がキャンセルされたときは、RST を送信する。*/
     882                                        /* tcp_cls_cep がキャンセルされたときは、RST を送信する。*/
    907883                                        tcp_respond(NULL, cep, cep->rcv_nxt, cep->snd_una - 1,
    908884                                                    cep->rbufsz - cep->rwbuf_count, TCP_FLG_RST);
    909885                                        }
    910886
    911                                 /* タイマーを停止する。*/
     887                                /* タイマーを停止する。*/
    912888                                tcp_cancel_timers(cep);
    913889
    914890                                /*
    915                                  *  通信端点をロックし、
    916                                  *  受信再構成キューのネットワークバッファを解放する。
     891                                 *  通信端点をロックし、
     892                                 *  受信再構成キューのネットワークバッファを解放する。
    917893                                 */
    918894                                syscall(wai_sem(cep->semid_lock));
     
    920896                                syscall(sig_sem(cep->semid_lock));
    921897
    922                                 /* 状æ
    923 ‹ã‚’未使用にする。*/
     898                                /* 状態を未使用にする。*/
    924899                                cep->fsm_state = TCP_FSM_CLOSED;
    925900
    926901                                /*
    927                                  * 以下に関係しないフラグをクリアーする。
    928                                  * ・送受信ウィンドバッファの省コピー機能
    929                                  * ・動的な通信端点の生成・削除機能
     902                                 * 以下に関係しないフラグをクリアーする。
     903                                 * ・送受信ウィンドバッファの省コピー機能
     904                                 * ・動的な通信端点の生成・削除機能
    930905                                 */
    931906                                cep->flags &= (TCP_CEP_FLG_WBCS_NBUF_REQ | TCP_CEP_FLG_WBCS_MASK |
     
    933908
    934909                                /*
    935                                  *  通信端点をロックし、
    936                                  *  送受信ウィンドバッファキューのネットワークバッファを解放する。
     910                                 *  通信端点をロックし、
     911                                 *  送受信ウィンドバッファキューのネットワークバッファを解放する。
    937912                                 */
    938913                                cep->rwbuf_count = 0;
     
    962937
    963938/*
    964  *  tcp_sht_cep  -- データ送信の終了【標準機能】
     939 *  tcp_sht_cep  -- データ送信の終了【標準機能】
    965940 */
    966941
     
    972947
    973948        /*
    974          *  CEP をロックし、API 機能コードとタスク識別子を記録する。
    975          *  すでに記録されていれば、ペンディング中なのでエラー
     949         *  CEP をロックし、API 機能コードとタスク識別子を記録する。
     950         *  すでに記録されていれば、ペンディング中なのでエラー
    976951         */
    977952        if ((error = tcp_lock_cep(cepid, &cep, TFN_TCP_SHT_CEP)) != E_OK)
    978953                return error;
    979954
    980         /* TCP 通信端点のコネクションが確立状æ
    981 ‹ã§ãªã‘ればエラー */
     955        /* TCP 通信端点のコネクションが確立状態でなければエラー */
    982956        if (!TCP_FSM_HAVE_ESTABLISHED(cep->fsm_state)) {
    983957                if ((error = cep->error) == E_OK)
     
    985959                }
    986960
    987         else if ((cep = tcp_user_closed(cep)) != NULL) {                /* コネクションを切断する。*/
    988 
    989                 /* 切断セグメント出力をポストする。*/
     961        else if ((cep = tcp_user_closed(cep)) != NULL) {                /* コネクションを切断する。*/
     962
     963                /* 切断セグメント出力をポストする。*/
    990964                cep->flags |= TCP_CEP_FLG_POST_OUTPUT;
    991965                sig_sem(SEM_TCP_POST_OUTPUT);
     
    1002976
    1003977/*
    1004  *  tcp_snd_dat -- パケットの送信【標準機能】
     978 *  tcp_snd_dat -- パケットの送信【標準機能】
    1005979 */
    1006980
     
    1013987#ifdef TCP_CFG_NON_BLOCKING
    1014988
    1015         /* data が NULL か、len < 0 ならエラー */
     989        /* data が NULL か、len < 0 ならエラー */
    1016990        if (data == NULL || len < 0)
    1017991                return E_PAR;
     
    1019993#else   /* of #ifdef TCP_CFG_NON_BLOCKING */
    1020994
    1021         /* data が NULL、len < 0 か、tmout が TMO_NBLK ならエラー */
     995        /* data が NULL、len < 0 か、tmout が TMO_NBLK ならエラー */
    1022996        if (data == NULL || len < 0 || tmout == TMO_NBLK)
    1023997                return E_PAR;
     
    10261000
    10271001        /*
    1028          *  CEP をロックし、API 機能コードとタスク識別子を記録する。
    1029          *  すでに記録されていれば、ペンディング中なのでエラー
     1002         *  CEP をロックし、API 機能コードとタスク識別子を記録する。
     1003         *  すでに記録されていれば、ペンディング中なのでエラー
    10301004         */
    10311005        if ((error = tcp_lock_cep(cepid, &cep, TFN_TCP_SND_DAT)) != E_OK)
    10321006                return error;
    10331007
    1034         /* 送信できるか、通信端点の状æ
    1035 ‹ã‚’見る。*/
     1008        /* 送信できるか、通信端点の状態を見る。*/
    10361009        if ((error = tcp_can_send_more(cep, TFN_TCP_SND_DAT, tmout)) != E_OK)
    10371010                goto err_ret;
     
    10391012#ifdef TCP_CFG_NON_BLOCKING
    10401013
    1041         /* タイムアウトをチェックする。*/
    1042         if (tmout == TMO_NBLK) {                /* ノンブロッキングコール */
    1043 
    1044                 /* 送信ウィンドバッファに空きがあればコールバック関数を呼び出す。*/
     1014        /* タイムアウトをチェックする。*/
     1015        if (tmout == TMO_NBLK) {                /* ノンブロッキングコール */
     1016
     1017                /* 送信ウィンドバッファに空きがあればコールバック関数を呼び出す。*/
    10451018                if (!TCP_IS_SWBUF_FULL(cep)) {
    10461019
    1047                         /* 送信ウィンドバッファにデータを書き込む。*/
     1020                        /* 送信ウィンドバッファにデータを書き込む。*/
    10481021                        error = TCP_WRITE_SWBUF(cep, data, (uint_t)len);
    10491022
    1050                         /* 出力をポストする。*/
     1023                        /* 出力をポストする。*/
    10511024                        cep->flags |= TCP_CEP_FLG_POST_OUTPUT;
    10521025                        sig_sem(SEM_TCP_POST_OUTPUT);
     
    10541027#ifdef TCP_CFG_NON_BLOCKING_COMPAT14
    10551028
    1056                         /* コールバック関数を呼び出す。*/
     1029                        /* コールバック関数を呼び出す。*/
    10571030                        (*cep->callback)(GET_TCP_CEPID(cep), TFN_TCP_SND_DAT, (void*)error);
    10581031
    10591032#else   /* of #ifdef TCP_CFG_NON_BLOCKING_COMPAT14 */
    10601033
    1061                         /* コールバック関数を呼び出す。*/
     1034                        /* コールバック関数を呼び出す。*/
    10621035                        (*cep->callback)(GET_TCP_CEPID(cep), TFN_TCP_SND_DAT, (void*)&error);
    10631036
     
    10761049                        }
    10771050                }
    1078         else {          /* 非ノンブロッキングコール */
    1079 
    1080 #endif  /* of #ifdef TCP_CFG_NON_BLOCKING */
    1081 
    1082                 /* 送信ウィンドバッファが空くのをå¾
    1083 ã¤ã€‚*/
     1051        else {          /* 非ノンブロッキングコール */
     1052
     1053#endif  /* of #ifdef TCP_CFG_NON_BLOCKING */
     1054
     1055                /* 送信ウィンドバッファが空くのを待つ。*/
    10841056                if ((error = TCP_WAIT_SWBUF(cep, tmout)) != E_OK)
    10851057                        goto err_ret;
    10861058
    1087                 /* 送信ウィンドバッファにデータを書き込む。*/
     1059                /* 送信ウィンドバッファにデータを書き込む。*/
    10881060                if ((error = TCP_WRITE_SWBUF(cep, data, (uint_t)len)) > 0) {
    10891061
    1090                         /* データを送信する。送信ウィンドバッファがフルのときは強制的に送信する。*/
     1062                        /* データを送信する。送信ウィンドバッファがフルのときは強制的に送信する。*/
    10911063                        if (TCP_IS_SWBUF_FULL(cep))
    10921064                                cep->flags |= TCP_CEP_FLG_FORCE | TCP_CEP_FLG_FORCE_CLEAR;
    10931065
    1094                         /* 出力をポストする。*/
     1066                        /* 出力をポストする。*/
    10951067                        cep->flags |= TCP_CEP_FLG_POST_OUTPUT;
    10961068                        sig_sem(SEM_TCP_POST_OUTPUT);
     
    11161088
    11171089/*
    1118  *  tcp_snd_oob -- 緊急データの送信【拡張機能】
     1090 *  tcp_snd_oob -- 緊急データの送信【拡張機能】
    11191091 */
    11201092
     
    11271099#ifdef TCP_CFG_NON_BLOCKING
    11281100
    1129         /* data が NULL か、len < 0 ならエラー */
     1101        /* data が NULL か、len < 0 ならエラー */
    11301102        if (data == NULL || len < 0)
    11311103                return E_PAR;
     
    11331105#else   /* of #ifdef TCP_CFG_NON_BLOCKING */
    11341106
    1135         /* data が NULL、len < 0 か、tmout が TMO_NBLK ならエラー */
     1107        /* data が NULL、len < 0 か、tmout が TMO_NBLK ならエラー */
    11361108        if (data == NULL || len < 0 || tmout == TMO_NBLK)
    11371109                return E_PAR;
     
    11401112
    11411113        /*
    1142          *  CEP をロックし、API 機能コードとタスク識別子を記録する。
    1143          *  すでに記録されていれば、ペンディング中なのでエラー
     1114         *  CEP をロックし、API 機能コードとタスク識別子を記録する。
     1115         *  すでに記録されていれば、ペンディング中なのでエラー
    11441116         */
    11451117        if ((error = tcp_lock_cep(cepid, &cep, TFN_TCP_SND_OOB)) != E_OK)
    11461118                return error;
    11471119
    1148         /* 送信できるか、通信端点の状æ
    1149 ‹ã‚’見る。*/
     1120        /* 送信できるか、通信端点の状態を見る。*/
    11501121        if ((error = tcp_can_send_more(cep, TFN_TCP_SND_OOB, tmout)) != E_OK)
    11511122                goto err_ret;
     
    11531124#ifdef TCP_CFG_NON_BLOCKING
    11541125
    1155         /* タイムアウトをチェックする。*/
    1156         if (tmout == TMO_NBLK) {                /* ノンブロッキングコール */
    1157 
    1158                 /* 送信ウィンドバッファに空きがあればコールバック関数を呼び出す。*/
     1126        /* タイムアウトをチェックする。*/
     1127        if (tmout == TMO_NBLK) {                /* ノンブロッキングコール */
     1128
     1129                /* 送信ウィンドバッファに空きがあればコールバック関数を呼び出す。*/
    11591130                if (!TCP_IS_SWBUF_FULL(cep)) {
    11601131
    1161                         /* 送信ウィンドバッファにデータを書き込む。*/
     1132                        /* 送信ウィンドバッファにデータを書き込む。*/
    11621133                        error = TCP_WRITE_SWBUF(cep, data, (uint_t)len);
    11631134
    1164                         /* 送信緊急ポインタを設定する。*/
     1135                        /* 送信緊急ポインタを設定する。*/
    11651136                        cep->snd_up = cep->snd_una + cep->swbuf_count;
    11661137
    1167                         /* 出力をポストする。*/
     1138                        /* 出力をポストする。*/
    11681139                        cep->flags |= TCP_CEP_FLG_POST_OUTPUT;
    11691140                        sig_sem(SEM_TCP_POST_OUTPUT);
     
    11711142#ifdef TCP_CFG_NON_BLOCKING_COMPAT14
    11721143
    1173                         /* コールバック関数を呼び出す。*/
     1144                        /* コールバック関数を呼び出す。*/
    11741145                        (*cep->callback)(GET_TCP_CEPID(cep), TFN_TCP_SND_OOB, (void*)error);
    11751146
    11761147#else   /* of #ifdef TCP_CFG_NON_BLOCKING_COMPAT14 */
    11771148
    1178                         /* コールバック関数を呼び出す。*/
     1149                        /* コールバック関数を呼び出す。*/
    11791150                        (*cep->callback)(GET_TCP_CEPID(cep), TFN_TCP_SND_OOB, (void*)&error);
    11801151
     
    11931164                        }
    11941165                }
    1195         else {          /* 非ノンブロッキングコール */
    1196 
    1197 #endif  /* of #ifdef TCP_CFG_NON_BLOCKING */
    1198 
    1199                 /* 送信ウィンドバッファが空くのをå¾
    1200 ã¤ã€‚*/
     1166        else {          /* 非ノンブロッキングコール */
     1167
     1168#endif  /* of #ifdef TCP_CFG_NON_BLOCKING */
     1169
     1170                /* 送信ウィンドバッファが空くのを待つ。*/
    12011171                if ((error = TCP_WAIT_SWBUF(cep, tmout)) != E_OK)
    12021172                        goto err_ret;
    12031173
    1204                 /* 送信ウィンドバッファにデータを書き込む。*/
     1174                /* 送信ウィンドバッファにデータを書き込む。*/
    12051175                if ((error = TCP_WRITE_SWBUF(cep, data, (uint_t)len)) > 0) {
    12061176
    1207                         /* 送信緊急ポインタを設定する。*/
     1177                        /* 送信緊急ポインタを設定する。*/
    12081178                        cep->snd_up = cep->snd_una + cep->swbuf_count;
    12091179
    1210                         /* データを送信する。送信ウィンドバッファがフルのときは強制的に送信する。*/
     1180                        /* データを送信する。送信ウィンドバッファがフルのときは強制的に送信する。*/
    12111181                        if (TCP_IS_SWBUF_FULL(cep))
    12121182                                cep->flags |= TCP_CEP_FLG_FORCE | TCP_CEP_FLG_FORCE_CLEAR;
    12131183
    1214                         /* 出力をポストする。*/
     1184                        /* 出力をポストする。*/
    12151185                        cep->flags |= TCP_CEP_FLG_POST_OUTPUT;
    12161186                        sig_sem(SEM_TCP_POST_OUTPUT);
     
    12361206
    12371207/*
    1238  *  tcp_get_buf -- 送信用バッファの獲得【標準機能】
     1208 *  tcp_get_buf -- 送信用バッファの獲得【標準機能】
    12391209 */
    12401210
     
    12471217#ifdef TCP_CFG_NON_BLOCKING
    12481218
    1249         /* p_buf が NULL ならエラー */
     1219        /* p_buf が NULL ならエラー */
    12501220        if (p_buf == NULL)
    12511221                return E_PAR;
     
    12531223#else   /* of #ifdef TCP_CFG_NON_BLOCKING */
    12541224
    1255         /* p_buf が NULL か、tmout が TMO_NBLK ならエラー */
     1225        /* p_buf が NULL か、tmout が TMO_NBLK ならエラー */
    12561226        if (p_buf == NULL || tmout == TMO_NBLK)
    12571227                return E_PAR;
     
    12601230
    12611231        /*
    1262          *  CEP をロックし、API 機能コードとタスク識別子を記録する。
    1263          *  すでに記録されていれば、ペンディング中なのでエラー
     1232         *  CEP をロックし、API 機能コードとタスク識別子を記録する。
     1233         *  すでに記録されていれば、ペンディング中なのでエラー
    12641234         */
    12651235        if ((error = tcp_lock_cep(cepid, &cep, TFN_TCP_GET_BUF)) != E_OK)
    12661236                return error;
    12671237
    1268         /* 送信できるか、通信端点の状æ
    1269 ‹ã‚’見る。*/
     1238        /* 送信できるか、通信端点の状態を見る。*/
    12701239        if ((error = tcp_can_send_more(cep, TFN_TCP_GET_BUF, tmout)) != E_OK)
    12711240                goto err_ret;
     
    12731242#ifdef TCP_CFG_NON_BLOCKING
    12741243
    1275         /* タイムアウトをチェックする。*/
    1276         if (tmout == TMO_NBLK) {                /* ノンブロッキングコール */
     1244        /* タイムアウトをチェックする。*/
     1245        if (tmout == TMO_NBLK) {                /* ノンブロッキングコール */
    12771246
    12781247                if (!TCP_IS_SWBUF_FULL(cep)) {
    12791248
    1280                         /* 送信ウィンドバッファに空きがあればコールバック関数を呼び出す。*/
     1249                        /* 送信ウィンドバッファに空きがあればコールバック関数を呼び出す。*/
    12811250                        error = TCP_GET_SWBUF_ADDR(cep, p_buf);
    12821251
    12831252#ifdef TCP_CFG_NON_BLOCKING_COMPAT14
    12841253
    1285                         /* コールバック関数を呼び出す。*/
     1254                        /* コールバック関数を呼び出す。*/
    12861255                        (*cep->callback)(GET_TCP_CEPID(cep), TFN_TCP_GET_BUF, (void*)error);
    12871256
    12881257#else   /* of #ifdef TCP_CFG_NON_BLOCKING_COMPAT14 */
    12891258
    1290                         /* コールバック関数を呼び出す。*/
     1259                        /* コールバック関数を呼び出す。*/
    12911260                        (*cep->callback)(GET_TCP_CEPID(cep), TFN_TCP_GET_BUF, (void*)&error);
    12921261
     
    13041273                }
    13051274
    1306         else {          /* 非ノンブロッキングコール */
    1307 
    1308 #endif  /* of #ifdef TCP_CFG_NON_BLOCKING */
    1309 
    1310                 /* 送信ウィンドバッファが空くのをå¾
    1311 ã¤ã€‚*/
     1275        else {          /* 非ノンブロッキングコール */
     1276
     1277#endif  /* of #ifdef TCP_CFG_NON_BLOCKING */
     1278
     1279                /* 送信ウィンドバッファが空くのを待つ。*/
    13121280                if ((error = TCP_WAIT_SWBUF(cep, tmout)) != E_OK)
    13131281                        goto err_ret;
    13141282
    1315                 /* 送信ウィンドバッファの空アドレスを獲得する。*/
     1283                /* 送信ウィンドバッファの空アドレスを獲得する。*/
    13161284                error = TCP_GET_SWBUF_ADDR(cep, p_buf);
    13171285
     
    13331301
    13341302/*
    1335  *  tcp_snd_buf -- バッファå†
    1336 ã®ãƒ‡ãƒ¼ã‚¿ã®é€ä¿¡ã€æ¨™æº–機能】
     1303 *  tcp_snd_buf -- バッファ内のデータの送信【標準機能】
    13371304 */
    13381305
     
    13431310        ER              error;
    13441311
    1345         /* 送信する長さ len をチェックする。*/
     1312        /* 送信する長さ len をチェックする。*/
    13461313        if (len < 0)
    13471314                return E_PAR;
    13481315
    1349         /* 送信する長さlen が 0 であれば、何もしないで戻る。*/
     1316        /* 送信する長さlen が 0 であれば、何もしないで戻る。*/
    13501317        if (len == 0)
    13511318                return E_OK;
    13521319
    13531320        /*
    1354          *  CEP をロックし、API 機能コードとタスク識別子を記録する。
    1355          *  すでに記録されていれば、ペンディング中なのでエラー
     1321         *  CEP をロックし、API 機能コードとタスク識別子を記録する。
     1322         *  すでに記録されていれば、ペンディング中なのでエラー
    13561323         */
    13571324        if ((error = tcp_lock_cep(cepid, &cep, TFN_TCP_SND_BUF)) != E_OK)
    13581325                return error;
    13591326
    1360         /* 送信する長さ len をチェックする。*/
     1327        /* 送信する長さ len をチェックする。*/
    13611328        if (len > cep->get_buf_len) {
    13621329                error = E_OBJ;
     
    13641331                }
    13651332
    1366         /* 送信できるか、CEP の FSM 状æ
    1367 ‹ã‚’見る。*/
     1333        /* 送信できるか、CEP の FSM 状態を見る。*/
    13681334        if (!TCP_FSM_CAN_SEND_MORE(cep->fsm_state)) {
    13691335                if ((error = cep->error) == E_OK)
     
    13721338                }
    13731339
    1374         /* 送信ウィンドバッファのデータを送信可能にする。*/
     1340        /* 送信ウィンドバッファのデータを送信可能にする。*/
    13751341        TCP_SEND_SWBUF(cep, (uint_t)len);
    13761342
    1377         /* 出力をポストする。*/
     1343        /* 出力をポストする。*/
    13781344        cep->flags |= TCP_CEP_FLG_POST_OUTPUT;
    13791345        sig_sem(SEM_TCP_POST_OUTPUT);
     
    13901356
    13911357/*
    1392  *  tcp_rcv_dat -- パケットの受信【標準機能】
     1358 *  tcp_rcv_dat -- パケットの受信【標準機能】
    13931359 */
    13941360
     
    14011367#ifdef TCP_CFG_NON_BLOCKING
    14021368
    1403         /* data が NULL か、len < 0 ならエラー */
     1369        /* data が NULL か、len < 0 ならエラー */
    14041370        if (data == NULL || len < 0)
    14051371                return E_PAR;
     
    14071373#else   /* of #ifdef TCP_CFG_NON_BLOCKING */
    14081374
    1409         /* data が NULL、len < 0 か、tmout が TMO_NBLK ならエラー */
     1375        /* data が NULL、len < 0 か、tmout が TMO_NBLK ならエラー */
    14101376        if (data == NULL || len < 0 || tmout == TMO_NBLK)
    14111377                return E_PAR;
     
    14141380
    14151381        /*
    1416          *  CEP をロックし、API 機能コードとタスク識別子を記録する。
    1417          *  すでに記録されていれば、ペンディング中なのでエラー
     1382         *  CEP をロックし、API 機能コードとタスク識別子を記録する。
     1383         *  すでに記録されていれば、ペンディング中なのでエラー
    14181384         */
    14191385        if ((error = tcp_lock_cep(cepid, &cep, TFN_TCP_RCV_DAT)) != E_OK)
    14201386                return error;
    14211387
    1422         /* 受信できるか、通信端点の状æ
    1423 ‹ã‚’見る。*/
     1388        /* 受信できるか、通信端点の状態を見る。*/
    14241389        if (tcp_can_recv_more(&error, cep, TFN_TCP_RCV_DAT, tmout) != E_OK)
    14251390                goto err_ret;
     
    14271392#ifdef TCP_CFG_NON_BLOCKING
    14281393
    1429         /* タイムアウトをチェックする。*/
    1430         if (tmout == TMO_NBLK) {                /* ノンブロッキングコール */
    1431 
    1432                 /* 受信ウィンドバッファにデータがあればコールバック関数を呼び出す。*/
     1394        /* タイムアウトをチェックする。*/
     1395        if (tmout == TMO_NBLK) {                /* ノンブロッキングコール */
     1396
     1397                /* 受信ウィンドバッファにデータがあればコールバック関数を呼び出す。*/
    14331398                if (cep->rwbuf_count > 0) {
    14341399
    1435                         /* 受信ウィンドバッファからデータを取り出す。*/
     1400                        /* 受信ウィンドバッファからデータを取り出す。*/
    14361401                        len = TCP_READ_RWBUF(cep, data, (uint_t)len);
    14371402
     
    14561421                        }
    14571422                }
    1458         else {          /* 非ノンブロッキングコール */
    1459 
    1460 #endif  /* of #ifdef TCP_CFG_NON_BLOCKING */
    1461 
    1462                 /* 受信ウィンドバッファにデータがなければ、å
    1463 ¥åŠ›ãŒã‚るまでå¾
    1464 ã¤ã€‚*/
     1423        else {          /* 非ノンブロッキングコール */
     1424
     1425#endif  /* of #ifdef TCP_CFG_NON_BLOCKING */
     1426
     1427                /* 受信ウィンドバッファにデータがなければ、入力があるまで待つ。*/
    14651428                if ((error = tcp_wait_rwbuf(cep, tmout)) != E_OK)
    14661429                        goto err_ret;
    14671430
    1468                 /* 受信ウィンドバッファからデータを取り出す。*/
     1431                /* 受信ウィンドバッファからデータを取り出す。*/
    14691432                error = TCP_READ_RWBUF(cep, data, (uint_t)len);
    14701433
    1471                 /* 相手にウィンドウサイズが変わったことを知らせるため出力をポストする。*/
     1434                /* 相手にウィンドウサイズが変わったことを知らせるため出力をポストする。*/
    14721435                cep->flags |= TCP_CEP_FLG_POST_OUTPUT;
    14731436                sig_sem(SEM_TCP_POST_OUTPUT);
     
    14921455
    14931456/*
    1494  *  tcp_rcv_oob -- 緊急データの受信【拡張機能】
     1457 *  tcp_rcv_oob -- 緊急データの受信【拡張機能】
    14951458 *
    1496  *    注意: 送信側が複数オクテットのデータを送信しても、
    1497  *          緊急ポインタが指す 1 オクテットのデータのみ受信する。
     1459 *    注意: 送信側が複数オクテットのデータを送信しても、
     1460 *          緊急ポインタが指す 1 オクテットのデータのみ受信する。
    14981461 */
    14991462
     
    15041467        uint8_t         *urg;
    15051468
    1506         /* TCP 通信端点 ID をチェックする。*/
     1469        /* TCP 通信端点 ID をチェックする。*/
    15071470        if (!VAID_TCP_CEPID(cepid))
    15081471                return E_ID;
    15091472
    1510         /* data が NULL か、len < 0 ならエラー */
     1473        /* data が NULL か、len < 0 ならエラー */
    15111474        if (data == NULL || len < 0)
    15121475                return E_PAR;
    15131476
    1514         /* TCP 通信端点を得る。*/
     1477        /* TCP 通信端点を得る。*/
    15151478        cep = GET_TCP_CEP(cepid);
    15161479
    1517         /* 受信できるか、通信端点の状æ
    1518 ‹ã‚’見る。*/
    1519         /* 受信できるか、fsm_state を見る。*/
     1480        /* 受信できるか、通信端点の状態を見る。*/
     1481        /* 受信できるか、fsm_state を見る。*/
    15201482        if (!TCP_FSM_CAN_RECV_MORE(cep->fsm_state))
    15211483                return E_OBJ;
    15221484
    15231485        /*
    1524          *  緊急データå
    1525 ¥ã‚Šã®ã‚»ã‚°ãƒ¡ãƒ³ãƒˆã® TCP ヘッダが
    1526          *  設定されていなければ、緊急データを受信していない。
     1486         *  緊急データ入りのセグメントの TCP ヘッダが
     1487         *  設定されていなければ、緊急データを受信していない。
    15271488         */
    15281489        if (cep->urg_tcph == NULL)
    15291490                return E_OBJ;
    15301491
    1531         /* len == 0 ならバッファオーバーフロー */
     1492        /* len == 0 ならバッファオーバーフロー */
    15321493        if (len == 0)
    15331494                return E_BOVR;
    15341495
    1535         /* 緊急ポインタが指す 1 オクテットのデータを読み取る。*/
     1496        /* 緊急ポインタが指す 1 オクテットのデータを読み取る。*/
    15361497        urg = (uint8_t*)cep->urg_tcph + TCP_DATA_OFF(cep->urg_tcph->doff) + cep->urg_tcph->urp + TCP_CFG_URG_OFFSET;
    15371498        *(uint8_t*)data = *urg;
    15381499
    1539         /* 読み取ったデータから後ろの SDU を前に詰める。*/
     1500        /* 読み取ったデータから後ろの SDU を前に詰める。*/
    15401501        memcpy(urg, urg + 1, cep->urg_tcph->sum - (cep->urg_tcph->urp + TCP_CFG_URG_OFFSET) - 1);
    15411502
    1542         /* tcp_rcv_oob() が呼出されたこと知らせるために、NULL を設定する。*/
     1503        /* tcp_rcv_oob() が呼出されたこと知らせるために、NULL を設定する。*/
    15431504        cep->urg_tcph = NULL;
    15441505
     
    15531514
    15541515/*
    1555  *  tcp_rcv_buf -- 受信したデータのå
    1556 ¥ã£ãŸãƒãƒƒãƒ•ã‚¡ã®ç²å¾—【標準機能】
     1516 *  tcp_rcv_buf -- 受信したデータの入ったバッファの獲得【標準機能】
    15571517 */
    15581518
     
    15651525#ifdef TCP_CFG_NON_BLOCKING
    15661526
    1567         /* p_buf が NULL ならエラー */
     1527        /* p_buf が NULL ならエラー */
    15681528        if (p_buf == NULL)
    15691529                return E_PAR;
     
    15711531#else   /* of #ifdef TCP_CFG_NON_BLOCKING */
    15721532
    1573         /* p_buf が NULL か、tmout が TMO_NBLK ならエラー */
     1533        /* p_buf が NULL か、tmout が TMO_NBLK ならエラー */
    15741534        if (p_buf == NULL || tmout == TMO_NBLK)
    15751535                return E_PAR;
     
    15781538
    15791539        /*
    1580          *  CEP をロックし、API 機能コードとタスク識別子を記録する。
    1581          *  すでに記録されていれば、ペンディング中なのでエラー
     1540         *  CEP をロックし、API 機能コードとタスク識別子を記録する。
     1541         *  すでに記録されていれば、ペンディング中なのでエラー
    15821542         */
    15831543        if ((error = tcp_lock_cep(cepid, &cep, TFN_TCP_RCV_BUF)) != E_OK)
    15841544                return error;
    15851545
    1586         /* 受信できるか、通信端点の状æ
    1587 ‹ã‚’見る。*/
     1546        /* 受信できるか、通信端点の状態を見る。*/
    15881547        if (tcp_can_recv_more(&error, cep, TFN_TCP_RCV_DAT, tmout) != E_OK)
    15891548                goto err_ret;
     
    15911550#ifdef TCP_CFG_NON_BLOCKING
    15921551
    1593         /* タイムアウトをチェックする。*/
    1594         if (tmout == TMO_NBLK) {                /* ノンブロッキングコール */
    1595 
    1596                 /* 受信ウィンドバッファにデータがあればコールバック関数を呼び出す。*/
     1552        /* タイムアウトをチェックする。*/
     1553        if (tmout == TMO_NBLK) {                /* ノンブロッキングコール */
     1554
     1555                /* 受信ウィンドバッファにデータがあればコールバック関数を呼び出す。*/
    15971556                if (cep->rwbuf_count > 0) {
    15981557
    1599                         /* 受信ウィンドバッファの空アドレスを獲得する。*/
     1558                        /* 受信ウィンドバッファの空アドレスを獲得する。*/
    16001559                        error = TCP_GET_RWBUF_ADDR(cep, p_buf);
    16011560
    16021561#ifdef TCP_CFG_NON_BLOCKING_COMPAT14
    16031562
    1604                         /* コールバック関数を呼び出す。*/
     1563                        /* コールバック関数を呼び出す。*/
    16051564                        (*cep->callback)(GET_TCP_CEPID(cep), TFN_TCP_RCV_BUF, (void*)error);
    16061565
    16071566#else   /* of #ifdef TCP_CFG_NON_BLOCKING_COMPAT14 */
    16081567
    1609                         /* コールバック関数を呼び出す。*/
     1568                        /* コールバック関数を呼び出す。*/
    16101569                        (*cep->callback)(GET_TCP_CEPID(cep), TFN_TCP_RCV_BUF, (void*)&error);
    16111570
     
    16211580                        }
    16221581                }
    1623         else {          /* 非ノンブロッキングコール */
    1624 
    1625 #endif  /* of #ifdef TCP_CFG_NON_BLOCKING */
    1626 
    1627                 /* 受信ウィンドバッファにデータがなければ、å
    1628 ¥åŠ›ãŒã‚るまでå¾
    1629 ã¤ã€‚*/
     1582        else {          /* 非ノンブロッキングコール */
     1583
     1584#endif  /* of #ifdef TCP_CFG_NON_BLOCKING */
     1585
     1586                /* 受信ウィンドバッファにデータがなければ、入力があるまで待つ。*/
    16301587                if ((error = tcp_wait_rwbuf(cep, tmout)) != E_OK) {
    16311588                        cep->rwbuf_count = 0;
     
    16331590                        }
    16341591
    1635                 /* 受信ウィンドバッファのアドレスを獲得する。*/
     1592                /* 受信ウィンドバッファのアドレスを獲得する。*/
    16361593                error = TCP_GET_RWBUF_ADDR(cep, p_buf);
    16371594
     
    16531610
    16541611/*
    1655  *  tcp_rel_buf -- 受信用バッファの解放【標準機能】
     1612 *  tcp_rel_buf -- 受信用バッファの解放【標準機能】
    16561613 */
    16571614
     
    16621619        ER              error;
    16631620
    1664         /* 解放する長さ len をチェックする。*/
     1621        /* 解放する長さ len をチェックする。*/
    16651622        if (len < 0)
    16661623                return E_PAR;
    16671624
    16681625        /*
    1669          *  CEP をロックし、API 機能コードとタスク識別子を記録する。
    1670          *  すでに記録されていれば、ペンディング中なのでエラー
     1626         *  CEP をロックし、API 機能コードとタスク識別子を記録する。
     1627         *  すでに記録されていれば、ペンディング中なのでエラー
    16711628         */
    16721629        if ((error = tcp_lock_cep(cepid, &cep, TFN_TCP_REL_BUF)) != E_OK)
    16731630                return error;
    16741631
    1675         /* 解放する長さ len をチェックする。*/
     1632        /* 解放する長さ len をチェックする。*/
    16761633        if (len > cep->rcv_buf_len) {
    16771634                error = E_OBJ;
     
    16791636                }
    16801637
    1681         /* 通信端点をロックする。*/
     1638        /* 通信端点をロックする。*/
    16821639        syscall(wai_sem(cep->semid_lock));
    16831640
    1684         /* 受信ウィンドバッファから受信したオクテットを削除する。*/
     1641        /* 受信ウィンドバッファから受信したオクテットを削除する。*/
    16851642        TCP_DROP_RWBUF(cep, (uint_t)len);
    16861643
    1687         /* tcp_rcv_buf の割当て長をリセットする。*/
     1644        /* tcp_rcv_buf の割当て長をリセットする。*/
    16881645        cep->rcv_buf_len = 0;
    16891646
    1690         /* 通信端点のロックを解除する。*/
     1647        /* 通信端点のロックを解除する。*/
    16911648        syscall(sig_sem(cep->semid_lock));
    16921649
    1693         /* 相手にウィンドウサイズが変わったことを知らせるため出力をポストする。*/
     1650        /* 相手にウィンドウサイズが変わったことを知らせるため出力をポストする。*/
    16941651        cep->flags |= TCP_CEP_FLG_POST_OUTPUT;
    16951652        sig_sem(SEM_TCP_POST_OUTPUT);
     
    17061663
    17071664/*
    1708  *  tcp_can_snd -- ペンディングしている送信のキャンセル
     1665 *  tcp_can_snd -- ペンディングしている送信のキャンセル
    17091666 */
    17101667
     
    17141671        ER      error = E_OK;
    17151672
    1716         /* 通信端点をロックする。*/
     1673        /* 通信端点をロックする。*/
    17171674        syscall(wai_sem(cep->semid_lock));
    17181675
    17191676        /*
    1720          *  snd_tskid が TA_NULL なら、
    1721          *  ペンディングしていないのでエラー
     1677         *  snd_tskid が TA_NULL なら、
     1678         *  ペンディングしていないのでエラー
    17221679         */
    17231680        if (cep->snd_tskid == TA_NULL)
    17241681                error = EV_NOPND;
    17251682
    1726         /* ペンディング中の API 機能コードと一致しなければエラー */
     1683        /* ペンディング中の API 機能コードと一致しなければエラー */
    17271684        else if (fncd != TFN_TCP_ALL && fncd != cep->snd_tfn)
    17281685                error = E_OBJ;
    17291686
    1730         /* 処理をキャンセルする。*/
     1687        /* 処理をキャンセルする。*/
    17311688        else {
    17321689
    1733                 /* 受信再構成キューのネットワークバッファを解放する。*/
     1690                /* 受信再構成キューのネットワークバッファを解放する。*/
    17341691                tcp_free_reassq(cep);
    17351692
    1736                 /* 受信ウィンドバッファキューのネットワークバッファを解放する。*/
     1693                /* 受信ウィンドバッファキューのネットワークバッファを解放する。*/
    17371694                cep->rwbuf_count = 0;
    17381695                TCP_FREE_RWBUFQ(cep);
    17391696
    1740                 /* 送信ウィンドバッファキューのネットワークバッファを解放する。*/
     1697                /* 送信ウィンドバッファキューのネットワークバッファを解放する。*/
    17411698                TCP_FREE_SWBUFQ(cep);
    17421699
    17431700#ifdef TCP_CFG_NON_BLOCKING
    17441701
    1745                 if (cep->snd_nblk_tfn != TFN_TCP_UNDEF) {       /* ノンブロッキングコール */
     1702                if (cep->snd_nblk_tfn != TFN_TCP_UNDEF) {       /* ノンブロッキングコール */
    17461703
    17471704                        switch (cep->snd_nblk_tfn) {
    17481705
    17491706                        case TFN_TCP_CON_CEP:
    1750                                 /*  通信端点から受付口を解放する。*/
     1707                                /*  通信端点から受付口を解放する。*/
    17511708                                cep->rep = NULL;
    17521709                                cep->fsm_state = TCP_FSM_CLOSED;
     
    17891746                }
    17901747
    1791         /* 通信端点のロックを解除する。*/
     1748        /* 通信端点のロックを解除する。*/
    17921749        syscall(sig_sem(cep->semid_lock));
    17931750
     
    17961753
    17971754/*
    1798  *  tcp_can_rcv -- ペンディングしている受信のキャンセル
     1755 *  tcp_can_rcv -- ペンディングしている受信のキャンセル
    17991756 */
    18001757
     
    18041761        ER      error = E_OK;
    18051762
    1806         /* 通信端点をロックする。*/
     1763        /* 通信端点をロックする。*/
    18071764        syscall(wai_sem(cep->semid_lock));
    18081765
    18091766        /*
    1810          *  rcv_tskid が TA_NULL なら、
    1811          *  ペンディングしていないのでエラー
     1767         *  rcv_tskid が TA_NULL なら、
     1768         *  ペンディングしていないのでエラー
    18121769         */
    18131770        if (cep->rcv_tskid == TA_NULL)
    18141771                error = EV_NOPND;
    18151772
    1816         /* ペンディング中の API 機能コードと一致しなければエラー */
     1773        /* ペンディング中の API 機能コードと一致しなければエラー */
    18171774        else if (fncd != TFN_TCP_ALL && fncd != cep->rcv_tfn)
    18181775                error = E_OBJ;
    18191776
    1820         /* 処理をキャンセルする。*/
     1777        /* 処理をキャンセルする。*/
    18211778        else {
    18221779
    1823                 /* 受信再構成キューのネットワークバッファを解放する。*/
     1780                /* 受信再構成キューのネットワークバッファを解放する。*/
    18241781                tcp_free_reassq(cep);
    18251782
    1826                 /* 受信ウィンドバッファキューのネットワークバッファを解放する。*/
     1783                /* 受信ウィンドバッファキューのネットワークバッファを解放する。*/
    18271784                cep->rwbuf_count = 0;
    18281785                TCP_FREE_RWBUFQ(cep);
    18291786
    1830                 /* 送信ウィンドバッファキューのネットワークバッファを解放する。*/
     1787                /* 送信ウィンドバッファキューのネットワークバッファを解放する。*/
    18311788                TCP_FREE_SWBUFQ(cep);
    18321789
    18331790#ifdef TCP_CFG_NON_BLOCKING
    18341791
    1835                 if (cep->rcv_nblk_tfn != TFN_TCP_UNDEF) {       /* ノンブロッキングコール */
     1792                if (cep->rcv_nblk_tfn != TFN_TCP_UNDEF) {       /* ノンブロッキングコール */
    18361793
    18371794                        switch (cep->rcv_nblk_tfn) {
     
    18391796                        case TFN_TCP_ACP_CEP:
    18401797                                /*
    1841                                  *  通信端点から受付口を解放し、
    1842                                  *  イベントフラグをクローズに設定する。
     1798                                 *  通信端点から受付口を解放し、
     1799                                 *  イベントフラグをクローズに設定する。
    18431800                                 */
    18441801                                cep->rep = NULL;
     
    18881845                }
    18891846
    1890         /* 通信端点のロックを解除する。*/
     1847        /* 通信端点のロックを解除する。*/
    18911848        syscall(sig_sem(cep->semid_lock));
    18921849
     
    18951852
    18961853/*
    1897  *  tcp_can_cep -- ペンディングしている処理のキャンセル【標準機能】
     1854 *  tcp_can_cep -- ペンディングしている処理のキャンセル【標準機能】
    18981855 */
    18991856
     
    19041861        ER              error = E_OK, snd_err, rcv_err;
    19051862
    1906         /* API 機能コードをチェックする。*/
     1863        /* API 機能コードをチェックする。*/
    19071864        if (!VALID_TFN_TCP_CAN(fncd))
    19081865                return E_PAR;
    19091866
    1910         /* TCP 通信端点 ID をチェックする。*/
     1867        /* TCP 通信端点 ID をチェックする。*/
    19111868        if (!VAID_TCP_CEPID(cepid))
    19121869                return E_ID;
    19131870
    1914         /* TCP 通信端点を得る。*/
     1871        /* TCP 通信端点を得る。*/
    19151872        cep = GET_TCP_CEP(cepid);
    19161873
    1917         /* TCP 通信端点をチェックする。*/
     1874        /* TCP 通信端点をチェックする。*/
    19181875        if (!VALID_TCP_CEP(cep))
    19191876                return E_NOEXS;
    19201877
    1921         if (fncd == TFN_TCP_ALL) {              /* TFN_TCP_ALL の処理 */
     1878        if (fncd == TFN_TCP_ALL) {              /* TFN_TCP_ALL の処理 */
    19221879                snd_err = tcp_can_snd(cep, fncd);
    19231880                rcv_err = tcp_can_rcv(cep, fncd);
    19241881
    19251882                /*
    1926                  *  snd_err と rcv_err のどちらも EV_NOPND
    1927                  *  なら、ペンディングしていないのでエラー
     1883                 *  snd_err と rcv_err のどちらも EV_NOPND
     1884                 *  なら、ペンディングしていないのでエラー
    19281885                 */
    19291886                if (snd_err == EV_NOPND && rcv_err == EV_NOPND)
     
    19421899                }
    19431900
    1944         else if (IS_TFN_TCP_RCV(fncd)) {        /* 受信処理のキャンセル */
     1901        else if (IS_TFN_TCP_RCV(fncd)) {        /* 受信処理のキャンセル */
    19451902                if ((error = tcp_can_rcv(cep, fncd)) == EV_NOPND)
    19461903                        error = E_OBJ;
    19471904                }
    19481905
    1949         else {                                  /* 送信処理のキャンセル */
     1906        else {                                  /* 送信処理のキャンセル */
    19501907                if ((error = tcp_can_snd(cep, fncd)) == EV_NOPND)
    19511908                        error = E_OBJ;
     
    19581915
    19591916/*
    1960  *  tcp_set_opt -- TCP 通信端点オプションの設定【拡張機能】
     1917 *  tcp_set_opt -- TCP 通信端点オプションの設定【拡張機能】
    19611918 *
    1962  *  注意: 設定可能な TCP 通信端点オプションは無いため、E_PAR が返される。
     1919 *  注意: 設定可能な TCP 通信端点オプションは無いため、E_PAR が返される。
    19631920 */
    19641921
     
    19721929        T_TCP_CEP       *cep;
    19731930
    1974         /* TCP 通信端点 ID をチェックする。*/
     1931        /* TCP 通信端点 ID をチェックする。*/
    19751932        if (!VAID_TCP_CEPID(cepid))
    19761933                return E_ID;
    19771934
    1978         /* TCP 通信端点を得る。*/
     1935        /* TCP 通信端点を得る。*/
    19791936        cep = GET_TCP_CEP(cepid);
    19801937
    1981         /* TCP 通信端点をチェックする。*/
     1938        /* TCP 通信端点をチェックする。*/
    19821939        if (!VALID_TCP_CEP(cep))
    19831940                return E_NOEXS;
     
    19911948
    19921949/*
    1993  *  tcp_get_opt -- TCP 通信端点オプションの設定【拡張機能】
     1950 *  tcp_get_opt -- TCP 通信端点オプションの設定【拡張機能】
    19941951 *
    1995  *  注意: 設定可能な TCP 通信端点オプションは無いため、E_PAR が返される。
     1952 *  注意: 設定可能な TCP 通信端点オプションは無いため、E_PAR が返される。
    19961953 */
    19971954
     
    20051962        T_TCP_CEP       *cep;
    20061963
    2007         /* TCP 通信端点 ID をチェックする。*/
     1964        /* TCP 通信端点 ID をチェックする。*/
    20081965        if (!VAID_TCP_CEPID(cepid))
    20091966                return E_ID;
    20101967
    2011         /* TCP 通信端点を得る。*/
     1968        /* TCP 通信端点を得る。*/
    20121969        cep = GET_TCP_CEP(cepid);
    20131970
    2014         /* TCP 通信端点をチェックする。*/
     1971        /* TCP 通信端点をチェックする。*/
    20151972        if (!VALID_TCP_CEP(cep))
    20161973                return E_NOEXS;
  • EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/tcp_var.h

    • Property svn:keywords deleted
    • Property svn:mime-type changed from text/x-chdr to text/x-chdr;charset=UTF-8
    r270 r321  
    55 *                   Tomakomai National College of Technology, JAPAN
    66 *
    7  *  上記著作権è€
    8 ã¯ï¼Œä»¥ä¸‹ã® (1)~(4) の条件か,Free Software Foundation
    9  *  によってå
    10 ¬è¡¨ã•ã‚Œã¦ã„ã‚‹ GNU General Public License の Version 2 に記
    11  *  述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
    12  *  を改変したものを含む.以下同じ)を使用・複製・改変・再é
    13 å¸ƒï¼ˆä»¥ä¸‹ï¼Œ
    14  *  利用と呼ぶ)することを無償で許諾する.
    15  *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
    16  *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
    17  *      スコード中に含まれていること.
    18  *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
    19  *      用できる形で再é
    20 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é
    21 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
    22  *      è€
    23 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—作権表示,この利用条件および下記
    24  *      の無保証規定を掲載すること.
    25  *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
    26  *      用できない形で再é
    27 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®æ¡ä»¶ã‚’満たすこと.
    28  *    (a) 再é
    29 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€
    30 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—
    31  *        作権表示,この利用条件および下記の無保証規定を掲載すること.
    32  *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
    33  *      害からも,上記著作権è€
    34 ãŠã‚ˆã³TOPPERSプロジェクトをå
    35 è²¬ã™ã‚‹ã“と.
     7 *  上記著作権者は,以下の (1)~(4) の条件か,Free Software Foundation
     8 *  によって公表されている GNU General Public License の Version 2 に記
     9 *  述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
     10 *  を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下,
     11 *  利用と呼ぶ)することを無償で許諾する.
     12 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     13 *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     14 *      スコード中に含まれていること.
     15 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     16 *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     17 *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     18 *      の無保証規定を掲載すること.
     19 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     20 *      用できない形で再配布する場合には,次の条件を満たすこと.
     21 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     22 *        作権表示,この利用条件および下記の無保証規定を掲載すること.
     23 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     24 *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
    3625 *
    37  *  本ソフトウェアは,無保証で提供されているものである.上記著作権è€
    38 ãŠ
    39  *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
    40  *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
    41  *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
     26 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     27 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
     28 *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
     29 *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
    4230 *
    4331 *  @(#) $Id$
     
    8472
    8573/*
    86  *  TCP ヘッダ・ペイロードアクセスマクロ
     74 *  TCP ヘッダ・ペイロードアクセスマクロ
    8775 */
    8876
     
    10593
    10694/*
    107  *  TINET 1.1 との互換性のための定義
     95 *  TINET 1.1 との互換性のための定義
    10896 */
    10997
     
    118106
    119107/*
    120  *  TINET 1.3 との互換性のための定義
     108 *  TINET 1.3 との互換性のための定義
    121109 */
    122110
     
    127115
    128116/*
    129  *  コールバック関数の定義
     117 *  コールバック関数の定義
    130118 */
    131119
     
    133121
    134122/*
    135  *  TCP 受付口
    136  */
    137 
    138 /* IPv4 用 TCP 受付口 */
     123 *  TCP 受付口
     124 */
     125
     126/* IPv4 用 TCP 受付口 */
    139127typedef struct t_tcp4_rep {
    140128
    141129        /*
    142          * ITRON TCP/IP API、TCP 受付口と同じメンバ
     130         * ITRON TCP/IP API、TCP 受付口と同じメンバ
    143131         */
    144         ATR             repatr;         /* 受付口属性              */
    145         T_IPV4EP        myaddr;         /* 自分のアドレス        */
     132        ATR             repatr;         /* 受付口属性                */
     133        T_IPV4EP        myaddr;         /* 自分のアドレス      */
    146134
    147135#ifdef TCP_CFG_EXTENTIONS
    148         uint16_t        flags;          /* 受付口フラグ           */
    149         ID              semid_lock;     /* 受付口ロック           */
     136        uint16_t        flags;          /* 受付口フラグ               */
     137        ID              semid_lock;     /* 受付口ロック               */
    150138#endif  /* of #ifdef TCP_CFG_EXTENTIONS */
    151139
    152140        } T_TCP4_REP;
    153141
    154 /* IPv6 用 TCP 受付口 */
     142/* IPv6 用 TCP 受付口 */
    155143typedef struct t_tcp6_rep {
    156144
    157145        /*
    158          * ITRON TCP/IP API、TCP 受付口と同じメンバ
     146         * ITRON TCP/IP API、TCP 受付口と同じメンバ
    159147         */
    160         ATR             repatr;         /* 受付口属性              */
    161         T_IPV6EP        myaddr;         /* 自分のアドレス        */
     148        ATR             repatr;         /* 受付口属性                */
     149        T_IPV6EP        myaddr;         /* 自分のアドレス      */
    162150
    163151#ifdef TCP_CFG_EXTENTIONS
    164         uint16_t        flags;          /* 受付口フラグ           */
    165         ID              semid_lock;     /* 受付口ロック           */
     152        uint16_t        flags;          /* 受付口フラグ               */
     153        ID              semid_lock;     /* 受付口ロック               */
    166154#endif  /* of #ifdef TCP_CFG_EXTENTIONS */
    167155
     
    177165
    178166/*
    179  *  受付口フラグ
    180  */
    181 
    182 #define TCP_REP_FLG_DYNAMIC     UINT_C(0x0400)  /* 動的生成・削除可能受付口。      */
    183 #define TCP_REP_FLG_VALID       UINT_C(0x0800)  /* 生成済みで有効な受付口。 */
    184 
    185 /*
    186  *  TCP 通信端点
     167 *  受付口フラグ
     168 */
     169
     170#define TCP_REP_FLG_DYNAMIC     UINT_C(0x0400)  /* 動的生成・削除可能受付口。        */
     171#define TCP_REP_FLG_VALID       UINT_C(0x0800)  /* 生成済みで有効な受付口。 */
     172
     173/*
     174 *  TCP 通信端点
    187175 */
    188176
     
    192180
    193181/*
    194  * 通常の IPv4 TCP 通信端点
     182 * 通常の IPv4 TCP 通信端点
    195183 */
    196184typedef struct t_tcp4_cep {
    197185
    198186        /*
    199          * ITRON TCP/IP API、TCP 通信端点と同じメンバ
     187         * ITRON TCP/IP API、TCP 通信端点と同じメンバ
    200188         */
    201         ATR             cepatr;         /* 通信端点属性                   */
    202         void            *sbuf;          /* 送信用ウィンドバッファ    */
    203         int_t           sbufsz;         /* 送信用ウィンドバッファサイズ   */
    204         void            *rbuf;          /* 受信用ウィンドバッファ    */
    205         int_t           rbufsz;         /* 受信用ウィンドバッファサイズ   */
    206         t_tcp_callback  callback;       /* コールバック関数             */
     189        ATR             cepatr;         /* 通信端点属性                       */
     190        void            *sbuf;          /* 送信用ウィンドバッファ  */
     191        int_t           sbufsz;         /* 送信用ウィンドバッファサイズ       */
     192        void            *rbuf;          /* 受信用ウィンドバッファ  */
     193        int_t           rbufsz;         /* 受信用ウィンドバッファサイズ       */
     194        t_tcp_callback  callback;       /* コールバック関数             */
    207195
    208196        /*
    209          * TINET 独自のメンバ
     197         * TINET 独自のメンバ
    210198         */
    211         uint32_t        flags;          /* 通信端点フラグ                */
    212         ID              semid_lock;     /* 通信端点ロック                */
    213         ID              est_flgid;      /* コネクション状æ
    214 ‹ã‚¤ãƒ™ãƒ³ãƒˆãƒ•ãƒ©ã‚°  */
    215         ID              snd_flgid;      /* 送信イベントフラグ          */
    216         ID              rcv_flgid;      /* 受信イベントフラグ          */
    217         ID              snd_tskid;      /* 送信タスク識別子             */
    218         ID              rcv_tskid;      /* 受信タスク識別子             */
    219         uint8_t         *sbuf_rptr;     /* 送信用読み出しポインタ    */
    220         uint8_t         *sbuf_wptr;     /* 送信用書き込みポインタ    */
    221         uint8_t         *rbuf_rptr;     /* 受信用読み出しポインタ    */
    222         uint8_t         *rbuf_wptr;     /* 受信用書き込みポインタ    */
    223         T_TCP_SEQ       snd_ssthresh;   /* 輻輳ウィンドサイズ(snd_cwnd)        */
    224                                         /* のしきい値                      */
    225         T_TCP_TIME      rxtcur;         /* 現在の再送タイムアウト    */
    226         T_TCP_TIME      srtt;           /* 平滑化された RTT               */
    227         T_TCP_TIME      rttvar;         /* 平滑化された分散             */
    228         T_TCP_WND       snd_cwnd;       /* 輻輳ウィンドサイズ          */
     199        uint32_t        flags;          /* 通信端点フラグ              */
     200        ID              semid_lock;     /* 通信端点ロック              */
     201        ID              est_flgid;      /* コネクション状態イベントフラグ      */
     202        ID              snd_flgid;      /* 送信イベントフラグ            */
     203        ID              rcv_flgid;      /* 受信イベントフラグ            */
     204        ID              snd_tskid;      /* 送信タスク識別子             */
     205        ID              rcv_tskid;      /* 受信タスク識別子             */
     206        uint8_t         *sbuf_rptr;     /* 送信用読み出しポインタ  */
     207        uint8_t         *sbuf_wptr;     /* 送信用書き込みポインタ  */
     208        uint8_t         *rbuf_rptr;     /* 受信用読み出しポインタ  */
     209        uint8_t         *rbuf_wptr;     /* 受信用書き込みポインタ  */
     210        T_TCP_SEQ       snd_ssthresh;   /* 輻輳ウィンドサイズ(snd_cwnd)  */
     211                                        /* のしきい値                        */
     212        T_TCP_TIME      rxtcur;         /* 現在の再送タイムアウト  */
     213        T_TCP_TIME      srtt;           /* 平滑化された RTT           */
     214        T_TCP_TIME      rttvar;         /* 平滑化された分散             */
     215        T_TCP_WND       snd_cwnd;       /* 輻輳ウィンドサイズ            */
    229216
    230217        /*
    231          *  相手の最大受信セグメントサイズ       
     218         *  相手の最大受信セグメントサイズ     
    232219         *
    233          *    オリジナルでは、一般のセグメントの最大サイズ (t_maxseg) と、
    234          *    オプション付きのセグメントの最大サイズ (t_maxopd) が別に
    235          *    なっている。これは、現在のインターネットでは、オプション付きの
    236          *    セグメントのほうが多いからと説明されているためである。
    237          *    本実è£
    238 ã§ã¯ã€æœ€å¤§ã‚»ã‚°ãƒ¡ãƒ³ãƒˆã‚µã‚¤ã‚ºã‚ªãƒ—ション以外のオプションは
    239          *    実è£
    240 ã—ないので、t_maxseg の使用する。
     220         *    オリジナルでは、一般のセグメントの最大サイズ (t_maxseg) と、
     221         *    オプション付きのセグメントの最大サイズ (t_maxopd) が別に
     222         *    なっている。これは、現在のインターネットでは、オプション付きの
     223         *    セグメントのほうが多いからと説明されているためである。
     224         *    本実装では、最大セグメントサイズオプション以外のオプションは
     225         *    実装しないので、t_maxseg の使用する。
    241226         */
    242227        T_TCP_SEG       maxseg;
    243228
    244         int16_t         snd_tfn;        /* 送信動作中の API 機能コード       */
    245         int16_t         rcv_tfn;        /* 受信動作中の API 機能コード       */
     229        int16_t         snd_tfn;        /* 送信動作中の API 機能コード     */
     230        int16_t         rcv_tfn;        /* 受信動作中の API 機能コード     */
    246231
    247232#ifdef TCP_CFG_NON_BLOCKING
    248233
    249         T_IPV4EP        *p_dstaddr;     /* 相手のアドレスへのポインタ      */
    250         T_IPV4EP        *p_myaddr;      /* 自分のアドレスへのポインタ      */
    251         int16_t         snd_nblk_tfn;   /* 送信動作中の API 機能コード       */
    252         int16_t         rcv_nblk_tfn;   /* 受信動作中の API 機能コード       */
    253         void            *snd_data;      /* 送信データ領域のå
    254 ˆé ­ã‚¢ãƒ‰ãƒ¬ã‚¹        */
    255         int_t           snd_len;        /* 送信データ領域の長さ               */
    256         void            *rcv_data;      /* 受信データ領域のå
    257 ˆé ­ã‚¢ãƒ‰ãƒ¬ã‚¹        */
    258         int_t           rcv_len;        /* 受信データ領域の長さ               */
    259         void            **snd_p_buf;    /* 送信バッファへのポインタ */
    260         void            **rcv_p_buf;    /* 受信バッファへのポインタ */
     234        T_IPV4EP        *p_dstaddr;     /* 相手のアドレスへのポインタ        */
     235        T_IPV4EP        *p_myaddr;      /* 自分のアドレスへのポインタ        */
     236        int16_t         snd_nblk_tfn;   /* 送信動作中の API 機能コード     */
     237        int16_t         rcv_nblk_tfn;   /* 受信動作中の API 機能コード     */
     238        void            *snd_data;      /* 送信データ領域の先頭アドレス       */
     239        int_t           snd_len;        /* 送信データ領域の長さ           */
     240        void            *rcv_data;      /* 受信データ領域の先頭アドレス       */
     241        int_t           rcv_len;        /* 受信データ領域の長さ           */
     242        void            **snd_p_buf;    /* 送信バッファへのポインタ */
     243        void            **rcv_p_buf;    /* 受信バッファへのポインタ */
    261244
    262245#endif  /* of #ifdef TCP_CFG_NON_BLOCKING */
    263246
    264247#ifdef TCP_CFG_SWBUF_CSAVE
    265         T_NET_BUF       *swbufq;        /* 送信ウィンドバッファキュー      */
     248        T_NET_BUF       *swbufq;        /* 送信ウィンドバッファキュー        */
    266249#endif  /* of #ifdef TCP_CFG_SWBUF_CSAVE */
    267250
    268251        /*
    269          *  これ以降のメンバーは tcp_init_cep() 関数でゼロクリアーされる。
     252         *  これ以降のメンバーは tcp_init_cep() 関数でゼロクリアーされる。
    270253         */
    271254
    272         T_TCP_TIME      timer[NUM_TCP_TIMERS];  /* TCP のタイマ             */
    273         T_IPV4EP        dstaddr;        /* 相手のアドレス                */
    274         T_IPV4EP        myaddr;         /* 自分のアドレス                */
    275         T_TCP4_REP      *rep;           /* 受付口                    */
    276         T_NET_BUF       *reassq;        /* 受信再構成キュー             */
     255        T_TCP_TIME      timer[NUM_TCP_TIMERS];  /* TCP のタイマ             */
     256        T_IPV4EP        dstaddr;        /* 相手のアドレス              */
     257        T_IPV4EP        myaddr;         /* 自分のアドレス              */
     258        T_TCP4_REP      *rep;           /* 受付口                  */
     259        T_NET_BUF       *reassq;        /* 受信再構成キュー             */
    277260
    278261#ifdef TCP_CFG_RWBUF_CSAVE
    279         T_NET_BUF       *rwbufq;        /* 受信ウィンドバッファキュー      */
     262        T_NET_BUF       *rwbufq;        /* 受信ウィンドバッファキュー        */
    280263#endif  /* of #ifdef TCP_CFG_RWBUF_CSAVE */
    281264
    282265#ifdef TCP_CFG_EXTENTIONS
    283         T_TCP_HDR       *urg_tcph;      /* 緊急データå
    284 ¥ã‚Šã®ã‚»ã‚°ãƒ¡ãƒ³ãƒˆã® TCP ヘッダ */
    285         T_TCP_SEQ       snd_up;         /* 送信した緊急ポインタ               */
    286         T_TCP_SEQ       rcv_up;         /* 受信した緊急ポインタ               */
     266        T_TCP_HDR       *urg_tcph;      /* 緊急データ入りのセグメントの TCP ヘッダ       */
     267        T_TCP_SEQ       snd_up;         /* 送信した緊急ポインタ           */
     268        T_TCP_SEQ       rcv_up;         /* 受信した緊急ポインタ           */
    287269#endif  /* of #ifdef TCP_CFG_EXTENTIONS */
    288270
    289         T_TCP_SEQ       snd_una;        /* 未確認の最小送信 SEQ つまり       */
    290                                         /* 確認された最大送信 SEQ      */
    291         T_TCP_SEQ       snd_max;        /* 送信した最大 SEQ               */
    292         T_TCP_SEQ       snd_nxt;        /* 次に送信する SEQ               */
    293         T_TCP_SEQ       snd_old_nxt;    /* å
    294 ƒã® snd_nxt                    */
    295         T_TCP_SEQ       snd_wl1;        /* 前回ウィンドを更新した SEQ        */
    296         T_TCP_SEQ       snd_wl2;        /* 前回ウィンドを更新した ACK        */
    297         T_TCP_SEQ       iss;            /* 自分の SEQ の初期値           */
    298         T_TCP_SEQ       irs;            /* 相手の SEQ の初期値           */
    299         T_TCP_SEQ       rcv_nxt;        /* 受信を期å¾
    300 ã—ている最小の SEQ       */
    301         T_TCP_SEQ       rcv_adv;        /* 受信を期å¾
    302 ã—ている最大の SEQ       */
    303         T_TCP_SEQ       rcv_wnd;        /* 受信可能なウィンドサイズ */
    304         T_TCP_SEQ       rtseq;          /* 時間計測を始めた SEQ         */
    305         T_TCP_SEQ       last_ack_sent;  /* 最後に送信した ACK            */
    306         T_TCP_TIME      idle;           /* アイドル時間                   */
    307         ER              error;          /* 非同期に発生したエラー    */
    308         ER              net_error;      /* ネットワークのエラー状æ
    309 ‹       */
    310         T_TCP_WND       snd_wnd;        /* 相手の受信可能ウィンドサイズ   */
    311         T_TCP_WND       max_sndwnd;     /* 今までの最大送信ウィンドサイズ        */
    312         T_TCP_TIME      rtt;            /* 往復時間                         */
    313         uint16_t        swbuf_count;    /* 送信ウィンドバッファの使用中サイズ  */
    314         uint16_t        rwbuf_count;    /* 受信ウィンドバッファの使用中サイズ  */
    315         uint16_t        rcv_buf_len;    /* tcp_rcv_buf の割当て長  */
    316         uint16_t        get_buf_len;    /* tcp_rcv_buf の割当て長  */
    317         uint8_t         rxtshift;       /* 再送信回数の log(2)            */
    318         uint8_t         fsm_state;      /* FSM 状æ
    319 ‹                       */
    320         uint8_t         dupacks;        /* 再送 ACK 数                       */
     271        T_TCP_SEQ       snd_una;        /* 未確認の最小送信 SEQ つまり     */
     272                                        /* 確認された最大送信 SEQ        */
     273        T_TCP_SEQ       snd_max;        /* 送信した最大 SEQ           */
     274        T_TCP_SEQ       snd_nxt;        /* 次に送信する SEQ           */
     275        T_TCP_SEQ       snd_old_nxt;    /* 元の snd_nxt                   */
     276        T_TCP_SEQ       snd_wl1;        /* 前回ウィンドを更新した SEQ      */
     277        T_TCP_SEQ       snd_wl2;        /* 前回ウィンドを更新した ACK      */
     278        T_TCP_SEQ       iss;            /* 自分の SEQ の初期値         */
     279        T_TCP_SEQ       irs;            /* 相手の SEQ の初期値         */
     280        T_TCP_SEQ       rcv_nxt;        /* 受信を期待している最小の SEQ     */
     281        T_TCP_SEQ       rcv_adv;        /* 受信を期待している最大の SEQ     */
     282        T_TCP_SEQ       rcv_wnd;        /* 受信可能なウィンドサイズ */
     283        T_TCP_SEQ       rtseq;          /* 時間計測を始めた SEQ         */
     284        T_TCP_SEQ       last_ack_sent;  /* 最後に送信した ACK          */
     285        T_TCP_TIME      idle;           /* アイドル時間                       */
     286        ER              error;          /* 非同期に発生したエラー  */
     287        ER              net_error;      /* ネットワークのエラー状態 */
     288        T_TCP_WND       snd_wnd;        /* 相手の受信可能ウィンドサイズ       */
     289        T_TCP_WND       max_sndwnd;     /* 今までの最大送信ウィンドサイズ      */
     290        T_TCP_TIME      rtt;            /* 往復時間                         */
     291        uint16_t        swbuf_count;    /* 送信ウィンドバッファの使用中サイズ    */
     292        uint16_t        rwbuf_count;    /* 受信ウィンドバッファの使用中サイズ    */
     293        uint16_t        rcv_buf_len;    /* tcp_rcv_buf の割当て長    */
     294        uint16_t        get_buf_len;    /* tcp_rcv_buf の割当て長    */
     295        uint8_t         rxtshift;       /* 再送信回数の log(2)                */
     296        uint8_t         fsm_state;      /* FSM 状態                       */
     297        uint8_t         dupacks;        /* 再送 ACK 数                     */
    321298
    322299#if defined(TCP_CFG_RWBUF_CSAVE) && defined(TCP_CFG_RWBUF_CSAVE_MAX_QUEUES)
    323         uint8_t         rwbufq_entries; /* 受信ウィンドバッファキューのエントリ数    */
     300        uint8_t         rwbufq_entries; /* 受信ウィンドバッファキューのエントリ数  */
    324301#endif  /* of #if defined(TCP_CFG_RWBUF_CSAVE) && defined(TCP_CFG_RWBUF_CSAVE_MAX_QUEUES)       */
    325302
     
    327304
    328305/*
    329  * Time Wait 用 IPv4 TCP 通信端点
     306 * Time Wait 用 IPv4 TCP 通信端点
    330307 */
    331308typedef struct t_tcp4_twcep {
    332         int_t           rbufsz;         /* 受信用ウィンドバッファサイズ   */
    333         T_TCP_TIME      timer_2msl;     /* 2MSL タイマ                       */
    334         T_IPV4EP        dstaddr;        /* 相手のアドレス                */
    335         T_IPV4EP        myaddr;         /* 自分のアドレス                */
    336         T_TCP_SEQ       snd_una;        /* 未確認の最小送信 SEQ つまり       */
    337                                         /* 確認された最大送信 SEQ      */
    338         T_TCP_SEQ       rcv_nxt;        /* 受信を期å¾
    339 ã—ている最小の SEQ       */
    340         uint16_t        rwbuf_count;    /* 受信ウィンドバッファの使用中サイズ  */
    341         uint8_t         fsm_state;      /* FSM 状æ
    342 ‹                       */
     309        int_t           rbufsz;         /* 受信用ウィンドバッファサイズ       */
     310        T_TCP_TIME      timer_2msl;     /* 2MSL タイマ                     */
     311        T_IPV4EP        dstaddr;        /* 相手のアドレス              */
     312        T_IPV4EP        myaddr;         /* 自分のアドレス              */
     313        T_TCP_SEQ       snd_una;        /* 未確認の最小送信 SEQ つまり     */
     314                                        /* 確認された最大送信 SEQ        */
     315        T_TCP_SEQ       rcv_nxt;        /* 受信を期待している最小の SEQ     */
     316        uint16_t        rwbuf_count;    /* 受信ウィンドバッファの使用中サイズ    */
     317        uint8_t         fsm_state;      /* FSM 状態                       */
    343318
    344319        } T_TCP4_TWCEP;
    345320
    346321/*
    347  * 通常の IPv6 TCP 通信端点
     322 * 通常の IPv6 TCP 通信端点
    348323 */
    349324typedef struct t_tcp6_cep {
    350325
    351326        /*
    352          * ITRON TCP/IP API、TCP 通信端点と同じメンバ
     327         * ITRON TCP/IP API、TCP 通信端点と同じメンバ
    353328         */
    354         ATR             cepatr;         /* 通信端点属性                   */
    355         void            *sbuf;          /* 送信用ウィンドバッファ    */
    356         int_t           sbufsz;         /* 送信用ウィンドバッファサイズ   */
    357         void            *rbuf;          /* 受信用ウィンドバッファ    */
    358         int_t           rbufsz;         /* 受信用ウィンドバッファサイズ   */
    359         t_tcp_callback  callback;       /* コールバック関数             */
     329        ATR             cepatr;         /* 通信端点属性                       */
     330        void            *sbuf;          /* 送信用ウィンドバッファ  */
     331        int_t           sbufsz;         /* 送信用ウィンドバッファサイズ       */
     332        void            *rbuf;          /* 受信用ウィンドバッファ  */
     333        int_t           rbufsz;         /* 受信用ウィンドバッファサイズ       */
     334        t_tcp_callback  callback;       /* コールバック関数             */
    360335
    361336        /*
    362          * TINET 独自のメンバ
     337         * TINET 独自のメンバ
    363338         */
    364         uint32_t        flags;          /* 通信端点フラグ                */
    365         ID              semid_lock;     /* 通信端点ロック                */
    366         ID              est_flgid;      /* コネクション状æ
    367 ‹ã‚¤ãƒ™ãƒ³ãƒˆãƒ•ãƒ©ã‚°  */
    368         ID              snd_flgid;      /* 送信イベントフラグ          */
    369         ID              rcv_flgid;      /* 受信イベントフラグ          */
    370         ID              snd_tskid;      /* 送信タスク識別子             */
    371         ID              rcv_tskid;      /* 受信タスク識別子             */
    372         uint8_t         *sbuf_rptr;     /* 送信用読み出しポインタ            */
    373         uint8_t         *sbuf_wptr;     /* 送信用書き込みポインタ            */
    374         uint8_t         *rbuf_rptr;     /* 受信用読み出しポインタ            */
    375         uint8_t         *rbuf_wptr;     /* 受信用書き込みポインタ            */
    376         T_TCP_SEQ       snd_ssthresh;   /* 輻輳ウィンドサイズ(snd_cwnd)        */
    377                                         /* のしきい値                      */
    378         T_TCP_TIME      rxtcur;         /* 現在の再送タイムアウト            */
    379         T_TCP_TIME      srtt;           /* 平滑化された RTT               */
    380         T_TCP_TIME      rttvar;         /* 平滑化された分散             */
    381         T_TCP_WND       snd_cwnd;       /* 輻輳ウィンドサイズ          */
     339        uint32_t        flags;          /* 通信端点フラグ              */
     340        ID              semid_lock;     /* 通信端点ロック              */
     341        ID              est_flgid;      /* コネクション状態イベントフラグ      */
     342        ID              snd_flgid;      /* 送信イベントフラグ            */
     343        ID              rcv_flgid;      /* 受信イベントフラグ            */
     344        ID              snd_tskid;      /* 送信タスク識別子             */
     345        ID              rcv_tskid;      /* 受信タスク識別子             */
     346        uint8_t         *sbuf_rptr;     /* 送信用読み出しポインタ          */
     347        uint8_t         *sbuf_wptr;     /* 送信用書き込みポインタ          */
     348        uint8_t         *rbuf_rptr;     /* 受信用読み出しポインタ          */
     349        uint8_t         *rbuf_wptr;     /* 受信用書き込みポインタ          */
     350        T_TCP_SEQ       snd_ssthresh;   /* 輻輳ウィンドサイズ(snd_cwnd)  */
     351                                        /* のしきい値                        */
     352        T_TCP_TIME      rxtcur;         /* 現在の再送タイムアウト          */
     353        T_TCP_TIME      srtt;           /* 平滑化された RTT           */
     354        T_TCP_TIME      rttvar;         /* 平滑化された分散             */
     355        T_TCP_WND       snd_cwnd;       /* 輻輳ウィンドサイズ            */
    382356
    383357        /*
    384          *  相手の最大受信セグメントサイズ       
     358         *  相手の最大受信セグメントサイズ     
    385359         *
    386          *    オリジナルでは、一般のセグメントの最大サイズ (t_maxseg) と、
    387          *    オプション付きのセグメントの最大サイズ (t_maxopd) が別に
    388          *    なっている。これは、現在のインターネットでは、オプション付きの
    389          *    セグメントのほうが多いからと説明されているためである。
    390          *    本実è£
    391 ã§ã¯ã€æœ€å¤§ã‚»ã‚°ãƒ¡ãƒ³ãƒˆã‚µã‚¤ã‚ºã‚ªãƒ—ション以外のオプションは
    392          *    実è£
    393 ã—ないので、t_maxseg の使用する。
     360         *    オリジナルでは、一般のセグメントの最大サイズ (t_maxseg) と、
     361         *    オプション付きのセグメントの最大サイズ (t_maxopd) が別に
     362         *    なっている。これは、現在のインターネットでは、オプション付きの
     363         *    セグメントのほうが多いからと説明されているためである。
     364         *    本実装では、最大セグメントサイズオプション以外のオプションは
     365         *    実装しないので、t_maxseg の使用する。
    394366         */
    395367        T_TCP_SEG       maxseg;
    396368
    397         T_IPV6EP        *p_dstaddr;     /* 相手のアドレスへのポインタ      */
    398         T_IPV6EP        *p_myaddr;      /* 自分のアドレスへのポインタ      */
    399         int16_t         snd_tfn;        /* 送信動作中の API 機能コード       */
    400         int16_t         rcv_tfn;        /* 受信動作中の API 機能コード       */
     369        T_IPV6EP        *p_dstaddr;     /* 相手のアドレスへのポインタ        */
     370        T_IPV6EP        *p_myaddr;      /* 自分のアドレスへのポインタ        */
     371        int16_t         snd_tfn;        /* 送信動作中の API 機能コード     */
     372        int16_t         rcv_tfn;        /* 受信動作中の API 機能コード     */
    401373
    402374#ifdef TCP_CFG_NON_BLOCKING
    403375
    404         int16_t         snd_nblk_tfn;   /* 送信動作中の API 機能コード       */
    405         int16_t         rcv_nblk_tfn;   /* 受信動作中の API 機能コード       */
    406         void            *snd_data;      /* 送信データ領域のå
    407 ˆé ­ã‚¢ãƒ‰ãƒ¬ã‚¹        */
    408         int_t           snd_len;        /* 送信データ領域の長さ               */
    409         void            *rcv_data;      /* 受信データ領域のå
    410 ˆé ­ã‚¢ãƒ‰ãƒ¬ã‚¹        */
    411         int_t           rcv_len;        /* 受信データ領域の長さ               */
    412         void            **snd_p_buf;    /* 送信バッファへのポインタ */
    413         void            **rcv_p_buf;    /* 受信バッファへのポインタ */
     376        int16_t         snd_nblk_tfn;   /* 送信動作中の API 機能コード     */
     377        int16_t         rcv_nblk_tfn;   /* 受信動作中の API 機能コード     */
     378        void            *snd_data;      /* 送信データ領域の先頭アドレス       */
     379        int_t           snd_len;        /* 送信データ領域の長さ           */
     380        void            *rcv_data;      /* 受信データ領域の先頭アドレス       */
     381        int_t           rcv_len;        /* 受信データ領域の長さ           */
     382        void            **snd_p_buf;    /* 送信バッファへのポインタ */
     383        void            **rcv_p_buf;    /* 受信バッファへのポインタ */
    414384
    415385#endif  /* of #ifdef TCP_CFG_NON_BLOCKING */
    416386
    417387#ifdef TCP_CFG_SWBUF_CSAVE
    418         T_NET_BUF       *swbufq;        /* 送信ウィンドバッファキュー      */
     388        T_NET_BUF       *swbufq;        /* 送信ウィンドバッファキュー        */
    419389#endif  /* of #ifdef TCP_CFG_SWBUF_CSAVE */
    420390
    421391        /*
    422          *  これ以降のメンバーは tcp_init_cep() 関数でゼロクリアーされる。
     392         *  これ以降のメンバーは tcp_init_cep() 関数でゼロクリアーされる。
    423393         */
    424394
    425         T_TCP_TIME      timer[NUM_TCP_TIMERS];  /* TCP のタイマ             */
    426         T_IPV6EP        dstaddr;        /* 相手のアドレス                */
    427         T_IPV6EP        myaddr;         /* 自分のアドレス                */
    428         T_TCP6_REP      *rep;           /* 受付口                    */
    429         T_NET_BUF       *reassq;        /* 受信再構成キュー             */
     395        T_TCP_TIME      timer[NUM_TCP_TIMERS];  /* TCP のタイマ             */
     396        T_IPV6EP        dstaddr;        /* 相手のアドレス              */
     397        T_IPV6EP        myaddr;         /* 自分のアドレス              */
     398        T_TCP6_REP      *rep;           /* 受付口                  */
     399        T_NET_BUF       *reassq;        /* 受信再構成キュー             */
    430400
    431401#ifdef TCP_CFG_RWBUF_CSAVE
    432         T_NET_BUF       *rwbufq;        /* 受信ウィンドバッファキュー      */
     402        T_NET_BUF       *rwbufq;        /* 受信ウィンドバッファキュー        */
    433403#endif  /* of #ifdef TCP_CFG_RWBUF_CSAVE */
    434404
    435405#ifdef TCP_CFG_EXTENTIONS
    436         T_TCP_HDR       *urg_tcph;      /* 緊急データå
    437 ¥ã‚Šã®ã‚»ã‚°ãƒ¡ãƒ³ãƒˆã® TCP ヘッダ */
    438         T_TCP_SEQ       snd_up;         /* 送信した緊急ポインタ               */
    439         T_TCP_SEQ       rcv_up;         /* 受信した緊急ポインタ               */
     406        T_TCP_HDR       *urg_tcph;      /* 緊急データ入りのセグメントの TCP ヘッダ       */
     407        T_TCP_SEQ       snd_up;         /* 送信した緊急ポインタ           */
     408        T_TCP_SEQ       rcv_up;         /* 受信した緊急ポインタ           */
    440409#endif  /* of #ifdef TCP_CFG_EXTENTIONS */
    441410
    442         T_TCP_SEQ       snd_una;        /* 未確認の最小送信 SEQ つまり       */
    443                                         /* 確認された最大送信 SEQ      */
    444         T_TCP_SEQ       snd_max;        /* 送信した最大 SEQ               */
    445         T_TCP_SEQ       snd_nxt;        /* 次に送信する SEQ               */
    446         T_TCP_SEQ       snd_old_nxt;    /* å
    447 ƒã® snd_nxt                    */
    448         T_TCP_SEQ       snd_wl1;        /* 前回ウィンドを更新した SEQ        */
    449         T_TCP_SEQ       snd_wl2;        /* 前回ウィンドを更新した ACK        */
    450         T_TCP_SEQ       iss;            /* 自分の SEQ の初期値           */
    451         T_TCP_SEQ       irs;            /* 相手の SEQ の初期値           */
    452         T_TCP_SEQ       rcv_nxt;        /* 受信を期å¾
    453 ã—ている最小の SEQ       */
    454         T_TCP_SEQ       rcv_adv;        /* 受信を期å¾
    455 ã—ている最大の SEQ       */
    456         T_TCP_SEQ       rcv_wnd;        /* 受信可能なウィンドサイズ */
    457         T_TCP_SEQ       rtseq;          /* 時間計測を始めた SEQ         */
    458         T_TCP_SEQ       last_ack_sent;  /* 最後に送信した ACK            */
    459         T_TCP_TIME      idle;           /* アイドル時間                   */
    460         ER              error;          /* 非同期に発生したエラー            */
    461         ER              net_error;      /* ネットワークのエラー状æ
    462 ‹       */
    463         T_TCP_WND       snd_wnd;        /* 相手の受信可能ウィンドサイズ   */
    464         T_TCP_WND       max_sndwnd;     /* 今までの最大送信ウィンドサイズ        */
    465         T_TCP_TIME      rtt;            /* 往復時間                 */
    466         uint16_t        swbuf_count;    /* 送信ウィンドバッファの使用中サイズ  */
    467         uint16_t        rwbuf_count;    /* 受信ウィンドバッファの使用中サイズ  */
    468         uint16_t        rcv_buf_len;    /* tcp_rcv_buf の割当て長  */
    469         uint16_t        get_buf_len;    /* tcp_rcv_buf の割当て長  */
    470         uint8_t         rxtshift;       /* 再送信回数の log(2)            */
    471         uint8_t         fsm_state;      /* FSM 状æ
    472 ‹                       */
    473         uint8_t         dupacks;        /* 再送 ACK 数                       */
     411        T_TCP_SEQ       snd_una;        /* 未確認の最小送信 SEQ つまり     */
     412                                        /* 確認された最大送信 SEQ        */
     413        T_TCP_SEQ       snd_max;        /* 送信した最大 SEQ           */
     414        T_TCP_SEQ       snd_nxt;        /* 次に送信する SEQ           */
     415        T_TCP_SEQ       snd_old_nxt;    /* 元の snd_nxt                   */
     416        T_TCP_SEQ       snd_wl1;        /* 前回ウィンドを更新した SEQ      */
     417        T_TCP_SEQ       snd_wl2;        /* 前回ウィンドを更新した ACK      */
     418        T_TCP_SEQ       iss;            /* 自分の SEQ の初期値         */
     419        T_TCP_SEQ       irs;            /* 相手の SEQ の初期値         */
     420        T_TCP_SEQ       rcv_nxt;        /* 受信を期待している最小の SEQ     */
     421        T_TCP_SEQ       rcv_adv;        /* 受信を期待している最大の SEQ     */
     422        T_TCP_SEQ       rcv_wnd;        /* 受信可能なウィンドサイズ */
     423        T_TCP_SEQ       rtseq;          /* 時間計測を始めた SEQ         */
     424        T_TCP_SEQ       last_ack_sent;  /* 最後に送信した ACK          */
     425        T_TCP_TIME      idle;           /* アイドル時間                       */
     426        ER              error;          /* 非同期に発生したエラー          */
     427        ER              net_error;      /* ネットワークのエラー状態 */
     428        T_TCP_WND       snd_wnd;        /* 相手の受信可能ウィンドサイズ       */
     429        T_TCP_WND       max_sndwnd;     /* 今までの最大送信ウィンドサイズ      */
     430        T_TCP_TIME      rtt;            /* 往復時間                 */
     431        uint16_t        swbuf_count;    /* 送信ウィンドバッファの使用中サイズ    */
     432        uint16_t        rwbuf_count;    /* 受信ウィンドバッファの使用中サイズ    */
     433        uint16_t        rcv_buf_len;    /* tcp_rcv_buf の割当て長    */
     434        uint16_t        get_buf_len;    /* tcp_rcv_buf の割当て長    */
     435        uint8_t         rxtshift;       /* 再送信回数の log(2)                */
     436        uint8_t         fsm_state;      /* FSM 状態                       */
     437        uint8_t         dupacks;        /* 再送 ACK 数                     */
    474438
    475439#if defined(TCP_CFG_RWBUF_CSAVE) && defined(TCP_CFG_RWBUF_CSAVE_MAX_QUEUES)
    476         uint8_t         rwbufq_entries; /* 受信ウィンドバッファキューのエントリ数    */
     440        uint8_t         rwbufq_entries; /* 受信ウィンドバッファキューのエントリ数  */
    477441#endif  /* of #if defined(TCP_CFG_RWBUF_CSAVE) && defined(TCP_CFG_RWBUF_CSAVE_MAX_QUEUES)       */
    478442
     
    480444
    481445/*
    482  * Time Wait 用 IPv6 TCP 通信端点
     446 * Time Wait 用 IPv6 TCP 通信端点
    483447 */
    484448typedef struct t_tcp6_twcep {
    485         int_t           rbufsz;         /* 受信用ウィンドバッファサイズ   */
    486         T_TCP_TIME      timer_2msl;     /* 2MSL タイマ                       */
    487         T_IPV6EP        dstaddr;        /* 相手のアドレス                */
    488         T_IPV6EP        myaddr;         /* 自分のアドレス                */
    489         T_TCP_SEQ       snd_una;        /* 未確認の最小送信 SEQ つまり       */
    490                                         /* 確認された最大送信 SEQ      */
    491         T_TCP_SEQ       iss;            /* 自分の SEQ の初期値           */
    492         T_TCP_SEQ       irs;            /* 相手の SEQ の初期値           */
    493         T_TCP_SEQ       rcv_nxt;        /* 受信を期å¾
    494 ã—ている最小の SEQ       */
    495         T_TCP_WND       snd_wnd;        /* 相手の受信可能ウィンドサイズ   */
    496         uint16_t        rwbuf_count;    /* 受信ウィンドバッファの使用中サイズ  */
    497         uint8_t         fsm_state;      /* FSM 状æ
    498 ‹                       */
     449        int_t           rbufsz;         /* 受信用ウィンドバッファサイズ       */
     450        T_TCP_TIME      timer_2msl;     /* 2MSL タイマ                     */
     451        T_IPV6EP        dstaddr;        /* 相手のアドレス              */
     452        T_IPV6EP        myaddr;         /* 自分のアドレス              */
     453        T_TCP_SEQ       snd_una;        /* 未確認の最小送信 SEQ つまり     */
     454                                        /* 確認された最大送信 SEQ        */
     455        T_TCP_SEQ       iss;            /* 自分の SEQ の初期値         */
     456        T_TCP_SEQ       irs;            /* 相手の SEQ の初期値         */
     457        T_TCP_SEQ       rcv_nxt;        /* 受信を期待している最小の SEQ     */
     458        T_TCP_WND       snd_wnd;        /* 相手の受信可能ウィンドサイズ       */
     459        uint16_t        rwbuf_count;    /* 受信ウィンドバッファの使用中サイズ    */
     460        uint8_t         fsm_state;      /* FSM 状態                       */
    499461
    500462        } T_TCP6_TWCEP;
     
    513475
    514476/*
    515  *  TCP 通信端点の状æ
    516 ‹ãƒ•ãƒ©ã‚°
    517  */
    518 
    519 #define TCP_CEP_FLG_ACK_NOW             ULONG_C(0x00000001)     /* 直ちに相手に ACK を送る。  */
    520 #define TCP_CEP_FLG_DEL_ACK             ULONG_C(0x00000002)     /* ACK をé
    521 å»¶ã™ã‚‹ã€‚            */
    522 #define TCP_CEP_FLG_SENT_FIN            ULONG_C(0x00000004)     /* FIN を送ってある。            */
    523 #define TCP_CEP_FLG_NEED_SYN            ULONG_C(0x00000008)     /* SYN を送信する。               */
    524 #define TCP_CEP_FLG_NEED_FIN            ULONG_C(0x00000010)     /* FIN を送信する。               */
    525 #define TCP_CEP_FLG_FORCE               ULONG_C(0x00000020)     /* 強制送信。                      */
    526 #define TCP_CEP_FLG_NO_PUSH             ULONG_C(0x00000040)     /* push しない。            */
    527 #define TCP_CEP_FLG_NO_DELAY            ULONG_C(0x00000080)     /* é
    528 å»¶ã—ない。                 */
    529 #define TCP_CEP_FLG_FORCE_CLEAR         ULONG_C(0x00000100)     /* 強制送信した後フラグをクリアーする。*/
    530 #define TCP_CEP_FLG_POST_OUTPUT         ULONG_C(0x00000200)     /* 送信を開始する。             */
    531 #define TCP_CEP_FLG_RESERVE_OUTPUT      ULONG_C(0x00000400)     /* 送信を予約する。             */
    532 #define TCP_CEP_FLG_DYNAMIC             ULONG_C(0x00001000)     /* 動的生成・削除可能通信端点。   */
    533 #define TCP_CEP_FLG_VALID               ULONG_C(0x00002000)     /* 生成済みで有効な通信端点。      */
    534 #define TCP_CEP_FLG_CLOSE_AFTER_OUTPUT  ULONG_C(0x00004000)     /* 送信した後コネクションを閉じる。*/
    535 #define TCP_CEP_FLG_RESTORE_NEXT_OUTPUT ULONG_C(0x00008000)     /* 送信した後、snd_nxt をå
    536 ƒã«æˆ»ã™ã€‚*/
    537 
    538 /* 送受信ウィンドバッファの省コピー機能 */
    539 #define TCP_CEP_FLG_WBCS_NBUF_REQ       ULONG_C(0x00080000)     /* ネットワークバッファ割当て要求        */
    540 #define TCP_CEP_FLG_WBCS_MASK           ULONG_C(0x00070000)     /* マスク                    */
    541 #define TCP_CEP_FLG_WBCS_FREE           ULONG_C(0x00000000)     /* 送信ウィンドバッファ未使用      */
    542 #define TCP_CEP_FLG_WBCS_WOPEN_PEND     ULONG_C(0x00010000)     /* 相手の受信ウィンドの開きå¾
    543 ã¡     */
    544 #define TCP_CEP_FLG_WBCS_NBUF_PEND      ULONG_C(0x00020000)     /* ネットワークバッファ予約å¾
    545 ã¡     */
    546 #define TCP_CEP_FLG_WBCS_NBUF_RSVD      ULONG_C(0x00030000)     /* ネットワークバッファ予約済み   */
    547 #define TCP_CEP_FLG_WBCS_NBUF_READY     ULONG_C(0x00040000)     /* ネットワークバッファ割当て済み        */
    548 #define TCP_CEP_FLG_WBCS_SEND_READY     ULONG_C(0x00050000)     /* 送信可能                 */
    549 #define TCP_CEP_FLG_WBCS_SENT           ULONG_C(0x00060000)     /* 送信済みで、ACKå¾
    550 ã¡             */
    551 #define TCP_CEP_FLG_WBCS_ACKED          ULONG_C(0x00070000)     /* 送信済みで、ACK完了          */
    552 
    553 /*
    554  *  通信端点イベントフラグ
    555  */
    556 
    557 #define TCP_CEP_EVT_ESTABLISHED         ULONG_C(0x00000001)     /* コネクション確立             */
    558 #define TCP_CEP_EVT_CLOSED              ULONG_C(0x00000002)     /* 未使用状æ
    559 ‹                       */
    560 #define TCP_CEP_EVT_SWBUF_READY         ULONG_C(0x00000004)     /* 送信ウィンドバッファ空き */
    561 #define TCP_CEP_EVT_RWBUF_READY         ULONG_C(0x00000008)     /* 送信ウィンドバッファデータあり        */
    562 #define TCP_CEP_EVT_ALL                 ULONG_C(0xffffffff)     /* å
    563 ¨ã‚¤ãƒ™ãƒ³ãƒˆ                   */
    564 
    565 /*
    566  *  追加 API 機能・事象コード
    567  */
    568 
    569 /* TCP 関係 */
     477 *  TCP 通信端点の状態フラグ
     478 */
     479
     480#define TCP_CEP_FLG_ACK_NOW             ULONG_C(0x00000001)     /* 直ちに相手に ACK を送る。      */
     481#define TCP_CEP_FLG_DEL_ACK             ULONG_C(0x00000002)     /* ACK を遅延する。           */
     482#define TCP_CEP_FLG_SENT_FIN            ULONG_C(0x00000004)     /* FIN を送ってある。          */
     483#define TCP_CEP_FLG_NEED_SYN            ULONG_C(0x00000008)     /* SYN を送信する。           */
     484#define TCP_CEP_FLG_NEED_FIN            ULONG_C(0x00000010)     /* FIN を送信する。           */
     485#define TCP_CEP_FLG_FORCE               ULONG_C(0x00000020)     /* 強制送信。                        */
     486#define TCP_CEP_FLG_NO_PUSH             ULONG_C(0x00000040)     /* push しない。            */
     487#define TCP_CEP_FLG_NO_DELAY            ULONG_C(0x00000080)     /* 遅延しない。                       */
     488#define TCP_CEP_FLG_FORCE_CLEAR         ULONG_C(0x00000100)     /* 強制送信した後フラグをクリアーする。*/
     489#define TCP_CEP_FLG_POST_OUTPUT         ULONG_C(0x00000200)     /* 送信を開始する。             */
     490#define TCP_CEP_FLG_RESERVE_OUTPUT      ULONG_C(0x00000400)     /* 送信を予約する。             */
     491#define TCP_CEP_FLG_DYNAMIC             ULONG_C(0x00001000)     /* 動的生成・削除可能通信端点。       */
     492#define TCP_CEP_FLG_VALID               ULONG_C(0x00002000)     /* 生成済みで有効な通信端点。        */
     493#define TCP_CEP_FLG_CLOSE_AFTER_OUTPUT  ULONG_C(0x00004000)     /* 送信した後コネクションを閉じる。*/
     494#define TCP_CEP_FLG_RESTORE_NEXT_OUTPUT ULONG_C(0x00008000)     /* 送信した後、snd_nxt を元に戻す。*/
     495
     496/* 送受信ウィンドバッファの省コピー機能 */
     497#define TCP_CEP_FLG_WBCS_NBUF_REQ       ULONG_C(0x00080000)     /* ネットワークバッファ割当て要求      */
     498#define TCP_CEP_FLG_WBCS_MASK           ULONG_C(0x00070000)     /* マスク                  */
     499#define TCP_CEP_FLG_WBCS_FREE           ULONG_C(0x00000000)     /* 送信ウィンドバッファ未使用        */
     500#define TCP_CEP_FLG_WBCS_WOPEN_PEND     ULONG_C(0x00010000)     /* 相手の受信ウィンドの開き待ち       */
     501#define TCP_CEP_FLG_WBCS_NBUF_PEND      ULONG_C(0x00020000)     /* ネットワークバッファ予約待ち       */
     502#define TCP_CEP_FLG_WBCS_NBUF_RSVD      ULONG_C(0x00030000)     /* ネットワークバッファ予約済み       */
     503#define TCP_CEP_FLG_WBCS_NBUF_READY     ULONG_C(0x00040000)     /* ネットワークバッファ割当て済み      */
     504#define TCP_CEP_FLG_WBCS_SEND_READY     ULONG_C(0x00050000)     /* 送信可能                 */
     505#define TCP_CEP_FLG_WBCS_SENT           ULONG_C(0x00060000)     /* 送信済みで、ACK待ち          */
     506#define TCP_CEP_FLG_WBCS_ACKED          ULONG_C(0x00070000)     /* 送信済みで、ACK完了          */
     507
     508/*
     509 *  通信端点イベントフラグ
     510 */
     511
     512#define TCP_CEP_EVT_ESTABLISHED         ULONG_C(0x00000001)     /* コネクション確立             */
     513#define TCP_CEP_EVT_CLOSED              ULONG_C(0x00000002)     /* 未使用状態                        */
     514#define TCP_CEP_EVT_SWBUF_READY         ULONG_C(0x00000004)     /* 送信ウィンドバッファ空き */
     515#define TCP_CEP_EVT_RWBUF_READY         ULONG_C(0x00000008)     /* 送信ウィンドバッファデータあり      */
     516#define TCP_CEP_EVT_ALL                 ULONG_C(0xffffffff)     /* 全イベント                        */
     517
     518/*
     519 *  追加 API 機能・事象コード
     520 */
     521
     522/* TCP 関係 */
    570523
    571524#define TFN_TCP_UNDEF           (0)
    572525
    573526/*
    574  *  srtt:   å¹³æ»‘化された RTT
    575  *  rttvar: 平滑化された分散
    576  *  rtt:    測定された往復時間
     527 *  srtt:   平滑化された RTT
     528 *  rttvar: 平滑化された分散
     529 *  rtt:    測定された往復時間
    577530 *
    578  *  平滑化された RTT (srtt) と平滑化された分散 (rttvar) を
    579  *  整数型で計算するために、左シフトしてスケールする。
    580  *  srtt は 2 進小数点以下 3 ビット、
    581  *  rttvar は 2 進小数点以下 2 ビットを保持する。
     531 *  平滑化された RTT (srtt) と平滑化された分散 (rttvar) を
     532 *  整数型で計算するために、左シフトしてスケールする。
     533 *  srtt は 2 進小数点以下 3 ビット、
     534 *  rttvar は 2 進小数点以下 2 ビットを保持する。
    582535 */
    583536
    584537#define TCP_DELTA_SHIFT         2
    585                         /* 差分 = rtt/8 + srtt*7/8 の計算のためのシフト値  */
     538                        /* 差分 = rtt/8 + srtt*7/8 の計算のためのシフト値    */
    586539#define TCP_SRTT_SHIFT          (TCP_DELTA_SHIFT + 3)
    587                                         /* srtt のシフト値、3(+2)ビット        */
     540                                        /* srtt のシフト値、3(+2)ビット  */
    588541#define TCP_RTTVAR_SHIFT        (TCP_DELTA_SHIFT + 2)
    589                                         /* rttvar のシフト値、2(+2)ビット      */
     542                                        /* rttvar のシフト値、2(+2)ビット        */
    590543#define TCP_SRTT_SCALE          (1<<TCP_SRTT_SHIFT)
    591544#define TCP_RTTVAR_SCALE        (1<<TCP_RTTVAR_SHIFT)
    592545
    593546/*
    594  *  高速再転送を開始する再送 ACK 数のしきい値
     547 *  高速再転送を開始する再送 ACK 数のしきい値
    595548 */
    596549
     
    598551
    599552/*
    600  *  受信再構成キューでの TCP ヘッダ
     553 *  受信再構成キューでの TCP ヘッダ
    601554 */
    602555
    603556typedef struct t_tcp_q_hdr {
    604         uint16_t        sport;          /* 送信å
    605 ƒãƒãƒ¼ãƒˆç•ªå·                        */
    606         uint16_t        dport;          /* 宛å
    607 ˆãƒãƒ¼ãƒˆç•ªå·                        */
    608 
    609         uint32_t        seq;            /* SEQ 番号                           */
    610 
    611         T_NET_BUF       *next;          /* 次のセグメント、å
    612 ƒã¯ ACK 番号(ack)    */
    613 
    614         uint8_t         doff;           /* データオフセット(上位4ビット)   */
    615         uint8_t         flags;          /* フラグ(下位6ビット)                  */
    616         uint16_t        soff;           /* SDU オフセット、å
    617 ƒã¯ã‚¦ã‚£ãƒ³ãƒ‰ã‚µã‚¤ã‚º(win)  */
    618 
    619         uint16_t        slen;           /* SDU 長、å
    620 ƒã¯ãƒã‚§ãƒƒã‚¯ã‚µãƒ (sum)     */
    621         uint16_t        urp;            /* 緊急ポインタ(SDU 長補正)                */
     557        uint16_t        sport;          /* 送信元ポート番号                     */
     558        uint16_t        dport;          /* 宛先ポート番号                      */
     559
     560        uint32_t        seq;            /* SEQ 番号                               */
     561
     562        T_NET_BUF       *next;          /* 次のセグメント、元は ACK 番号(ack)       */
     563
     564        uint8_t         doff;           /* データオフセット(上位4ビット)     */
     565        uint8_t         flags;          /* フラグ(下位6ビット)                  */
     566        uint16_t        soff;           /* SDU オフセット、元はウィンドサイズ(win)     */
     567
     568        uint16_t        slen;           /* SDU 長、元はチェックサム(sum)  */
     569        uint16_t        urp;            /* 緊急ポインタ(SDU 長補正)              */
    622570        } __attribute__((packed, aligned(2)))T_TCP_Q_HDR;
    623571
     
    626574
    627575/*
    628  *  オブジェクト ID の最小値の定義
    629  */
    630 
    631 #define TMIN_TCP_REPID          1       /* TCP 受付口   ID の最小値                      */
    632 #define TMIN_TCP_CEPID          1       /* TCP 通信端点 ID の最小値                     */
    633 #define TMIN_TCP_TWCEPID        1       /* Time Wait 用 TCP 通信端点 ID の最小値       */
    634 
    635 /*
    636  *  制御セグメント(データなし)サイズのネットワークバッファ
     576 *  オブジェクト ID の最小値の定義
     577 */
     578
     579#define TMIN_TCP_REPID          1       /* TCP 受付口   ID の最小値                    */
     580#define TMIN_TCP_CEPID          1       /* TCP 通信端点 ID の最小値                     */
     581#define TMIN_TCP_TWCEPID        1       /* Time Wait 用 TCP 通信端点 ID の最小値 */
     582
     583/*
     584 *  制御セグメント(データなし)サイズのネットワークバッファ
    637585 */
    638586
    639587typedef struct t_net_buf_cseg {
    640         uint16_t        len;    /* データの長さ           */
    641         uint8_t         idix;   /* mpfid のインデックス  */
    642         uint8_t         flags;  /* フラグ            */
     588        uint16_t        len;    /* データの長さ               */
     589        uint8_t         idix;   /* mpfid のインデックス        */
     590        uint8_t         flags;  /* フラグ          */
    643591#ifdef IF_ETHER_NIC_NET_BUF_ALIGN
    644592        uint8_t         nalign[IF_ETHER_NIC_NET_BUF_ALIGN];
     
    648596#endif
    649597        uint8_t         buf[IF_HDR_SIZE + IP_HDR_SIZE + TCP_HDR_SIZE];
    650                                 /* バッファ本体           */
     598                                /* バッファ本体               */
    651599        } T_NET_BUF_CSEG;
    652600
     
    654602
    655603/*
    656  *  SNMP の 管理æƒ
    657 å ±ãƒ™ãƒ¼ã‚¹ (MIB)
     604 *  SNMP の 管理情報ベース (MIB)
    658605 */
    659606
     
    674621
    675622/*
    676  *  関数シミュレーションマクロ
     623 *  関数シミュレーションマクロ
    677624 */
    678625
     
    720667
    721668/*
    722  *  å
    723 ¨åŸŸå¤‰æ•°
     669 *  全域変数
    724670 */
    725671
     
    738684
    739685/*
    740  *  Inline 関数
     686 *  Inline 関数
    741687 */
    742688
     
    744690
    745691/*
    746  *  TCP 通信端点の受信ウィンドバッファの省コピー機能が
    747  *  無効の場合は何もしないためのダミーの関数
    748  */
    749 
    750 /*
    751  *  tcp_free_rwbufq -- 受信ウィンドバッファキューを解放する。
     692 *  TCP 通信端点の受信ウィンドバッファの省コピー機能が
     693 *  無効の場合は何もしないためのダミーの関数
     694 */
     695
     696/*
     697 *  tcp_free_rwbufq -- 受信ウィンドバッファキューを解放する。
    752698 */
    753699
     
    762708
    763709/*
    764  *  TCP 通信端点の送信ウィンドバッファの省コピー機能のみが
    765  *  有効の場合は何もしないためのダミーの関数
    766  */
    767 
    768 /*
    769  *  tcp_read_swbuf_cs -- 送信ウィンドバッファからデータを読み出す。
     710 *  TCP 通信端点の送信ウィンドバッファの省コピー機能のみが
     711 *  有効の場合は何もしないためのダミーの関数
     712 */
     713
     714/*
     715 *  tcp_read_swbuf_cs -- 送信ウィンドバッファからデータを読み出す。
    770716 */
    771717
     
    780726
    781727/*
    782  *  TCP 通信端点の送信ウィンドバッファの省コピー機能が
    783  *  無効の場合は何もしないためのダミーの関数
    784  */
    785 
    786 /*
    787  *  tcp_free_swbufq -- 送信ウィンドバッファキューを解放する。
     728 *  TCP 通信端点の送信ウィンドバッファの省コピー機能が
     729 *  無効の場合は何もしないためのダミーの関数
     730 */
     731
     732/*
     733 *  tcp_free_swbufq -- 送信ウィンドバッファキューを解放する。
    788734 */
    789735
     
    794740
    795741/*
    796  *  tcp_alloc_swbuf -- 送信ウィンドバッファ用のネットワークバッファの割り当てを指示する。
     742 *  tcp_alloc_swbuf -- 送信ウィンドバッファ用のネットワークバッファの割り当てを指示する。
    797743 */
    798744
     
    803749
    804750/*
    805  *  tcp_push_res_nbuf -- ネットワークバッファを予約する。
     751 *  tcp_push_res_nbuf -- ネットワークバッファを予約する。
    806752 */
    807753
     
    813759
    814760/*
    815  *  tcp_pull_res_nbuf -- 予約してあるネットワークバッファ返す。
     761 *  tcp_pull_res_nbuf -- 予約してあるネットワークバッファ返す。
    816762 */
    817763
     
    825771
    826772/*
    827  *  TCP 通信端点の受信ウィンドバッファの省コピー機能の切り替えマクロ
     773 *  TCP 通信端点の受信ウィンドバッファの省コピー機能の切り替えマクロ
    828774 */
    829775
     
    859805
    860806/*
    861  *  TCP 通信端点の送信ウィンドバッファの省コピー機能の切り替えマクロ
     807 *  TCP 通信端点の送信ウィンドバッファの省コピー機能の切り替えマクロ
    862808 */
    863809
     
    910856
    911857/*
    912  *  関数
     858 *  関数
    913859 */
    914860
     
    941887
    942888/*
    943  *  TCP 通信端点の受信ウィンドバッファ用関数
    944  */
    945 
    946 /*
    947  *  TCP 通信端点の受信ウィンドバッファの省コピー機能が有効の場合、
    948  *  関数の選択に使用する。
     889 *  TCP 通信端点の受信ウィンドバッファ用関数
     890 */
     891
     892/*
     893 *  TCP 通信端点の受信ウィンドバッファの省コピー機能が有効の場合、
     894 *  関数の選択に使用する。
    949895 */
    950896
     
    956902
    957903/*
    958  *  TCP 通信端点の受信ウィンドバッファの省コピー機能用関数
     904 *  TCP 通信端点の受信ウィンドバッファの省コピー機能用関数
    959905 */
    960906
     
    966912
    967913/*
    968  *  TCP 通信端点の受信ウィンドバッファの【非】省コピー機能用関数
     914 *  TCP 通信端点の受信ウィンドバッファの【非】省コピー機能用関数
    969915 */
    970916
     
    976922
    977923/*
    978  *  TCP 通信端点の送信ウィンドバッファ用関数
    979  */
    980 
    981 /*
    982  *  TCP 通信端点の送信ウィンドバッファの省コピー機能が有効の場合、
    983  *  関数の選択に使用する。
     924 *  TCP 通信端点の送信ウィンドバッファ用関数
     925 */
     926
     927/*
     928 *  TCP 通信端点の送信ウィンドバッファの省コピー機能が有効の場合、
     929 *  関数の選択に使用する。
    984930 */
    985931
     
    998944
    999945/*
    1000  *  TCP 通信端点の送信ウィンドバッファの省コピー機能用関数
     946 *  TCP 通信端点の送信ウィンドバッファの省コピー機能用関数
    1001947 */
    1002948
     
    1012958
    1013959/*
    1014  *  TCP 通信端点の送信ウィンドバッファの【非】省コピー機能用関数
     960 *  TCP 通信端点の送信ウィンドバッファの【非】省コピー機能用関数
    1015961 */
    1016962
     
    1028974
    1029975/*
    1030  *  tcp_find_cep -- ポート番号から TCP 通信端点を得る。
     976 *  tcp_find_cep -- ポート番号から TCP 通信端点を得る。
    1031977 *
    1032  *    注意: myaddr は、
    1033  *          TINET-1.2 からネットワークバイトオーダ、
    1034  *          TINET-1.1 までは、ホストバイトオーダ
     978 *    注意: myaddr は、
     979 *          TINET-1.2 からネットワークバイトオーダ、
     980 *          TINET-1.1 までは、ホストバイトオーダ
    1035981 */
    1036982extern T_TCP_CEP *tcp_find_cep (T_IN_ADDR *dstaddr,  uint16_t dstport,
     
    1038984
    1039985/*
    1040  *  TCP ヘッダのトレース出力機能用関数
     986 *  TCP ヘッダのトレース出力機能用関数
    1041987 */
    1042988extern void tcp_output_trace (T_NET_BUF *output, T_TCP_CEP *cep);
    1043989extern void tcp_input_trace  (T_NET_BUF *input,  T_TCP_CEP *cep);
    1044990
    1045 /* TCP 出力タスク */
     991/* TCP 出力タスク */
    1046992
    1047993extern void     tcp_output_task(intptr_t exinf);
  • EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/udp.cfg

    • Property svn:keywords deleted
    • Property svn:mime-type changed from text/plain to text/plain;charset=UTF-8
    r270 r321  
    55 *                   Tomakomai National College of Technology, JAPAN
    66 *
    7  *  上記著作権è€
    8 ã¯ï¼Œä»¥ä¸‹ã® (1)~(4) の条件か,Free Software Foundation
    9  *  によってå
    10 ¬è¡¨ã•ã‚Œã¦ã„ã‚‹ GNU General Public License の Version 2 に記
    11  *  述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
    12  *  を改変したものを含む.以下同じ)を使用・複製・改変・再é
    13 å¸ƒï¼ˆä»¥ä¸‹ï¼Œ
    14  *  利用と呼ぶ)することを無償で許諾する.
    15  *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
    16  *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
    17  *      スコード中に含まれていること.
    18  *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
    19  *      用できる形で再é
    20 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é
    21 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
    22  *      è€
    23 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—作権表示,この利用条件および下記
    24  *      の無保証規定を掲載すること.
    25  *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
    26  *      用できない形で再é
    27 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®æ¡ä»¶ã‚’満たすこと.
    28  *    (a) 再é
    29 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€
    30 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—
    31  *        作権表示,この利用条件および下記の無保証規定を掲載すること.
    32  *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
    33  *      害からも,上記著作権è€
    34 ãŠã‚ˆã³TOPPERSプロジェクトをå
    35 è²¬ã™ã‚‹ã“と.
     7 *  上記著作権者は,以下の (1)~(4) の条件か,Free Software Foundation
     8 *  によって公表されている GNU General Public License の Version 2 に記
     9 *  述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
     10 *  を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下,
     11 *  利用と呼ぶ)することを無償で許諾する.
     12 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     13 *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     14 *      スコード中に含まれていること.
     15 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     16 *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     17 *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     18 *      の無保証規定を掲載すること.
     19 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     20 *      用できない形で再配布する場合には,次の条件を満たすこと.
     21 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     22 *        作権表示,この利用条件および下記の無保証規定を掲載すること.
     23 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     24 *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
    3625 *
    37  *  本ソフトウェアは,無保証で提供されているものである.上記著作権è€
    38 ãŠ
    39  *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
    40  *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
    41  *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
     26 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     27 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
     28 *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
     29 *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
    4230 *
    4331 *  @(#) $Id$
     
    4533
    4634/*
    47  *  UDP で使用するカーネルオブジェクト
     35 *  UDP で使用するカーネルオブジェクト
    4836 */
    4937
     
    5139
    5240/*
    53  *  ノンブロッキングコールを行う場合に組み込むタスクとセマフォ
     41 *  ノンブロッキングコールを行う場合に組み込むタスクとセマフォ
    5442 */
    5543
     
    6553        });
    6654
    67 /* セマフォ */
     55/* セマフォ */
    6856
    6957CRE_SEM(SEM_UDP_POST_OUTPUT,    { TA_TPRI, 0, 1 });
  • EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/udp.h

    • Property svn:keywords deleted
    • Property svn:mime-type changed from text/x-chdr to text/x-chdr;charset=UTF-8
    r270 r321  
    55 *                   Tomakomai National College of Technology, JAPAN
    66 *
    7  *  上記著作権è€
    8 ã¯ï¼Œä»¥ä¸‹ã® (1)~(4) の条件か,Free Software Foundation
    9  *  によってå
    10 ¬è¡¨ã•ã‚Œã¦ã„ã‚‹ GNU General Public License の Version 2 に記
    11  *  述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
    12  *  を改変したものを含む.以下同じ)を使用・複製・改変・再é
    13 å¸ƒï¼ˆä»¥ä¸‹ï¼Œ
    14  *  利用と呼ぶ)することを無償で許諾する.
    15  *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
    16  *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
    17  *      スコード中に含まれていること.
    18  *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
    19  *      用できる形で再é
    20 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é
    21 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
    22  *      è€
    23 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—作権表示,この利用条件および下記
    24  *      の無保証規定を掲載すること.
    25  *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
    26  *      用できない形で再é
    27 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®æ¡ä»¶ã‚’満たすこと.
    28  *    (a) 再é
    29 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€
    30 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—
    31  *        作権表示,この利用条件および下記の無保証規定を掲載すること.
    32  *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
    33  *      害からも,上記著作権è€
    34 ãŠã‚ˆã³TOPPERSプロジェクトをå
    35 è²¬ã™ã‚‹ã“と.
     7 *  上記著作権者は,以下の (1)~(4) の条件か,Free Software Foundation
     8 *  によって公表されている GNU General Public License の Version 2 に記
     9 *  述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
     10 *  を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下,
     11 *  利用と呼ぶ)することを無償で許諾する.
     12 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     13 *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     14 *      スコード中に含まれていること.
     15 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     16 *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     17 *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     18 *      の無保証規定を掲載すること.
     19 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     20 *      用できない形で再配布する場合には,次の条件を満たすこと.
     21 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     22 *        作権表示,この利用条件および下記の無保証規定を掲載すること.
     23 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     24 *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
    3625 *
    37  *  本ソフトウェアは,無保証で提供されているものである.上記著作権è€
    38 ãŠ
    39  *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
    40  *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
    41  *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
     26 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     27 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
     28 *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
     29 *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
    4230 *
    4331 *  @(#) $Id$
     
    8472
    8573/*
    86  *  UDP ヘッダ、RFC768 参ç
    87 §
     74 *  UDP ヘッダ、RFC768 参照
    8875 */
    8976
    9077typedef struct t_udp_hdr {
    91         uint16_t        sport;          /* 送信å
    92 ƒãƒãƒ¼ãƒˆç•ªå·        */
    93         uint16_t        dport;          /* 宛å
    94 ˆãƒãƒ¼ãƒˆç•ªå·        */
     78        uint16_t        sport;          /* 送信元ポート番号     */
     79        uint16_t        dport;          /* 宛先ポート番号      */
    9580
    96         uint16_t        ulen;           /* データグラム長        */
    97         uint16_t        sum;            /* チェックサム           */
     81        uint16_t        ulen;           /* データグラム長      */
     82        uint16_t        sum;            /* チェックサム               */
    9883        } __attribute__((packed, aligned(2)))T_UDP_HDR;
    9984
  • EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/udp_input.c

    • Property svn:keywords deleted
    • Property svn:mime-type changed from text/x-csrc to text/x-csrc;charset=UTF-8
    r270 r321  
    55 *                   Tomakomai National College of Technology, JAPAN
    66 *
    7  *  上記著作権è€
    8 ã¯ï¼Œä»¥ä¸‹ã® (1)~(4) の条件か,Free Software Foundation
    9  *  によってå
    10 ¬è¡¨ã•ã‚Œã¦ã„ã‚‹ GNU General Public License の Version 2 に記
    11  *  述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
    12  *  を改変したものを含む.以下同じ)を使用・複製・改変・再é
    13 å¸ƒï¼ˆä»¥ä¸‹ï¼Œ
    14  *  利用と呼ぶ)することを無償で許諾する.
    15  *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
    16  *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
    17  *      スコード中に含まれていること.
    18  *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
    19  *      用できる形で再é
    20 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é
    21 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
    22  *      è€
    23 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—作権表示,この利用条件および下記
    24  *      の無保証規定を掲載すること.
    25  *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
    26  *      用できない形で再é
    27 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®æ¡ä»¶ã‚’満たすこと.
    28  *    (a) 再é
    29 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€
    30 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—
    31  *        作権表示,この利用条件および下記の無保証規定を掲載すること.
    32  *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
    33  *      害からも,上記著作権è€
    34 ãŠã‚ˆã³TOPPERSプロジェクトをå
    35 è²¬ã™ã‚‹ã“と.
    36  *
    37  *  本ソフトウェアは,無保証で提供されているものである.上記著作権è€
    38 ãŠ
    39  *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
    40  *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
    41  *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
     7 *  上記著作権者は,以下の (1)~(4) の条件か,Free Software Foundation
     8 *  によって公表されている GNU General Public License の Version 2 に記
     9 *  述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
     10 *  を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下,
     11 *  利用と呼ぶ)することを無償で許諾する.
     12 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     13 *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     14 *      スコード中に含まれていること.
     15 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     16 *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     17 *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     18 *      の無保証規定を掲載すること.
     19 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     20 *      用できない形で再配布する場合には,次の条件を満たすこと.
     21 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     22 *        作権表示,この利用条件および下記の無保証規定を掲載すること.
     23 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     24 *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
     25 *
     26 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     27 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
     28 *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
     29 *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
    4230 *
    4331 *  @(#) $Id$
     
    129117
    130118/*
    131  *  SNMP の 管理æƒ
    132 å ±ãƒ™ãƒ¼ã‚¹ (MIB)
     119 *  SNMP の 管理情報ベース (MIB)
    133120 */
    134121
     
    142129
    143130/*
    144  *  udp_dstaddr_accept -- UDP のあてå
    145 ˆã‚¢ãƒ‰ãƒ¬ã‚¹ãŒæ­£ã—いかチェックする。
    146  *
    147  *    DHCP_CFG が定義されているときは、以下のデータグラムを受信する。
    148  *
    149  *      ・あてå
    150 ˆã‚¢ãƒ‰ãƒ¬ã‚¹ãŒãƒ–ロードキャスト
    151  *      ・ローカルアドレスが未定義
     131 *  udp_dstaddr_accept -- UDP のあて先アドレスが正しいかチェックする。
     132 *
     133 *    DHCP_CFG が定義されているときは、以下のデータグラムを受信する。
     134 *
     135 *      ・あて先アドレスがブロードキャスト
     136 *      ・ローカルアドレスが未定義
    152137 */
    153138
     
    168153
    169154/*
    170  *  udp_dstaddr_accept -- UDP のあてå
    171 ˆã‚¢ãƒ‰ãƒ¬ã‚¹ãŒæ­£ã—いかチェックする。
    172  *
    173  *    以下の場合もデータグラムを受信する。
    174  *
    175  *      ・あてå
    176 ˆã‚¢ãƒ‰ãƒ¬ã‚¹ãŒãƒ–ロードキャスト
     155 *  udp_dstaddr_accept -- UDP のあて先アドレスが正しいかチェックする。
     156 *
     157 *    以下の場合もデータグラムを受信する。
     158 *
     159 *      ・あて先アドレスがブロードキャスト
    177160 */
    178161
     
    194177
    195178/*
    196  *  udp_dstaddr_accept -- UDP のあてå
    197 ˆã‚¢ãƒ‰ãƒ¬ã‚¹ãŒæ­£ã—いかチェックする。
    198  *
    199  *    以下の場合もデータグラムを受信する。
    200  *
    201  *      ・あてå
    202 ˆã‚¢ãƒ‰ãƒ¬ã‚¹ãŒãƒ–ロードキャスト
     179 *  udp_dstaddr_accept -- UDP のあて先アドレスが正しいかチェックする。
     180 *
     181 *    以下の場合もデータグラムを受信する。
     182 *
     183 *      ・あて先アドレスがブロードキャスト
    203184 */
    204185
     
    222203
    223204/*
    224  *  udp_dstaddr_accept -- UDP のあてå
    225 ˆã‚¢ãƒ‰ãƒ¬ã‚¹ãŒæ­£ã—いかチェックする。
    226  *
    227  *    以下の場合もデータグラムを受信する。
    228  *
    229  *      ・あてå
    230 ˆã‚¢ãƒ‰ãƒ¬ã‚¹ãŒãƒžãƒ«ãƒã‚­ãƒ£ã‚¹ãƒˆ
     205 *  udp_dstaddr_accept -- UDP のあて先アドレスが正しいかチェックする。
     206 *
     207 *    以下の場合もデータグラムを受信する。
     208 *
     209 *      ・あて先アドレスがマルチキャスト
    231210 */
    232211
     
    243222
    244223/*
    245  *  udp_input -- UDP のå
    246 ¥åŠ›é–¢æ•°
     224 *  udp_input -- UDP の入力関数
    247225 */
    248226
     
    263241        NET_COUNT_MIB(udp_stats.udpInDatagrams, 1);
    264242
    265         /* ヘッダ長をチェックする。*/
     243        /* ヘッダ長をチェックする。*/
    266244        if (input->len < hlen + UDP_HDR_SIZE)
    267245                goto buf_rel;
     
    269247        udph = (T_UDP_HDR *)(input->buf + *offp);
    270248
    271         /* データグラム長をチェックする */
     249        /* データグラム長をチェックする */
    272250        ulen  = ntohs(udph->ulen);
    273251        if (ulen != input->len - hlen)
    274252                goto buf_rel;
    275253
    276         /* 宛å
    277 ˆãƒãƒ¼ãƒˆãŒ 0 のデータグラムは破棄する。RFC768 */
     254        /* 宛先ポートが 0 のデータグラムは破棄する。RFC768 */
    278255        if (udph->dport == 0)
    279256                goto buf_rel;
     
    281258#ifdef UDP_CFG_IN_CHECKSUM
    282259
    283         /* チェックサムをチェックする */
     260        /* チェックサムをチェックする */
    284261        if (udph->sum && IN_CKSUM(input, IPPROTO_UDP, *offp, ulen) != 0)
    285262                goto buf_rel;
     
    289266        iph = GET_IP_HDR(input);
    290267
    291         /* 宛å
    292 ˆã‚¢ãƒ‰ãƒ¬ã‚¹ã¨ãƒãƒ¼ãƒˆã‚’チェックする */
     268        /* 宛先アドレスとポートをチェックする */
    293269        for (ix = tmax_udp_ccepid; ix -- > 0; ) {
    294270                cep = &udp_cep[ix];
     
    298274                        len = (uint_t)(ntohs(udph->ulen) - UDP_HDR_SIZE);
    299275
    300                         if (cep->rcv_tskid != TA_NULL) {        /* 非ノンブロッキングコールでペンディング中 */
     276                        if (cep->rcv_tskid != TA_NULL) {        /* 非ノンブロッキングコールでペンディング中 */
    301277                                if (psnd_dtq(cep->rcvqid, (intptr_t)input) != E_OK)
    302278                                        goto buf_rel;
     
    305281#ifdef UDP_CFG_NON_BLOCKING
    306282
    307                         else if (cep->rcv_p_dstaddr != NULL) {  /* ノンブロッキングコールでペンディング中 */
    308 
    309                                 /* p_dstaddr を設定する。*/
     283                        else if (cep->rcv_p_dstaddr != NULL) {  /* ノンブロッキングコールでペンディング中 */
     284
     285                                /* p_dstaddr を設定する。*/
    310286                                cep->rcv_p_dstaddr->portno = ntohs(udph->sport);
    311287                                IN_COPY_TO_HOST(&cep->rcv_p_dstaddr->ipaddr, &GET_IP_HDR(input)->src);
    312288
    313                                 /* データをバッファに移す。*/
     289                                /* データをバッファに移す。*/
    314290                                memcpy(cep->rcv_data, GET_UDP_SDU(input, *offp),
    315291                                       (size_t)(len < cep->rcv_len ? len : cep->rcv_len));
     
    337313                        else if (IS_PTR_DEFINED(cep->callback)) {
    338314
    339                                 /* コールバック関数を呼び出す。*/
     315                                /* コールバック関数を呼び出す。*/
    340316                                cep->cb_netbuf = input;
    341317
     
    351327
    352328                                /*
    353                                  *  ネットワークバッファがそのままであれば、コールバック関数å†
    354 ã§
    355                                  *  データを読み出さなかったことになるので、捨てる。
     329                                 *  ネットワークバッファがそのままであれば、コールバック関数内で
     330                                 *  データを読み出さなかったことになるので、捨てる。
    356331                                 */
    357332                                if (cep->cb_netbuf != NULL)
     
    369344#if defined(SUPPORT_INET4)
    370345
    371         /* ローカル IP アドレスに届いたデータグラムのみ ICMP エラーを通知する。*/
     346        /* ローカル IP アドレスに届いたデータグラムのみ ICMP エラーを通知する。*/
    372347        if (ntohl(iph->dst) == IF_GET_IFNET()->in_ifaddr.addr) {
    373348                syslog(LOG_INFO, "[UDP] unexp port: %d.", ntohs(udph->dport));
    374349
    375350                icmp_error(ICMP4_UNREACH_PORT, input);
    376                 /* icmp_error では、ネットワークバッファ input を返却しないので下へ抜ける。*/
     351                /* icmp_error では、ネットワークバッファ input を返却しないので下へ抜ける。*/
    377352                }
    378353
     
    381356#if defined(SUPPORT_INET6)
    382357
    383         /* マルチキャストアドレスに届いたデータグラムは ICMP エラーを通知しない。*/
     358        /* マルチキャストアドレスに届いたデータグラムは ICMP エラーを通知しない。*/
    384359        if (!IN6_IS_ADDR_MULTICAST(&iph->dst)) {
    385360                syslog(LOG_INFO, "[UDP] unexp port: %d.", ntohs(udph->dport));
    386361
    387                 /* icmp6_error で、ネットワークバッファ input を返却する。*/
     362                /* icmp6_error で、ネットワークバッファ input を返却する。*/
    388363                icmp6_error(input, ICMP6_DST_UNREACH, ICMP6_DST_UNREACH_NOPORT, 0);
    389364
  • EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/udp_output.c

    • Property svn:keywords deleted
    • Property svn:mime-type changed from text/x-csrc to text/x-csrc;charset=UTF-8
    r270 r321  
    55 *                   Tomakomai National College of Technology, JAPAN
    66 *
    7  *  上記著作権è€
    8 ã¯ï¼Œä»¥ä¸‹ã® (1)~(4) の条件か,Free Software Foundation
    9  *  によってå
    10 ¬è¡¨ã•ã‚Œã¦ã„ã‚‹ GNU General Public License の Version 2 に記
    11  *  述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
    12  *  を改変したものを含む.以下同じ)を使用・複製・改変・再é
    13 å¸ƒï¼ˆä»¥ä¸‹ï¼Œ
    14  *  利用と呼ぶ)することを無償で許諾する.
    15  *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
    16  *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
    17  *      スコード中に含まれていること.
    18  *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
    19  *      用できる形で再é
    20 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é
    21 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
    22  *      è€
    23 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—作権表示,この利用条件および下記
    24  *      の無保証規定を掲載すること.
    25  *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
    26  *      用できない形で再é
    27 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®æ¡ä»¶ã‚’満たすこと.
    28  *    (a) 再é
    29 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€
    30 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—
    31  *        作権表示,この利用条件および下記の無保証規定を掲載すること.
    32  *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
    33  *      害からも,上記著作権è€
    34 ãŠã‚ˆã³TOPPERSプロジェクトをå
    35 è²¬ã™ã‚‹ã“と.
    36  *
    37  *  本ソフトウェアは,無保証で提供されているものである.上記著作権è€
    38 ãŠ
    39  *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
    40  *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
    41  *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
     7 *  上記著作権者は,以下の (1)~(4) の条件か,Free Software Foundation
     8 *  によって公表されている GNU General Public License の Version 2 に記
     9 *  述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
     10 *  を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下,
     11 *  利用と呼ぶ)することを無償で許諾する.
     12 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     13 *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     14 *      スコード中に含まれていること.
     15 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     16 *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     17 *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     18 *      の無保証規定を掲載すること.
     19 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     20 *      用できない形で再配布する場合には,次の条件を満たすこと.
     21 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     22 *        作権表示,この利用条件および下記の無保証規定を掲載すること.
     23 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     24 *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
     25 *
     26 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     27 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
     28 *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
     29 *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
    4230 *
    4331 *  @(#) $Id$
     
    127115
    128116/*
    129  *  関数
     117 *  関数
    130118 */
    131119
     
    133121
    134122/*
    135  *  UDP 出力タスク
    136  *  ノンブロッキングコールを組み込んだとき使用する。
     123 *  UDP 出力タスク
     124 *  ノンブロッキングコールを組み込んだとき使用する。
    137125 */
    138126
     
    148136#endif  /* of #ifdef UDP_CFG_OUT_CHECKSUM */
    149137
    150         /* IP データグラムを割り当てる。*/
     138        /* IP データグラムを割り当てる。*/
    151139        if ((error = IN_GET_DATAGRAM(&output, (uint_t)(UDP_HDR_SIZE + cep->snd_len), 0,
    152140                                     &cep->snd_p_dstaddr->ipaddr,
     
    157145                }
    158146
    159         /* UDP ヘッダにæƒ
    160 å ±ã‚’設定する。*/
     147        /* UDP ヘッダに情報を設定する。*/
    161148        udph            = GET_UDP_HDR(output, IF_IP_UDP_HDR_OFFSET);
    162149        udph->sport     = htons(cep->myaddr.portno);
     
    165152        udph->sum       = 0;
    166153
    167         /* データをコピーする。*/
     154        /* データをコピーする。*/
    168155        memcpy((void*)GET_UDP_SDU(output, IF_IP_UDP_HDR_OFFSET),
    169156               cep->snd_data, (size_t)cep->snd_len);
     
    174161                       (uint_t)(UDP_HDR_SIZE + cep->snd_len));
    175162
    176         /* 計算したチェックサムの値が 0 なら 0xffff をå
    177 ¥ã‚Œã‚‹ã€‚*/
     163        /* 計算したチェックサムの値が 0 なら 0xffff を入れる。*/
    178164        if (sum == 0)
    179165                sum = UINT_C(0xffff);
     
    182168#endif/* of #ifdef UDP_CFG_OUT_CHECKSUM */
    183169
    184         /* ネットワークバッファ長を調整する。*/
     170        /* ネットワークバッファ長を調整する。*/
    185171        output->len = (uint16_t)(IF_IP_UDP_HDR_SIZE + cep->snd_len);
    186172
    187         /* ネットワーク層 (IP) の出力関数を呼び出す。*/
     173        /* ネットワーク層 (IP) の出力関数を呼び出す。*/
    188174        if ((error = IP_OUTPUT(output, TMO_UDP_OUTPUT)) != E_OK)
    189175                goto err_ret;
     
    236222
    237223/*
    238  *  UDP 出力タスク
    239  *  ノンブロッキングコールを組み込んだとき使用する。
     224 *  UDP 出力タスク
     225 *  ノンブロッキングコールを組み込んだとき使用する。
    240226 */
    241227
     
    252238#if defined(SUPPORT_INET6) && !defined(SUPPORT_TCP)
    253239
    254         /* IPv6 のステートレス・アドレス自動設定を実行する。*/
     240        /* IPv6 のステートレス・アドレス自動設定を実行する。*/
    255241        in6_if_up(IF_GET_IFNET());
    256242
     
    259245        while (true) {
    260246
    261                 /* 出力がポストされるまでå¾
    262 ã¤ã€‚*/
     247                /* 出力がポストされるまで待つ。*/
    263248                syscall(wai_sem(SEM_UDP_POST_OUTPUT));
    264249
  • EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/udp_subr.c

    • Property svn:keywords deleted
    • Property svn:mime-type changed from text/x-csrc to text/x-csrc;charset=UTF-8
    r270 r321  
    55 *                   Tomakomai National College of Technology, JAPAN
    66 *
    7  *  上記著作権è€
    8 ã¯ï¼Œä»¥ä¸‹ã® (1)~(4) の条件か,Free Software Foundation
    9  *  によってå
    10 ¬è¡¨ã•ã‚Œã¦ã„ã‚‹ GNU General Public License の Version 2 に記
    11  *  述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
    12  *  を改変したものを含む.以下同じ)を使用・複製・改変・再é
    13 å¸ƒï¼ˆä»¥ä¸‹ï¼Œ
    14  *  利用と呼ぶ)することを無償で許諾する.
    15  *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
    16  *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
    17  *      スコード中に含まれていること.
    18  *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
    19  *      用できる形で再é
    20 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é
    21 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
    22  *      è€
    23 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—作権表示,この利用条件および下記
    24  *      の無保証規定を掲載すること.
    25  *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
    26  *      用できない形で再é
    27 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®æ¡ä»¶ã‚’満たすこと.
    28  *    (a) 再é
    29 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€
    30 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—
    31  *        作権表示,この利用条件および下記の無保証規定を掲載すること.
    32  *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
    33  *      害からも,上記著作権è€
    34 ãŠã‚ˆã³TOPPERSプロジェクトをå
    35 è²¬ã™ã‚‹ã“と.
     7 *  上記著作権者は,以下の (1)~(4) の条件か,Free Software Foundation
     8 *  によって公表されている GNU General Public License の Version 2 に記
     9 *  述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
     10 *  を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下,
     11 *  利用と呼ぶ)することを無償で許諾する.
     12 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     13 *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     14 *      スコード中に含まれていること.
     15 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     16 *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     17 *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     18 *      の無保証規定を掲載すること.
     19 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     20 *      用できない形で再配布する場合には,次の条件を満たすこと.
     21 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     22 *        作権表示,この利用条件および下記の無保証規定を掲載すること.
     23 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     24 *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
    3625 *
    37  *  本ソフトウェアは,無保証で提供されているものである.上記著作権è€
    38 ãŠ
    39  *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
    40  *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
    41  *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
     26 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     27 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
     28 *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
     29 *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
    4230 *
    4331 *  @(#) $Id$
     
    125113
    126114/*
    127  *  局所変数
     115 *  局所変数
    128116 */
    129117
    130 static uint16_t udp_port_auto = UDP_PORT_FIRST_AUTO;    /* 自動割り当て番号     */
     118static uint16_t udp_port_auto = UDP_PORT_FIRST_AUTO;    /* 自動割り当て番号     */
    131119
    132120/*
    133  *  udp_alloc_auto_port -- 自動割り当てポート番号を設定する。
     121 *  udp_alloc_auto_port -- 自動割り当てポート番号を設定する。
    134122 */
    135123
     
    167155
    168156/*
    169  *  udp_alloc_port -- 指定されたポート番号を設定する。
     157 *  udp_alloc_port -- 指定されたポート番号を設定する。
    170158 */
    171159
  • EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/udp_usrreq.c

    • Property svn:keywords deleted
    • Property svn:mime-type changed from text/x-csrc to text/x-csrc;charset=UTF-8
    r279 r321  
    55 *                   Tomakomai National College of Technology, JAPAN
    66 *
    7  *  上記著作権è€
    8 ã¯ï¼Œä»¥ä¸‹ã® (1)~(4) の条件か,Free Software Foundation
    9  *  によってå
    10 ¬è¡¨ã•ã‚Œã¦ã„ã‚‹ GNU General Public License の Version 2 に記
    11  *  述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
    12  *  を改変したものを含む.以下同じ)を使用・複製・改変・再é
    13 å¸ƒï¼ˆä»¥ä¸‹ï¼Œ
    14  *  利用と呼ぶ)することを無償で許諾する.
    15  *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
    16  *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
    17  *      スコード中に含まれていること.
    18  *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
    19  *      用できる形で再é
    20 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é
    21 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
    22  *      è€
    23 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—作権表示,この利用条件および下記
    24  *      の無保証規定を掲載すること.
    25  *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
    26  *      用できない形で再é
    27 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®æ¡ä»¶ã‚’満たすこと.
    28  *    (a) 再é
    29 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€
    30 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—
    31  *        作権表示,この利用条件および下記の無保証規定を掲載すること.
    32  *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
    33  *      害からも,上記著作権è€
    34 ãŠã‚ˆã³TOPPERSプロジェクトをå
    35 è²¬ã™ã‚‹ã“と.
     7 *  上記著作権者は,以下の (1)~(4) の条件か,Free Software Foundation
     8 *  によって公表されている GNU General Public License の Version 2 に記
     9 *  述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
     10 *  を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下,
     11 *  利用と呼ぶ)することを無償で許諾する.
     12 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     13 *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     14 *      スコード中に含まれていること.
     15 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     16 *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     17 *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     18 *      の無保証規定を掲載すること.
     19 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     20 *      用できない形で再配布する場合には,次の条件を満たすこと.
     21 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     22 *        作権表示,この利用条件および下記の無保証規定を掲載すること.
     23 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     24 *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
    3625 *
    37  *  本ソフトウェアは,無保証で提供されているものである.上記著作権è€
    38 ãŠ
    39  *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
    40  *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
    41  *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
     26 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     27 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
     28 *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
     29 *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
    4230 *
    4331 *  @(#) $Id$
     
    8169
    8270/*
    83  *  ノンブロッキングコールを組込まない場合にリンクされる関数の定義
     71 *  ノンブロッキングコールを組込まない場合にリンクされる関数の定義
    8472 */
    8573
     
    131119
    132120/*
    133  *  IPv4 と IPv6 の切り替えマクロ
     121 *  IPv4 と IPv6 の切り替えマクロ
    134122 */
    135123
     
    151139
    152140/*
    153  *  TINET をライブラリ化しない場合は、å
    154 ¨ã¦ã®æ©Ÿèƒ½ã‚’
    155  *  オブジェクトファイルに出力するため、マクロを有効にする。
     141 *  TINET をライブラリ化しない場合は、全ての機能を
     142 *  オブジェクトファイルに出力するため、マクロを有効にする。
    156143 */
    157144
     
    174161
    175162/*
    176  *  udp_send_data -- パケット送信の主要部
     163 *  udp_send_data -- パケット送信の主要部
    177164 */
    178165
     
    192179        NET_COUNT_UDP(net_count_udp.out_packets, 1);
    193180
    194         /* IP データグラム割り当ての時間を tmout から減ずる。*/
     181        /* IP データグラム割り当ての時間を tmout から減ずる。*/
    195182        if (!(tmout == TMO_POL || tmout == TMO_FEVR))
    196183                syscall(get_tim(&before));
    197184
    198         /* IP データグラムを割り当てる。*/
     185        /* IP データグラムを割り当てる。*/
    199186        if ((error = IN_GET_DATAGRAM(&output, (uint_t)(UDP_HDR_SIZE + len), 0,
    200187                                     &p_dstaddr->ipaddr,
     
    204191                goto err_ret;
    205192
    206         /* IP データグラム割り当ての時間を tmout から減ずる。*/
     193        /* IP データグラム割り当ての時間を tmout から減ずる。*/
    207194        if (!(tmout == TMO_POL || tmout == TMO_FEVR)) {
    208195                syscall(get_tim(&after));
     
    215202                }
    216203
    217         /* UDP ヘッダにæƒ
    218 å ±ã‚’設定する。*/
     204        /* UDP ヘッダに情報を設定する。*/
    219205        udph            = GET_UDP_HDR(output, IF_IP_UDP_HDR_OFFSET);
    220206        udph->sport     = htons(cep->myaddr.portno);
     
    223209        udph->sum       = 0;
    224210
    225         /* データをコピーする。*/
     211        /* データをコピーする。*/
    226212        memcpy((void*)GET_UDP_SDU(output, IF_IP_UDP_HDR_OFFSET), data, (size_t)len);
    227213
     
    230216        sum = IN_CKSUM(output, IPPROTO_UDP, IF_IP_UDP_HDR_OFFSET, (uint_t)(UDP_HDR_SIZE + len));
    231217
    232         /* 計算したチェックサムの値が 0 なら 0xffff をå
    233 ¥ã‚Œã‚‹ã€‚*/
     218        /* 計算したチェックサムの値が 0 なら 0xffff を入れる。*/
    234219        if (sum == 0)
    235220                sum = 0xffff;
     
    238223#endif  /* of #ifdef UDP_CFG_OUT_CHECKSUM */
    239224
    240         /* ネットワークバッファ長を調整する。*/
     225        /* ネットワークバッファ長を調整する。*/
    241226        output->len = (uint16_t)(IF_IP_UDP_HDR_SIZE + len);
    242227
    243         /* ネットワーク層 (IP) の出力関数を呼び出す。*/
     228        /* ネットワーク層 (IP) の出力関数を呼び出す。*/
    244229        if ((error = IP_OUTPUT(output, tmout)) == E_OK) {
    245230                NET_COUNT_MIB(udp_stats.udpOutDatagrams, 1);
     
    257242
    258243/*
    259  *  udp_cre_cep -- UDP 通信端点の生成【拡張機能】
     244 *  udp_cre_cep -- UDP 通信端点の生成【拡張機能】
    260245 */
    261246
     
    270255        ER              error;
    271256
    272         /* UDP 通信端点 ID をチェックする。*/
     257        /* UDP 通信端点 ID をチェックする。*/
    273258        if (!VALID_UDP_CEPID(cepid))
    274259                return E_ID;
    275260
    276         /* pk_ccep が NULL ならエラー */
     261        /* pk_ccep が NULL ならエラー */
    277262        if (pk_ccep == NULL)
    278263                return E_PAR;
    279264
    280         /* UDP 通信端点を得る。*/
     265        /* UDP 通信端点を得る。*/
    281266        cep = GET_UDP_CEP(cepid);
    282267
    283         /* UDP 通信端点をチェックする。*/
     268        /* UDP 通信端点をチェックする。*/
    284269        if (VALID_UDP_CEP(cep))
    285270                return E_OBJ;
    286271
    287         /* UDP 通信端点が、動的生成用でなければエラー */
     272        /* UDP 通信端点が、動的生成用でなければエラー */
    288273        if (!DYNAMIC_UDP_CEP(cep))
    289274                return E_ID;
    290275
    291         /* 通信端点をロックする。*/
     276        /* 通信端点をロックする。*/
    292277        syscall(wai_sem(cep->semid_lock));
    293278
    294279        /*
    295          * UDP 通信端点をチェックする。生成済みであればエラー
     280         * UDP 通信端点をチェックする。生成済みであればエラー
    296281         */
    297282        if (VALID_UDP_CEP(cep))
     
    300285
    301286                /*
    302                  *  自ポート番号が UDP_PORTANY なら、自動で割り当てる。
     287                 *  自ポート番号が UDP_PORTANY なら、自動で割り当てる。
    303288                 */
    304289                if (pk_ccep->myaddr.portno == UDP_PORTANY)
     
    309294                if (error == E_OK) {
    310295
    311                         /* UDP 通信端点生成æƒ
    312 å ±ã‚’コピーする。*/
    313                         cep->cepatr        = pk_ccep->cepatr;                   /* 通信端点属性           */
    314                         cep->myaddr.ipaddr = pk_ccep->myaddr.ipaddr;            /* 自分のアドレス        */
    315                         cep->callback      = (void*)pk_ccep->callback;          /* コールバック           */
    316 
    317                         /* UDP 通信端点を生成済みにする。*/
     296                        /* UDP 通信端点生成情報をコピーする。*/
     297                        cep->cepatr        = pk_ccep->cepatr;                   /* 通信端点属性               */
     298                        cep->myaddr.ipaddr = pk_ccep->myaddr.ipaddr;            /* 自分のアドレス      */
     299                        cep->callback      = (void*)pk_ccep->callback;          /* コールバック               */
     300
     301                        /* UDP 通信端点を生成済みにする。*/
    318302                        cep->flags |= UDP_CEP_FLG_VALID;
    319303                        }
    320304                }
    321305
    322         /* 通信端点のロックを解除する。*/
     306        /* 通信端点のロックを解除する。*/
    323307        syscall(sig_sem(cep->semid_lock));
    324308
     
    331315
    332316/*
    333  *  udp_del_cep -- UDP 通信端点の削除【拡張機能】
     317 *  udp_del_cep -- UDP 通信端点の削除【拡張機能】
    334318 */
    335319
     
    344328        ER              error;
    345329
    346         /* UDP 通信端点 ID をチェックする。*/
     330        /* UDP 通信端点 ID をチェックする。*/
    347331        if (!VALID_UDP_CEPID(cepid))
    348332                return E_ID;
    349333
    350         /* UDP 通信端点を得る。*/
     334        /* UDP 通信端点を得る。*/
    351335        cep = GET_UDP_CEP(cepid);
    352336
    353         /* UDP 通信端点をチェックする。*/
     337        /* UDP 通信端点をチェックする。*/
    354338        if (!VALID_UDP_CEP(cep))
    355339                return E_NOEXS;
    356340
    357         /* UDP 通信端点が、動的生成用でなければエラー */
     341        /* UDP 通信端点が、動的生成用でなければエラー */
    358342        if (!DYNAMIC_UDP_CEP(cep))
    359343                return E_ID;
    360344
    361         /* 通信端点をロックする。*/
     345        /* 通信端点をロックする。*/
    362346        syscall(wai_sem(cep->semid_lock));
    363347
    364348        /*
    365          * UDP 通信端点をチェックする。未生成の場合はエラー
    366          * ・未生成。
     349         * UDP 通信端点をチェックする。未生成の場合はエラー
     350         * ・未生成。
    367351         */
    368352        if (!VALID_UDP_CEP(cep))
     
    372356                udp_can_rcv(cep, E_DLT);
    373357
    374                 /* UDP 通信端点を未生成にする。*/
     358                /* UDP 通信端点を未生成にする。*/
    375359                cep->flags &= ~UDP_CEP_FLG_VALID;
    376360                error = E_OK;
    377361                }
    378362
    379         /* 通信端点のロックを解除する。*/
     363        /* 通信端点のロックを解除する。*/
    380364        syscall(sig_sem(cep->semid_lock));
    381365
     
    390374
    391375/*
    392  *  udp_can_cep -- ペンディングしている処理のキャンセル【標準機能】
     376 *  udp_can_cep -- ペンディングしている処理のキャンセル【標準機能】
    393377 */
    394378
     
    399383        ER              error = E_OK, snd_err, rcv_err;
    400384
    401         /* API 機能コードをチェックする。*/
     385        /* API 機能コードをチェックする。*/
    402386        if (!VALID_TFN_UDP_CAN(fncd))
    403387                return E_PAR;
    404388
    405         /* UDP 通信端点 ID をチェックする。*/
     389        /* UDP 通信端点 ID をチェックする。*/
    406390        if (!VALID_UDP_CEPID(cepid))
    407391                return E_ID;
    408392
    409         /* UDP 通信端点を得る。*/
     393        /* UDP 通信端点を得る。*/
    410394        cep = GET_UDP_CEP(cepid);
    411395
    412         /* UDP 通信端点をチェックする。*/
     396        /* UDP 通信端点をチェックする。*/
    413397        if (!VALID_UDP_CEP(cep))
    414398                return E_NOEXS;
    415399
    416         /* 通信端点をロックする。*/
     400        /* 通信端点をロックする。*/
    417401        syscall(wai_sem(cep->semid_lock));
    418402
    419         if (fncd == TFN_UDP_ALL) {      /* TFN_UDP_ALL の処理 */
     403        if (fncd == TFN_UDP_ALL) {      /* TFN_UDP_ALL の処理 */
    420404
    421405                snd_err = udp_can_snd(cep, E_RLWAI);
     
    423407
    424408                /*
    425                  *  snd_err と rcv_err のどちらも EV_NOPND
    426                  *  なら、ペンディングしていないのでエラー
     409                 *  snd_err と rcv_err のどちらも EV_NOPND
     410                 *  なら、ペンディングしていないのでエラー
    427411                 */
    428412                if (snd_err == EV_NOPND && rcv_err == EV_NOPND)
     
    440424                        }
    441425                }
    442         else if (fncd == TFN_UDP_SND_DAT) {     /* 送信処理のキャンセル */
     426        else if (fncd == TFN_UDP_SND_DAT) {     /* 送信処理のキャンセル */
    443427                if ((error = udp_can_snd(cep, E_RLWAI)) == EV_NOPND)
    444428                        error = E_OBJ;
    445429                }
    446         else if (fncd == TFN_UDP_RCV_DAT) {     /* 受信処理のキャンセル */
     430        else if (fncd == TFN_UDP_RCV_DAT) {     /* 受信処理のキャンセル */
    447431                if ((error = udp_can_rcv(cep, E_RLWAI)) == EV_NOPND)
    448432                        error = E_OBJ;
     
    451435                error = E_PAR;
    452436
    453         /* 通信端点をロックを解除する。*/
     437        /* 通信端点をロックを解除する。*/
    454438        syscall(sig_sem(cep->semid_lock));
    455439
     
    460444
    461445/*
    462  *  udp_set_opt -- UDP 通信端点オプションの設定【拡張機能】
     446 *  udp_set_opt -- UDP 通信端点オプションの設定【拡張機能】
    463447 *
    464  *  注意: 設定可能な UDP 通信端点オプションは無いため、E_PAR が返される。
     448 *  注意: 設定可能な UDP 通信端点オプションは無いため、E_PAR が返される。
    465449 */
    466450
     
    474458        T_UDP_CEP       *cep;
    475459
    476         /* UDP 通信端点 ID をチェックする。*/
     460        /* UDP 通信端点 ID をチェックする。*/
    477461        if (!VALID_UDP_CEPID(cepid))
    478462                return E_ID;
    479463
    480         /* UDP 通信端点を得る。*/
     464        /* UDP 通信端点を得る。*/
    481465        cep = GET_UDP_CEP(cepid);
    482466
    483         /* UDP 通信端点をチェックする。*/
     467        /* UDP 通信端点をチェックする。*/
    484468        if (!VALID_UDP_CEP(cep))
    485469                return E_NOEXS;
     
    493477
    494478/*
    495  *  udp_get_opt -- UDP 通信端点オプションの設定【拡張機能】
     479 *  udp_get_opt -- UDP 通信端点オプションの設定【拡張機能】
    496480 *
    497  *  注意: 設定可能な UDP 通信端点オプションは無いため、E_PAR が返される。
     481 *  注意: 設定可能な UDP 通信端点オプションは無いため、E_PAR が返される。
    498482 */
    499483
     
    507491        T_UDP_CEP       *cep;
    508492
    509         /* UDP 通信端点 ID をチェックする。*/
     493        /* UDP 通信端点 ID をチェックする。*/
    510494        if (!VALID_UDP_CEPID(cepid))
    511495                return E_ID;
    512496
    513         /* UDP 通信端点を得る。*/
     497        /* UDP 通信端点を得る。*/
    514498        cep = GET_UDP_CEP(cepid);
    515499
    516         /* UDP 通信端点をチェックする。*/
     500        /* UDP 通信端点をチェックする。*/
    517501        if (!VALID_UDP_CEP(cep))
    518502                return E_NOEXS;
     
    534518
    535519/*
    536  *  udp_can_snd -- ペンディングしている送信のキャンセル
     520 *  udp_can_snd -- ペンディングしている送信のキャンセル
    537521 */
    538522
     
    540524udp_can_snd (T_UDP_CEP *cep, ER error)
    541525{
    542         if (cep->snd_tskid != TA_NULL) {        /* 非ノンブロッキングコールでペンディング中 */
    543 
    544 #ifdef UDP_CFG_EXTENTIONS
    545 
    546                 /* å¾
    547 ã¡ä¸­ã«ç™ºç”Ÿã—たエラーæƒ
    548 å ±ã‚’設定する。*/
     526        if (cep->snd_tskid != TA_NULL) {        /* 非ノンブロッキングコールでペンディング中 */
     527
     528#ifdef UDP_CFG_EXTENTIONS
     529
     530                /* 待ち中に発生したエラー情報を設定する。*/
    549531                cep->error = error;
    550532
     
    554536                cep->snd_tskid = TA_NULL;
    555537                }
    556         else                                    /* どちらでもないならペンディングしていない */
     538        else                                    /* どちらでもないならペンディングしていない */
    557539                error = EV_NOPND;
    558540
     
    565547
    566548/*
    567  *  udp_can_rcv -- ペンディングしている受信のキャンセル
     549 *  udp_can_rcv -- ペンディングしている受信のキャンセル
    568550 */
    569551
     
    571553udp_can_rcv (T_UDP_CEP *cep, ER error)
    572554{
    573         if (cep->rcv_tskid != TA_NULL) {        /* 非ノンブロッキングコールでペンディング中 */
    574 
    575 #ifdef UDP_CFG_EXTENTIONS
    576 
    577                 /* å¾
    578 ã¡ä¸­ã«ç™ºç”Ÿã—たエラーæƒ
    579 å ±ã‚’設定する。*/
     555        if (cep->rcv_tskid != TA_NULL) {        /* 非ノンブロッキングコールでペンディング中 */
     556
     557#ifdef UDP_CFG_EXTENTIONS
     558
     559                /* 待ち中に発生したエラー情報を設定する。*/
    580560                cep->error = error;
    581561
     
    585565                cep->rcv_tskid = TA_NULL;
    586566                }
    587         else                                    /* どちらでもないならペンディングしていない */
     567        else                                    /* どちらでもないならペンディングしていない */
    588568                error = EV_NOPND;
    589569
     
    596576
    597577/*
    598  *  udp_snd_dat -- パケットの送信【標準機能】
     578 *  udp_snd_dat -- パケットの送信【標準機能】
    599579 */
    600580
     
    605585        ER              error;
    606586
    607         /* p_dstaddr または data が NULL か、tmout が TMO_NBLK ならエラー */
     587        /* p_dstaddr または data が NULL か、tmout が TMO_NBLK ならエラー */
    608588        if (p_dstaddr == NULL || data == NULL || tmout == TMO_NBLK)
    609589                return E_PAR;
    610590
    611         /* データ長をチェックする。*/
     591        /* データ長をチェックする。*/
    612592        if (len < 0 || len + IP_HDR_SIZE + UDP_HDR_SIZE > IF_MTU)
    613593                return E_PAR;
    614594
    615         /* UDP 通信端点 ID をチェックする。*/
     595        /* UDP 通信端点 ID をチェックする。*/
    616596        if (!VALID_UDP_CEPID(cepid))
    617597                return E_ID;
    618598
    619         /* UDP 通信端点を得る。*/
     599        /* UDP 通信端点を得る。*/
    620600        cep = GET_UDP_CEP(cepid);
    621601
    622         /* UDP 通信端点をチェックする。*/
     602        /* UDP 通信端点をチェックする。*/
    623603        if (!VALID_UDP_CEP(cep))
    624604                return E_NOEXS;
    625605
    626606        /*
    627          *  自ポート番号が UDP_PORTANY なら、自動で割り当てる。
     607         *  自ポート番号が UDP_PORTANY なら、自動で割り当てる。
    628608         */
    629609        if (cep->myaddr.portno == UDP_PORTANY) {
     
    632612                }
    633613       
    634         /* 通信端点をロックする。*/
     614        /* 通信端点をロックする。*/
    635615        syscall(wai_sem(cep->semid_lock));
    636616
    637617        if (cep->snd_tskid != TA_NULL) {
    638618
    639                 /* 非ノンブロッキングコールでペンディング中 */
     619                /* 非ノンブロッキングコールでペンディング中 */
    640620                error = E_QOVR;
    641621
    642                 /* 通信端点をロックを解除する。*/
     622                /* 通信端点をロックを解除する。*/
    643623                syscall(sig_sem(cep->semid_lock));
    644624                }
    645625        else {
    646                 /* 現在のタスク識別子を記録する。*/
     626                /* 現在のタスク識別子を記録する。*/
    647627                get_tid(&(cep->snd_tskid));
    648628
    649629#ifdef UDP_CFG_EXTENTIONS
    650630
    651                 /* å¾
    652 ã¡ä¸­ã«ç™ºç”Ÿã—たエラーæƒ
    653 å ±ã‚’リセットする。*/
     631                /* 待ち中に発生したエラー情報をリセットする。*/
    654632                cep->error = E_OK;
    655633
    656634#endif  /* of #ifdef UDP_CFG_EXTENTIONS */
    657635
    658                 /* 通信端点をロックを解除する。*/
     636                /* 通信端点をロックを解除する。*/
    659637                syscall(sig_sem(cep->semid_lock));
    660638
    661                 /* パケットを送信する。*/
     639                /* パケットを送信する。*/
    662640                error = udp_send_data(cep, p_dstaddr, data, len, tmout);
    663641
    664642#ifdef UDP_CFG_EXTENTIONS
    665643
    666                 /* å¾
    667 ã¡ä¸­ã«ç™ºç”Ÿã—たエラーæƒ
    668 å ±ã‚’返す。*/
     644                /* 待ち中に発生したエラー情報を返す。*/
    669645                if (error == E_RLWAI)
    670646                        error = cep->error;
     
    681657
    682658/*
    683  *  udp_rcv_dat -- パケットの受信【標準機能】
     659 *  udp_rcv_dat -- パケットの受信【標準機能】
    684660 */
    685661
     
    693669        uint_t          ulen, uhoff;
    694670
    695         /* p_dstaddr または data が NULL 、len < 0 か、tmout が TMO_NBLK ならエラー */
     671        /* p_dstaddr または data が NULL 、len < 0 か、tmout が TMO_NBLK ならエラー */
    696672        if (p_dstaddr == NULL || data == NULL || len < 0 || tmout == TMO_NBLK)
    697673                return E_PAR;
    698674
    699         /* UDP 通信端点 ID をチェックする。*/
     675        /* UDP 通信端点 ID をチェックする。*/
    700676        if (!VALID_UDP_CEPID(cepid))
    701677                return E_ID;
    702678
    703         /* UDP 通信端点を得る。*/
     679        /* UDP 通信端点を得る。*/
    704680        cep = GET_UDP_CEP(cepid);
    705681
    706         /* UDP 通信端点をチェックする。*/
     682        /* UDP 通信端点をチェックする。*/
    707683        if (!VALID_UDP_CEP(cep))
    708684                return E_NOEXS;
    709685
    710         /* 通信端点をロックする。*/
     686        /* 通信端点をロックする。*/
    711687        syscall(wai_sem(cep->semid_lock));
    712688
    713689        if (cep->rcv_tskid != TA_NULL) {
    714690
    715                 /* 非ノンブロッキングコールでペンディング中 */
     691                /* 非ノンブロッキングコールでペンディング中 */
    716692                error = E_QOVR;
    717693
    718                 /* 通信端点をロックを解除する。*/
     694                /* 通信端点をロックを解除する。*/
    719695                syscall(sig_sem(cep->semid_lock));
    720696                }
    721697        else {
    722698
    723                 /* 現在のタスク識別子を記録する。*/
     699                /* 現在のタスク識別子を記録する。*/
    724700                get_tid(&(cep->rcv_tskid));
    725701
    726702#ifdef UDP_CFG_EXTENTIONS
    727703
    728                 /* å¾
    729 ã¡ä¸­ã«ç™ºç”Ÿã—たエラーæƒ
    730 å ±ã‚’リセットする。*/
     704                /* 待ち中に発生したエラー情報をリセットする。*/
    731705                cep->error = E_OK;
    732706
    733707#endif  /* of #ifdef UDP_CFG_EXTENTIONS */
    734708
    735                 /* 通信端点をロックを解除する。*/
     709                /* 通信端点をロックを解除する。*/
    736710                syscall(sig_sem(cep->semid_lock));
    737711
    738                 /* å
    739 ¥åŠ›ãŒã‚るまでå¾
    740 ã¤ã€‚*/
     712                /* 入力があるまで待つ。*/
    741713                if (cep->cb_netbuf != NULL) {
    742714
    743715                        /*
    744                          *  ここにくる場合は、コールバック関数の中から
    745                          *  udp_rcv_dat を呼び出していることになり、
    746                          *  すでにå
    747 ¥åŠ›æ¸ˆã¿ã§ã‚る。
     716                         *  ここにくる場合は、コールバック関数の中から
     717                         *  udp_rcv_dat を呼び出していることになり、
     718                         *  すでに入力済みである。
    748719                         */
    749720                        input = cep->cb_netbuf;
     
    754725#ifdef UDP_CFG_EXTENTIONS
    755726
    756                         /* å¾
    757 ã¡ä¸­ã«ç™ºç”Ÿã—たエラーæƒ
    758 å ±ã‚’返す。*/
     727                        /* 待ち中に発生したエラー情報を返す。*/
    759728                        if (error == E_RLWAI)
    760729                                error = cep->error;
     
    766735                        }
    767736
    768                 /* p_dstaddr を設定する。*/
     737                /* p_dstaddr を設定する。*/
    769738                uhoff = (uint_t)GET_UDP_HDR_OFFSET(input);
    770739                udph = GET_UDP_HDR(input, uhoff);
     
    772741                IN_COPY_TO_HOST(&p_dstaddr->ipaddr, &GET_IP_HDR(input)->src);
    773742
    774                 /* データをバッファに移す。*/
     743                /* データをバッファに移す。*/
    775744                ulen = ntohs(udph->ulen);
    776745                if (ulen - UDP_HDR_SIZE > len)
  • EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/udp_usrreq_nblk.c

    • Property svn:keywords deleted
    • Property svn:mime-type changed from text/x-csrc to text/x-csrc;charset=UTF-8
    r270 r321  
    55 *                   Tomakomai National College of Technology, JAPAN
    66 *
    7  *  上記著作権è€
    8 ã¯ï¼Œä»¥ä¸‹ã® (1)~(4) の条件か,Free Software Foundation
    9  *  によってå
    10 ¬è¡¨ã•ã‚Œã¦ã„ã‚‹ GNU General Public License の Version 2 に記
    11  *  述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
    12  *  を改変したものを含む.以下同じ)を使用・複製・改変・再é
    13 å¸ƒï¼ˆä»¥ä¸‹ï¼Œ
    14  *  利用と呼ぶ)することを無償で許諾する.
    15  *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
    16  *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
    17  *      スコード中に含まれていること.
    18  *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
    19  *      用できる形で再é
    20 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é
    21 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
    22  *      è€
    23 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—作権表示,この利用条件および下記
    24  *      の無保証規定を掲載すること.
    25  *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
    26  *      用できない形で再é
    27 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®æ¡ä»¶ã‚’満たすこと.
    28  *    (a) 再é
    29 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€
    30 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—
    31  *        作権表示,この利用条件および下記の無保証規定を掲載すること.
    32  *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
    33  *      害からも,上記著作権è€
    34 ãŠã‚ˆã³TOPPERSプロジェクトをå
    35 è²¬ã™ã‚‹ã“と.
     7 *  上記著作権者は,以下の (1)~(4) の条件か,Free Software Foundation
     8 *  によって公表されている GNU General Public License の Version 2 に記
     9 *  述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
     10 *  を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下,
     11 *  利用と呼ぶ)することを無償で許諾する.
     12 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     13 *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     14 *      スコード中に含まれていること.
     15 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     16 *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     17 *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     18 *      の無保証規定を掲載すること.
     19 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     20 *      用できない形で再配布する場合には,次の条件を満たすこと.
     21 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     22 *        作権表示,この利用条件および下記の無保証規定を掲載すること.
     23 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     24 *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
    3625 *
    37  *  本ソフトウェアは,無保証で提供されているものである.上記著作権è€
    38 ãŠ
    39  *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
    40  *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
    41  *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
     26 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     27 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
     28 *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
     29 *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
    4230 *
    4331 *  @(#) $Id$
     
    128116
    129117/*
    130  *  IPv4 と IPv6 の切り替えマクロ
     118 *  IPv4 と IPv6 の切り替えマクロ
    131119 */
    132120
     
    146134
    147135/*
    148  *  TINET をライブラリ化しない場合は、å
    149 ¨ã¦ã®æ©Ÿèƒ½ã‚’
    150  *  オブジェクトファイルに出力するため、マクロを有効にする。
     136 *  TINET をライブラリ化しない場合は、全ての機能を
     137 *  オブジェクトファイルに出力するため、マクロを有効にする。
    151138 */
    152139
     
    165152
    166153/*
    167  *  udp_can_snd -- ペンディングしている送信のキャンセル
     154 *  udp_can_snd -- ペンディングしている送信のキャンセル
    168155 */
    169156
     
    171158udp_can_snd (T_UDP_CEP *cep, ER error)
    172159{
    173         if (cep->snd_p_dstaddr != NULL) {       /* ノンブロッキングコールでペンディング中 */
     160        if (cep->snd_p_dstaddr != NULL) {       /* ノンブロッキングコールでペンディング中 */
    174161                if (IS_PTR_DEFINED(cep->callback))
    175162
     
    188175                cep->snd_p_dstaddr = NULL;
    189176                }
    190         else if (cep->snd_tskid != TA_NULL) {   /* 非ノンブロッキングコールでペンディング中 */
     177        else if (cep->snd_tskid != TA_NULL) {   /* 非ノンブロッキングコールでペンディング中 */
    191178
    192179#ifdef UDP_CFG_EXTENTIONS
    193180
    194                 /* å¾
    195 ã¡ä¸­ã«ç™ºç”Ÿã—たエラーæƒ
    196 å ±ã‚’設定する。*/
     181                /* 待ち中に発生したエラー情報を設定する。*/
    197182                cep->error = error;
    198183
     
    202187                cep->snd_tskid = TA_NULL;
    203188                }
    204         else                                    /* どちらでもないならペンディングしていない */
     189        else                                    /* どちらでもないならペンディングしていない */
    205190                error = EV_NOPND;
    206191
     
    213198
    214199/*
    215  *  udp_can_rcv -- ペンディングしている受信のキャンセル
     200 *  udp_can_rcv -- ペンディングしている受信のキャンセル
    216201 */
    217202
     
    219204udp_can_rcv (T_UDP_CEP *cep, ER error)
    220205{
    221         if (cep->rcv_p_dstaddr != NULL) {       /* ノンブロッキングコールでペンディング中 */
     206        if (cep->rcv_p_dstaddr != NULL) {       /* ノンブロッキングコールでペンディング中 */
    222207                if (IS_PTR_DEFINED(cep->callback))
    223208
     
    236221                cep->rcv_p_dstaddr = NULL;
    237222                }
    238         else if (cep->rcv_tskid != TA_NULL) {   /* 非ノンブロッキングコールでペンディング中 */
     223        else if (cep->rcv_tskid != TA_NULL) {   /* 非ノンブロッキングコールでペンディング中 */
    239224
    240225#ifdef UDP_CFG_EXTENTIONS
    241226
    242                 /* å¾
    243 ã¡ä¸­ã«ç™ºç”Ÿã—たエラーæƒ
    244 å ±ã‚’設定する。*/
     227                /* 待ち中に発生したエラー情報を設定する。*/
    245228                cep->error = error;
    246229
     
    250233                cep->rcv_tskid = TA_NULL;
    251234                }
    252         else                                    /* どちらでもないならペンディングしていない */
     235        else                                    /* どちらでもないならペンディングしていない */
    253236                error = EV_NOPND;
    254237
     
    261244
    262245/*
    263  *  udp_snd_dat -- パケットの送信【標準機能】
     246 *  udp_snd_dat -- パケットの送信【標準機能】
    264247 */
    265248
     
    270253        ER              error;
    271254
    272         /* p_dstaddr または data が NULL ならエラー */
     255        /* p_dstaddr または data が NULL ならエラー */
    273256        if (p_dstaddr == NULL || data == NULL)
    274257                return E_PAR;
    275258
    276         /* データ長をチェックする。*/
     259        /* データ長をチェックする。*/
    277260        if (len < 0 || len + IP_HDR_SIZE + UDP_HDR_SIZE > IF_MTU)
    278261                return E_PAR;
    279262
    280         /* UDP 通信端点 ID をチェックする。*/
     263        /* UDP 通信端点 ID をチェックする。*/
    281264        if (!VALID_UDP_CEPID(cepid))
    282265                return E_ID;
    283266
    284         /* UDP 通信端点を得る。*/
     267        /* UDP 通信端点を得る。*/
    285268        cep = GET_UDP_CEP(cepid);
    286269
    287         /* UDP 通信端点をチェックする。*/
     270        /* UDP 通信端点をチェックする。*/
    288271        if (!VALID_UDP_CEP(cep))
    289272                return E_NOEXS;
    290273
    291274        /*
    292          *  自ポート番号が UDP_PORTANY なら、自動で割り当てる。
     275         *  自ポート番号が UDP_PORTANY なら、自動で割り当てる。
    293276         */
    294277        if (cep->myaddr.portno == UDP_PORTANY) {
     
    298281
    299282        /*
    300          * タイムアウトをチェックする。
     283         * タイムアウトをチェックする。
    301284         */
    302285
    303         if (tmout == TMO_NBLK) {        /* ノンブロッキングコール */
    304 
    305                 /* 通信端点をロックする。*/
     286        if (tmout == TMO_NBLK) {        /* ノンブロッキングコール */
     287
     288                /* 通信端点をロックする。*/
    306289                syscall(wai_sem(cep->semid_lock));
    307290
    308291                if (cep->snd_p_dstaddr != NULL) {
    309292
    310                         /* ノンブロッキングコールでペンディング中 */
     293                        /* ノンブロッキングコールでペンディング中 */
    311294                        error = E_QOVR;
    312295
    313                         /* 通信端点をロックを解除する。*/
     296                        /* 通信端点をロックを解除する。*/
    314297                        syscall(sig_sem(cep->semid_lock));
    315298                        }
    316299                else if (cep->snd_tskid != TA_NULL) {
    317300
    318                         /* 非ノンブロッキングコールでペンディング中 */
    319                         error = E_OBJ;
    320 
    321                         /* 通信端点をロックを解除する。*/
     301                        /* 非ノンブロッキングコールでペンディング中 */
     302                        error = E_OBJ;
     303
     304                        /* 通信端点をロックを解除する。*/
    322305                        syscall(sig_sem(cep->semid_lock));
    323306                        }
     
    328311                        cep->snd_len    = len;
    329312
    330                         /* 通信端点をロックを解除する。*/
     313                        /* 通信端点をロックを解除する。*/
    331314                        syscall(sig_sem(cep->semid_lock));
    332315
     
    336319                        }
    337320                }
    338         else {                          /* 非ノンブロッキングコール */
     321        else {                          /* 非ノンブロッキングコール */
    339322       
    340                 /* 通信端点をロックする。*/
     323                /* 通信端点をロックする。*/
    341324                syscall(wai_sem(cep->semid_lock));
    342325
    343326                if (cep->snd_p_dstaddr != NULL) {
    344327
    345                         /* ノンブロッキングコールでペンディング中 */
    346                         error = E_OBJ;
    347 
    348                         /* 通信端点をロックを解除する。*/
     328                        /* ノンブロッキングコールでペンディング中 */
     329                        error = E_OBJ;
     330
     331                        /* 通信端点をロックを解除する。*/
    349332                        syscall(sig_sem(cep->semid_lock));
    350333                        }
    351334                else if (cep->snd_tskid != TA_NULL) {
    352335
    353                         /* 非ノンブロッキングコールでペンディング中 */
     336                        /* 非ノンブロッキングコールでペンディング中 */
    354337                        error = E_QOVR;
    355338
    356                         /* 通信端点をロックを解除する。*/
     339                        /* 通信端点をロックを解除する。*/
    357340                        syscall(sig_sem(cep->semid_lock));
    358341                        }
    359342                else {
    360343
    361                         /* 現在のタスク識別子を記録する。*/
     344                        /* 現在のタスク識別子を記録する。*/
    362345                        get_tid(&(cep->snd_tskid));
    363346
    364                         /* 通信端点をロックを解除する。*/
    365                         syscall(sig_sem(cep->semid_lock));
    366 
    367                         /* パケットを送信する。*/
     347                        /* 通信端点をロックを解除する。*/
     348                        syscall(sig_sem(cep->semid_lock));
     349
     350                        /* パケットを送信する。*/
    368351                        error = udp_send_data(cep, p_dstaddr, data, len, tmout);
    369352                        }
     
    378361
    379362/*
    380  *  udp_rcv_dat -- パケットの受信【標準機能】
     363 *  udp_rcv_dat -- パケットの受信【標準機能】
    381364 */
    382365
     
    390373        uint_t          ulen, uhoff;
    391374
    392         /* p_dstaddr または data が NULL か、len < 0 ならエラー */
     375        /* p_dstaddr または data が NULL か、len < 0 ならエラー */
    393376        if (p_dstaddr == NULL || data == NULL || len < 0)
    394377                return E_PAR;
    395378
    396         /* UDP 通信端点 ID をチェックする。*/
     379        /* UDP 通信端点 ID をチェックする。*/
    397380        if (!VALID_UDP_CEPID(cepid))
    398381                return E_ID;
    399382
    400         /* UDP 通信端点を得る。*/
     383        /* UDP 通信端点を得る。*/
    401384        cep = GET_UDP_CEP(cepid);
    402385
    403         /* UDP 通信端点をチェックする。*/
     386        /* UDP 通信端点をチェックする。*/
    404387        if (!VALID_UDP_CEP(cep))
    405388                return E_NOEXS;
    406389
    407390        /*
    408          * タイムアウトをチェックする。
     391         * タイムアウトをチェックする。
    409392         */
    410393
    411         if (tmout == TMO_NBLK) {        /* ノンブロッキングコール */
    412 
    413                 /* 通信端点をロックする。*/
     394        if (tmout == TMO_NBLK) {        /* ノンブロッキングコール */
     395
     396                /* 通信端点をロックする。*/
    414397                syscall(wai_sem(cep->semid_lock));
    415398
    416399                if (cep->rcv_p_dstaddr != NULL)
    417400
    418                         /* ノンブロッキングコールでペンディング中 */
     401                        /* ノンブロッキングコールでペンディング中 */
    419402                        error = E_QOVR;
    420403
    421404                else if (cep->rcv_tskid != TA_NULL)
    422405
    423                         /* 非ノンブロッキングコールでペンディング中 */
     406                        /* 非ノンブロッキングコールでペンディング中 */
    424407                        error = E_OBJ;
    425408                else {
     
    430413                        }
    431414
    432                 /* 通信端点をロックを解除する。*/
     415                /* 通信端点をロックを解除する。*/
    433416                syscall(sig_sem(cep->semid_lock));
    434417                return error;
    435418                }
    436         else {                          /* 非ノンブロッキングコール */
    437 
    438                 /* 通信端点をロックする。*/
     419        else {                          /* 非ノンブロッキングコール */
     420
     421                /* 通信端点をロックする。*/
    439422                syscall(wai_sem(cep->semid_lock));
    440423
    441424                if (cep->rcv_p_dstaddr != NULL) {
    442425
    443                         /* ノンブロッキングコールでペンディング中 */
    444                         error = E_OBJ;
    445 
    446                         /* 通信端点をロックを解除する。*/
     426                        /* ノンブロッキングコールでペンディング中 */
     427                        error = E_OBJ;
     428
     429                        /* 通信端点をロックを解除する。*/
    447430                        syscall(sig_sem(cep->semid_lock));
    448431                        }
    449432                else if (cep->rcv_tskid != TA_NULL) {
    450433
    451                         /* 非ノンブロッキングコールでペンディング中 */
     434                        /* 非ノンブロッキングコールでペンディング中 */
    452435                        error = E_QOVR;
    453436
    454                         /* 通信端点をロックを解除する。*/
     437                        /* 通信端点をロックを解除する。*/
    455438                        syscall(sig_sem(cep->semid_lock));
    456439                        }
    457440                else {
    458441
    459                         /* 現在のタスク識別子を記録する。*/
     442                        /* 現在のタスク識別子を記録する。*/
    460443                        get_tid(&(cep->rcv_tskid));
    461444
    462                         /* 通信端点をロックを解除する。*/
    463                         syscall(sig_sem(cep->semid_lock));
    464 
    465                         /* å
    466 ¥åŠ›ãŒã‚るまでå¾
    467 ã¤ã€‚*/
     445                        /* 通信端点をロックを解除する。*/
     446                        syscall(sig_sem(cep->semid_lock));
     447
     448                        /* 入力があるまで待つ。*/
    468449                        if (cep->cb_netbuf != NULL) {
    469450
    470451                                /*
    471                                  *  ここにくる場合は、コールバック関数の中から
    472                                  *  udp_rcv_dat を呼び出していることになり、
    473                                  *  すでにå
    474 ¥åŠ›æ¸ˆã¿ã§ã‚る。
     452                                 *  ここにくる場合は、コールバック関数の中から
     453                                 *  udp_rcv_dat を呼び出していることになり、
     454                                 *  すでに入力済みである。
    475455                                 */
    476456                                input = cep->cb_netbuf;
     
    482462                                }
    483463
    484                         /* p_dstaddr を設定する。*/
     464                        /* p_dstaddr を設定する。*/
    485465                        uhoff = (uint_t)GET_UDP_HDR_OFFSET(input);
    486466                        udph = GET_UDP_HDR(input, uhoff);
     
    488468                        IN_COPY_TO_HOST(&p_dstaddr->ipaddr, &GET_IP_HDR(input)->src);
    489469
    490                         /* データをバッファに移す。*/
     470                        /* データをバッファに移す。*/
    491471                        ulen = ntohs(udph->ulen);
    492472                        if (ulen - UDP_HDR_SIZE > len)
  • EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/udp_var.h

    • Property svn:keywords deleted
    • Property svn:mime-type changed from text/x-chdr to text/x-chdr;charset=UTF-8
    r270 r321  
    55 *                   Tomakomai National College of Technology, JAPAN
    66 *
    7  *  上記著作権è€
    8 ã¯ï¼Œä»¥ä¸‹ã® (1)~(4) の条件か,Free Software Foundation
    9  *  によってå
    10 ¬è¡¨ã•ã‚Œã¦ã„ã‚‹ GNU General Public License の Version 2 に記
    11  *  述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
    12  *  を改変したものを含む.以下同じ)を使用・複製・改変・再é
    13 å¸ƒï¼ˆä»¥ä¸‹ï¼Œ
    14  *  利用と呼ぶ)することを無償で許諾する.
    15  *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
    16  *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
    17  *      スコード中に含まれていること.
    18  *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
    19  *      用できる形で再é
    20 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é
    21 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
    22  *      è€
    23 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—作権表示,この利用条件および下記
    24  *      の無保証規定を掲載すること.
    25  *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
    26  *      用できない形で再é
    27 å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®æ¡ä»¶ã‚’満たすこと.
    28  *    (a) 再é
    29 å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€
    30 ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ãªã©ï¼‰ã«ï¼Œä¸Šè¨˜ã®è‘—
    31  *        作権表示,この利用条件および下記の無保証規定を掲載すること.
    32  *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
    33  *      害からも,上記著作権è€
    34 ãŠã‚ˆã³TOPPERSプロジェクトをå
    35 è²¬ã™ã‚‹ã“と.
    36  *
    37  *  本ソフトウェアは,無保証で提供されているものである.上記著作権è€
    38 ãŠ
    39  *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
    40  *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
    41  *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
     7 *  上記著作権者は,以下の (1)~(4) の条件か,Free Software Foundation
     8 *  によって公表されている GNU General Public License の Version 2 に記
     9 *  述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
     10 *  を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下,
     11 *  利用と呼ぶ)することを無償で許諾する.
     12 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     13 *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     14 *      スコード中に含まれていること.
     15 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     16 *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     17 *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     18 *      の無保証規定を掲載すること.
     19 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     20 *      用できない形で再配布する場合には,次の条件を満たすこと.
     21 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     22 *        作権表示,この利用条件および下記の無保証規定を掲載すること.
     23 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     24 *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
     25 *
     26 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     27 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
     28 *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
     29 *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
    4230 *
    4331 *  @(#) $Id$
     
    8472
    8573/*
    86  *  UDP ヘッダ・ペイロードアクセスマクロ
     74 *  UDP ヘッダ・ペイロードアクセスマクロ
    8775 */
    8876
     
    10088
    10189/*
    102  *  TINET 1.1 との互換性のための定義
     90 *  TINET 1.1 との互換性のための定義
    10391 */
    10492
     
    113101
    114102/*
    115  *  コールバック関数の定義
     103 *  コールバック関数の定義
    116104 */
    117105
     
    119107
    120108/*
    121  *  UDP 通信端点
    122  */
    123 
    124 
    125 /*
    126  *  IPv4 UDP 通信端点
     109 *  UDP 通信端点
     110 */
     111
     112
     113/*
     114 *  IPv4 UDP 通信端点
    127115 */
    128116typedef struct t_udp4_cep {
    129117
    130118        /*
    131          * ITRON TCP/IP API、TCP 通信端点と同じメンバ
    132          */
    133         ATR             cepatr;         /* UDP 通信端点属性               */
    134         T_IPV4EP        myaddr;         /* 自分のアドレス                */
    135         t_udp_callback  callback;       /* コールバック関数             */
    136 
    137         /*
    138          * TINET 独自のメンバ
    139          */
    140         uint16_t        flags;          /* 通信端点フラグ                */
    141         ID              semid_lock;     /* 通信端点ロック                */
    142         ID              snd_tskid;      /* 送信タスク識別子             */
    143         ID              rcv_tskid;      /* 受信タスク識別子             */
    144         ID              rcvqid;         /* 非コールバック用受信キュー識別子*/
    145         T_NET_BUF       *cb_netbuf;     /* コールバック用受信ネットワークバッファ*/
     119         * ITRON TCP/IP API、TCP 通信端点と同じメンバ
     120         */
     121        ATR             cepatr;         /* UDP 通信端点属性           */
     122        T_IPV4EP        myaddr;         /* 自分のアドレス              */
     123        t_udp_callback  callback;       /* コールバック関数             */
     124
     125        /*
     126         * TINET 独自のメンバ
     127         */
     128        uint16_t        flags;          /* 通信端点フラグ              */
     129        ID              semid_lock;     /* 通信端点ロック              */
     130        ID              snd_tskid;      /* 送信タスク識別子             */
     131        ID              rcv_tskid;      /* 受信タスク識別子             */
     132        ID              rcvqid;         /* 非コールバック用受信キュー識別子*/
     133        T_NET_BUF       *cb_netbuf;     /* コールバック用受信ネットワークバッファ*/
    146134
    147135#ifdef UDP_CFG_NON_BLOCKING
    148136
    149         T_IPV4EP        *snd_p_dstaddr; /* 送信相手のアドレスへのポインタ*/
    150         T_IPV4EP        *rcv_p_dstaddr; /* 受信相手のアドレスへのポインタ*/
    151         void            *snd_data;      /* 送信データ領域のå
    152 ˆé ­ã‚¢ãƒ‰ãƒ¬ã‚¹        */
    153         int_t           snd_len;        /* 送信データ領域の長さ               */
    154         void            *rcv_data;      /* 受信データ領域のå
    155 ˆé ­ã‚¢ãƒ‰ãƒ¬ã‚¹        */
    156         int_t           rcv_len;        /* 受信データ領域の長さ               */
     137        T_IPV4EP        *snd_p_dstaddr; /* 送信相手のアドレスへのポインタ*/
     138        T_IPV4EP        *rcv_p_dstaddr; /* 受信相手のアドレスへのポインタ*/
     139        void            *snd_data;      /* 送信データ領域の先頭アドレス       */
     140        int_t           snd_len;        /* 送信データ領域の長さ           */
     141        void            *rcv_data;      /* 受信データ領域の先頭アドレス       */
     142        int_t           rcv_len;        /* 受信データ領域の長さ           */
    157143
    158144#endif  /* of #ifdef UDP_CFG_NON_BLOCKING */
    159145
    160146#ifdef UDP_CFG_EXTENTIONS
    161         ER              error;          /* å¾
    162 ã¡ä¸­ã«ç™ºç”Ÿã—たエラー  */
     147        ER              error;          /* 待ち中に発生したエラー  */
    163148#endif
    164149
     
    170155
    171156/*
    172  *  IPv6 UDP 通信端点
     157 *  IPv6 UDP 通信端点
    173158 */
    174159
     
    176161
    177162        /*
    178          * ITRON TCP/IP API、TCP 通信端点と同じメンバ
    179          */
    180         ATR             cepatr;         /* UDP 通信端点属性               */
    181         T_IPV6EP        myaddr;         /* 自分のアドレス                */
    182         t_udp_callback  callback;       /* コールバック関数             */
    183 
    184         /*
    185          * TINET 独自のメンバ
    186          */
    187         uint16_t        flags;          /* 通信端点フラグ                */
    188         ID              semid_lock;     /* 通信端点ロック                */
    189         ID              snd_tskid;      /* 送信タスク識別子             */
    190         ID              rcv_tskid;      /* 受信タスク識別子             */
    191         ID              rcvqid;         /* 非コールバック用受信キュー識別子*/
    192         T_NET_BUF       *cb_netbuf;     /* コールバック用受信ネットワークバッファ*/
     163         * ITRON TCP/IP API、TCP 通信端点と同じメンバ
     164         */
     165        ATR             cepatr;         /* UDP 通信端点属性           */
     166        T_IPV6EP        myaddr;         /* 自分のアドレス              */
     167        t_udp_callback  callback;       /* コールバック関数             */
     168
     169        /*
     170         * TINET 独自のメンバ
     171         */
     172        uint16_t        flags;          /* 通信端点フラグ              */
     173        ID              semid_lock;     /* 通信端点ロック              */
     174        ID              snd_tskid;      /* 送信タスク識別子             */
     175        ID              rcv_tskid;      /* 受信タスク識別子             */
     176        ID              rcvqid;         /* 非コールバック用受信キュー識別子*/
     177        T_NET_BUF       *cb_netbuf;     /* コールバック用受信ネットワークバッファ*/
    193178
    194179#ifdef UDP_CFG_NON_BLOCKING
    195180
    196         T_IPV6EP        *snd_p_dstaddr; /* 送信相手のアドレスへのポインタ*/
    197         T_IPV6EP        *rcv_p_dstaddr; /* 受信相手のアドレスへのポインタ*/
    198         void            *snd_data;      /* 送信データ領域のå
    199 ˆé ­ã‚¢ãƒ‰ãƒ¬ã‚¹        */
    200         int_t           snd_len;        /* 送信データ領域の長さ               */
    201         void            *rcv_data;      /* 受信データ領域のå
    202 ˆé ­ã‚¢ãƒ‰ãƒ¬ã‚¹        */
    203         int_t           rcv_len;        /* 受信データ領域の長さ               */
     181        T_IPV6EP        *snd_p_dstaddr; /* 送信相手のアドレスへのポインタ*/
     182        T_IPV6EP        *rcv_p_dstaddr; /* 受信相手のアドレスへのポインタ*/
     183        void            *snd_data;      /* 送信データ領域の先頭アドレス       */
     184        int_t           snd_len;        /* 送信データ領域の長さ           */
     185        void            *rcv_data;      /* 受信データ領域の先頭アドレス       */
     186        int_t           rcv_len;        /* 受信データ領域の長さ           */
    204187
    205188#endif  /* of #ifdef UDP_CFG_NON_BLOCKING */
    206189
    207190#ifdef UDP_CFG_EXTENTIONS
    208         ER              error;          /* å¾
    209 ã¡ä¸­ã«ç™ºç”Ÿã—たエラー  */
     191        ER              error;          /* 待ち中に発生したエラー  */
    210192#endif
    211193
     
    217199
    218200/*
    219  *  UDP 通信端点フラグ
    220  */
    221 
    222 #define UDP_CEP_FLG_POST_OUTPUT UINT_C(0x0200)  /* 送信を開始する。             */
    223 #define UDP_CEP_FLG_DYNAMIC     UINT_C(0x0400)  /* 動的生成・削除可能通信端点。   */
    224 #define UDP_CEP_FLG_VALID       UINT_C(0x0800)  /* 生成済みで有効な通信端点。      */
    225 
    226 /*
    227  *  オブジェクト ID の最小値の定義
    228  */
    229 
    230 #define TMIN_UDP_CEPID          1       /* UDP 通信端点 ID の最小値 */
     201 *  UDP 通信端点フラグ
     202 */
     203
     204#define UDP_CEP_FLG_POST_OUTPUT UINT_C(0x0200)  /* 送信を開始する。             */
     205#define UDP_CEP_FLG_DYNAMIC     UINT_C(0x0400)  /* 動的生成・削除可能通信端点。       */
     206#define UDP_CEP_FLG_VALID       UINT_C(0x0800)  /* 生成済みで有効な通信端点。        */
     207
     208/*
     209 *  オブジェクト ID の最小値の定義
     210 */
     211
     212#define TMIN_UDP_CEPID          1       /* UDP 通信端点 ID の最小値 */
    231213
    232214#ifdef SUPPORT_MIB
    233215
    234216/*
    235  *  SNMP の 管理æƒ
    236 å ±ãƒ™ãƒ¼ã‚¹ (MIB)
     217 *  SNMP の 管理情報ベース (MIB)
    237218 */
    238219
     
    247228
    248229/*
    249  *  関数シミュレーションマクロ
     230 *  関数シミュレーションマクロ
    250231 */
    251232
     
    265246
    266247/*
    267  *  å
    268 ¨åŸŸå¤‰æ•°
     248 *  全域変数
    269249 */
    270250
     
    279259
    280260/*
    281  *  TINET 1.3 との互換性のための定義
     261 *  TINET 1.3 との互換性のための定義
    282262 */
    283263
     
    286266
    287267/*
    288  *  関数
     268 *  関数
    289269 */
    290270
     
    297277extern ER udp_alloc_port (T_UDP_CEP *cep, uint16_t portno);
    298278
    299 /* ノンブロッキングコールを行う場合に組み込むタスク */
     279/* ノンブロッキングコールを行う場合に組み込むタスク */
    300280
    301281extern void     udp_output_task(intptr_t exinf);
Note: See TracChangeset for help on using the changeset viewer.