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/ip_input.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$
     
    136124
    137125/*
    138  *  変数
     126 *  変数
    139127 */
    140128
     
    142130
    143131/*
    144  *  SNMP の 管理æƒ
    145 å ±ãƒ™ãƒ¼ã‚¹ (MIB)
     132 *  SNMP の 管理情報ベース (MIB)
    146133 */
    147134
     
    153140
    154141/*
    155  *  データグラム再構成キュー
     142 *  データグラム再構成キュー
    156143 */
    157144
     
    160147
    161148/*
    162  *  関数
     149 *  関数
    163150 */
    164151
     
    167154
    168155/*
    169  *  ip_get_frag_queue -- データグラム再構成キューを獲得する。
     156 *  ip_get_frag_queue -- データグラム再構成キューを獲得する。
    170157 */
    171158
     
    177164
    178165/*
    179  *  ip_freef -- データグラム再構成キューを解放する。
     166 *  ip_freef -- データグラム再構成キューを解放する。
    180167 */
    181168
     
    195182
    196183/*
    197  *  ip_frag_timer -- データグラム再構成管理タイマ
     184 *  ip_frag_timer -- データグラム再構成管理タイマ
    198185 */
    199186
     
    218205
    219206/*
    220  *  ip_reass -- データグラムを再構成する。
     207 *  ip_reass -- データグラムを再構成する。
    221208 */
    222209
     
    242229
    243230        /*
    244          *  ID、IPアドレス、上位プロトコルが異なるフラグメントがキューに有れば破棄する。
     231         *  ID、IPアドレス、上位プロトコルが異なるフラグメントがキューに有れば破棄する。
    245232         */
    246233        frag = ip_frag_queue[ix];
     
    259246                NET_COUNT_IP4(net_count_ip4[NC_IP4_FRAG_IN], 1);
    260247
    261                 /* 新規の ID なら、宛å
    262 ˆã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’保存して、キューにつなぐ。*/
     248                /* 新規の ID なら、宛先アドレスを保存して、キューにつなぐ。*/
    263249                frag_dst  [ix] = dst;
    264250                ip_frag_queue[ix] = input;
     
    266252                input = NULL;
    267253
    268                 /* 再構成タイムアウトを設定する。*/
     254                /* 再構成タイムアウトを設定する。*/
    269255                ip4h->ttl = IP4_FRAGTTL;
    270256                }
    271257        else {
    272258
    273                 /* 正しい位置に挿å
    274 ¥ã™ã‚‹ã€‚*/
     259                /* 正しい位置に挿入する。*/
    275260                prev = NULL;
    276261                while (frag != NULL &&
     
    289274                input = NULL;
    290275
    291                 /* å
    292 ¨ã¦ã®ãƒ•ãƒ©ã‚°ãƒ¡ãƒ³ãƒˆãŒæƒã£ã¦ã„るか調べる。*/
     276                /* 全てのフラグメントが揃っているか調べる。*/
    293277                off = 0;
    294278                for (frag = ip_frag_queue[ix]; frag != NULL; frag = GET_QIP4_HDR(frag)->next) {
    295279                        if ((IP4_FLGOFF_OFF(GET_QIP4_HDR(frag)->flg_off) << 3) != off) {
    296                                 /* 途中が抜けていたら終了する。*/
     280                                /* 途中が抜けていたら終了する。*/
    297281                                syscall(sig_sem(SEM_IP4_FRAG_QUEUE));
    298282                                return NULL;
     
    302286                        }
    303287
    304                 /* å
    305 ¨ã¦ã®ãƒ•ãƒ©ã‚°ãƒ¡ãƒ³ãƒˆãŒæƒã£ãŸã‚‰å†æ§‹æˆã™ã‚‹ã€‚*/
     288                /* 全てのフラグメントが揃ったら再構成する。*/
    306289                if ((GET_QIP4_HDR(prev)->flg_off & IP4_MF) == 0) {
    307290
    308                         /* ネットワークバッファを獲得する。*/
     291                        /* ネットワークバッファを獲得する。*/
    309292                        if (tget_net_buf(&input, IF_IP4_HDR_SIZE + off, TMO_IP4_FRAG_GET_NET_BUF) == E_OK) {
    310293                                NET_COUNT_IP4(net_count_ip4[NC_IP4_FRAG_IN_OK], 1);
    311294                                NET_COUNT_MIB(ip_stats.ipReasmOKs, 1);
    312295
    313                                 /* IPv4 ヘッダを設定する。*/
     296                                /* IPv4 ヘッダを設定する。*/
    314297                                frag  = ip_frag_queue[ix];
    315298                                ip4h  = GET_IP4_HDR(input);
     
    321304                                ip4h->flg_off = ip4h->id = 0;
    322305
    323                                 /* データグラムを再構成する。*/
     306                                /* データグラムを再構成する。*/
    324307                                off = IP4_HDR_SIZE;
    325308                                while (frag != NULL) {
     
    335318                                NET_COUNT_MIB(ip_stats.ipReasmFails, 1);
    336319                                }
    337                         /* キューを空にする。*/
     320                        /* キューを空にする。*/
    338321                        ip_freef(ix);
    339322                        }
     
    346329
    347330/*
    348  *  ip_init -- IP の初期化
     331 *  ip_init -- IP の初期化
    349332 */
    350333
     
    356339
    357340/*
    358  *  ip_remove_options -- IPv4 ヘッダのオプションを削除し、以降を前に詰める。
     341 *  ip_remove_options -- IPv4 ヘッダのオプションを削除し、以降を前に詰める。
    359342 */
    360343
     
    378361
    379362/*
    380  *  ip_input -- IP のå
    381 ¥åŠ›é–¢æ•°
     363 *  ip_input -- IP の入力関数
    382364 */
    383365
    384366#if defined(SUPPORT_IPSEC)
    385367/*
    386  * TODO: IPsec SPを検索し、パケットをリジェクトするかどうか判定する処理を実è£
    387 ã™ã‚‹
     368 * TODO: IPsec SPを検索し、パケットをリジェクトするかどうか判定する処理を実装する
    388369 */
    389370#endif /* of defined(SUPPORT_IPSEC) */
     
    401382        NET_COUNT_MIB(ip_stats.ipInReceives, 1);
    402383
    403         /* IP ヘッダの長さをチェックする。*/
     384        /* IP ヘッダの長さをチェックする。*/
    404385        if (input->len < IF_IP4_HDR_SIZE) {
    405386                NET_COUNT_IP4(net_count_ip4[NC_IP4_IN_ERR_SHORT], 1);
     
    411392        hlen = GET_IP4_HDR_SIZE(ip4h);
    412393
    413         /* バージョンをチェックする。*/
     394        /* バージョンをチェックする。*/
    414395        if (IP4_VHL_V(ip4h->vhl) != IPV4_VERSION) {
    415396                NET_COUNT_IP4(net_count_ip4[NC_IP4_IN_ERR_VER], 1);
     
    418399                }
    419400
    420         /* IP ヘッダの長さをチェックし、オプションを解析する。*/
     401        /* IP ヘッダの長さをチェックし、オプションを解析する。*/
    421402        if (hlen > IP4_HDR_SIZE) {
    422403                NET_COUNT_IP4(net_count_ip4[NC_IP4_OPTS], 1);
    423                 /* %%% オプションの解析 %%% */
    424                 }
    425 
    426         /* データグラム長をチェックする。*/
     404                /* %%% オプションの解析 %%% */
     405                }
     406
     407        /* データグラム長をチェックする。*/
    427408        if (ntohs(ip4h->len) > input->len - IF_HDR_SIZE) {
    428409                NET_COUNT_IP4(net_count_ip4[NC_IP4_IN_ERR_SHORT], 1);
     
    431412                }
    432413
    433         /* ネットワークバッファの長さをデータグラム長に調整する。*/
     414        /* ネットワークバッファの長さをデータグラム長に調整する。*/
    434415        input->len = (uint16_t)(ntohs(ip4h->len) + IF_HDR_SIZE);
    435416
    436         /* チェックサムをチェックする。*/
     417        /* チェックサムをチェックする。*/
    437418        if (in_cksum(ip4h, hlen) != 0) {
    438419                NET_COUNT_IP4(net_count_ip4[NC_IP4_IN_ERR_CKSUM], 1);
     
    441422                }
    442423
    443         /* IP ヘッダの長さをチェックし、上位が ICMP 以外はオプションを消去する。*/
     424        /* IP ヘッダの長さをチェックし、上位が ICMP 以外はオプションを消去する。*/
    444425        if (hlen > IP4_HDR_SIZE && ip4h->proto != IPPROTO_ICMP) {
    445426                memset((uint8_t*)ip4h + IP4_HDR_SIZE, 0, hlen - IP4_HDR_SIZE);
    446427                }
    447428
    448         /* 送信å
    449 ƒã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’チェックする。*/
     429        /* 送信元アドレスをチェックする。*/
    450430        src = ntohl(ip4h->src);
    451431        bc  = (ifp->in_ifaddr.addr & ifp->in_ifaddr.mask) | ~ifp->in_ifaddr.mask;
     
    469449#endif  /* of #ifdef SUPPORT_LOOP */
    470450
    471         /* あてå
    472 ˆã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’チェックする。*/
     451        /* あて先アドレスをチェックする。*/
    473452        dst = ntohl(ip4h->dst);
    474453
     
    476455
    477456        /*
    478          *  DHCP_CFG が定義されているときは、ローカルアドレスが未定義の
    479          *  場合もデータグラムを受信する。
     457         *  DHCP_CFG が定義されているときは、ローカルアドレスが未定義の
     458         *  場合もデータグラムを受信する。
    480459         */
    481460
     
    511490#ifdef IP4_CFG_FRAGMENT
    512491
    513         /* 分割されているかチェックする。*/
     492        /* 分割されているかチェックする。*/
    514493        if (ntohs(ip4h->flg_off) & (IP4_MF | IP4_OFFMASK)) {
    515494                if ((input = ip_reass(ip4h, input)) == NULL)
     
    519498#else   /* of #ifdef IP4_CFG_FRAGMENT */
    520499
    521         /* 分割されているかチェックする。*/
     500        /* 分割されているかチェックする。*/
    522501        if (ntohs(ip4h->flg_off) & (IP4_MF | IP4_OFFMASK)) {
    523502                T_IN4_ADDR      src;
     
    537516
    538517#if defined(SUPPORT_IPSEC)
    539         /* ここでipsec4_in_rejectを実行する */
     518        /* ここでipsec4_in_rejectを実行する */
    540519        if ((ip4h->proto != IPPROTO_ESP) && ipsec4_in_reject (input)) {
    541520                goto buf_rel;
     
    543522#endif /* of #if defined(SUPPORT_IPSEC) */
    544523
    545         /* プロトコルを選択する */
     524        /* プロトコルを選択する */
    546525        switch (ip4h->proto) {
    547526
     
    580559                NET_COUNT_MIB(ip_stats.ipInUnknownProtos, 1);
    581560
    582                 /* ローカル IP アドレスに届いたデータグラムのみ ICMP エラーを通知する。*/
     561                /* ローカル IP アドレスに届いたデータグラムのみ ICMP エラーを通知する。*/
    583562                if (dst == ifp->in_ifaddr.addr) {
    584563                        T_IN4_ADDR      src;
     
    589568                        }
    590569                /*
    591                  *  icmp_error では、ネットワークバッファ input を返却しないので
    592                  *  開放してから終了する。
     570                 *  icmp_error では、ネットワークバッファ input を返却しないので
     571                 *  開放してから終了する。
    593572                 */
    594573                break;
Note: See TracChangeset for help on using the changeset viewer.