Ignore:
Timestamp:
Jan 21, 2018, 12:10:09 AM (6 years ago)
Author:
coas-nagasima
Message:

prototoolに関連するプロジェクトをnewlibからmuslを使うよう変更・更新
ntshellをnewlibの下位の実装から、muslのsyscallの実装に変更・更新
以下のOSSをアップデート
・mruby-1.3.0
・musl-1.1.18
・onigmo-6.1.3
・tcc-0.9.27
以下のOSSを追加
・openssl-1.1.0e
・curl-7.57.0
・zlib-1.2.11
以下のmrbgemsを追加
・iij/mruby-digest
・iij/mruby-env
・iij/mruby-errno
・iij/mruby-iijson
・iij/mruby-ipaddr
・iij/mruby-mock
・iij/mruby-require
・iij/mruby-tls-openssl

File:
1 edited

Legend:

Unmodified
Added
Removed
  • EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/tcp_subr_cs.c

    r321 r331  
    22 *  TINET (TCP/IP Protocol Stack)
    33 *
    4  *  Copyright (C) 2001-2009 by Dep. of Computer Science and Engineering
     4 *  Copyright (C) 2001-2017 by Dep. of Computer Science and Engineering
    55 *                   Tomakomai National College of Technology, JAPAN
    66 *
     
    9595#include <net/ethernet.h>
    9696#include <net/if_arp.h>
    97 #include <net/ppp_ipcp.h>
    9897#include <net/net.h>
     98#include <net/net_endian.h>
    9999#include <net/net_var.h>
    100100#include <net/net_buf.h>
     
    103103
    104104#include <netinet/in.h>
    105 #include <netinet6/in6.h>
    106 #include <netinet6/in6_var.h>
    107105#include <netinet/in_var.h>
     106#include <netinet/in_itron.h>
    108107#include <netinet/ip.h>
    109108#include <netinet/ip_var.h>
    110 #include <netinet/ip6.h>
    111 #include <netinet6/ip6_var.h>
    112 #include <netinet6/nd6.h>
    113109#include <netinet/tcp.h>
    114 #include <netinet/tcp_timer.h>
    115110#include <netinet/tcp_var.h>
    116111#include <netinet/tcp_fsm.h>
    117112#include <netinet/tcp_seq.h>
    118 #include <netinet/in_itron.h>
     113#include <netinet/tcp_timer.h>
    119114
    120115#ifdef SUPPORT_TCP
     
    122117#ifdef TCP_CFG_SWBUF_CSAVE
    123118
    124 #ifndef TCP_CFG_SWBUF_CSAVE_ONLY
     119#ifdef TCP_CFG_SWBUF_CSAVE_ONLY
     120
     121#else   /* of #ifdef TCP_CFG_SWBUF_CSAVE_ONLY */
    125122
    126123/*
     
    242239        }
    243240
    244 #endif  /* of #ifndef TCP_CFG_SWBUF_CSAVE_ONLY */
     241#endif  /* of #ifdef TCP_CFG_SWBUF_CSAVE_ONLY */
    245242
    246243/*
     
    270267{
    271268        ER_UINT error;
     269        uint_t  hdr_size = IF_IP_TCP_NET_HDR_SIZE(&cep->dstaddr.ipaddr);
    272270
    273271        /* 通信端点をロックする。*/
    274272        syscall(wai_sem(cep->semid_lock));
    275273
    276         if ((error = net_buf_siz(cep->swbufq)) > 0 && error >= IF_IP_TCP_HDR_SIZE) {
    277 
     274        if ((error = net_buf_siz(cep->swbufq)) > 0 && error >= hdr_size) {
    278275
    279276                /*
     
    291288                 *  空きサイズを 4 オクテット境界に調整する。
    292289                 */
    293                 error = (uint_t)(((error - IF_IP_TCP_HDR_SIZE) >> 2 << 2) + IF_IP_TCP_HDR_SIZE);
     290                error = (uint_t)(((error - hdr_size) >> 2 << 2) + hdr_size);
    294291
    295292                if (len > cep->sbufsz - cep->swbuf_count)
    296293                        len = (uint_t)(cep->sbufsz - cep->swbuf_count);
    297                 if (len > (error - IF_IP_TCP_HDR_SIZE))
    298                         len = (uint_t)(error - IF_IP_TCP_HDR_SIZE);
     294                if (len > (error - hdr_size))
     295                        len = (uint_t)(error - hdr_size);
    299296
    300297                /* 送信ウインドサイズによりサイズを調整する。*/
     
    315312
    316313                /* ネットワークバッファ長と IP データグラム長を設定する。*/
    317                 cep->swbufq->len = (uint16_t)(cep->swbuf_count + IF_IP_TCP_HDR_SIZE);
    318                 SET_IP_SDU_SIZE(GET_IP_HDR(cep->swbufq), cep->swbuf_count + TCP_HDR_SIZE);
     314                cep->swbufq->len = (uint16_t)(cep->swbuf_count + hdr_size);
     315                SET_IP_SDU_SIZE(cep->swbufq, cep->swbuf_count + TCP_HDR_SIZE);
    319316
    320317                /* フラグを、送信可能に設定する。*/
     
    324321        else {  /* 送信ウインドバッファが不正 */
    325322                syslog(LOG_WARNING, "[TCP] illegal window buff for send, CEP: %d, %4d < %4d.",
    326                                     GET_TCP_CEPID(cep), error, IF_IP_TCP_HDR_SIZE);
     323                                    GET_TCP_CEPID(cep), error, hdr_size);
    327324
    328325                /* 送信ウィンドバッファキューのネットワークバッファを解放する。*/
     
    348345        int_t   win;
    349346
    350 
    351347        /* 送信ウィンドバッファが割当て済みで、空きがあれば終了する。*/
    352348        if ((cep->flags & TCP_CEP_FLG_WBCS_MASK) == TCP_CEP_FLG_WBCS_NBUF_READY &&
    353             (cep->swbuf_count + IF_IP_TCP_HDR_SIZE) < net_buf_siz(cep->swbufq))
     349            (cep->swbuf_count + IF_IP_TCP_NET_HDR_SIZE(&cep->dstaddr.ipaddr)) < net_buf_siz(cep->swbufq))
    354350                return E_OK;
    355351
     
    423419
    424420        /* ネットワークバッファを獲得する。*/
    425         if ((error = tcp_get_segment(&cep->swbufq, cep, 0,
     421        if ((error = tcpn_get_segment(&cep->swbufq, cep, 0,
    426422                                     TCP_CFG_SWBUF_CSAVE_MIN_SIZE,
    427                                      TCP_CFG_SWBUF_CSAVE_MAX_SIZE - IF_IP_TCP_HDR_SIZE,
     423                                     TCP_CFG_SWBUF_CSAVE_MAX_SIZE,
    428424                                     NBA_SEARCH_DESCENT, tmout)) != E_OK)
    429425                return error;
     
    463459                 *  空きサイズを 4 オクテット境界に調整する。
    464460                 */
    465                 error = (uint_t)(((error - IF_IP_TCP_HDR_SIZE) >> 2 << 2) - cep->swbuf_count);
     461                error = (uint_t)(((error - IF_IP_TCP_NET_HDR_SIZE(&cep->dstaddr.ipaddr)) >> 2 << 2) - cep->swbuf_count);
    466462
    467463                /* 送信ウインドサイズによりサイズを調整する。*/
     
    508504
    509505        /* ネットワークバッファ長と IP データグラム長を設定する。*/
    510         cep->swbufq->len = (uint16_t)(cep->swbuf_count + IF_IP_TCP_HDR_SIZE);
    511         SET_IP_SDU_SIZE(GET_IP_HDR(cep->swbufq), len + TCP_HDR_SIZE);
     506        cep->swbufq->len = (uint16_t)(cep->swbuf_count + IF_IP_TCP_NET_HDR_SIZE(&cep->dstaddr.ipaddr));
     507        SET_IP_SDU_SIZE(cep->swbufq, len + TCP_HDR_SIZE);
    512508
    513509        /* tcp_get_buf の割当て長をリセットする。*/
     
    573569{
    574570        return (cep->flags & TCP_CEP_FLG_WBCS_MASK) != TCP_CEP_FLG_WBCS_NBUF_READY ||
    575                 cep->swbuf_count >= cep->swbufq->len - IF_IP_TCP_HDR_SIZE;
     571                cep->swbuf_count >= cep->swbufq->len - IF_IP_TCP_NET_HDR_SIZE(&cep->dstaddr.ipaddr);
    576572        }
    577573
     
    590586
    591587        /* 送信ウインドバッファのアドレスを設定する。*/
    592         cep->sbuf_wptr = cep->sbuf_rptr = GET_TCP_SDU(cep->swbufq, IF_IP_TCP_HDR_OFFSET);
     588        cep->sbuf_wptr = cep->sbuf_rptr = GET_TCP_SDU(cep->swbufq, IF_IP_TCP_NET_HDR_OFFSET(&cep->dstaddr.ipaddr));
    593589
    594590        /* フラグを、ネットワークバッファ割当て済みに設定する。*/
     
    664660#ifdef TCP_CFG_RWBUF_CSAVE
    665661
    666 #ifndef TCP_CFG_RWBUF_CSAVE_ONLY
     662#ifdef TCP_CFG_RWBUF_CSAVE_ONLY
     663
     664#else   /* of #ifdef TCP_CFG_RWBUF_CSAVE_ONLY */
    667665
    668666/*
     
    736734        }
    737735
    738 #endif  /* of #ifndef TCP_CFG_RWBUF_CSAVE_ONLY */
     736#endif  /* of #ifdef TCP_CFG_RWBUF_CSAVE_ONLY */
    739737
    740738/*
     
    753751        if (cep->rwbufq != NULL) {
    754752
    755                 qhdr = GET_TCP_Q_HDR(cep->rwbufq, GET_TCP_IP_Q_HDR(cep->rwbufq)->thoff);
     753                qhdr = GET_TCP_Q_HDR(cep->rwbufq, GET_IP_TCP_Q_HDR_OFFSET(cep->rwbufq));
    756754                cep->rwbuf_count -= len;
    757755
     
    796794         */
    797795        while (cep->rwbufq != NULL && len > 0) {
    798                 qhdr = GET_TCP_Q_HDR(cep->rwbufq, GET_TCP_IP_Q_HDR(cep->rwbufq)->thoff);
     796                qhdr = GET_TCP_Q_HDR(cep->rwbufq, GET_IP_TCP_Q_HDR_OFFSET(cep->rwbufq));
    799797
    800798                /*
     
    808806
    809807                memcpy(buf,
    810                        GET_TCP_SDU(cep->rwbufq, GET_TCP_IP_Q_HDR(cep->rwbufq)->thoff) + qhdr->soff,
     808                       GET_TCP_SDU(cep->rwbufq, GET_IP_TCP_Q_HDR_OFFSET(cep->rwbufq)) + qhdr->soff,
    811809                       (size_t)blen);
    812810
     
    850848
    851849                /* 受信ウィンドバッファのデータのアドレスの先頭を設定する。*/
    852                 qhdr = GET_TCP_Q_HDR(cep->rwbufq, GET_TCP_IP_Q_HDR(cep->rwbufq)->thoff);
    853                 *p_buf = GET_TCP_SDU(cep->rwbufq, GET_TCP_IP_Q_HDR(cep->rwbufq)->thoff) + qhdr->soff;
     850                qhdr = GET_TCP_Q_HDR(cep->rwbufq, GET_IP_TCP_Q_HDR_OFFSET(cep->rwbufq));
     851                *p_buf = GET_TCP_SDU(cep->rwbufq, GET_IP_TCP_Q_HDR_OFFSET(cep->rwbufq)) + qhdr->soff;
    854852
    855853                /* 受信ウィンドバッファのデータ長を計算する。*/
     
    880878        if (cep->rwbuf_count == 0 && cep->reassq == NULL) {
    881879                while (cep->rwbufq != NULL) {
    882                         next = GET_TCP_Q_HDR(cep->rwbufq, GET_TCP_IP_Q_HDR(cep->rwbufq)->thoff)->next;
     880                        next = GET_TCP_Q_HDR(cep->rwbufq, GET_IP_TCP_Q_HDR_OFFSET(cep->rwbufq))->next;
    883881
    884882#ifdef TCP_CFG_RWBUF_CSAVE_MAX_QUEUES
     
    961959        nextp = &cep->rwbufq;
    962960        while (*nextp)
    963                 nextp = &GET_TCP_Q_HDR(*nextp, GET_TCP_IP_Q_HDR(*nextp)->thoff)->next;
     961                nextp = &GET_TCP_Q_HDR(*nextp, GET_IP_TCP_Q_HDR_OFFSET(*nextp))->next;
    964962        *nextp = input;
    965963
     
    984982                int_t   len;
    985983
    986                 qhdr = GET_TCP_Q_HDR(cep->rwbufq, GET_TCP_IP_Q_HDR(cep->rwbufq)->thoff);
     984                qhdr = GET_TCP_Q_HDR(cep->rwbufq, GET_IP_TCP_Q_HDR_OFFSET(cep->rwbufq));
    987985                len = qhdr->slen;
    988986
     
    999997                        /* 受信ウィンドバッファのアドレスを返す。*/
    1000998                        *cep->rcv_p_buf = GET_TCP_SDU(cep->rwbufq,
    1001                                           GET_TCP_IP_Q_HDR(cep->rwbufq)->thoff) + qhdr->soff;
     999                                          GET_IP_TCP_Q_HDR_OFFSET(cep->rwbufq)) + qhdr->soff;
    10021000
    10031001                        if (IS_PTR_DEFINED(cep->callback))
    10041002
    10051003#ifdef TCP_CFG_NON_BLOCKING_COMPAT14
    1006 
    10071004                                (*cep->callback)(GET_TCP_CEPID(cep), cep->rcv_nblk_tfn, (void*)len);
    1008 
    1009 #else   /* of #ifdef TCP_CFG_NON_BLOCKING_COMPAT14 */
    1010 
     1005#else
    10111006                                (*cep->callback)(GET_TCP_CEPID(cep), cep->rcv_nblk_tfn, (void*)&len);
    1012 
    1013 #endif  /* of #ifdef TCP_CFG_NON_BLOCKING_COMPAT14 */
    1014 
     1007#endif
    10151008                        else
    10161009                                syslog(LOG_WARNING, "[TCP] no call back, CEP: %d.", GET_TCP_CEPID(cep));
     
    10531046
    10541047#ifdef TCP_CFG_NON_BLOCKING_COMPAT14
    1055 
    10561048                                (*cep->callback)(GET_TCP_CEPID(cep), cep->rcv_nblk_tfn, (void*)len);
    1057 
    1058 #else   /* of #ifdef TCP_CFG_NON_BLOCKING_COMPAT14 */
    1059 
     1049#else
    10601050                                (*cep->callback)(GET_TCP_CEPID(cep), cep->rcv_nblk_tfn, (void*)&len);
    1061 
    1062 #endif  /* of #ifdef TCP_CFG_NON_BLOCKING_COMPAT14 */
    1063 
     1051#endif
    10641052                        else
    10651053                                syslog(LOG_WARNING, "[TCP] no call back, CEP: %d.", GET_TCP_CEPID(cep));
Note: See TracChangeset for help on using the changeset viewer.