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/netinet6/ip6_output.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 è²¬ã™ã‚‹ã“と.
    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$
     
    153141
    154142/*
    155  *  å
    156 ¨åŸŸå¤‰æ•°
    157  */
    158 
    159 /* リンク MTU */
     143 *  全域変数
     144 */
     145
     146/* リンク MTU */
    160147
    161148uint32_t        linkmtu = IF_MTU;
    162149
    163150/*
    164  *  局所変数
     151 *  局所変数
    165152 */
    166153
     
    172159
    173160/*
    174  *  ip6_output -- IPv6 の出力関数
     161 *  ip6_output -- IPv6 の出力関数
    175162 */
    176163
     
    203190
    204191        /*
    205          *  重複アドレス検出要請以外には、送信å
    206 ƒã‚¢ãƒ‰ãƒ¬ã‚¹ã«
    207          *  無指定を指定できない。
     192         *  重複アドレス検出要請以外には、送信元アドレスに
     193         *  無指定を指定できない。
    208194         */
    209195        if (IN6_IS_ADDR_UNSPECIFIED(&ip6h->src) && (flags & IPV6_OUT_FLG_DAD) == 0) {
     
    212198                }
    213199
    214         /* 送信å
    215 ƒã‚¢ãƒ‰ãƒ¬ã‚¹ã«ã¯ãƒžãƒ«ãƒã‚­ãƒ£ã‚¹ãƒˆã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’指定できない。*/
     200        /* 送信元アドレスにはマルチキャストアドレスを指定できない。*/
    216201        if (IN6_IS_ADDR_MULTICAST(&ip6h->src)) {
    217202                error = E_PAR;
     
    220205
    221206        /*
    222          *  経路選択を行う。
     207         *  経路選択を行う。
    223208         */
    224209        if ((gw = in6_rtalloc(ifp, &ip6h->dst)) == NULL) {
     
    228213
    229214        if (!IN6_IS_ADDR_MULTICAST(&ip6h->dst)) {
    230                 /* ユニキャストアドレスの処理 */
     215                /* ユニキャストアドレスの処理 */
    231216                }
    232217        else {
    233                 /* マルチキャストアドレスの処理 */
     218                /* マルチキャストアドレスの処理 */
    234219                NET_COUNT_MIB(in6_ifstat.ipv6IfStatsOutMcastPkts, 1);
    235220                if (flags & IPV6_OUT_FLG_HOP_LIMIT)
     
    239224                }
    240225
    241         /* Traffic Class と Flow Label をサポートしないので 0 に設定する。*/
     226        /* Traffic Class と Flow Label をサポートしないので 0 に設定する。*/
    242227        ip6h->vcf = htonl(IP6_MAKE_VCF(IPV6_VERSION, 0));
    243228
     
    252237
    253238                /*
    254                  *  Path MTU が登録されている場合、
    255                  *  MTU が IPv6 MMTU(1280 オクテット)以下の場合は、
    256                  *  MTU を IPv6 MMTU に設定し分割して送信する。
     239                 *  Path MTU が登録されている場合、
     240                 *  MTU が IPv6 MMTU(1280 オクテット)以下の場合は、
     241                 *  MTU を IPv6 MMTU に設定し分割して送信する。
    257242                 */
    258243                mtu = IPV6_MMTU;
     
    271256        if (plen + IP6_HDR_SIZE <= mtu && !alwaysfrag) {
    272257
    273                 /* 分割するå¿
    274 è¦ãŒãªã„ときの処理 */
     258                /* 分割する必要がないときの処理 */
    275259                if ((error = nd6_output(ifp, output, gw, NULL, tmout)) != E_OK) {
    276260                        NET_COUNT_IP6(net_count_ip6[NC_IP6_OUT_ERR_PACKETS], 1);
     
    280264        else {
    281265
    282                 /* 断片 ID を設定する。*/
     266                /* 断片 ID を設定する。*/
    283267                id = ip6_id ++;
    284268
    285                 /* MTU が IPv6 の最大パケットサイズをè¶
    286 ãˆãªã„ようにする。*/
     269                /* MTU が IPv6 の最大パケットサイズを超えないようにする。*/
    287270                if (mtu > IPV6_MAXPACKET)
    288271                        mtu = IPV6_MAXPACKET;
    289272
    290273                /*
    291                  *  MTU から、分割不能部分(TINET-1.4 では、分割ヘッダ以外の
    292                  *  拡張ヘッダの出力は未実è£
    293 ã®ãŸã‚ 0 オクテット)
    294                  *  と断片ヘッダのサイズを引いたとき、8 オクテット以上なければ
    295                  *  分割して送信できないためエラーにする。
     274                 *  MTU から、分割不能部分(TINET-1.4 では、分割ヘッダ以外の
     275                 *  拡張ヘッダの出力は未実装のため 0 オクテット)
     276                 *  と断片ヘッダのサイズを引いたとき、8 オクテット以上なければ
     277                 *  分割して送信できないためエラーにする。
    296278                 */
    297279                if (((mtu - sizeof(T_IP6_FRAG_HDR)) & ~7) < 8) {
     
    301283
    302284                /*
    303                  *  IPv6 ヘッダの next フィールドに設定する値は、断片ヘッダ。
    304                  *  断片ヘッダの  next フィールドに設定する値は、
    305                  *  å
    306 ƒã®ãƒ‡ãƒ¼ã‚¿ã‚°ãƒ©ãƒ ã® next フィールドの値。
     285                 *  IPv6 ヘッダの next フィールドに設定する値は、断片ヘッダ。
     286                 *  断片ヘッダの  next フィールドに設定する値は、
     287                 *  元のデータグラムの next フィールドの値。
    307288                 */
    308289                nextproto  = ip6h->next;
    309290                ip6h->next = IPPROTO_FRAGMENT;
    310291
    311                 /* 分割して送信する。*/
     292                /* 分割して送信する。*/
    312293                NET_COUNT_IP6(net_count_ip6[NC_IP6_FRAG_OUT], 1);
    313294                for (foff = 0; foff < plen; foff += flen) {
    314295
    315                         /* 断片の長さを計算し、8 オクテット境界に調整する。*/
     296                        /* 断片の長さを計算し、8 オクテット境界に調整する。*/
    316297                        if (foff + (mtu - (IP6_HDR_SIZE + sizeof(T_IP6_FRAG_HDR))) < plen)
    317298                                flen = (mtu - (IP6_HDR_SIZE + sizeof(T_IP6_FRAG_HDR))) >> 3 << 3;
     
    319300                                flen = plen - foff;
    320301
    321                         /* ネットワークバッファを獲得する。*/
     302                        /* ネットワークバッファを獲得する。*/
    322303                        if (tget_net_buf(&frag, flen + IF_IP6_HDR_SIZE + sizeof(T_IP6_FRAG_HDR), TMO_IP6_FRAG_GET_NET_BUF) == E_OK) {
    323304
    324                                 /* IPv6 ヘッダをコピーする。*/
     305                                /* IPv6 ヘッダをコピーする。*/
    325306                                fip6h = GET_IP6_HDR(frag);
    326307                                *fip6h = *ip6h;
    327308
    328                                 /* IPv6 ヘッダを埋める。*/
     309                                /* IPv6 ヘッダを埋める。*/
    329310                                fip6h->plen     = htons(flen + sizeof(T_IP6_FRAG_HDR));
    330311
    331                                 /* 断片ヘッダを埋める。*/
     312                                /* 断片ヘッダを埋める。*/
    332313                                fip6f = (T_IP6_FRAG_HDR *)GET_IP6_NEXT_HDR(frag);
    333314                                fip6f->off_flag = htons((uint16_t)(foff & ~7));
     
    338319                                fip6f->next     = nextproto;
    339320
    340                                 /* SDU をコピーする。*/
     321                                /* SDU をコピーする。*/
    341322                                memcpy((uint8_t*)(fip6f + 1), GET_IP6_NEXT_HDR(output) + foff, flen);
    342323                                NET_COUNT_IP6(net_count_ip6[NC_IP6_FRAG_OUT_FRAGS], 1);
    343324                                NET_COUNT_MIB(in6_ifstat.ipv6IfStatsOutFragCreates, 1);
    344325
    345                                 /* 送信する。*/
     326                                /* 送信する。*/
    346327                                if ((error = nd6_output(ifp, frag, gw, NULL, tmout)) != E_OK) {
    347328                                        NET_COUNT_MIB(in6_ifstat.ipv6IfStatsOutFragFails, 1);
     
    350331                                }
    351332                        else {
    352                                 /* ネットワークバッファが獲得できなければ、送信をあきらめる。*/
     333                                /* ネットワークバッファが獲得できなければ、送信をあきらめる。*/
    353334                                error = E_NOMEM;
    354335                                goto drop;
     
    356337                        }
    357338
    358                 /* IF でネットワークバッファを開放しないフラグをチェックする。*/
     339                /* IF でネットワークバッファを開放しないフラグをチェックする。*/
    359340                if ((output->flags & NB_FLG_NOREL_IFOUT) == 0) {
    360341                        syscall(rel_net_buf(output));
     
    378359
    379360drop:
    380         /* IF でネットワークバッファを開放しないフラグをチェックする。*/
     361        /* IF でネットワークバッファを開放しないフラグをチェックする。*/
    381362        if ((output->flags & NB_FLG_NOREL_IFOUT) == 0) {
    382363                syscall(rel_net_buf(output));
Note: See TracChangeset for help on using the changeset viewer.