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.c

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