Ignore:
Timestamp:
Jan 21, 2018, 12:10:09 AM (6 years ago)
Author:
coas-nagasima
Message:

prototoolに関連するプロジェクトをnewlibからmuslを使うよう変更・更新
ntshellをnewlibの下位の実装から、muslのsyscallの実装に変更・更新
以下のOSSをアップデート
・mruby-1.3.0
・musl-1.1.18
・onigmo-6.1.3
・tcc-0.9.27
以下のOSSを追加
・openssl-1.1.0e
・curl-7.57.0
・zlib-1.2.11
以下のmrbgemsを追加
・iij/mruby-digest
・iij/mruby-env
・iij/mruby-errno
・iij/mruby-iijson
・iij/mruby-ipaddr
・iij/mruby-mock
・iij/mruby-require
・iij/mruby-tls-openssl

File:
1 edited

Legend:

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

    r321 r331  
    22 *  TINET (TCP/IP Protocol Stack)
    33 *
    4  *  Copyright (C) 2001-2009 by Dep. of Computer Science and Engineering
     4 *  Copyright (C) 2001-2017 by Dep. of Computer Science and Engineering
    55 *                   Tomakomai National College of Technology, JAPAN
    66 *
     
    7575 */
    7676
    77 #define IP_TCP_HDR_SIZE                 (IP_HDR_SIZE + TCP_HDR_SIZE)
    78 #define IF_IP_TCP_HDR_SIZE              (IF_IP_HDR_SIZE + TCP_HDR_SIZE)
    79 #define IF_IP_TCP_HDR_OFFSET            (IF_IP_HDR_SIZE)
    80 #define IF_IP_TCP_SDU_OFFSET            (IF_IP_TCP_HDR_SIZE)
    81 
    8277#define GET_TCP_HDR(nbuf,thoff)         ((T_TCP_HDR*)((uint8_t*)((nbuf)->buf) + thoff))
    8378#define GET_TCP_OPT(nbuf,thoff)         ((uint8_t*)((nbuf)->buf) + thoff + TCP_HDR_SIZE)
    84 #define GET_TCP_SDU(nbuf,thoff)         ((uint8_t*)((nbuf)->buf) + thoff + GET_TCP_HDR_SIZE2(nbuf,thoff))
     79#define GET_TCP_SDU(nbuf,thoff)         ((uint8_t*)((nbuf)->buf) + thoff + GET_TCP_HDR_SIZE(nbuf,thoff))
    8580
    8681#define GET_TCP_HDR_OFFSET(nbuf)        (GET_IF_IP_HDR_SIZE(nbuf))
    8782
    88 #define GET_TCP_HDR_SIZE2(nbuf,thoff)   (TCP_HDR_LEN(GET_TCP_HDR(nbuf,thoff)->doff))
    89 #define GET_IP_TCP_HDR_SIZE2(nbuf,thoff) \
    90                                         (GET_IP_HDR_SIZE(GET_IP_HDR(nbuf)) + GET_TCP_HDR_SIZE2(nbuf,thoff))
    91 #define GET_IF_IP_TCP_HDR_SIZE2(nbuf,thoff) \
    92                                         (IF_HDR_SIZE + GET_IP_TCP_HDR_SIZE2(nbuf,thoff))
     83#define GET_TCP_HDR_SIZE(nbuf,thoff)    (TCP_HDR_LEN(GET_TCP_HDR(nbuf,thoff)->doff))
     84
     85#define GET_IP_TCP_HDR_SIZE(nbuf,thoff) (GET_IP_HDR_SIZE(nbuf) + GET_TCP_HDR_SIZE(nbuf,thoff))
     86#define GET_IF_IP_TCP_HDR_SIZE(nbuf,thoff) \
     87                                        (IF_HDR_SIZE + GET_IP_TCP_HDR_SIZE(nbuf,thoff))
     88#define IF_IP_TCP_HDR_SIZE(nbuf)        (IF_IP_HDR_SIZE(nbuf) + TCP_HDR_SIZE)
     89#define IF_IP_TCP_HDR_OFFSET(nbuf)      (IF_IP_HDR_SIZE(nbuf))
     90#define IF_IP_TCP_NET_HDR_SIZE(addr)    (IF_IP_NET_HDR_SIZE(addr) + TCP_HDR_SIZE)
     91#define IF_IP_TCP_NET_HDR_OFFSET(addr)  (IF_IP_NET_HDR_SIZE(addr))
    9392
    9493/*
     
    9695 */
    9796
    98 #if defined(SUPPORT_INET4)
     97#if !defined(_IP6_CFG) && defined(_IP4_CFG)
    9998
    10099#define IP4_TCP_HDR_SIZE                IP_TCP_HDR_SIZE
    101100#define IF_IP4_TCP_HDR_SIZE             IF_IP_TCP_HDR_SIZE
    102 #define GET_IP4_TCP_HDR_SIZE(nbuf)      GET_IP_TCP_HDR_SIZE(nbuf)       
    103 #define GET_IF_IP4_TCP_HDR_SIZE(nbuf)   GET_IF_IP_TCP_HDR_SIZE(nbuf)   
    104 
    105 #endif  /* of #if defined(SUPPORT_INET4) */
     101#define GET_IP4_TCP_HDR_SIZE(nbuf)      GET_IP_TCP_HDR_SIZE1(nbuf)     
     102#define GET_IF_IP4_TCP_HDR_SIZE(nbuf)   GET_IF_IP_TCP_HDR_SIZE1(nbuf)   
     103
     104#endif  /* of #if !defined(_IP6_CFG) && defined(_IP4_CFG) */
    106105
    107106/*
     
    110109
    111110#define TMIN_TCP_CREPID                 TMIN_TCP_REPID
     111#define TNUM_TCP_CREPID                 TNUM_TCP_REPID
     112
    112113#define TMIN_TCP_CCEPID                 TMIN_TCP_CEPID
    113 #define TNUM_TCP_CREPID                 TNUM_TCP_REPID
    114114#define TNUM_TCP_CCEPID                 TNUM_TCP_CEPID
    115115
     
    121121
    122122/*
     123 * TCP で使用する変数の型の定義
     124 */
     125
     126typedef uint32_t T_TCP_SEQ;
     127typedef uint16_t T_TCP_SEG;
     128typedef uint16_t T_TCP_WND;
     129typedef int16_t T_TCP_TIME;
     130
     131/*
     132 *  TCP タイマ変数
     133 */
     134
     135#define NUM_TCP_TIMERS          4       /* TCP のタイマ数    */
     136
     137/*
    123138 *  TCP 受付口
    124139 */
    125140
     141/* IPv6 用 TCP 受付口 */
     142
     143typedef struct t_tcp6_rep {
     144
     145        /*
     146         * ITRON TCP/IP API、TCP 受付口と同じメンバ
     147         */
     148        ATR             repatr;         /* 受付口属性                */
     149        T_IPV6EP        myaddr;         /* 自分のアドレス      */
     150
     151#ifdef TCP_CFG_EXTENTIONS
     152        uint16_t        flags;          /* 受付口フラグ               */
     153        ID              semid_lock;     /* 受付口ロック               */
     154#endif  /* of #ifdef TCP_CFG_EXTENTIONS */
     155
     156        } T_TCP6_REP;
     157
    126158/* IPv4 用 TCP 受付口 */
     159
    127160typedef struct t_tcp4_rep {
    128161
     
    140173        } T_TCP4_REP;
    141174
    142 /* IPv6 用 TCP 受付口 */
    143 typedef struct t_tcp6_rep {
    144 
    145         /*
    146          * ITRON TCP/IP API、TCP 受付口と同じメンバ
    147          */
    148         ATR             repatr;         /* 受付口属性                */
    149         T_IPV6EP        myaddr;         /* 自分のアドレス      */
    150 
    151 #ifdef TCP_CFG_EXTENTIONS
    152         uint16_t        flags;          /* 受付口フラグ               */
    153         ID              semid_lock;     /* 受付口ロック               */
    154 #endif  /* of #ifdef TCP_CFG_EXTENTIONS */
    155 
    156         } T_TCP6_REP;
    157 
    158 #if defined(SUPPORT_INET4)
     175#if defined(_IP6_CFG)
     176
     177#define T_TCP_REP       T_TCP6_REP
     178
     179#else   /* of #if defined(_IP6_CFG) */
     180
     181#if defined(_IP4_CFG)
     182
    159183#define T_TCP_REP       T_TCP4_REP
    160 #endif
    161 
    162 #if defined(SUPPORT_INET6)
    163 #define T_TCP_REP       T_TCP6_REP
    164 #endif
     184
     185#endif  /* of #if defined(_IP4_CFG) */
     186
     187#endif  /* of #if defined(_IP6_CFG) */
     188
     189#define T_TCP_REP_DEFINED
    165190
    166191/*
     
    175200 */
    176201
    177 typedef uint32_t T_TCP_SEQ;
    178 typedef uint16_t T_TCP_SEG;
    179 typedef uint16_t T_TCP_WND;
    180 
    181 /*
    182  * 通常の IPv4 TCP 通信端点
    183  */
    184 typedef struct t_tcp4_cep {
     202#ifndef T_NET_BUF_DEFINED
     203
     204typedef struct t_net_buf T_NET_BUF;
     205
     206#define T_NET_BUF_DEFINED
     207
     208#endif  /* of #ifndef T_NET_BUF_DEFINED */
     209
     210typedef struct t_tcp_cep {
    185211
    186212        /*
     
    232258#ifdef TCP_CFG_NON_BLOCKING
    233259
    234         T_IPV4EP        *p_dstaddr;     /* 相手のアドレスへのポインタ        */
    235         T_IPV4EP        *p_myaddr;      /* 自分のアドレスへのポインタ        */
     260        T_IPEP          *p_dstaddr;     /* 相手のアドレスへのポインタ        */
     261        T_IPEP          *p_myaddr;      /* 自分のアドレスへのポインタ        */
     262
     263#if defined(_IP6_CFG) && defined(_IP4_CFG)
     264        T_IPV4EP        *p_dstaddr4;    /* 相手のアドレスへのポインタ        */
     265        T_IPV4EP        *p_myaddr4;     /* 自分のアドレスへのポインタ        */
     266#endif
     267       
    236268        int16_t         snd_nblk_tfn;   /* 送信動作中の API 機能コード     */
    237269        int16_t         rcv_nblk_tfn;   /* 受信動作中の API 機能コード     */
     
    247279#ifdef TCP_CFG_SWBUF_CSAVE
    248280        T_NET_BUF       *swbufq;        /* 送信ウィンドバッファキュー        */
    249 #endif  /* of #ifdef TCP_CFG_SWBUF_CSAVE */
     281#endif
    250282
    251283        /*
     
    254286
    255287        T_TCP_TIME      timer[NUM_TCP_TIMERS];  /* TCP のタイマ             */
    256         T_IPV4EP        dstaddr;        /* 相手のアドレス              */
    257         T_IPV4EP        myaddr;         /* 自分のアドレス              */
    258         T_TCP4_REP      *rep;           /* 受付口                  */
     288        T_IPEP          dstaddr;        /* 相手のアドレス              */
     289        T_IPEP          myaddr;         /* 自分のアドレス              */
    259290        T_NET_BUF       *reassq;        /* 受信再構成キュー             */
     291
     292#if defined(_IP6_CFG)
     293
     294#if defined(_IP4_CFG)
     295
     296        T_TCP4_REP      *rep4;          /* IPv4 用受付口            */
     297
     298#endif  /* of #if defined(_IP4_CFG) */
     299
     300        T_TCP6_REP      *rep;           /* IPv6 用受付口            */
     301
     302#else   /* of #if defined(_IP6_CFG) */
     303
     304#if defined(_IP4_CFG)
     305
     306        T_TCP4_REP      *rep;           /* IPv4 用受付口            */
     307
     308#endif  /* of #if defined(_IP4_CFG) */
     309
     310#endif  /* of #if defined(_IP6_CFG) */
     311
    260312
    261313#ifdef TCP_CFG_RWBUF_CSAVE
    262314        T_NET_BUF       *rwbufq;        /* 受信ウィンドバッファキュー        */
    263 #endif  /* of #ifdef TCP_CFG_RWBUF_CSAVE */
     315#endif
    264316
    265317#ifdef TCP_CFG_EXTENTIONS
     
    298350
    299351#if defined(TCP_CFG_RWBUF_CSAVE) && defined(TCP_CFG_RWBUF_CSAVE_MAX_QUEUES)
    300         uint8_t         rwbufq_entries; /* 受信ウィンドバッファキューのエントリ数  */
    301 #endif  /* of #if defined(TCP_CFG_RWBUF_CSAVE) && defined(TCP_CFG_RWBUF_CSAVE_MAX_QUEUES)       */
    302 
    303         } T_TCP4_CEP;
    304 
    305 /*
    306  * Time Wait 用 IPv4 TCP 通信端点
    307  */
    308 typedef struct t_tcp4_twcep {
     352        uint16_t        rwbufq_entries; /* 受信ウィンドバッファキューのエントリ数  */
     353#endif
     354
     355        } T_TCP_CEP;
     356
     357#define T_TCP6_CEP      T_TCP_CEP
     358#define T_TCP4_CEP      T_TCP_CEP
     359
     360/*
     361 * Time Wait 用 TCP 通信端点
     362 */
     363
     364typedef struct t_tcp_twcep {
    309365        int_t           rbufsz;         /* 受信用ウィンドバッファサイズ       */
    310366        T_TCP_TIME      timer_2msl;     /* 2MSL タイマ                     */
    311         T_IPV4EP        dstaddr;        /* 相手のアドレス              */
    312         T_IPV4EP        myaddr;         /* 自分のアドレス              */
     367        T_IPEP          dstaddr;        /* 相手のアドレス              */
     368        T_IPEP          myaddr;         /* 自分のアドレス              */
    313369        T_TCP_SEQ       snd_una;        /* 未確認の最小送信 SEQ つまり     */
    314370                                        /* 確認された最大送信 SEQ        */
     
    316372        uint16_t        rwbuf_count;    /* 受信ウィンドバッファの使用中サイズ    */
    317373        uint8_t         fsm_state;      /* FSM 状態                       */
    318 
    319         } T_TCP4_TWCEP;
    320 
    321 /*
    322  * 通常の IPv6 TCP 通信端点
    323  */
    324 typedef struct t_tcp6_cep {
    325 
    326         /*
    327          * ITRON TCP/IP API、TCP 通信端点と同じメンバ
    328          */
    329         ATR             cepatr;         /* 通信端点属性                       */
    330         void            *sbuf;          /* 送信用ウィンドバッファ  */
    331         int_t           sbufsz;         /* 送信用ウィンドバッファサイズ       */
    332         void            *rbuf;          /* 受信用ウィンドバッファ  */
    333         int_t           rbufsz;         /* 受信用ウィンドバッファサイズ       */
    334         t_tcp_callback  callback;       /* コールバック関数             */
    335 
    336         /*
    337          * TINET 独自のメンバ
    338          */
    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;       /* 輻輳ウィンドサイズ            */
    356 
    357         /*
    358          *  相手の最大受信セグメントサイズ     
    359          *
    360          *    オリジナルでは、一般のセグメントの最大サイズ (t_maxseg) と、
    361          *    オプション付きのセグメントの最大サイズ (t_maxopd) が別に
    362          *    なっている。これは、現在のインターネットでは、オプション付きの
    363          *    セグメントのほうが多いからと説明されているためである。
    364          *    本実装では、最大セグメントサイズオプション以外のオプションは
    365          *    実装しないので、t_maxseg の使用する。
    366          */
    367         T_TCP_SEG       maxseg;
    368 
    369         T_IPV6EP        *p_dstaddr;     /* 相手のアドレスへのポインタ        */
    370         T_IPV6EP        *p_myaddr;      /* 自分のアドレスへのポインタ        */
    371         int16_t         snd_tfn;        /* 送信動作中の API 機能コード     */
    372         int16_t         rcv_tfn;        /* 受信動作中の API 機能コード     */
    373 
    374 #ifdef TCP_CFG_NON_BLOCKING
    375 
    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;    /* 受信バッファへのポインタ */
    384 
    385 #endif  /* of #ifdef TCP_CFG_NON_BLOCKING */
    386 
    387 #ifdef TCP_CFG_SWBUF_CSAVE
    388         T_NET_BUF       *swbufq;        /* 送信ウィンドバッファキュー        */
    389 #endif  /* of #ifdef TCP_CFG_SWBUF_CSAVE */
    390 
    391         /*
    392          *  これ以降のメンバーは tcp_init_cep() 関数でゼロクリアーされる。
    393          */
    394 
    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;        /* 受信再構成キュー             */
    400 
    401 #ifdef TCP_CFG_RWBUF_CSAVE
    402         T_NET_BUF       *rwbufq;        /* 受信ウィンドバッファキュー        */
    403 #endif  /* of #ifdef TCP_CFG_RWBUF_CSAVE */
    404 
    405 #ifdef TCP_CFG_EXTENTIONS
    406         T_TCP_HDR       *urg_tcph;      /* 緊急データ入りのセグメントの TCP ヘッダ       */
    407         T_TCP_SEQ       snd_up;         /* 送信した緊急ポインタ           */
    408         T_TCP_SEQ       rcv_up;         /* 受信した緊急ポインタ           */
    409 #endif  /* of #ifdef TCP_CFG_EXTENTIONS */
    410 
    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 数                     */
    438 
    439 #if defined(TCP_CFG_RWBUF_CSAVE) && defined(TCP_CFG_RWBUF_CSAVE_MAX_QUEUES)
    440         uint8_t         rwbufq_entries; /* 受信ウィンドバッファキューのエントリ数  */
    441 #endif  /* of #if defined(TCP_CFG_RWBUF_CSAVE) && defined(TCP_CFG_RWBUF_CSAVE_MAX_QUEUES)       */
    442 
    443         } T_TCP6_CEP;
    444 
    445 /*
    446  * Time Wait 用 IPv6 TCP 通信端点
    447  */
    448 typedef struct t_tcp6_twcep {
    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 状態                       */
    461 
    462         } T_TCP6_TWCEP;
    463 
    464 #if defined(SUPPORT_INET4)
    465 #define T_TCP_CEP       T_TCP4_CEP
    466 #define T_TCP_TWCEP     T_TCP4_TWCEP
    467 #endif  /* of #if defined(SUPPORT_INET4) */
    468 
    469 #if defined(SUPPORT_INET6)
    470 #define T_TCP_CEP       T_TCP6_CEP
    471 #define T_TCP_TWCEP     T_TCP6_TWCEP
    472 #endif  /* of #if defined(SUPPORT_INET6) */
     374        uint8_t flags;                  /* 通信端点フラグ              */
     375
     376        } T_TCP_TWCEP;
    473377
    474378#define T_TCP_CEP_DEFINED
     
    478382 */
    479383
    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 を元に戻す。*/
     384#define TCP_CEP_FLG_IPV4                ULONG_C(0x00000001)     /* IPv4 用。                      */
     385#define TCP_CEP_FLG_ACK_NOW             ULONG_C(0x00000100)     /* 直ちに相手に ACK を送る。      */
     386#define TCP_CEP_FLG_DEL_ACK             ULONG_C(0x00000200)     /* ACK を遅延する。           */
     387#define TCP_CEP_FLG_SENT_FIN            ULONG_C(0x00000400)     /* FIN を送ってある。          */
     388#define TCP_CEP_FLG_NEED_SYN            ULONG_C(0x00000800)     /* SYN を送信する。           */
     389#define TCP_CEP_FLG_NEED_FIN            ULONG_C(0x00001000)     /* FIN を送信する。           */
     390#define TCP_CEP_FLG_FORCE               ULONG_C(0x00002000)     /* 強制送信。                        */
     391#define TCP_CEP_FLG_NO_PUSH             ULONG_C(0x00004000)     /* push しない。            */
     392#define TCP_CEP_FLG_NO_DELAY            ULONG_C(0x00008000)     /* 遅延しない。                       */
     393#define TCP_CEP_FLG_FORCE_CLEAR         ULONG_C(0x00010000)     /* 強制送信した後フラグをクリアーする。*/
     394#define TCP_CEP_FLG_POST_OUTPUT         ULONG_C(0x00020000)     /* 送信を開始する。             */
     395#define TCP_CEP_FLG_RESERVE_OUTPUT      ULONG_C(0x00040000)     /* 送信を予約する。             */
     396#define TCP_CEP_FLG_DYNAMIC             ULONG_C(0x00100000)     /* 動的生成・削除可能通信端点。       */
     397#define TCP_CEP_FLG_VALID               ULONG_C(0x00200000)     /* 生成済みで有効な通信端点。        */
     398#define TCP_CEP_FLG_CLOSE_AFTER_OUTPUT  ULONG_C(0x00400000)     /* 送信した後コネクションを閉じる。*/
     399#define TCP_CEP_FLG_RESTORE_NEXT_OUTPUT ULONG_C(0x00800000)     /* 送信した後、snd_nxt を元に戻す。*/
    495400
    496401/* 送受信ウィンドバッファの省コピー機能 */
    497 #define TCP_CEP_FLG_WBCS_NBUF_REQ       ULONG_C(0x00080000)     /* ネットワークバッファ割当て要求      */
    498 #define TCP_CEP_FLG_WBCS_MASK           ULONG_C(0x00070000)     /* マスク                  */
     402#define TCP_CEP_FLG_WBCS_NBUF_REQ       ULONG_C(0x80000000)     /* ネットワークバッファ割当て要求*/
     403#define TCP_CEP_FLG_WBCS_MASK           ULONG_C(0x70000000)     /* マスク                  */
    499404#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完了          */
     405#define TCP_CEP_FLG_WBCS_WOPEN_PEND     ULONG_C(0x10000000)     /* 相手の受信ウィンドの開き待ち       */
     406#define TCP_CEP_FLG_WBCS_NBUF_PEND      ULONG_C(0x20000000)     /* ネットワークバッファ予約待ち       */
     407#define TCP_CEP_FLG_WBCS_NBUF_RSVD      ULONG_C(0x30000000)     /* ネットワークバッファ予約済み       */
     408#define TCP_CEP_FLG_WBCS_NBUF_READY     ULONG_C(0x40000000)     /* ネットワークバッファ割当て済み*/
     409#define TCP_CEP_FLG_WBCS_SEND_READY     ULONG_C(0x50000000)     /* 送信可能                 */
     410#define TCP_CEP_FLG_WBCS_SENT           ULONG_C(0x60000000)     /* 送信済みで、ACK待ち          */
     411#define TCP_CEP_FLG_WBCS_ACKED          ULONG_C(0x70000000)     /* 送信済みで、ACK完了          */
     412
     413/* 初期化から除外するフラグの定義 */
     414#define TCP_CEP_FLG_NOT_CLEAR           (TCP_CEP_FLG_WBCS_NBUF_REQ|TCP_CEP_FLG_WBCS_MASK|\
     415                                         TCP_CEP_FLG_DYNAMIC|TCP_CEP_FLG_VALID|TCP_CEP_FLG_IPV4)
    507416
    508417/*
     
    513422#define TCP_CEP_EVT_CLOSED              ULONG_C(0x00000002)     /* 未使用状態                        */
    514423#define TCP_CEP_EVT_SWBUF_READY         ULONG_C(0x00000004)     /* 送信ウィンドバッファ空き */
    515 #define TCP_CEP_EVT_RWBUF_READY         ULONG_C(0x00000008)     /* 送信ウィンドバッファデータあり      */
     424#define TCP_CEP_EVT_RWBUF_READY         ULONG_C(0x00000008)     /* 送信ウィンドバッファデータあり*/
    516425#define TCP_CEP_EVT_ALL                 ULONG_C(0xffffffff)     /* 全イベント                        */
    517426
     
    571480
    572481#define GET_TCP_Q_HDR(nbuf,thoff)       ((T_TCP_Q_HDR*)((uint8_t*)((nbuf)->buf) + thoff))
    573 #define GET_TCP_IP_Q_HDR(nbuf)          ((T_TCP_IP_Q_HDR*)GET_IP_HDR(nbuf))
    574482
    575483/*
     
    577485 */
    578486
    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 の最小値 */
     487#define TMIN_TCP_REPID          1                       /* TCP      受付口 ID の最小値                 */
     488#define TMIN_TCP6_REPID         1                       /* TCP/IPv6 受付口 ID の最小値                 */
     489#define TMIN_TCP4_REPID         (TNUM_TCP6_REPID+1)     /* TCP/IPv4 受付口 ID の最小値                 */
     490
     491#define TMIN_TCP_CEPID          1                       /* TCP      通信端点 ID の最小値                        */
     492#define TMIN_TCP6_CEPID         1                       /* TCP/IPv6 通信端点 ID の最小値                        */
     493#define TMIN_TCP4_CEPID         (TNUM_TCP6_CEPID+1)     /* TCP/IPv4 通信端点 ID の最小値                        */
     494
     495#define TMIN_TCP_TWCEPID        1                       /* Time Wait 用 TCP 通信端点 ID の最小値 */
    582496
    583497/*
    584498 *  制御セグメント(データなし)サイズのネットワークバッファ
    585499 */
     500
     501#if defined(IF_HDR_SIZE) && defined(IP_HDR_SIZE)
    586502
    587503typedef struct t_net_buf_cseg {
     
    599515        } T_NET_BUF_CSEG;
    600516
    601 #ifdef SUPPORT_MIB
     517#endif  /* of #if defined(IF_HDR_SIZE) && defined(IP_HDR_SIZE) */
    602518
    603519/*
     
    618534} T_TCP_STATS;
    619535
    620 #endif  /* of #ifdef SUPPORT_MIB */
    621 
    622536/*
    623537 *  関数シミュレーションマクロ
    624538 */
    625539
    626 #define VAID_TCP_REPID(id)      (TMIN_TCP_REPID<=(id)&&(id)<=tmax_tcp_repid)
    627 #define VAID_TCP_CEPID(id)      (TMIN_TCP_CEPID<=(id)&&(id)<=tmax_tcp_cepid)
    628 
    629 #define INDEX_TCP_REP(id)       ((id)-TMIN_TCP_REPID)
     540/* TCP 受付口 */
     541
     542#define VALID_TCP6_REPID(id)    (TMIN_TCP6_REPID<=(id)&&(id)<=tmax_tcp6_repid)
     543#define VALID_TCP4_REPID(id)    (TMIN_TCP4_REPID<=(id)&&(id)<=tmax_tcp4_repid)
     544
     545#define INDEX_TCP6_REP(id)      ((id)-TMIN_TCP6_REPID)
     546#define INDEX_TCP4_REP(id)      ((id)-TMIN_TCP4_REPID)
     547
     548#define GET_TCP6_REP(id)        (&(tcp6_rep[INDEX_TCP6_REP(id)]))
     549#define GET_TCP4_REP(id)        (&(tcp4_rep[INDEX_TCP4_REP(id)]))
     550
     551#define GET_TCP6_REPID(rep)     ((ID)(((rep)-tcp6_rep)+TMIN_TCP6_REPID))
     552#define GET_TCP4_REPID(rep)     ((ID)(((rep)-tcp4_rep)+TMIN_TCP4_REPID))
     553
     554#ifdef TCP_CFG_EXTENTIONS
     555
     556#define VALID_TCP_REP(rep)      (((rep)->flags&TCP_REP_FLG_VALID)!=0)
     557#define DYNAMIC_TCP_REP(rep)    (((rep)->flags&TCP_REP_FLG_DYNAMIC)!=0)
     558
     559#else   /* of #ifdef TCP_CFG_EXTENTIONS */
     560
     561#define VALID_TCP_REP(rep)      (true)
     562#define DYNAMIC_TCP_REP(rep)    (false)
     563
     564#endif  /* of #ifdef TCP_CFG_EXTENTIONS */
     565
     566/* TCP 通信端点 */
     567
     568#define VALID_TCP_CEPID(id)     (TMIN_TCP_CEPID<=(id)&&(id)<=tmax_tcp_cepid)
    630569#define INDEX_TCP_CEP(id)       ((id)-TMIN_TCP_CEPID)
    631570
    632 #define GET_TCP_REP(id)         (&(tcp_rep[INDEX_TCP_REP(id)]))
    633571#define GET_TCP_CEP(id)         (&(tcp_cep[INDEX_TCP_CEP(id)]))
    634572
    635 #define GET_TCP_REPID(rep)      ((ID)(((rep)-tcp_rep)+TMIN_TCP_REPID))
    636573#define GET_TCP_CEPID(cep)      ((ID)(((cep)-tcp_cep)+TMIN_TCP_CEPID))
    637574#define GET_TCP_TWCEPID(cep)    ((ID)(((cep)-tcp_twcep)+TMIN_TCP_TWCEPID))
     575
     576#define VALID_TCP_CEP(cep)      (((cep)->flags&TCP_CEP_FLG_VALID)!=0)
     577#define DYNAMIC_TCP_CEP(cep)    (((cep)->flags&TCP_CEP_FLG_DYNAMIC)!=0)
     578#define TCP_IS_CEP_IPV6(cep)    (((cep)->flags&TCP_CEP_FLG_IPV4)==0)
     579#define TCP_IS_CEP_IPV4(cep)    (((cep)->flags&TCP_CEP_FLG_IPV4)!=0)
    638580
    639581#define IS_TFN_TCP_RCV(t)       ((t)==TFN_TCP_ACP_CEP||(t)==TFN_TCP_RCV_DAT||\
     
    651593#define VALID_URG_POINTER(urg)  (TCP_CFG_URG_OFFSET==0||urg!=0)
    652594
    653 #define VALID_TCP_CEP(cep)      (((cep)->flags&TCP_CEP_FLG_VALID)!=0)
    654 #define DYNAMIC_TCP_CEP(cep)    (((cep)->flags&TCP_CEP_FLG_DYNAMIC)!=0)
    655 
    656 #ifdef TCP_CFG_EXTENTIONS
    657 
    658 #define VALID_TCP_REP(rep)      (((rep)->flags&TCP_REP_FLG_VALID)!=0)
    659 #define DYNAMIC_TCP_REP(rep)    (((rep)->flags&TCP_REP_FLG_DYNAMIC)!=0)
    660 
    661 #else   /* of #ifdef TCP_CFG_EXTENTIONS */
    662 
    663 #define VALID_TCP_REP(rep)      (true)
    664 #define DYNAMIC_TCP_REP(rep)    (false)
    665 
    666 #endif  /* of #ifdef TCP_CFG_EXTENTIONS */
    667 
    668595/*
    669596 *  全域変数
    670597 */
    671598
    672 extern T_TCP_REP tcp_rep[];
     599extern uint8_t tcp_initialized;
     600
     601extern T_TCP_STATS tcp_stats;
     602
     603/* TCP 受付口 */
     604
     605extern T_TCP6_REP tcp6_rep[];
     606extern T_TCP4_REP tcp4_rep[];
     607
     608#if defined(SUPPORT_INET6)
     609#define tcp_rep tcp6_rep
     610#elif defined(SUPPORT_INET4)
     611#define tcp_rep tcp4_rep
     612#endif
     613
     614extern const ID tmax_tcp_repid;
     615
     616#if defined(SUPPORT_INET6) && defined(SUPPORT_INET4)
     617extern const ID tmax_tcp6_repid;
     618extern const ID tmax_tcp4_repid;
     619#else
     620#define tmax_tcp6_repid tmax_tcp_repid
     621#define tmax_tcp4_repid tmax_tcp_repid
     622#endif
     623
     624/* TCP 通信端点 */
     625
    673626extern T_TCP_CEP tcp_cep[];
    674 extern uint8_t tcp_initialized;
    675 extern const ID tmax_tcp_repid;
     627extern T_TCP_TWCEP tcp_twcep[];
     628
    676629extern const ID tmax_tcp_cepid;
    677 extern T_TCP_TWCEP tcp_twcep[];
    678 
    679 #ifdef SUPPORT_MIB
    680 
    681 extern T_TCP_STATS tcp_stats;
    682 
    683 #endif  /* of #ifdef SUPPORT_MIB */
     630
     631#if defined(SUPPORT_INET6) && defined(SUPPORT_INET4)
     632extern const ID tmax_tcp6_cepid;
     633extern const ID tmax_tcp4_cepid;
     634#else
     635#define tmax_tcp6_cepid tmax_tcp_cepid
     636#define tmax_tcp4_cepid tmax_tcp_cepid
     637#endif
    684638
    685639/*
     
    866820extern void tcp_respond (T_NET_BUF *nbuf, T_TCP_CEP *cep,
    867821                         T_TCP_SEQ ack, T_TCP_SEQ seq, uint_t rbfree, uint8_t flags);
    868 extern void tcp_set_header (T_NET_BUF *nbuf, T_TCP_CEP *cep, uint_t thoff, uint_t optlen);
    869822extern ER tcp_get_segment (T_NET_BUF **nbuf, T_TCP_CEP *cep,
    870823                           uint_t optlen, uint_t len, uint_t maxlen, ATR nbatr, TMO tmout);
     824extern ER tcpn_get_segment (T_NET_BUF **nbuf, T_TCP_CEP *cep,
     825                            uint_t optlen, uint_t len, uint_t maxlen, ATR nbatr, TMO tmout);
    871826extern void tcp_init_cep (T_TCP_CEP *cep);
    872827extern void tcp_notify (T_NET_BUF *input, int code);
     
    876831extern void tcp_alloc_auto_port (T_TCP_CEP *cep);
    877832extern ER tcp_alloc_port (T_TCP_CEP *cep, uint16_t portno);
    878 extern void tcp_move_twcep (T_TCP_CEP *cep);
    879833extern ER tcp_lock_cep (ID cepid, T_TCP_CEP **p_cep, FN tfn);
    880834extern void tcp_free_reassq (T_TCP_CEP *cep);
     
    885839extern ER tcp_wait_rwbuf (T_TCP_CEP *cep, TMO tmout);
    886840extern T_TCP_CEP *tcp_user_closed (T_TCP_CEP *cep);
     841extern T_TCP_CEP *tcp_find_cep (T_NET_BUF *input, uint_t off);
     842extern T_TCP_TWCEP*tcp_find_twcep (T_NET_BUF *input, uint_t off);
     843extern bool_t tcp_is_addr_accept (T_NET_BUF *input, uint_t off);
     844extern void tcp_move_twcep (T_TCP_CEP *cep);
    887845
    888846/*
     
    974932
    975933/*
    976  *  tcp_find_cep -- ポート番号から TCP 通信端点を得る。
    977  *
    978  *    注意: myaddr は、
    979  *          TINET-1.2 からネットワークバイトオーダ、
    980  *          TINET-1.1 までは、ホストバイトオーダ
    981  */
    982 extern T_TCP_CEP *tcp_find_cep (T_IN_ADDR *dstaddr,  uint16_t dstport,
    983                                 T_IN_ADDR *peeraddr, uint16_t peerport);
    984 
    985 /*
    986934 *  TCP ヘッダのトレース出力機能用関数
    987935 */
Note: See TracChangeset for help on using the changeset viewer.