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_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) {
Note: See TracChangeset for help on using the changeset viewer.