Ignore:
Timestamp:
May 22, 2019, 10:03:37 PM (5 years ago)
Author:
coas-nagasima
Message:

ビルドが通るよう更新

File:
1 edited

Legend:

Unmodified
Added
Removed
  • azure_iot_hub/trunk/asp3_dcre/tinet/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
    r388 r389  
    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$
     
    134122
    135123/*
    136  *  TCP 通信端点の送信ウィンドバッファの省コピー機能が有効な場合
    137  *  ただし、通信端点の送信ウィンドバッファ(cep->sbuf)の値により、
    138  *  TCP 通信端点毎に送信ウィンドバッファの省コピー機能を使用するか、
    139  *  使用しないかを切り替える。
    140  */
    141 
    142 /*
    143  *  tcp_drop_swbuf -- 送信ウィンドバッファから指定されたオクテット分削除する(選択)。
     124 *  TCP 通信端点の送信ウィンドバッファの省コピー機能が有効な場合
     125 *  ただし、通信端点の送信ウィンドバッファ(cep->sbuf)の値により、
     126 *  TCP 通信端点毎に送信ウィンドバッファの省コピー機能を使用するか、
     127 *  使用しないかを切り替える。
     128 */
     129
     130/*
     131 *  tcp_drop_swbuf -- 送信ウィンドバッファから指定されたオクテット分削除する(選択)。
    144132 */
    145133
     
    154142
    155143/*
    156  *  tcp_write_swbuf -- 送信ウィンドバッファにデータを書き込む(選択)。
     144 *  tcp_write_swbuf -- 送信ウィンドバッファにデータを書き込む(選択)。
    157145 */
    158146
     
    167155
    168156/*
    169  *  tcp_read_swbuf -- 送信ウィンドバッファからデータを読み出す(選択)。
     157 *  tcp_read_swbuf -- 送信ウィンドバッファからデータを読み出す(選択)。
    170158 */
    171159
     
    178166
    179167/*
    180  *  tcp_wait_swbuf -- 送信ウィンドバッファと相手の受信ウィンドが開くのをå¾
    181 ã¤ï¼ˆé¸æŠžï¼‰ã€‚
     168 *  tcp_wait_swbuf -- 送信ウィンドバッファと相手の受信ウィンドが開くのを待つ(選択)。
    182169 */
    183170
     
    192179
    193180/*
    194  *  tcp_get_swbuf_addr -- 送信ウィンドバッファの空きアドレスを獲得する(選択)。
     181 *  tcp_get_swbuf_addr -- 送信ウィンドバッファの空きアドレスを獲得する(選択)。
    195182 */
    196183
     
    205192
    206193/*
    207  *  tcp_send_swbuf -- 送信ウィンドバッファのデータを送信可能にする(選択)。
     194 *  tcp_send_swbuf -- 送信ウィンドバッファのデータを送信可能にする(選択)。
    208195 */
    209196
     
    218205
    219206/*
    220  *  tcp_free_swbufq -- 送信ウィンドバッファキューの解放を指示する(選択)。
     207 *  tcp_free_swbufq -- 送信ウィンドバッファキューの解放を指示する(選択)。
    221208 */
    222209
     
    229216
    230217/*
    231  *  tcp_alloc_swbuf -- 送信ウィンドバッファ用のネットワークバッファの割り当てを指示する(選択)。
     218 *  tcp_alloc_swbuf -- 送信ウィンドバッファ用のネットワークバッファの割り当てを指示する(選択)。
    232219 */
    233220
     
    240227
    241228/*
    242  *  tcp_is_swbuf_full -- 送信ウィンドバッファが満杯かチェックする(選択)。
     229 *  tcp_is_swbuf_full -- 送信ウィンドバッファが満杯かチェックする(選択)。
    243230 */
    244231
     
    255242
    256243/*
    257  *  tcp_drop_swbuf_cs -- 送信ウィンドバッファから指定されたオクテット分削除する(専用)。
     244 *  tcp_drop_swbuf_cs -- 送信ウィンドバッファから指定されたオクテット分削除する(専用)。
    258245 */
    259246
     
    262249{
    263250
    264         /*送信ウィンドバッファから指定されたオクテット分削除する。*/
     251        /*送信ウィンドバッファから指定されたオクテット分削除する。*/
    265252        cep->swbuf_count -= (uint16_t)len;
    266253
    267         /* 送信済みで、ACKå¾
    268 ã¡ã®æ™‚は、ACK完了に変更する。*/
     254        /* 送信済みで、ACK待ちの時は、ACK完了に変更する。*/
    269255        if (len > 0 && (cep->flags & TCP_CEP_FLG_WBCS_MASK) == TCP_CEP_FLG_WBCS_SENT) {
    270256                cep->flags = (cep->flags & ~TCP_CEP_FLG_WBCS_MASK) | TCP_CEP_FLG_WBCS_ACKED;
     
    274260
    275261/*
    276  *  tcp_write_swbuf_cs -- 送信ウィンドバッファにデータを書き込む(専用)。
     262 *  tcp_write_swbuf_cs -- 送信ウィンドバッファにデータを書き込む(専用)。
    277263 */
    278264
     
    283269        uint_t  hdr_size = IF_IP_TCP_NET_HDR_SIZE(&cep->dstaddr.ipaddr);
    284270
    285         /* 通信端点をロックする。*/
     271        /* 通信端点をロックする。*/
    286272        syscall(wai_sem(cep->semid_lock));
    287273
     
    295281                 *   <---------------- error --------------->
    296282                 *              ^
    297                  *              net_buf で 4 オクテット境界にアラインされている。
     283                 *              net_buf で 4 オクテット境界にアラインされている。
    298284                 *
    299                  *  tcp_output と ip_output で、チェックサムを計算するとき、
    300                  *  n が 4 オクテット境界になるように SDU の後ろに 0 を
    301                  *  パッディングする。その分を考æ
    302 ®ã—て送信ウィンドバッファの
    303                  *  空きサイズを 4 オクテット境界に調整する。
     285                 *  tcp_output と ip_output で、チェックサムを計算するとき、
     286                 *  n が 4 オクテット境界になるように SDU の後ろに 0 を
     287                 *  パッディングする。その分を考慮して送信ウィンドバッファの
     288                 *  空きサイズを 4 オクテット境界に調整する。
    304289                 */
    305290                error = (uint_t)(((error - hdr_size) >> 2 << 2) + hdr_size);
     
    310295                        len = (uint_t)(error - hdr_size);
    311296
    312                 /* 送信ウインドサイズによりサイズを調整する。*/
     297                /* 送信ウインドサイズによりサイズを調整する。*/
    313298                if (len > cep->snd_wnd)
    314299                        len = cep->snd_wnd;
     
    316301                        len = cep->snd_cwnd;
    317302
    318                 /* 相手の最大受信セグメントサイズ (maxseg) をè¶
    319 ãˆãªã„ようにする。*/
     303                /* 相手の最大受信セグメントサイズ (maxseg) を超えないようにする。*/
    320304                if (len > cep->maxseg)
    321305                        len = cep->maxseg;
    322306
    323                 /* データを移す。*/
     307                /* データを移す。*/
    324308                memcpy(cep->sbuf_wptr, (void*)((uint8_t*)data), (size_t)len);
    325309                cep->sbuf_wptr   += len;
     
    327311                error             = len;
    328312
    329                 /* ネットワークバッファ長と IP データグラム長を設定する。*/
     313                /* ネットワークバッファ長と IP データグラム長を設定する。*/
    330314                cep->swbufq->len = (uint16_t)(cep->swbuf_count + hdr_size);
    331315                SET_IP_SDU_SIZE(cep->swbufq, cep->swbuf_count + TCP_HDR_SIZE);
    332316
    333                 /* フラグを、送信可能に設定する。*/
     317                /* フラグを、送信可能に設定する。*/
    334318                cep->flags = (cep->flags & ~TCP_CEP_FLG_WBCS_MASK) | TCP_CEP_FLG_WBCS_SEND_READY;
    335319                }
    336320
    337         else {  /* 送信ウインドバッファが不正 */
     321        else {  /* 送信ウインドバッファが不正 */
    338322                syslog(LOG_WARNING, "[TCP] illegal window buff for send, CEP: %d, %4d < %4d.",
    339323                                    GET_TCP_CEPID(cep), error, hdr_size);
    340324
    341                 /* 送信ウィンドバッファキューのネットワークバッファを解放する。*/
     325                /* 送信ウィンドバッファキューのネットワークバッファを解放する。*/
    342326                tcp_free_swbufq_cs(cep);
    343327                }
    344328
    345         /* 通信端点のロックを解除する。*/
     329        /* 通信端点のロックを解除する。*/
    346330        syscall(sig_sem(cep->semid_lock));
    347331
     
    350334
    351335/*
    352  *  tcp_wait_swbuf_cs -- 送信ウィンドバッファと相手の受信ウィンドが開くのをå¾
    353 ã¤ï¼ˆå°‚用)。
     336 *  tcp_wait_swbuf_cs -- 送信ウィンドバッファと相手の受信ウィンドが開くのを待つ(専用)。
    354337 */
    355338
     
    362345        int_t   win;
    363346
    364         /* 送信ウィンドバッファが割当て済みで、空きがあれば終了する。*/
     347        /* 送信ウィンドバッファが割当て済みで、空きがあれば終了する。*/
    365348        if ((cep->flags & TCP_CEP_FLG_WBCS_MASK) == TCP_CEP_FLG_WBCS_NBUF_READY &&
    366349            (cep->swbuf_count + IF_IP_TCP_NET_HDR_SIZE(&cep->dstaddr.ipaddr)) < net_buf_siz(cep->swbufq))
    367350                return E_OK;
    368351
    369         /* 送信中であれば、終了するまでå¾
    370 æ©Ÿã™ã‚‹ã€‚*/
     352        /* 送信中であれば、終了するまで待機する。*/
    371353        while ((cep->flags & TCP_CEP_FLG_WBCS_MASK) != TCP_CEP_FLG_WBCS_FREE) {
    372354
    373                 /* 送信å¾
    374 ã¡ã®æ™‚é–“ã‚’ tmout から減ずる。*/
     355                /* 送信待ちの時間を tmout から減ずる。*/
    375356                if (!(tmout == TMO_POL || tmout == TMO_FEVR))
    376357                        syscall(get_tim(&before));
     
    381362                syscall(clr_flg(cep->snd_flgid, (FLGPTN)(~TCP_CEP_EVT_SWBUF_READY)));
    382363
    383                 /* 送信å¾
    384 ã¡ã®æ™‚é–“ã‚’ tmout から減ずる。*/
     364                /* 送信待ちの時間を tmout から減ずる。*/
    385365                if (!(tmout == TMO_POL || tmout == TMO_FEVR)) {
    386366                        syscall(get_tim(&after));
     
    391371
    392372                /*
    393                  *  送信できるか、CEP の FSM 状æ
    394 ‹ã‚’見る。
    395                  *  送信ウインドバッファが空くまでå¾
    396 ã¤é–“に、送信不能になった場合は、
    397                  *  コネクションが切断されたことを意味している。
     373                 *  送信できるか、CEP の FSM 状態を見る。
     374                 *  送信ウインドバッファが空くまで待つ間に、送信不能になった場合は、
     375                 *  コネクションが切断されたことを意味している。
    398376                 */
    399377                if (!TCP_FSM_CAN_SEND_MORE(cep->fsm_state))
     
    401379                }
    402380
    403         /* 相手の受信ウィンドが閉じている場合は、開くまでå¾
    404 æ©Ÿã™ã‚‹ã€‚*/
     381        /* 相手の受信ウィンドが閉じている場合は、開くまで待機する。*/
    405382        while (true) {
    406383
    407384                /*
    408                  *  snd_wnd:  相手の受信可能ウィンドサイズ
    409                  *  snd_cwnd: 輻輳ウィンドサイズ
     385                 *  snd_wnd:  相手の受信可能ウィンドサイズ
     386                 *  snd_cwnd: 輻輳ウィンドサイズ
    410387                 *
    411                  *  win: どちらか小さいウィンドサイズに設定する。
     388                 *  win: どちらか小さいウィンドサイズに設定する。
    412389                 */
    413390                win = cep->snd_wnd < cep->snd_cwnd ? cep->snd_wnd : cep->snd_cwnd;
     
    415392                        break;
    416393
    417                 /* 開きå¾
    418 ã¡ã®æ™‚é–“ã‚’ tmout から減ずる。*/
     394                /* 開き待ちの時間を tmout から減ずる。*/
    419395                if (!(tmout == TMO_POL || tmout == TMO_FEVR))
    420396                        syscall(get_tim(&before));
     
    425401                syscall(clr_flg(cep->snd_flgid, (FLGPTN)(~TCP_CEP_EVT_SWBUF_READY)));
    426402
    427                 /* 開きå¾
    428 ã¡ã®æ™‚é–“ã‚’ tmout から減ずる。*/
     403                /* 開き待ちの時間を tmout から減ずる。*/
    429404                if (!(tmout == TMO_POL || tmout == TMO_FEVR)) {
    430405                        syscall(get_tim(&after));
     
    435410
    436411                /*
    437                  *  送信できるか、CEP の FSM 状æ
    438 ‹ã‚’見る。
    439                  *  送信ウインドバッファが空くまでå¾
    440 ã¤é–“に、送信不能になった場合は、
    441                  *  コネクションが切断されたことを意味している。
     412                 *  送信できるか、CEP の FSM 状態を見る。
     413                 *  送信ウインドバッファが空くまで待つ間に、送信不能になった場合は、
     414                 *  コネクションが切断されたことを意味している。
    442415                 */
    443416                if (!TCP_FSM_CAN_SEND_MORE(cep->fsm_state))
     
    445418                }
    446419
    447         /* ネットワークバッファを獲得する。*/
     420        /* ネットワークバッファを獲得する。*/
    448421        if ((error = tcpn_get_segment(&cep->swbufq, cep, 0,
    449422                                     TCP_CFG_SWBUF_CSAVE_MIN_SIZE,
     
    452425                return error;
    453426
    454         /* 送信ウィンドバッファを初期化する。*/
     427        /* 送信ウィンドバッファを初期化する。*/
    455428        tcp_init_swbuf(cep);
    456429
     
    459432
    460433/*
    461  *  tcp_get_swbuf_addr_cs -- 送信ウィンドバッファの空きアドレスを獲得する(専用)。
     434 *  tcp_get_swbuf_addr_cs -- 送信ウィンドバッファの空きアドレスを獲得する(専用)。
    462435 */
    463436
     
    467440        ER_UINT error;
    468441
    469         /* 通信端点をロックする。*/
     442        /* 通信端点をロックする。*/
    470443        syscall(wai_sem(cep->semid_lock));
    471444
     
    479452                 *   <---------------- error --------------->
    480453                 *              ^
    481                  *              net_buf で 4 オクテット境界にアラインされている。
     454                 *              net_buf で 4 オクテット境界にアラインされている。
    482455                 *
    483                  *  tcp_output と ip_output で、チェックサムを計算するとき、
    484                  *  n が 4 オクテット境界になるように SDU の後ろに 0 を
    485                  *  パッディングする。その分を考æ
    486 ®ã—て送信ウィンドバッファの
    487                  *  空きサイズを 4 オクテット境界に調整する。
     456                 *  tcp_output と ip_output で、チェックサムを計算するとき、
     457                 *  n が 4 オクテット境界になるように SDU の後ろに 0 を
     458                 *  パッディングする。その分を考慮して送信ウィンドバッファの
     459                 *  空きサイズを 4 オクテット境界に調整する。
    488460                 */
    489461                error = (uint_t)(((error - IF_IP_TCP_NET_HDR_SIZE(&cep->dstaddr.ipaddr)) >> 2 << 2) - cep->swbuf_count);
    490462
    491                 /* 送信ウインドサイズによりサイズを調整する。*/
     463                /* 送信ウインドサイズによりサイズを調整する。*/
    492464                if (error > cep->snd_wnd)
    493465                        error = cep->snd_wnd;
     
    495467                        error = cep->snd_cwnd;
    496468
    497                 /* 相手の最大受信セグメントサイズ (maxseg) をè¶
    498 ãˆãªã„ようにする。*/
     469                /* 相手の最大受信セグメントサイズ (maxseg) を超えないようにする。*/
    499470                if (error > cep->maxseg)
    500471                        error = cep->maxseg;
    501472
    502                 /* 送信ウィンドバッファの空きデータ長を設定し、その値を返す。*/
     473                /* 送信ウィンドバッファの空きデータ長を設定し、その値を返す。*/
    503474                cep->get_buf_len = error;
    504475
    505                 /* 送信ウィンドバッファの空きアドレスのå
    506 ˆé ­ã‚’設定する。*/
     476                /* 送信ウィンドバッファの空きアドレスの先頭を設定する。*/
    507477                *p_buf = cep->sbuf_wptr;
    508478                }
    509479
    510         else {  /* ネットワークバッファが不正 */
    511 
    512                 /* 送信ウィンドバッファキューのネットワークバッファを解放する。*/
     480        else {  /* ネットワークバッファが不正 */
     481
     482                /* 送信ウィンドバッファキューのネットワークバッファを解放する。*/
    513483                tcp_free_swbufq_cs(cep);
    514484                }
    515485
    516         /* 通信端点のロックを解除する。*/
     486        /* 通信端点のロックを解除する。*/
    517487        syscall(sig_sem(cep->semid_lock));
    518488
     
    521491
    522492/*
    523  *  tcp_send_swbuf_cs -- 送信ウィンドバッファのデータを送信可能にする(専用)。
     493 *  tcp_send_swbuf_cs -- 送信ウィンドバッファのデータを送信可能にする(専用)。
    524494 */
    525495
     
    527497tcp_send_swbuf_cs (T_TCP_CEP *cep, uint_t len)
    528498{
    529         /* 通信端点をロックする。*/
     499        /* 通信端点をロックする。*/
    530500        syscall(wai_sem(cep->semid_lock));
    531501
     
    533503        cep->swbuf_count += len;
    534504
    535         /* ネットワークバッファ長と IP データグラム長を設定する。*/
     505        /* ネットワークバッファ長と IP データグラム長を設定する。*/
    536506        cep->swbufq->len = (uint16_t)(cep->swbuf_count + IF_IP_TCP_NET_HDR_SIZE(&cep->dstaddr.ipaddr));
    537507        SET_IP_SDU_SIZE(cep->swbufq, len + TCP_HDR_SIZE);
    538508
    539         /* tcp_get_buf の割当て長をリセットする。*/
     509        /* tcp_get_buf の割当て長をリセットする。*/
    540510        cep->get_buf_len = 0;
    541511
    542         /* 通信端点のロックを解除する。*/
     512        /* 通信端点のロックを解除する。*/
    543513        syscall(sig_sem(cep->semid_lock));
    544514
    545         /* フラグを、送信可能に設定し、強制的に送信する。*/
     515        /* フラグを、送信可能に設定し、強制的に送信する。*/
    546516        cep->flags = (cep->flags & ~TCP_CEP_FLG_WBCS_MASK) | TCP_CEP_FLG_WBCS_SEND_READY
    547517                                                       | TCP_CEP_FLG_FORCE
     
    551521
    552522/*
    553  *  tcp_free_swbufq_cs -- 送信ウィンドバッファキューの解放を指示する(専用)。
     523 *  tcp_free_swbufq_cs -- 送信ウィンドバッファキューの解放を指示する(専用)。
    554524 *
    555  *    注意:
    556  *      å¿
    557 è¦ã§ã‚れば、この関数を呼び出す前に、通信端点をロックし、
    558  *      戻った後、解除するå¿
    559 è¦ãŒã‚る。
     525 *    注意:
     526 *      必要であれば、この関数を呼び出す前に、通信端点をロックし、
     527 *      戻った後、解除する必要がある。
    560528 */
    561529
     
    563531tcp_free_swbufq_cs (T_TCP_CEP *cep)
    564532{
    565         /* 送信ウィンドバッファの空きå¾
    566 ã¡ã‚’取り消す。*/
     533        /* 送信ウィンドバッファの空き待ちを取り消す。*/
    567534        cep->flags &= ~TCP_CEP_FLG_WBCS_NBUF_REQ;
    568535
    569536        if ((cep->flags & TCP_CEP_FLG_WBCS_MASK) != TCP_CEP_FLG_WBCS_FREE) {
    570537                /*
    571                  *  送信ウィンドバッファを削除するために、フラグを ACK 完了に設定し、
    572                  *  TCP 出力タスクを起動する。
     538                 *  送信ウィンドバッファを削除するために、フラグを ACK 完了に設定し、
     539                 *  TCP 出力タスクを起動する。
    573540                 */
    574541                cep->flags = (cep->flags & ~TCP_CEP_FLG_WBCS_MASK) | TCP_CEP_FLG_WBCS_ACKED;
     
    578545
    579546/*
    580  *  tcp_alloc_swbuf_cs -- 送信ウィンドバッファ用のネットワークバッファの割り当てを指示する(専用)。
     547 *  tcp_alloc_swbuf_cs -- 送信ウィンドバッファ用のネットワークバッファの割り当てを指示する(専用)。
    581548 */
    582549
     
    587554
    588555        /*
    589          *  送信ウィンドバッファが未使用の場合のみ、
    590          *  送信ウィンドバッファ用のネットワークバッファの割り当てを指示する。
     556         *  送信ウィンドバッファが未使用の場合のみ、
     557         *  送信ウィンドバッファ用のネットワークバッファの割り当てを指示する。
    591558         */
    592559        if ((cep->flags & TCP_CEP_FLG_WBCS_MASK) == TCP_CEP_FLG_WBCS_FREE)
     
    595562
    596563/*
    597  *  tcp_is_swbuf_full_cs -- 送信ウィンドバッファが満杯かチェックする(専用)。
     564 *  tcp_is_swbuf_full_cs -- 送信ウィンドバッファが満杯かチェックする(専用)。
    598565 */
    599566
     
    606573
    607574/*
    608  *  tcp_init_swbuf -- 送信ウィンドバッファを初期化する(専用)。
     575 *  tcp_init_swbuf -- 送信ウィンドバッファを初期化する(専用)。
    609576 *
    610  *    注意: tcp_get_segment でネットワークバッファを獲得した
    611  *          直後に呼び出すこと。
     577 *    注意: tcp_get_segment でネットワークバッファを獲得した
     578 *          直後に呼び出すこと。
    612579 */
    613580
     
    615582tcp_init_swbuf (T_TCP_CEP *cep)
    616583{
    617         /* 送信ウインドバッファの使用中サイズをリセットする。*/
     584        /* 送信ウインドバッファの使用中サイズをリセットする。*/
    618585        cep->swbuf_count = 0;
    619586
    620         /* 送信ウインドバッファのアドレスを設定する。*/
     587        /* 送信ウインドバッファのアドレスを設定する。*/
    621588        cep->sbuf_wptr = cep->sbuf_rptr = GET_TCP_SDU(cep->swbufq, IF_IP_TCP_NET_HDR_OFFSET(&cep->dstaddr.ipaddr));
    622589
    623         /* フラグを、ネットワークバッファ割当て済みに設定する。*/
     590        /* フラグを、ネットワークバッファ割当て済みに設定する。*/
    624591        cep->flags = (cep->flags & ~(TCP_CEP_FLG_WBCS_NBUF_REQ | TCP_CEP_FLG_WBCS_MASK))
    625592                                 |   TCP_CEP_FLG_WBCS_NBUF_READY;
     
    627594
    628595/*
    629  *  tcp_push_res_nbuf -- ネットワークバッファを予約する(専用)。
     596 *  tcp_push_res_nbuf -- ネットワークバッファを予約する(専用)。
    630597 */
    631598
     
    645612                if ((cep->flags & TCP_CEP_FLG_WBCS_MASK) == TCP_CEP_FLG_WBCS_NBUF_PEND) {
    646613
    647                         /* ネットワークバッファを予約する。*/
     614                        /* ネットワークバッファを予約する。*/
    648615                        cep->swbufq = nbuf;
    649616                        nbuf = NULL;
    650617
    651                         /* フラグを予約に設定する。*/
     618                        /* フラグを予約に設定する。*/
    652619                        cep->flags = (cep->flags & ~TCP_CEP_FLG_WBCS_MASK) | TCP_CEP_FLG_WBCS_NBUF_RSVD;
    653620                        sel_ix = ix;
     
    664631
    665632/*
    666  *  tcp_pull_res_nbuf -- 予約してあるネットワークバッファ返す(専用)。
     633 *  tcp_pull_res_nbuf -- 予約してあるネットワークバッファ返す(専用)。
    667634 */
    668635
     
    676643        if ((cep->flags & TCP_CEP_FLG_WBCS_MASK) == TCP_CEP_FLG_WBCS_NBUF_RSVD) {
    677644
    678                 /* 予約してあるネットワークバッファを返す。*/
     645                /* 予約してあるネットワークバッファを返す。*/
    679646                nbuf = cep->swbufq;
    680647                cep->swbufq = NULL;
    681648
    682                 /* TCP 出力タスクを起動する。*/
     649                /* TCP 出力タスクを起動する。*/
    683650                sig_sem(SEM_TCP_POST_OUTPUT);
    684651                }
     
    698665
    699666/*
    700  *  TCP 通信端点の受信ウィンドバッファの省コピー機能が有効な場合
    701  *  ただし、通信端点の受信ウィンドバッファ(cep->rbuf)の値により、
    702  *  TCP 通信端点毎に受信ウィンドバッファの省コピー機能を使用するか、
    703  *  使用しないかを切り替える。
    704  */
    705 
    706 /*
    707  *  tcp_drop_rwbuf -- 受信ウィンドバッファキューの最初のネットワークバッファを解放する。
     667 *  TCP 通信端点の受信ウィンドバッファの省コピー機能が有効な場合
     668 *  ただし、通信端点の受信ウィンドバッファ(cep->rbuf)の値により、
     669 *  TCP 通信端点毎に受信ウィンドバッファの省コピー機能を使用するか、
     670 *  使用しないかを切り替える。
     671 */
     672
     673/*
     674 *  tcp_drop_rwbuf -- 受信ウィンドバッファキューの最初のネットワークバッファを解放する。
    708675 */
    709676
     
    718685
    719686/*
    720  *  tcp_read_rwbuf -- 受信ウィンドバッファから指定されたオクテット分読み出す。
     687 *  tcp_read_rwbuf -- 受信ウィンドバッファから指定されたオクテット分読み出す。
    721688 */
    722689
     
    731698
    732699/*
    733  *  tcp_get_rwbuf_addr -- 受信ウィンドバッファの空きアドレスを獲得する。
     700 *  tcp_get_rwbuf_addr -- 受信ウィンドバッファの空きアドレスを獲得する。
    734701 */
    735702
     
    744711
    745712/*
    746  *  tcp_free_rwbufq -- 受信ウィンドバッファキューを解放する。
     713 *  tcp_free_rwbufq -- 受信ウィンドバッファキューを解放する。
    747714 */
    748715
     
    755722
    756723/*
    757  *  tcp_write_rwbuf -- 受信ウィンドバッファにデータを書き込む。
     724 *  tcp_write_rwbuf -- 受信ウィンドバッファにデータを書き込む。
    758725 */
    759726
     
    770737
    771738/*
    772  *  TCP 通信端点の受信ウィンドバッファの省コピー機能が有効
    773  */
    774 
    775 /*
    776  *  tcp_drop_rwbuf -- 受信ウィンドバッファキューの最初のネットワークバッファを解放する。
     739 *  TCP 通信端点の受信ウィンドバッファの省コピー機能が有効
     740 */
     741
     742/*
     743 *  tcp_drop_rwbuf -- 受信ウィンドバッファキューの最初のネットワークバッファを解放する。
    777744 */
    778745
     
    787754                cep->rwbuf_count -= len;
    788755
    789                 /* ネットワークバッファにデータが無くなったら解放する。*/
     756                /* ネットワークバッファにデータが無くなったら解放する。*/
    790757                if (len == qhdr->slen) {
    791758                        T_NET_BUF *next;
     
    809776
    810777/*
    811  *  tcp_read_rwbuf -- 受信ウィンドバッファから指定されたオクテット分読み出す。
     778 *  tcp_read_rwbuf -- 受信ウィンドバッファから指定されたオクテット分読み出す。
    812779 */
    813780
     
    819786        uint8_t         *buf = (uint8_t*)data;
    820787
    821         /* 通信端点をロックする。*/
     788        /* 通信端点をロックする。*/
    822789        syscall(wai_sem(cep->semid_lock));
    823790
    824791        /*
    825          *  受信ウィンドバッファキューにネットワークバッファが無くなるか
    826          *  len が 0 になるまで続ける。
     792         *  受信ウィンドバッファキューにネットワークバッファが無くなるか
     793         *  len が 0 になるまで続ける。
    827794         */
    828795        while (cep->rwbufq != NULL && len > 0) {
     
    830797
    831798                /*
    832                  *  len と受信ウィンドバッファキューのå
    833 ˆé ­ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒãƒƒãƒ•ã‚¡ã®
    834                  *  データ数の小さい方を移すデータ数にする。
     799                 *  len と受信ウィンドバッファキューの先頭ネットワークバッファの
     800                 *  データ数の小さい方を移すデータ数にする。
    835801                 */
    836802                if (len > qhdr->slen)
     
    844810
    845811                /*
    846                  *  受信ウィンドバッファキューのネットワークバッファに
    847                  *  データが無くなったら解放する。
     812                 *  受信ウィンドバッファキューのネットワークバッファに
     813                 *  データが無くなったら解放する。
    848814                 */
    849815                tcp_drop_rwbuf_cs(cep, blen);
     
    854820                }
    855821
    856         /* 通信端点のロックを解除する。*/
     822        /* 通信端点のロックを解除する。*/
    857823        syscall(sig_sem(cep->semid_lock));
    858824
     
    861827
    862828/*
    863  *  tcp_get_rwbuf_addr -- 受信ウィンドバッファの空きアドレスを獲得する。
     829 *  tcp_get_rwbuf_addr -- 受信ウィンドバッファの空きアドレスを獲得する。
    864830 */
    865831
     
    870836        uint_t          len;
    871837
    872         /* 通信端点をロックする。*/
     838        /* 通信端点をロックする。*/
    873839        syscall(wai_sem(cep->semid_lock));
    874840
    875841        if (cep->rwbufq == NULL) {
    876842
    877                 /* 受信ウィンドバッファがå
    878 ¨ã¦é–‹æ”¾ã•ã‚Œã¦ã„るとき。*/
     843                /* 受信ウィンドバッファが全て開放されているとき。*/
    879844                *p_buf = NULL;
    880845                len = 0;
     
    882847        else {
    883848
    884                 /* 受信ウィンドバッファのデータのアドレスのå
    885 ˆé ­ã‚’設定する。*/
     849                /* 受信ウィンドバッファのデータのアドレスの先頭を設定する。*/
    886850                qhdr = GET_TCP_Q_HDR(cep->rwbufq, GET_IP_TCP_Q_HDR_OFFSET(cep->rwbufq));
    887851                *p_buf = GET_TCP_SDU(cep->rwbufq, GET_IP_TCP_Q_HDR_OFFSET(cep->rwbufq)) + qhdr->soff;
    888852
    889                 /* 受信ウィンドバッファのデータ長を計算する。*/
     853                /* 受信ウィンドバッファのデータ長を計算する。*/
    890854                len = qhdr->slen;
    891855                }
    892856
    893         /* 通信端点のロックを解除する。*/
     857        /* 通信端点のロックを解除する。*/
    894858        syscall(sig_sem(cep->semid_lock));
    895859
    896         /* 受信ウィンドバッファのデータ長を設定し、その値を返す。*/
     860        /* 受信ウィンドバッファのデータ長を設定し、その値を返す。*/
    897861        cep->rcv_buf_len = len;
    898862        return len;
     
    900864
    901865/*
    902  *  tcp_free_rwbufq -- 受信ウィンドバッファキューを解放する。
     866 *  tcp_free_rwbufq -- 受信ウィンドバッファキューを解放する。
    903867 *
    904  *    注意:
    905  *      å¿
    906 è¦ã§ã‚れば、この関数を呼び出す前に、通信端点をロックし、
    907  *      戻った後、解除するå¿
    908 è¦ãŒã‚る。
     868 *    注意:
     869 *      必要であれば、この関数を呼び出す前に、通信端点をロックし、
     870 *      戻った後、解除する必要がある。
    909871 */
    910872
     
    928890                        }
    929891
    930                 /* 受信ウィンドバッファの使用中サイズをリセットする。*/
     892                /* 受信ウィンドバッファの使用中サイズをリセットする。*/
    931893                cep->rwbuf_count = 0;
    932894                }
     
    934896
    935897/*
    936  *  tcp_write_rwbuf -- 受信ウィンドバッファにデータを書き込む。
     898 *  tcp_write_rwbuf -- 受信ウィンドバッファにデータを書き込む。
    937899 *
    938  *    注意:
    939  *      å
    940 ¥åŠ› input は、T_TCP_Q_HDR によりリンクされ、
    941  *      並べ替えが終了していなければならない。また、
    942  *      追加するデータは、受信ウィンドバッファに収まること。
     900 *    注意:
     901 *      入力 input は、T_TCP_Q_HDR によりリンクされ、
     902 *      並べ替えが終了していなければならない。また、
     903 *      追加するデータは、受信ウィンドバッファに収まること。
    943904 */
    944905
     
    950911        uint_t          inlen, last;
    951912
    952         /* 通信端点をロックする。*/
     913        /* 通信端点をロックする。*/
    953914        syscall(wai_sem(cep->semid_lock));
    954915
     
    963924
    964925                /*
    965                  *  TCP 通信端点の受信ウィンドバッファの省コピー機能の、
    966                  *  受信ウィンドバッファキューの最大エントリ数をè¶
    967 ãˆã‚‹ã¨ãã¯ã€
    968                  *  受信したセグメントを破棄する。
    969                  *  ただし、SDU 長が 0 のセグメントと FIN セグメントは破棄しない。
    970                  *  なお、正常に受信したセグメントも破棄するため、再送回数が増加する。
     926                 *  TCP 通信端点の受信ウィンドバッファの省コピー機能の、
     927                 *  受信ウィンドバッファキューの最大エントリ数を超えるときは、
     928                 *  受信したセグメントを破棄する。
     929                 *  ただし、SDU 長が 0 のセグメントと FIN セグメントは破棄しない。
     930                 *  なお、正常に受信したセグメントも破棄するため、再送回数が増加する。
    971931                 */
    972932                syscall(rel_net_buf(input));
    973933
    974                 /* 通信端点のロックを解除する。*/
     934                /* 通信端点のロックを解除する。*/
    975935                syscall(sig_sem(cep->semid_lock));
    976936                return;
     
    983943        qhdr  = (T_TCP_Q_HDR*)GET_TCP_HDR(input, thoff);
    984944
    985         /* 受信済みシーケンス番号を更新する。*/
     945        /* 受信済みシーケンス番号を更新する。*/
    986946        cep->rcv_nxt += inlen;
    987947
    988         /* 緊急データの SDU 補正を行う。*/
     948        /* 緊急データの SDU 補正を行う。*/
    989949        if (qhdr->urp > 0 && inlen > 0) {
    990950                inlen      -= qhdr->urp;
     
    995955        last  = cep->rwbuf_count;
    996956
    997         /* ネットワークバッファを受信ウィンドバッファキューの最後に連結する。*/
     957        /* ネットワークバッファを受信ウィンドバッファキューの最後に連結する。*/
    998958        qhdr->next = NULL;
    999959        nextp = &cep->rwbufq;
     
    1003963
    1004964        /*
    1005          *  FIN フラグが付いたセグメントは inlen == 0 になることもある。
    1006          *  これは、アプリケーションに、相手からこれ以上データが送られて
    1007          *  こないことを知らせるためである。
     965         *  FIN フラグが付いたセグメントは inlen == 0 になることもある。
     966         *  これは、アプリケーションに、相手からこれ以上データが送られて
     967         *  こないことを知らせるためである。
    1008968         */
    1009969        if (inlen > 0) {
     
    1013973                }
    1014974
    1015         /* 通信端点のロックを解除する。*/
     975        /* 通信端点のロックを解除する。*/
    1016976        syscall(sig_sem(cep->semid_lock));
    1017977
    1018978#ifdef TCP_CFG_NON_BLOCKING
    1019979
    1020         if (cep->rcv_nblk_tfn == TFN_TCP_RCV_BUF) {     /* ノンブロッキングコール */
     980        if (cep->rcv_nblk_tfn == TFN_TCP_RCV_BUF) {     /* ノンブロッキングコール */
    1021981
    1022982                int_t   len;
     
    1026986
    1027987                /*
    1028                  *  FIN フラグが付いたセグメントは inlen == 0 になることもある。
    1029                  *  これは、アプリケーションに、相手からこれ以上データが送られて
    1030                  *  こないことを知らせるためである。
     988                 *  FIN フラグが付いたセグメントは inlen == 0 になることもある。
     989                 *  これは、アプリケーションに、相手からこれ以上データが送られて
     990                 *  こないことを知らせるためである。
    1031991                 */
    1032992                if (len > 0 || inlen == 0) {
    1033993
    1034                         /* tcp_rcv_buf の割当て長を設定する。*/
     994                        /* tcp_rcv_buf の割当て長を設定する。*/
    1035995                        cep->rcv_buf_len = len;
    1036996
    1037                         /* 受信ウィンドバッファのアドレスを返す。*/
     997                        /* 受信ウィンドバッファのアドレスを返す。*/
    1038998                        *cep->rcv_p_buf = GET_TCP_SDU(cep->rwbufq,
    1039999                                          GET_IP_TCP_Q_HDR_OFFSET(cep->rwbufq)) + qhdr->soff;
     
    10521012
    10531013                                /*
    1054                                  *  通信端点をロックして、
    1055                                  *  受信ウィンドバッファキューのネットワークバッファを解放する。
     1014                                 *  通信端点をロックして、
     1015                                 *  受信ウィンドバッファキューのネットワークバッファを解放する。
    10561016                                 */
    10571017                                syscall(wai_sem(cep->semid_lock));
     
    10611021                        }
    10621022
    1063                 /* 記憶されているタスク ID と API 機能コードをクリアーする。*/
     1023                /* 記憶されているタスク ID と API 機能コードをクリアーする。*/
    10641024                cep->rcv_tskid = TA_NULL;
    10651025                cep->rcv_tfn   = cep->rcv_nblk_tfn = TFN_TCP_UNDEF;
    10661026                }
    10671027
    1068         else if (cep->rcv_nblk_tfn == TFN_TCP_RCV_DAT) {        /* ノンブロッキングコール */
     1028        else if (cep->rcv_nblk_tfn == TFN_TCP_RCV_DAT) {        /* ノンブロッキングコール */
    10691029                int_t   len;
    10701030
    1071                 /* 受信ウィンドバッファからデータを取り出す。*/
     1031                /* 受信ウィンドバッファからデータを取り出す。*/
    10721032                if ((len = tcp_read_rwbuf_cs(cep, cep->rcv_data, (uint_t)cep->rcv_len)) > 0) {
    1073                         /* 相手にウィンドウサイズが変わったことを知らせるため出力をポストする。*/
     1033                        /* 相手にウィンドウサイズが変わったことを知らせるため出力をポストする。*/
    10741034                        cep->flags |= TCP_CEP_FLG_POST_OUTPUT;
    10751035                        sig_sem(SEM_TCP_POST_OUTPUT);
     
    10771037
    10781038                /*
    1079                  *  FIN フラグが付いたセグメントは inlen == 0 になることもある。
    1080                  *  これは、アプリケーションに、相手からこれ以上データが送られて
    1081                  *  こないことを知らせるためである。
     1039                 *  FIN フラグが付いたセグメントは inlen == 0 になることもある。
     1040                 *  これは、アプリケーションに、相手からこれ以上データが送られて
     1041                 *  こないことを知らせるためである。
    10821042                 */
    10831043                if (len > 0 || inlen == 0) {
     
    10941054                        }
    10951055
    1096                 /* 記憶されているタスク ID と API 機能コードをクリアーする。*/
     1056                /* 記憶されているタスク ID と API 機能コードをクリアーする。*/
    10971057                cep->rcv_tskid = TA_NULL;
    10981058                cep->rcv_tfn   = cep->rcv_nblk_tfn = TFN_TCP_UNDEF;
     
    11041064                if (inlen == 0 && cep->rwbuf_count == 0) {
    11051065                        /*
    1106                          *  受信ウィンドバッファå†
    1107 ã®ãƒ‡ãƒ¼ã‚¿æ•°ãŒ 0 で、
    1108                          *  相手から FIN フラグが付いたセグメントを受信したときは、
    1109                          *  通信端点をロックして、
    1110                          *  受信ウィンドバッファキューのネットワークバッファを解放する。
     1066                         *  受信ウィンドバッファ内のデータ数が 0 で、
     1067                         *  相手から FIN フラグが付いたセグメントを受信したときは、
     1068                         *  通信端点をロックして、
     1069                         *  受信ウィンドバッファキューのネットワークバッファを解放する。
    11111070                         */
    11121071                        syscall(wai_sem(cep->semid_lock));
     
    11161075
    11171076                /*
    1118                  *  受信ウィンドバッファにデータがå
    1119 ¥ã‚‹ã‹ã€ inlen == 0 の時、å
    1120 ¥åŠ›ã‚¿ã‚¹ã‚¯ã‚’起床する。
    1121                  *  FIN フラグが付いたセグメントは inlen == 0 になることもある。
    1122                  *  これは、アプリケーションに、相手からこれ以上データが送られて
    1123                  *  こないことを知らせるためである。
     1077                 *  受信ウィンドバッファにデータが入るか、 inlen == 0 の時、入力タスクを起床する。
     1078                 *  FIN フラグが付いたセグメントは inlen == 0 になることもある。
     1079                 *  これは、アプリケーションに、相手からこれ以上データが送られて
     1080                 *  こないことを知らせるためである。
    11241081                 */
    11251082                if ((last == 0 && cep->rwbuf_count > 0) || inlen == 0) {
Note: See TracChangeset for help on using the changeset viewer.