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/netinet6/frag6.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$
     
    121109
    122110/*
    123  *  データグラム再構成キューé
    124 åˆ—
     111 *  データグラム再構成キュー配列
    125112 */
    126113
     
    129116
    130117/*
    131  *  ip6_get_frag_queue -- データグラム再構成キューを獲得する。
     118 *  ip6_get_frag_queue -- データグラム再構成キューを獲得する。
    132119 */
    133120
     
    139126
    140127/*
    141  *  frag6_free_queue -- データグラム再構成キューを解放する。
     128 *  frag6_free_queue -- データグラム再構成キューを解放する。
    142129 *
    143  *    注意: データグラム再構成キューé
    144 åˆ—をロックしてから呼び出すこと。
     130 *    注意: データグラム再構成キュー配列をロックしてから呼び出すこと。
    145131 */
    146132
     
    162148
    163149/*
    164  *  frag6_timer -- データグラム再構成管理タイマ
     150 *  frag6_timer -- データグラム再構成管理タイマ
    165151 */
    166152
     
    184170
    185171                                        /*
    186                                          *  å
    187 ˆé ­ã®æ–­ç‰‡ã®ã‚ªãƒ•ã‚»ãƒƒãƒˆãŒ 0 の時のみ
    188                                          *  ICMPv6 エラーメッセージを送信する。
     172                                         *  先頭の断片のオフセットが 0 の時のみ
     173                                         *  ICMPv6 エラーメッセージを送信する。
    189174                                         */
    190175
    191                                         /* å
    192 ˆé ­ã®æ–­ç‰‡ã‚’データグラム再構成キューから外す。*/
     176                                        /* 先頭の断片をデータグラム再構成キューから外す。*/
    193177                                        ip6_frag_queue[ix] = qip6h->next_frag;
    194178
    195                                         /* あてå
    196 ˆã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’å
    197 ƒã«æˆ»ã™ã€‚*/
     179                                        /* あて先アドレスを元に戻す。*/
    198180                                        GET_IP6_HDR(frag)->dst = ip6_frag_dest[ix];
    199181
    200                                         /* ICMPv6 エラーメッセージを送信する。*/
     182                                        /* ICMPv6 エラーメッセージを送信する。*/
    201183                                        icmp6_error(frag, ICMP6_TIME_EXCEEDED,
    202184                                                          ICMP6_TIME_EXCEED_REASSEMBLY, 0);
    203185                                        }
    204186
    205                                 /* データグラム再構成キューを解放する。*/
     187                                /* データグラム再構成キューを解放する。*/
    206188                                NET_COUNT_IP6(net_count_ip6[NC_IP6_FRAG_IN_TMOUT], 1);
    207189                                NET_COUNT_IP6(net_count_ip6[NC_IP6_FRAG_IN_DROP], 1);
     
    216198
    217199/*
    218  *  frag6_input -- 断片ヘッダのå
    219 ¥åŠ›é–¢æ•°
     200 *  frag6_input -- 断片ヘッダの入力関数
    220201 */
    221202
     
    241222#endif  /* #ifdef IP6_CFG_FRAGMENT */
    242223
    243         /* ネットワークバッファの残りの長さをチェックする。*/
     224        /* ネットワークバッファの残りの長さをチェックする。*/
    244225        if (input->len - off < sizeof(T_IP6_FRAG_HDR))
    245226                goto buf_rel;
    246227
    247228        /*
    248          *  巨大ペイロードオプションと断片ヘッダを同時に使用することは
    249          *  できない。ペイロード長がが 0 なら、巨大ペイロードオプションが
    250          *  指定されていることになるので ICMP でエラーを送信è€
    251 ã«
    252          *  通知する。
     229         *  巨大ペイロードオプションと断片ヘッダを同時に使用することは
     230         *  できない。ペイロード長がが 0 なら、巨大ペイロードオプションが
     231         *  指定されていることになるので ICMP でエラーを送信者に
     232         *  通知する。
    253233         */
    254234        ip6h = GET_IP6_HDR(input);
     
    262242
    263243        /*
    264          *  オフセットが 0 で、最終フラグメントであれば、
    265          *  分割不要のデータグラムなので、
    266          *  次ヘッダを指す変数を調整して終了する。
     244         *  オフセットが 0 で、最終フラグメントであれば、
     245         *  分割不要のデータグラムなので、
     246         *  次ヘッダを指す変数を調整して終了する。
    267247         */
    268248        ip6fh = (T_IP6_FRAG_HDR *)(input->buf + off);
     
    276256
    277257        /*
    278          *  ペイロード長をチェックする。
     258         *  ペイロード長をチェックする。
    279259         */
    280260        if ((ip6fh->off_flag & IP6F_MORE_FRAG) &&
     
    291271
    292272        /*
    293          *  データグラム再構成キューé
    294 åˆ—から、対応するエントリを探す。
     273         *  データグラム再構成キュー配列から、対応するエントリを探す。
    295274         */
    296275        for (ix = NUM_IP6_FRAG_QUEUE; ix -- > 0; ) {
     
    310289
    311290                /*
    312                  *  断片の正当性をチェックする。
     291                 *  断片の正当性をチェックする。
    313292                 */
    314293                unfraglen = 0;
     
    317296
    318297                        /*
    319                          *  å
    320 ¥åŠ›ã—た断片がå
    321 ˆé ­ã®æ–­ç‰‡
    322                          *  分割できない部分の長さ unfraglen を計算する。
     298                         *  入力した断片が先頭の断片
     299                         *  分割できない部分の長さ unfraglen を計算する。
    323300                         */
    324301                        unfraglen = (off - IF_HDR_SIZE) - sizeof(T_IP6_HDR);
     
    352329
    353330                /*
    354                  *  ip6fq == NULL であれば、対応するエントリは無いので、
    355                  *  データグラム再構成キューé
    356 åˆ—に、エントリを追加する。
     331                 *  ip6fq == NULL であれば、対応するエントリは無いので、
     332                 *  データグラム再構成キュー配列に、エントリを追加する。
    357333                 */
    358334                for (ix = NUM_IP6_FRAG_QUEUE; ix -- > 0; ) {
    359335
    360                         /* 空きエントリを探す。*/
     336                        /* 空きエントリを探す。*/
    361337                        if (ip6_frag_queue[ix] == NULL) {
    362338                                ip6fq = &ip6_frag_queue[ix];
     
    366342
    367343                /*
    368                  *  ip6fq == NULL であれば、空きエントリが無いので、
    369                  *  タイムアウト(hlim)が短いエントリを開放する。
     344                 *  ip6fq == NULL であれば、空きエントリが無いので、
     345                 *  タイムアウト(hlim)が短いエントリを開放する。
    370346                 */
    371347                if (ip6fq == NULL) {
     
    385361
    386362                /*
    387                  *  エントリを設定する。
     363                 *  エントリを設定する。
    388364                 */
    389365                *ip6fq = input;
     
    398374
    399375                /*
    400                  *  断片の正当性をチェックする。
     376                 *  断片の正当性をチェックする。
    401377                 */
    402378                unfraglen = 0;
     
    405381
    406382                        /*
    407                          *  データグラム再構成キューの最初の断片がå
    408 ˆé ­ã®æ–­ç‰‡
    409                          *  分割できない部分の長さ unfraglen を計算する。
     383                         *  データグラム再構成キューの最初の断片が先頭の断片
     384                         *  分割できない部分の長さ unfraglen を計算する。
    410385                         */
    411386                        unfraglen = (GET_QIP6_HDR(*ip6fq)->foff - IF_HDR_SIZE) - sizeof(T_IP6_HDR);
     
    416391
    417392                        /*
    418                          *  å
    419 ¥åŠ›ã—た断片がå
    420 ˆé ­ã®æ–­ç‰‡
    421                          *  分割できない部分の長さ unfraglen を計算する。
     393                         *  入力した断片が先頭の断片
     394                         *  分割できない部分の長さ unfraglen を計算する。
    422395                         */
    423396                        unfraglen = (off - IF_HDR_SIZE) - sizeof(T_IP6_HDR);
     
    453426
    454427                        /*
    455                          *  å
    456 ¥åŠ›ã—た断片がå
    457 ˆé ­ã®æ–­ç‰‡
    458                          *  データグラム再構成キューの最後の断片が、
    459                          *  データグラムの最大長をè¶
    460 ãˆã¦ã„ないかチェックする。
    461                          */
    462 
    463                         /* 最後の断片を探索する。*/
     428                         *  入力した断片が先頭の断片
     429                         *  データグラム再構成キューの最後の断片が、
     430                         *  データグラムの最大長を超えていないかチェックする。
     431                         */
     432
     433                        /* 最後の断片を探索する。*/
    464434                        next = *ip6fq;
    465435                        while ((qip6h = GET_QIP6_HDR(next))->next_frag != NULL)
    466436                                next = qip6h->next_frag;
    467437
    468                         /* 最後の断片のオフセットと断片サイズを計算する。*/
     438                        /* 最後の断片のオフセットと断片サイズを計算する。*/
    469439                        qip6fh = (T_IP6_FRAG_HDR *)(next->buf + qip6h->foff);
    470440                        fragoff = ntohs(qip6fh->off_flag & IP6F_OFF_MASK);
     
    473443
    474444                                /*
    475                                  *  データグラムの最大長をè¶
    476 ãˆã¦ã„る場合は、
    477                                  *  データグラム再構成キューå
    478 ¨ä½“を破棄する。
     445                                 *  データグラムの最大長を超えている場合は、
     446                                 *  データグラム再構成キュー全体を破棄する。
    479447                                 */
    480448                                frag6_free_queue(ip6fq);
     
    484452                        }
    485453
    486                 /* ECN の正当性チェックは未実è£
    487  */
    488 
    489                 /*
    490                  *  断片をエントリに挿å
    491 ¥ã™ã‚‹ã€‚
    492                  *  データグラム再構成キューから、å
    493 ¥åŠ›ã—た断片より前の断片を探索する。
     454                /* ECN の正当性チェックは未実装 */
     455
     456                /*
     457                 *  断片をエントリに挿入する。
     458                 *  データグラム再構成キューから、入力した断片より前の断片を探索する。
    494459                 */
    495460                prev = NULL;
     
    505470
    506471                /*
    507                  *  prev は、å
    508 ¥åŠ›ã—た断片より前の断片。ただし NULL の場合は、
    509                  *  å
    510 ¥åŠ›ã—た断片がデータグラム再構成キューの中で最も前の断片。
    511                  *  next は、å
    512 ¥åŠ›ã—た断片より後の断片。ただし NULL の場合は、
    513                  *  å
    514 ¥åŠ›ã—た断片がデータグラム再構成キューの中で最も後の断片。
     472                 *  prev は、入力した断片より前の断片。ただし NULL の場合は、
     473                 *  入力した断片がデータグラム再構成キューの中で最も前の断片。
     474                 *  next は、入力した断片より後の断片。ただし NULL の場合は、
     475                 *  入力した断片がデータグラム再構成キューの中で最も後の断片。
    515476                 */
    516477                fragoff = ntohs(ip6fh->off_flag & IP6F_OFF_MASK);
     
    518479
    519480                        /*
    520                          *  前の断片と、å
    521 ¥åŠ›ã—た断片が重なっていないかチェックする。
     481                         *  前の断片と、入力した断片が重なっていないかチェックする。
    522482                         *
    523483                         *    qfragoff
     
    542502                        if (diff > 0) {
    543503
    544                                 /* 重なっていれば、å
    545 ¥åŠ›ã—た断片を破棄して終了する。*/
     504                                /* 重なっていれば、入力した断片を破棄して終了する。*/
    546505                                syscall(rel_net_buf(input));
    547506                                goto sig_ret;
     
    552511
    553512                        /*
    554                          *  後の断片と、å
    555 ¥åŠ›ã—た断片が重なっていないかチェックする。
     513                         *  後の断片と、入力した断片が重なっていないかチェックする。
    556514                         *
    557515                         *    fragoff
     
    576534                        if (diff > 0) {
    577535
    578                                 /* 重なっていれば、å
    579 ¥åŠ›ã—た断片を破棄して終了する。*/
     536                                /* 重なっていれば、入力した断片を破棄して終了する。*/
    580537                                syscall(rel_net_buf(input));
    581538                                goto sig_ret;
     
    583540                        }
    584541
    585                 /* å
    586 ¥åŠ›ã—た断片を設定する。*/
     542                /* 入力した断片を設定する。*/
    587543                qip6h  = GET_QIP6_HDR(input);
    588544                qip6h->foff = off;
     
    598554
    599555                /*
    600                  *  å
    601 ¨ã¦ã®æ–­ç‰‡ã‚’受信したかチェックする。
     556                 *  全ての断片を受信したかチェックする。
    602557                 */
    603558                plen = 0;
     
    608563                        if (ntohs(qip6fh->off_flag & IP6F_OFF_MASK) != plen) {
    609564
    610                                 /* 断片が連続していない。*/
     565                                /* 断片が連続していない。*/
    611566                                goto sig_ret;
    612567                                }
     
    616571                if (ntohs(qip6fh->off_flag & IP6F_MORE_FRAG) != 0) {
    617572
    618                         /* 最後の断片を受信していない。*/
     573                        /* 最後の断片を受信していない。*/
    619574                        goto sig_ret;
    620575                        }
    621576
    622577                /*
    623                  *  å
    624 ¨ã¦ã®æ–­ç‰‡ã‚’受信したので、再構成する。
    625                  */
    626 
    627                 /* ネットワークバッファを獲得する。*/
     578                 *  全ての断片を受信したので、再構成する。
     579                 */
     580
     581                /* ネットワークバッファを獲得する。*/
    628582                qip6h  = GET_QIP6_HDR(*ip6fq);
    629583                qip6fh = (T_IP6_FRAG_HDR *)((*ip6fq)->buf + qip6h->foff);
     
    631585
    632586                        /*
    633                          *  断片ヘッダの直前のヘッダの NEXT フィールドのアドレスを獲得し、
    634                          *  å
    635 ƒã«æˆ»ã™ã€‚
     587                         *  断片ヘッダの直前のヘッダの NEXT フィールドのアドレスを獲得し、
     588                         *  元に戻す。
    636589                         */
    637590                        if ((prev_next = ip6_get_prev_hdr(*ip6fq, qip6h->foff)) == NULL) {
     
    646599
    647600                        /*
    648                          *  IPv6 ヘッダと分割できない部分を
    649                          *  データグラム再構成キューの中のå
    650 ˆé ­ã®æ–­ç‰‡ã‹ã‚‰ã‚³ãƒ”ーする。
     601                         *  IPv6 ヘッダと分割できない部分を
     602                         *  データグラム再構成キューの中の先頭の断片からコピーする。
    651603                         */
    652604                        memcpy(input->buf, (*ip6fq)->buf, qip6h->foff);
    653605
    654                         /* 送信å
    655 ˆã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’å
    656 ƒã«æˆ»ã™ã€‚*/
     606                        /* 送信先アドレスを元に戻す。*/
    657607                        ip6h = GET_IP6_HDR(input);
    658608                        memcpy(&ip6h->dst, &ip6_frag_dest[ip6fq - ip6_frag_queue], sizeof(T_IN6_ADDR));
    659609
    660                         /* offp を、再構成した断片のå
    661 ˆé ­ã«è¨­å®šã™ã‚‹ã€‚*/
     610                        /* offp を、再構成した断片の先頭に設定する。*/
    662611                        *offp = qip6h->foff;
    663612
    664                         /* ネットワークバッファ長を設定する。*/
     613                        /* ネットワークバッファ長を設定する。*/
    665614                        input->len = plen + qip6h->foff;
    666615
    667616                        /*
    668                          *  å
    669 ¨ã¦ã®æ–­ç‰‡ã‚’コピーする。
     617                         *  全ての断片をコピーする。
    670618                         */
    671619                        frag = *ip6fq;
     
    680628                                }
    681629
    682                         /* ペイロード長を設定する。*/
     630                        /* ペイロード長を設定する。*/
    683631                        ip6h->plen = htons(plen);
    684632
     
    692640                        }
    693641
    694                 /* データグラム再構成キューを解放する。*/
     642                /* データグラム再構成キューを解放する。*/
    695643                frag6_free_queue(ip6fq);
    696644                }
     
    703651
    704652        /*
    705          *  データグラムの分割・再構成行わない場合は、å
    706 ¨æ–­ç‰‡ã‚’破棄し、
    707          *  最後の断片を受信したとき、
    708          *  ICMP エラーを送信è€
    709 ã«é€šçŸ¥ã™ã‚‹ã€‚
     653         *  データグラムの分割・再構成行わない場合は、全断片を破棄し、
     654         *  最後の断片を受信したとき、
     655         *  ICMP エラーを送信者に通知する。
    710656         */
    711657        if ((ip6fh->off_flag & IP6F_MORE_FRAG) == 0) {
Note: See TracChangeset for help on using the changeset viewer.