Ignore:
Timestamp:
Jul 23, 2017, 2:29:40 PM (7 years ago)
Author:
coas-nagasima
Message:

SVNプロパティを設定

File:
1 edited

Legend:

Unmodified
Added
Removed
  • rubycfg_asp/trunk/asp_dcre/tinet/netinet6/ip6_output.c

    • Property svn:mime-type changed from text/x-csrc to text/x-csrc; charset=UTF-8
    r313 r315  
    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 è²¬ã™ã‚‹ã“と.
    36  *
    37  *  本ソフトウェアは,無保証で提供されているものである.上記著作権è€
    38 ãŠ
    39  *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
    40  *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
    41  *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
     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プロジェクトを免責すること.
     25 *
     26 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     27 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
     28 *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
     29 *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
    4230 *
    4331 *  @(#) $Id$
     
    154142
    155143/*
    156  *  å
    157 ¨åŸŸå¤‰æ•°
    158  */
    159 
    160 /* リンク MTU */
     144 *  全域変数
     145 */
     146
     147/* リンク MTU */
    161148
    162149uint32_t        linkmtu = IF_MTU;
    163150
    164151/*
    165  *  局所変数
     152 *  局所変数
    166153 */
    167154
     
    173160
    174161/*
    175  *  ip6_output -- IPv6 の出力関数
     162 *  ip6_output -- IPv6 の出力関数
    176163 */
    177164
     
    204191
    205192        /*
    206          *  重複アドレス検出要請以外には、送信å
    207 ƒã‚¢ãƒ‰ãƒ¬ã‚¹ã«
    208          *  無指定を指定できない。
     193         *  重複アドレス検出要請以外には、送信元アドレスに
     194         *  無指定を指定できない。
    209195         */
    210196        if (IN6_IS_ADDR_UNSPECIFIED(&ip6h->src) && (flags & IPV6_OUT_FLG_DAD) == 0) {
     
    213199                }
    214200
    215         /* 送信å
    216 ƒã‚¢ãƒ‰ãƒ¬ã‚¹ã«ã¯ãƒžãƒ«ãƒã‚­ãƒ£ã‚¹ãƒˆã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’指定できない。*/
     201        /* 送信元アドレスにはマルチキャストアドレスを指定できない。*/
    217202        if (IN6_IS_ADDR_MULTICAST(&ip6h->src)) {
    218203                error = E_PAR;
     
    221206
    222207        /*
    223          *  経路選択を行う。
     208         *  経路選択を行う。
    224209         */
    225210        if ((gw = in6_rtalloc(ifp, &ip6h->dst)) == NULL) {
     
    229214
    230215        if (!IN6_IS_ADDR_MULTICAST(&ip6h->dst)) {
    231                 /* ユニキャストアドレスの処理 */
     216                /* ユニキャストアドレスの処理 */
    232217                }
    233218        else {
    234                 /* マルチキャストアドレスの処理 */
     219                /* マルチキャストアドレスの処理 */
    235220                NET_COUNT_MIB(in6_ifstat.ipv6IfStatsOutMcastPkts, 1);
    236221                if (flags & IPV6_OUT_FLG_HOP_LIMIT)
     
    240225                }
    241226
    242         /* Traffic Class と Flow Label をサポートしないので 0 に設定する。*/
     227        /* Traffic Class と Flow Label をサポートしないので 0 に設定する。*/
    243228        ip6h->vcf = htonl(IP6_MAKE_VCF(IPV6_VERSION, 0));
    244229
     
    253238
    254239                /*
    255                  *  Path MTU が登録されている場合、
    256                  *  MTU が IPv6 MMTU(1280 オクテット)以下の場合は、
    257                  *  MTU を IPv6 MMTU に設定し分割して送信する。
     240                 *  Path MTU が登録されている場合、
     241                 *  MTU が IPv6 MMTU(1280 オクテット)以下の場合は、
     242                 *  MTU を IPv6 MMTU に設定し分割して送信する。
    258243                 */
    259244                mtu = IPV6_MMTU;
     
    272257        if (plen + IP6_HDR_SIZE <= mtu && !alwaysfrag) {
    273258
    274                 /* 分割するå¿
    275 è¦ãŒãªã„ときの処理 */
     259                /* 分割する必要がないときの処理 */
    276260                if ((error = nd6_output(ifp, output, gw, NULL, tmout)) != E_OK) {
    277261                        NET_COUNT_IP6(net_count_ip6[NC_IP6_OUT_ERR_PACKETS], 1);
     
    281265        else {
    282266
    283                 /* 断片 ID を設定する。*/
     267                /* 断片 ID を設定する。*/
    284268                id = ip6_id ++;
    285269
    286                 /* MTU が IPv6 の最大パケットサイズをè¶
    287 ãˆãªã„ようにする。*/
     270                /* MTU が IPv6 の最大パケットサイズを超えないようにする。*/
    288271                if (mtu > IPV6_MAXPACKET)
    289272                        mtu = IPV6_MAXPACKET;
    290273
    291274                /*
    292                  *  MTU から、分割不能部分(TINET-1.4 では、分割ヘッダ以外の
    293                  *  拡張ヘッダの出力は未実è£
    294 ã®ãŸã‚ 0 オクテット)
    295                  *  と断片ヘッダのサイズを引いたとき、8 オクテット以上なければ
    296                  *  分割して送信できないためエラーにする。
     275                 *  MTU から、分割不能部分(TINET-1.4 では、分割ヘッダ以外の
     276                 *  拡張ヘッダの出力は未実装のため 0 オクテット)
     277                 *  と断片ヘッダのサイズを引いたとき、8 オクテット以上なければ
     278                 *  分割して送信できないためエラーにする。
    297279                 */
    298280                if (((mtu - sizeof(T_IP6_FRAG_HDR)) & ~7) < 8) {
     
    302284
    303285                /*
    304                  *  IPv6 ヘッダの next フィールドに設定する値は、断片ヘッダ。
    305                  *  断片ヘッダの  next フィールドに設定する値は、
    306                  *  å
    307 ƒã®ãƒ‡ãƒ¼ã‚¿ã‚°ãƒ©ãƒ ã® next フィールドの値。
     286                 *  IPv6 ヘッダの next フィールドに設定する値は、断片ヘッダ。
     287                 *  断片ヘッダの  next フィールドに設定する値は、
     288                 *  元のデータグラムの next フィールドの値。
    308289                 */
    309290                nextproto  = ip6h->next;
    310291                ip6h->next = IPPROTO_FRAGMENT;
    311292
    312                 /* 分割して送信する。*/
     293                /* 分割して送信する。*/
    313294                NET_COUNT_IP6(net_count_ip6[NC_IP6_FRAG_OUT], 1);
    314295                for (foff = 0; foff < plen; foff += flen) {
    315296
    316                         /* 断片の長さを計算し、8 オクテット境界に調整する。*/
     297                        /* 断片の長さを計算し、8 オクテット境界に調整する。*/
    317298                        if (foff + (mtu - (IP6_HDR_SIZE + sizeof(T_IP6_FRAG_HDR))) < plen)
    318299                                flen = (mtu - (IP6_HDR_SIZE + sizeof(T_IP6_FRAG_HDR))) >> 3 << 3;
     
    320301                                flen = plen - foff;
    321302
    322                         /* ネットワークバッファを獲得する。*/
     303                        /* ネットワークバッファを獲得する。*/
    323304                        if (tget_net_buf(&frag, flen + IF_IP6_HDR_SIZE + sizeof(T_IP6_FRAG_HDR), TMO_IP6_FRAG_GET_NET_BUF) == E_OK) {
    324305
    325                                 /* IPv6 ヘッダをコピーする。*/
     306                                /* IPv6 ヘッダをコピーする。*/
    326307                                fip6h = GET_IP6_HDR(frag);
    327308                                *fip6h = *ip6h;
    328309
    329                                 /* IPv6 ヘッダを埋める。*/
     310                                /* IPv6 ヘッダを埋める。*/
    330311                                fip6h->plen     = htons(flen + sizeof(T_IP6_FRAG_HDR));
    331312
    332                                 /* 断片ヘッダを埋める。*/
     313                                /* 断片ヘッダを埋める。*/
    333314                                fip6f = (T_IP6_FRAG_HDR *)GET_IP6_NEXT_HDR(frag);
    334315                                fip6f->off_flag = htons((uint16_t)(foff & ~7));
     
    339320                                fip6f->next     = nextproto;
    340321
    341                                 /* SDU をコピーする。*/
     322                                /* SDU をコピーする。*/
    342323                                memcpy((uint8_t*)(fip6f + 1), GET_IP6_NEXT_HDR(output) + foff, flen);
    343324                                NET_COUNT_IP6(net_count_ip6[NC_IP6_FRAG_OUT_FRAGS], 1);
    344325                                NET_COUNT_MIB(in6_ifstat.ipv6IfStatsOutFragCreates, 1);
    345326
    346                                 /* 送信する。*/
     327                                /* 送信する。*/
    347328                                if ((error = nd6_output(ifp, frag, gw, NULL, tmout)) != E_OK) {
    348329                                        NET_COUNT_MIB(in6_ifstat.ipv6IfStatsOutFragFails, 1);
     
    351332                                }
    352333                        else {
    353                                 /* ネットワークバッファが獲得できなければ、送信をあきらめる。*/
     334                                /* ネットワークバッファが獲得できなければ、送信をあきらめる。*/
    354335                                error = E_NOMEM;
    355336                                goto drop;
     
    357338                        }
    358339
    359                 /* IF でネットワークバッファを開放しないフラグをチェックする。*/
     340                /* IF でネットワークバッファを開放しないフラグをチェックする。*/
    360341                if ((output->flags & NB_FLG_NOREL_IFOUT) == 0) {
    361342                        syscall(rel_net_buf(output));
     
    379360
    380361drop:
    381         /* IF でネットワークバッファを開放しないフラグをチェックする。*/
     362        /* IF でネットワークバッファを開放しないフラグをチェックする。*/
    382363        if ((output->flags & NB_FLG_NOREL_IFOUT) == 0) {
    383364                syscall(rel_net_buf(output));
Note: See TracChangeset for help on using the changeset viewer.