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

文字コードを設定

File:
1 edited

Legend:

Unmodified
Added
Removed
  • EcnlProtoTool/trunk/asp3_dcre/tinet/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);
Note: See TracChangeset for help on using the changeset viewer.