Ignore:
Timestamp:
Jul 3, 2020, 7:19:17 PM (4 years ago)
Author:
coas-nagasima
Message:

ASP3, TINET, mbed を更新

Location:
EcnlProtoTool/trunk/asp3_dcre/tinet/netinet
Files:
22 edited

Legend:

Unmodified
Added
Removed
  • EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/icmp6.h

    r331 r429  
    291291typedef struct t_router_advert_hdr {
    292292        T_ICMP6_HDR     hdr;
    293         uint32_t        reachable;              /* [ms] 到達可能時間  */
    294         uint32_t        retransmit;             /* [ms] 近隣要請送信間隔        */
     293        uint32_t        reachable;              /* [us] 到達可能時間  */
     294        uint32_t        retransmit;             /* [us] 近隣要請送信間隔        */
    295295        /* この後にオプションが続く */
    296296        } __attribute__((packed, aligned(2))) T_ROUTER_ADVERT_HDR;
  • EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/in4_subr.c

    r331 r429  
    115115#include <net/if_var.h>
    116116
     117#ifdef SUPPORT_IGMP
     118#include <netinet/udp_var.h>
     119#include <netinet/ip_igmp.h>
     120#endif /* of #ifdef SUPPORT_IGMP */
     121
    117122#if defined(_IP4_CFG)
    118123
     
    294299
    295300        /* IP ヘッダを設定する。*/
    296         if ((error = in4_set_header(*nbuf, len, dstaddr, srcaddr, proto, ttl)) != E_OK)
     301        if ((error = in4_set_header(*nbuf, len, dstaddr, srcaddr, proto, ttl)) != E_OK) {
     302                syscall(rel_net_buf(*nbuf));
     303                *nbuf = NULL;
    297304                return error;
     305                }
    298306
    299307        /* 4 オクテット境界までパディングで埋める。*/
  • EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/in_itron.h

    r331 r429  
    6262#define TFN_TCP_ALL             (0)
    6363
    64 #define TEV_TCP_RCV_OOB         (-0x201)
     64#define TEV_TCP_RCV_OOB         (0x201)
    6565
    6666/* UDP 関係 */
     
    7575#define TFN_UDP_ALL             (0)
    7676
    77 #define TEV_UDP_RCV_DAT         (-0x221)
     77#define TEV_UDP_RCV_DAT         (0x221)
    7878
    7979/* 一般 */
     
    139139extern ER       udp_cre_cep (ID cepid, T_UDP_CCEP *pk_ccep);
    140140
     141extern ER       udp6_del_cep(ID cepid);
     142extern ER       udp6_set_opt(ID cepid, int_t optname, void *optval, int_t optlen);
     143extern ER       udp6_get_opt(ID cepid, int_t optname, void *optval, int_t optlen);
    141144extern ER       udp6_cre_cep (ID cepid, T_UDP6_CCEP *pk_ccep);
    142145
  • EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/in_rename.h

    r331 r429  
    242242#define arp_get_cache           _tinet_arp_get_cache
    243243
    244 #define ether_map_ipv4_multicast        _tinet_ether_map_ipv4_multicast
     244#define ether_map_ipv4_multicast        \
     245                                                                _tinet_ether_map_ipv4_multicast
    245246
    246247/* netinet6/icmp6.c */
  • EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/in_var.h

    r331 r429  
    141141                                        inn_get_datagram(nbuf,len,maxlen,dst,src,next,hlim,nbatr,tmout)
    142142#define IN_IS_ADDR_MULTICAST(addr)      inn_is_addr_multicast(addr)
    143 #define IN_IS_NET_ADDR_MULTICAST(nbuf)  IN_IS_ADDR_MULTICAST(&GET_IP6_HDR(nbuf)->dst)
     143#define IN_IS_NET_ADDR_MULTICAST(nbuf)  (GET_IP_VER(input)==IPV6_VERSION        \
     144                                        ?IN_IS_ADDR_MULTICAST(&GET_IP6_HDR(input)->dst) \
     145                                        :IN4_IS_ADDR_MULTICAST(ntohl(GET_IP4_HDR(input)->dst)))
    144146#define IN_ADDRWITHIFP(ifp,src,dst)     inn_addrwithifp(ifp,src,dst)
    145147#define IN_IS_ADDR_ANY(addr)            IN6_IS_ADDR_UNSPECIFIED(addr)
  • EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/ip4_var.h

    r331 r429  
    106106        uint8_t         idix;   /* mpfid のインデックス  */
    107107        uint8_t         flags;  /* フラグ            */
     108#ifdef IF_ETHER_MULTI_NIC
     109        uint8_t         conn_pos;
     110#endif
    108111#ifdef IF_ETHER_NIC_NET_BUF_ALIGN
    109112        uint8_t         nalign[IF_ETHER_NIC_NET_BUF_ALIGN];
     
    124127        uint8_t         idix;   /* mpfid のインデックス  */
    125128        uint8_t         flags;  /* フラグ            */
     129#ifdef IF_ETHER_MULTI_NIC
     130        uint8_t         conn_pos;
     131#endif
    126132#ifdef IF_ETHER_NIC_NET_BUF_ALIGN
    127133        uint8_t         nalign[IF_ETHER_NIC_NET_BUF_ALIGN];
     
    178184        uint8_t         idix;   /* mpfid のインデックス  */
    179185        uint8_t         flags;  /* フラグ            */
     186#ifdef IF_ETHER_MULTI_NIC
     187        uint8_t         conn_pos;
     188#endif
    180189#ifdef IF_ETHER_NIC_NET_BUF_ALIGN
    181190        uint8_t         nalign[IF_ETHER_NIC_NET_BUF_ALIGN];
  • EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/ip_igmp.c

    r331 r429  
    55*                   Tomakomai National College of Technology, JAPAN
    66*
    7 *  ã‹L’˜ìŒ ŽÒ‚́CˆÈ‰º‚Ì (1)`(4) ‚ÌðŒ‚©CFree Software Foundation
    8 *  ‚É‚æ‚Á‚ÄŒö•\‚³‚ê‚Ä‚¢‚é GNU General Public License ‚Ì Version 2 ‚É‹L
    9 *  q‚³‚ê‚Ä‚¢‚éðŒ‚ð–ž‚½‚·ê‡‚ÉŒÀ‚èC–{ƒ\ƒtƒgƒEƒFƒAi–{ƒ\ƒtƒgƒEƒFƒA
    10 *  ‚ð‰ü•Ï‚µ‚½‚à‚Ì‚ðŠÜ‚ށDˆÈ‰º“¯‚¶j‚ðŽg—pE•¡»E‰ü•ÏEÄ”z•ziˆÈ‰ºC
    11 *  —˜—p‚ƌĂԁj‚·‚邱‚Ƃ𖳏ž‚Å‹–‘ø‚·‚éD
    12 *  (1) –{ƒ\ƒtƒgƒEƒFƒA‚ðƒ\[ƒXƒR[ƒh‚ÌŒ`‚Å—˜—p‚·‚éê‡‚ɂ́Cã‹L‚Ì’˜ì
    13 *      Œ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’肪C‚»‚Ì‚Ü‚Ü‚ÌŒ`‚Ń\[
    14 *      ƒXƒR[ƒh’†‚ÉŠÜ‚Ü‚ê‚Ä‚¢‚邱‚ƁD
    15 *  (2) –{ƒ\ƒtƒgƒEƒFƒA‚ðCƒ‰ƒCƒuƒ‰ƒŠŒ`Ž®‚ȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg
    16 *      —p‚Å‚«‚éŒ`‚ōĔz•z‚·‚éê‡‚ɂ́CÄ”z•z‚É”º‚¤ƒhƒLƒ
    17 ƒƒ“ƒgi—˜—p
    18 *      ŽÒƒ}ƒjƒ
    19 ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜ìŒ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L
    20 *      ‚Ì–³•ÛØ‹K’è‚ðŒfÚ‚·‚邱‚ƁD
    21 *  (3) –{ƒ\ƒtƒgƒEƒFƒA‚ðC‹@Ší‚É‘g‚ݍž‚ނȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg
    22 *      —p‚Å‚«‚È‚¢Œ`‚ōĔz•z‚·‚éê‡‚ɂ́CŽŸ‚ÌðŒ‚ð–ž‚½‚·‚±‚ƁD
    23 *    (a) Ä”z•z‚É”º‚¤ƒhƒLƒ
    24 ƒƒ“ƒgi—˜—pŽÒƒ}ƒjƒ
    25 ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜
    26 *        ìŒ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’è‚ðŒfÚ‚·‚邱‚ƁD
    27 *  (4) –{ƒ\ƒtƒgƒEƒFƒA‚Ì—˜—p‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚é‚¢‚©‚Ȃ鑹
    28 *      ŠQ‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð–Ɛӂ·‚邱‚ƁD
     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è²¬ã™ã‚‹ã“と.
    2936*
    30 *  –{ƒ\ƒtƒgƒEƒFƒA‚́C–³•ÛØ‚Å’ñ‹Ÿ‚³‚ê‚Ä‚¢‚é‚à‚Ì‚Å‚ ‚éDã‹L’˜ìŒ ŽÒ‚¨
    31 *  ‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚́C–{ƒ\ƒtƒgƒEƒFƒA‚ÉŠÖ‚µ‚āC‚»‚Ì“K—p‰Â”\«‚à
    32 *  ŠÜ‚߂āC‚¢‚©‚È‚é•ÛØ‚às‚í‚È‚¢D‚Ü‚½C–{ƒ\ƒtƒgƒEƒFƒA‚Ì—˜—p‚É‚æ‚è’¼
    33 *  Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚½‚¢‚©‚Ȃ鑹ŠQ‚ÉŠÖ‚µ‚Ä‚àC‚»‚̐ӔC‚𕉂í‚È‚¢D
     37*  本ソフトウェアは,無保証で提供されているものである.上記著作権è€
     38お
     39*  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
     40*  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
     41*  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
    3442*
    3543*  @(#) $Id$
     
    8896
    8997static bool_t igmp_send_report_v2(T_IN4_ADDR dst);
    90 static uint16_t igmp_get_timer(T_IGMP_ENTRY *entry);
     98static int16_t igmp_get_timer(T_IGMP_ENTRY *entry);
    9199
    92100ER igmp_set_loop(T_UDP_CEP *cep, uint8_t optval)
     
    155163        T_IGMP_ENTRY *entry = NULL;
    156164        int             i;
    157         uint16_t        min;
    158165        T_IFNET *ifp = IF_GET_IFNET();
    159166        ER ret = E_NOMEM;
     
    168175                entry = &igmp_groups[i];
    169176                if (entry->timer == -1) {
    170                         entry->timer = igmp_get_timer(entry);
     177                        entry->timer = 0;
    171178                        entry->ip_addr = optval->imr_multiaddr;
    172179                        ret = E_OK;
     
    184191        T_IGMP_ENTRY *entry = NULL;
    185192        int             i;
    186         uint16_t        min;
    187193        ER ret = E_PAR;
    188194        T_IFNET *ifp = IF_GET_IFNET();
     
    223229        T_NET_BUF       *input = *inputp;
    224230        T_IGMPV2_HDR    *igmph;
    225         T_IN4_ADDR      addr;
    226231        uint_t          len, align;
    227232        T_IP4_HDR       *ip4h;
     
    234239        NET_COUNT_IGMP(net_count_igmp.in_packets, 1);
    235240
    236         /* ICMP ƒwƒbƒ_‚Ì’·‚³‚ðƒ`ƒFƒbƒN‚·‚éB*/
     241        /* ICMP ヘッダの長さをチェックする。*/
    237242        if (input->len < IF_IP4_IGMP_HDR_SIZE) {
    238243                NET_COUNT_IGMP(net_count_igmp.in_err_packets, 1);
     
    243248        igmph = (T_IGMPV2_HDR *)(input->buf + *offp);
    244249
    245         /* 4 ƒIƒNƒeƒbƒg‹«ŠE‚̃f[ƒ^’· */
     250        /* 4 オクテット境界のデータ長 */
    246251        len = input->len - *offp;
    247252        align = (len + 3) >> 2 << 2;
    248253
    249         /* 4 ƒIƒNƒeƒbƒg‹«ŠE‚܂ŃpƒfƒBƒ“ƒO‚Å–„‚ß‚éB*/
     254        /* 4 オクテット境界までパディングで埋める。*/
    250255        if (align > len)
    251256                memset((uint8_t*)input->buf + input->len, 0, (size_t)(align - len));
    252257
    253         /* ƒ`ƒFƒbƒNƒTƒ€‚ðŒvŽZ‚·‚éB*/
     258        /* チェックサムを計算する。*/
    254259        if (in_cksum(igmph, align) != 0) {
    255260                NET_COUNT_IGMP(net_count_igmp.in_err_packets, 1);
     
    257262        }
    258263
    259         /* ƒƒbƒZ[ƒW‚ÌŒ^‚É‚æ‚蕪Šò‚·‚éB*/
     264        /* メッセージの型により分岐する。*/
    260265        switch (igmph->type) {
    261266        case IGMP_MEMBERSHIP_QUERY:
     
    263268                ret = false;
    264269
    265                 /* ŽQ‰Á’†‚̃Oƒ‹[ƒvƒAƒhƒŒƒX‚©‚ç‚̃NƒGƒŠ[‚̏ꍇ */
     270                /* 参加中のグループアドレスからのクエリーの場合 */
    266271                syscall(wai_sem(SEM_IGMP_GROUP_LOCK));
    267272
    268273                for (i = 0; i < NUM_IGMP_ENTRY; i++) {
    269274                        entry = &igmp_groups[i];
    270                         if ((entry->timer >= 0) && (entry->ip_addr == addr)) {
     275                        if ((entry->timer >= 0) && (entry->ip_addr == igmph->addr)) {
    271276                                entry->resptime = igmph->time;
    272277                                ret = true;
     
    278283
    279284                if (ret) {
    280                         /* ƒƒ“ƒo[ƒVƒbƒvƒŠƒ|[ƒg‚𑗐M */
     285                        /* メンバーシップリポートを送信 */
    281286                        igmp_send_report_v2(ip4h->src);
    282287                }
     
    293298        T_IGMPV2_HDR    *igmph;
    294299        T_NET_BUF               *output;
    295         uint_t                  len, align;
     300        uint_t                  len = 0, align;
    296301
    297302        if (in4_get_datagram(&output, (uint_t)(IF_IP4_IGMP_HDR_SIZE + len), 0,
     
    300305                return false;
    301306
    302         /* IGMP ƒwƒbƒ_‚ðÝ’è‚·‚éB*/
     307        /* IGMP ヘッダを設定する。*/
    303308        igmph = GET_IGMPV2_HDR(output, IF_IP4_IGMP_HDR_OFFSET);
    304309        igmph->type = IGMP_MEMBERSHIP_REPORT_V2;
    305310        igmph->time = 0;
    306         igmph->addr = dst;
    307 
    308         /* 4 ƒIƒNƒeƒbƒg‹«ŠE‚̃f[ƒ^’· */
     311        igmph->addr = htonl(dst);
     312
     313        /* 4 オクテット境界のデータ長 */
    309314        align = (len + 3) >> 2 << 2;
    310315
    311         /* 4 ƒIƒNƒeƒbƒg‹«ŠE‚܂ŃpƒfƒBƒ“ƒO‚Å–„‚ß‚éB*/
     316        /* 4 オクテット境界までパディングで埋める。*/
    312317        if (align > len)
    313                 memset((uint8_t*)GET_IGMP_SDU(output, IF_IP4_IGMP_HDR_OFFSET) + IP4_HDR_SIZE + len,
     318                memset((uint8_t*)GET_IGMP_SDU(output, IF_IP4_IGMP_HDR_OFFSET) + len,
    314319                        0, (size_t)(align - len));
    315320
    316         /* ƒ`ƒFƒbƒNƒTƒ€‚ðŒvŽZ‚·‚éB*/
     321        /* チェックサムを計算する。*/
    317322        igmph->sum = 0;
    318         igmph->sum = in_cksum(igmph, (uint_t)(IF_IP4_IGMP_HDR_SIZE + align));
    319 
    320         /* ‘—M‚·‚éB*/
     323        igmph->sum = in_cksum(igmph, (uint_t)(IGMP_HDR_SIZE + align));
     324
     325        /* 送信する。*/
    321326        NET_COUNT_IGMP(net_count_igmp.out_octets,
    322327                output->len - GET_IF_IP4_HDR_SIZE(output));
     
    330335
    331336/*
    332 *  igmp_timer -- IGMP ‹¤’ʃ^ƒCƒ}[
     337*  igmp_timer -- IGMP å
     338±é€šã‚¿ã‚¤ãƒžãƒ¼
    333339*/
    334340static void igmp_timer(void *ignore)
     
    361367
    362368/*
    363 *  igmp_init -- IGMP ‹@”\‚ð‰Šú‰»‚·‚éB
     369*  igmp_init -- IGMP 機能を初期化する。
    364370*/
    365371
    366372void igmp_init(void)
    367373{
    368         T_IGMP_ENTRY *entry = NULL;
    369374        int i;
    370375
     
    397402}
    398403
    399 uint16_t igmp_get_timer(T_IGMP_ENTRY *entry)
    400 {
    401         uint16_t time = entry->resptime;
     404int16_t igmp_get_timer(T_IGMP_ENTRY *entry)
     405{
     406        int16_t time = entry->resptime;
    402407
    403408        if (time == 0)
    404                 time = 10;
    405 
    406         return net_rand() / (0x7fffffff / time);
     409                time = 590;
     410
     411        return (int16_t)(net_rand() % time) + 10;
    407412}
    408413
  • EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/ip_igmp.cfg

    r331 r429  
    55 *                   Tomakomai National College of Technology, JAPAN
    66 *
    7  *  ã‹L’˜ìŒ ŽÒ‚́CˆÈ‰º‚Ì (1)`(4) ‚ÌðŒ‚©CFree Software Foundation
    8  *  ‚É‚æ‚Á‚ÄŒö•\‚³‚ê‚Ä‚¢‚é GNU General Public License ‚Ì Version 2 ‚É‹L
    9  *  q‚³‚ê‚Ä‚¢‚éðŒ‚ð–ž‚½‚·ê‡‚ÉŒÀ‚èC–{ƒ\ƒtƒgƒEƒFƒAi–{ƒ\ƒtƒgƒEƒFƒA
    10  *  ‚ð‰ü•Ï‚µ‚½‚à‚Ì‚ðŠÜ‚ށDˆÈ‰º“¯‚¶j‚ðŽg—pE•¡»E‰ü•ÏEÄ”z•ziˆÈ‰ºC
    11  *  —˜—p‚ƌĂԁj‚·‚邱‚Ƃ𖳏ž‚Å‹–‘ø‚·‚éD
    12  *  (1) –{ƒ\ƒtƒgƒEƒFƒA‚ðƒ\[ƒXƒR[ƒh‚ÌŒ`‚Å—˜—p‚·‚éê‡‚ɂ́Cã‹L‚Ì’˜ì
    13  *      Œ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’肪C‚»‚Ì‚Ü‚Ü‚ÌŒ`‚Ń\[
    14  *      ƒXƒR[ƒh’†‚ÉŠÜ‚Ü‚ê‚Ä‚¢‚邱‚ƁD
    15  *  (2) –{ƒ\ƒtƒgƒEƒFƒA‚ðCƒ‰ƒCƒuƒ‰ƒŠŒ`Ž®‚ȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg
    16  *      —p‚Å‚«‚éŒ`‚ōĔz•z‚·‚éê‡‚ɂ́CÄ”z•z‚É”º‚¤ƒhƒLƒ
    17 ƒƒ“ƒgi—˜—p
    18  *      ŽÒƒ}ƒjƒ
    19 ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜ìŒ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L
    20  *      ‚Ì–³•ÛØ‹K’è‚ðŒfÚ‚·‚邱‚ƁD
    21  *  (3) –{ƒ\ƒtƒgƒEƒFƒA‚ðC‹@Ší‚É‘g‚ݍž‚ނȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg
    22  *      —p‚Å‚«‚È‚¢Œ`‚ōĔz•z‚·‚éê‡‚ɂ́CŽŸ‚ÌðŒ‚ð–ž‚½‚·‚±‚ƁD
    23  *    (a) Ä”z•z‚É”º‚¤ƒhƒLƒ
    24 ƒƒ“ƒgi—˜—pŽÒƒ}ƒjƒ
    25 ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜
    26  *        ìŒ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’è‚ðŒfÚ‚·‚邱‚ƁD
    27  *  (4) –{ƒ\ƒtƒgƒEƒFƒA‚Ì—˜—p‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚é‚¢‚©‚Ȃ鑹
    28  *      ŠQ‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð–Ɛӂ·‚邱‚ƁD
     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è²¬ã™ã‚‹ã“と.
    2936 *
    30  *  –{ƒ\ƒtƒgƒEƒFƒA‚́C–³•ÛØ‚Å’ñ‹Ÿ‚³‚ê‚Ä‚¢‚é‚à‚Ì‚Å‚ ‚éDã‹L’˜ìŒ ŽÒ‚¨
    31  *  ‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚́C–{ƒ\ƒtƒgƒEƒFƒA‚ÉŠÖ‚µ‚āC‚»‚Ì“K—p‰Â”\«‚à
    32  *  ŠÜ‚߂āC‚¢‚©‚È‚é•ÛØ‚às‚í‚È‚¢D‚Ü‚½C–{ƒ\ƒtƒgƒEƒFƒA‚Ì—˜—p‚É‚æ‚è’¼
    33  *  Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚½‚¢‚©‚Ȃ鑹ŠQ‚ÉŠÖ‚µ‚Ä‚àC‚»‚̐ӔC‚𕉂í‚È‚¢D
     37 *  本ソフトウェアは,無保証で提供されているものである.上記著作権è€
     38お
     39 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
     40 *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
     41 *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
    3442 *
    3543 *  @(#) $Id$
     
    3745
    3846/*
    39  *  IGMP ƒRƒ“ƒtƒBƒMƒ
    40 ƒŒ[ƒVƒ‡ƒ“ƒtƒ@ƒCƒ‹
     47 *  IGMP コンフィギュレーションファイル
    4148 */
    4249
    4350#if defined(_IP4_CFG) && defined(SUPPORT_IGMP)
    4451
    45 /* IGMP ƒOƒ‹[ƒvXV—pƒZƒ}ƒtƒH */
     52/* IGMP グループ更新用セマフォ */
    4653
    4754CRE_SEM(SEM_IGMP_GROUP_LOCK, { TA_TPRI, 1, 1 });
  • EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/ip_igmp.h

    r331 r429  
    55 *                   Tomakomai National College of Technology, JAPAN
    66 *
    7  *  ã‹L’˜ìŒ ŽÒ‚́CˆÈ‰º‚Ì (1)`(4) ‚ÌðŒ‚©CFree Software Foundation
    8  *  ‚É‚æ‚Á‚ÄŒö•\‚³‚ê‚Ä‚¢‚é GNU General Public License ‚Ì Version 2 ‚É‹L
    9  *  q‚³‚ê‚Ä‚¢‚éðŒ‚ð–ž‚½‚·ê‡‚ÉŒÀ‚èC–{ƒ\ƒtƒgƒEƒFƒAi–{ƒ\ƒtƒgƒEƒFƒA
    10  *  ‚ð‰ü•Ï‚µ‚½‚à‚Ì‚ðŠÜ‚ށDˆÈ‰º“¯‚¶j‚ðŽg—pE•¡»E‰ü•ÏEÄ”z•ziˆÈ‰ºC
    11  *  —˜—p‚ƌĂԁj‚·‚邱‚Ƃ𖳏ž‚Å‹–‘ø‚·‚éD
    12  *  (1) –{ƒ\ƒtƒgƒEƒFƒA‚ðƒ\[ƒXƒR[ƒh‚ÌŒ`‚Å—˜—p‚·‚éê‡‚ɂ́Cã‹L‚Ì’˜ì
    13  *      Œ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’肪C‚»‚Ì‚Ü‚Ü‚ÌŒ`‚Ń\[
    14  *      ƒXƒR[ƒh’†‚ÉŠÜ‚Ü‚ê‚Ä‚¢‚邱‚ƁD
    15  *  (2) –{ƒ\ƒtƒgƒEƒFƒA‚ðCƒ‰ƒCƒuƒ‰ƒŠŒ`Ž®‚ȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg
    16  *      —p‚Å‚«‚éŒ`‚ōĔz•z‚·‚éê‡‚ɂ́CÄ”z•z‚É”º‚¤ƒhƒLƒ
    17 ƒƒ“ƒgi—˜—p
    18  *      ŽÒƒ}ƒjƒ
    19 ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜ìŒ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L
    20  *      ‚Ì–³•ÛØ‹K’è‚ðŒfÚ‚·‚邱‚ƁD
    21  *  (3) –{ƒ\ƒtƒgƒEƒFƒA‚ðC‹@Ší‚É‘g‚ݍž‚ނȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg
    22  *      —p‚Å‚«‚È‚¢Œ`‚ōĔz•z‚·‚éê‡‚ɂ́CŽŸ‚ÌðŒ‚ð–ž‚½‚·‚±‚ƁD
    23  *    (a) Ä”z•z‚É”º‚¤ƒhƒLƒ
    24 ƒƒ“ƒgi—˜—pŽÒƒ}ƒjƒ
    25 ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜
    26  *        ìŒ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’è‚ðŒfÚ‚·‚邱‚ƁD
    27  *  (4) –{ƒ\ƒtƒgƒEƒFƒA‚Ì—˜—p‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚é‚¢‚©‚Ȃ鑹
    28  *      ŠQ‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð–Ɛӂ·‚邱‚ƁD
     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è²¬ã™ã‚‹ã“と.
    2936 *
    30  *  –{ƒ\ƒtƒgƒEƒFƒA‚́C–³•ÛØ‚Å’ñ‹Ÿ‚³‚ê‚Ä‚¢‚é‚à‚Ì‚Å‚ ‚éDã‹L’˜ìŒ ŽÒ‚¨
    31  *  ‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚́C–{ƒ\ƒtƒgƒEƒFƒA‚ÉŠÖ‚µ‚āC‚»‚Ì“K—p‰Â”\«‚à
    32  *  ŠÜ‚߂āC‚¢‚©‚È‚é•ÛØ‚às‚í‚È‚¢D‚Ü‚½C–{ƒ\ƒtƒgƒEƒFƒA‚Ì—˜—p‚É‚æ‚è’¼
    33  *  Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚½‚¢‚©‚Ȃ鑹ŠQ‚ÉŠÖ‚µ‚Ä‚àC‚»‚̐ӔC‚𕉂í‚È‚¢D
     37 *  本ソフトウェアは,無保証で提供されているものである.上記著作権è€
     38お
     39 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
     40 *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
     41 *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
    3442 *
    3543 *  @(#) $Id$
     
    3947#define _IP_IGMP_H_
    4048
    41 #define NUM_IGMP_ENTRY                          5       /* ƒ}ƒ‹ƒ`ƒLƒƒƒXƒgƒOƒ‹[ƒv‚̃Gƒ“ƒgƒŠ” */
    42 
    43 #ifdef __CA850__
    44 #pragma pack(1)
    45 #elif __RX
    46 #pragma pack
    47 #elif _MSC_VER
    48 #pragma pack(push, 1)
    49 #endif
     49#define NUM_IGMP_ENTRY                          5       /* マルチキャストグループのエントリ数 */
    5050
    5151 /*
    52   *  IGMPv1 ƒwƒbƒ_‚Ì’è‹`ARFC 1112
     52  *  IGMPv1 ヘッダの定義、RFC 1112
    5353  */
    5454
    5555typedef struct t_igmpv1_hdr
    5656{
    57         uint8_t         type;           /* ƒƒbƒZ[ƒW‚ÌŒ^       */
    58         uint8_t         unused;         /* –¢Žg—p                       */
    59         uint16_t        sum;            /* ƒ`ƒFƒbƒNƒTƒ€         */
    60         T_IN4_ADDR      addr;           /* ƒOƒ‹[ƒvƒAƒhƒŒƒX */
    61 } T_IGMPV1_HDR;
     57        uint8_t         type;           /* メッセージの型        */
     58        uint8_t         unused;         /* 未使用                    */
     59        uint16_t        sum;            /* チェックサム           */
     60        T_IN4_ADDR      addr;           /* グループアドレス */
     61}  __attribute__((packed)) T_IGMPV1_HDR;
    6262
    6363/*
    64 *  IGMPv2 ƒwƒbƒ_‚Ì’è‹`ARFC 2236
     64*  IGMPv2 ヘッダの定義、RFC 2236
    6565*/
    6666
    6767typedef struct t_igmpv2_hdr
    6868{
    69         uint8_t         type;           /* ƒƒbƒZ[ƒW‚ÌŒ^       */
    70         uint8_t         time;           /* Å‘剞“šŽžŠÔ         */
    71         uint16_t        sum;            /* ƒ`ƒFƒbƒNƒTƒ€         */
    72         T_IN4_ADDR      addr;           /* ƒOƒ‹[ƒvƒAƒhƒŒƒX */
    73 } T_IGMPV2_HDR;
     69        uint8_t         type;           /* メッセージの型        */
     70        uint8_t         time;           /* 最大応答時間           */
     71        uint16_t        sum;            /* チェックサム           */
     72        T_IN4_ADDR      addr;           /* グループアドレス */
     73}  __attribute__((packed)) T_IGMPV2_HDR;
    7474
    7575typedef struct t_igmpv3_query_hdr
    7676{
    77         uint8_t         type;           /* ƒƒbƒZ[ƒW‚ÌŒ^       */
    78         uint8_t         time;           /* Å‘剞“šŽžŠÔ         */
    79         uint16_t        sum;            /* ƒ`ƒFƒbƒNƒTƒ€         */
    80         T_IN4_ADDR      grpaddr;        /* ƒOƒ‹[ƒvƒAƒhƒŒƒX */
    81         uint8_t         sqrv;           /* Sƒtƒ‰ƒOAQuerier Robustness Value */
     77        uint8_t         type;           /* メッセージの型        */
     78        uint8_t         time;           /* 最大応答時間           */
     79        uint16_t        sum;            /* チェックサム           */
     80        T_IN4_ADDR      grpaddr;        /* グループアドレス */
     81        uint8_t         sqrv;           /* Sフラグ、Querier Robustness Value */
    8282        uint8_t         qqic;           /* Qurier's Query Interval Code */
    83         uint16_t        num;            /* ‘—MŒ³‚̐” */
    84         T_IN4_ADDR      sdraddr;        /* ‘—MŒ³ƒAƒhƒŒƒX */
    85 } T_IGMPV3Q_HDR;
     83        uint16_t        num;            /* 送信å
     84ƒã®æ•° */
     85        T_IN4_ADDR      sdraddr;        /* 送信å
     86ƒã‚¢ãƒ‰ãƒ¬ã‚¹ */
     87}  __attribute__((packed)) T_IGMPV3Q_HDR;
    8688
    8789typedef struct t_igmp_group_record
    8890{
    89         uint8_t         type;           /* ƒƒbƒZ[ƒW‚ÌŒ^       */
    90         uint8_t         len;            /* •â•ƒf[ƒ^’·         */
    91         uint16_t        num;            /* ‘—MŒ³‚̐” */
    92         T_IN4_ADDR      grpaddr;        /* ƒOƒ‹[ƒvƒAƒhƒŒƒX */
    93         T_IN4_ADDR      sdraddr;        /* ‘—MŒ³ƒAƒhƒŒƒX       */
    94                                                         /* •â•ƒf[ƒ^           */
    95 } T_IGMP_GROUP_RECORD;
     91        uint8_t         type;           /* メッセージの型        */
     92        uint8_t         len;            /* 補助データ長           */
     93        uint16_t        num;            /* 送信å
     94ƒã®æ•° */
     95        T_IN4_ADDR      grpaddr;        /* グループアドレス */
     96        T_IN4_ADDR      sdraddr;        /* 送信å
     97ƒã‚¢ãƒ‰ãƒ¬ã‚¹   */
     98                                                        /* 補助データ              */
     99}  __attribute__((packed)) T_IGMP_GROUP_RECORD;
    96100
    97101typedef struct t_igmpv3_report_hdr
    98102{
    99         uint8_t         type;           /* ƒƒbƒZ[ƒW‚ÌŒ^       */
    100         uint8_t         rsv1;           /* —\–ñ                         */
    101         uint16_t        sum;            /* ƒ`ƒFƒbƒNƒTƒ€         */
    102         uint16_t        rsv2;           /* —\–ñ                         */
    103         uint16_t        num;            /* ƒOƒ‹[ƒvƒŒƒR[ƒh‚̐” */
    104         T_IGMP_GROUP_RECORD record;     /* ƒOƒ‹[ƒvƒŒƒR[ƒh */
    105 } T_IGMPV3R_HDR;
    106 
    107 #ifdef __CA850__
    108 #pragma pack(8)
    109 #elif __RX
    110 #pragma unpack
    111 #elif _MSC_VER
    112 #pragma pack(pop)
    113 #endif
     103        uint8_t         type;           /* メッセージの型        */
     104        uint8_t         rsv1;           /* 予約                               */
     105        uint16_t        sum;            /* チェックサム           */
     106        uint16_t        rsv2;           /* 予約                               */
     107        uint16_t        num;            /* グループレコードの数 */
     108        T_IGMP_GROUP_RECORD record;     /* グループレコード */
     109}  __attribute__((packed)) T_IGMPV3R_HDR;
    114110
    115111#define IGMP_HDR_SIZE                   (sizeof(T_IGMPV1_HDR))
     
    125121
    126122/*
    127 ƒƒbƒZ[ƒW‚ÌŒ^
     123メッセージの型
    128124*/
    129125
    130 #define IGMP_MEMBERSHIP_QUERY           0x11    /* ƒƒ“ƒo[ƒVƒbƒvƒNƒGƒŠ[               */
    131 #define IGMP_MEMBERSHIP_REPORT          0x12    /* ƒƒ“ƒo[ƒVƒbƒvƒŒƒ|[ƒg               */
    132 #define IGMP_MEMBERSHIP_REPORT_V2       0x16    /* ƒƒ“ƒo[ƒVƒbƒvƒŒƒ|[ƒg               */
    133 #define IGMP_LEAVE_GROUP                        0x17    /* ƒŠ[ƒuƒOƒ‹[ƒv                               */
    134 #define IGMP_MEMBERSHIP_REPORT_V3       0x22    /* ƒƒ“ƒo[ƒVƒbƒvƒŒƒ|[ƒg               */
     126#define IGMP_MEMBERSHIP_QUERY           0x11    /* メンバーシップクエリー            */
     127#define IGMP_MEMBERSHIP_REPORT          0x12    /* メンバーシップレポート            */
     128#define IGMP_MEMBERSHIP_REPORT_V2       0x16    /* メンバーシップレポート            */
     129#define IGMP_LEAVE_GROUP                        0x17    /* リーブグループ                                */
     130#define IGMP_MEMBERSHIP_REPORT_V3       0x22    /* メンバーシップレポート            */
    135131
    136132/*
    137 *  UDP’ʐM’[“_ƒIƒvƒVƒ‡ƒ“
     133*  UDP通信端点オプション
    138134*/
    139135
     
    168164
    169165/*
    170  *  IGMP ƒOƒ‹[ƒvƒGƒ“ƒgƒŠ
     166 *  IGMP グループエントリ
    171167 */
    172168
    173169typedef struct igmp_entry
    174170{
    175         uint16_t        timer;          /* ‘—M‚Ü‚Å‚ÌŽžŠÔ[•b]   */
    176         uint16_t        resptime;       /* Å‘剞“šŽžŠÔ[•b]     */
    177         T_IN4_ADDR      ip_addr;        /* IP ƒAƒhƒŒƒX                  */
     171        int16_t         timer;          /* 送信までの時間[秒]   */
     172        int16_t         resptime;       /* 最大応答時間[秒]      */
     173        T_IN4_ADDR      ip_addr;        /* IP アドレス                      */
    178174} T_IGMP_ENTRY;
    179175
  • EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/tcp_input.c

    r331 r429  
    521521
    522522                                /* 相手のアドレスをコピーする。*/
     523
     524#if defined(_IP6_CFG) && defined(_IP4_CFG)
     525
     526                                if (cep->flags & TCP_CEP_FLG_IPV4) {
     527                                        (*cep->p_dstaddr4).ipaddr = ntohl(cep->dstaddr.ipaddr.s6_addr32[3]);
     528                                        (*cep->p_dstaddr4).portno = cep->dstaddr.portno;
     529                                        }
     530                                else
     531                                        *cep->p_dstaddr = cep->dstaddr;
     532
     533#else   /* of #if defined(_IP6_CFG) && defined(_IP4_CFG) */
     534
    523535                                *cep->p_dstaddr = cep->dstaddr;
     536
     537#endif  /* of #if defined(_IP6_CFG) && defined(_IP4_CFG) */
    524538
    525539                                if (IS_PTR_DEFINED(cep->callback)) {
     
    847861
    848862                                /* 相手のアドレスをコピーする。*/
     863
     864#if defined(_IP6_CFG) && defined(_IP4_CFG)
     865
     866                                if (cep->flags & TCP_CEP_FLG_IPV4) {
     867                                        (*cep->p_dstaddr4).ipaddr = ntohl(cep->dstaddr.ipaddr.s6_addr32[3]);
     868                                        (*cep->p_dstaddr4).portno = cep->dstaddr.portno;
     869                                        }
     870                                else
     871                                        *cep->p_dstaddr = cep->dstaddr;
     872
     873#else   /* of #if defined(_IP6_CFG) && defined(_IP4_CFG) */
     874
    849875                                *cep->p_dstaddr = cep->dstaddr;
     876
     877#endif  /* of #if defined(_IP6_CFG) && defined(_IP4_CFG) */
    850878
    851879                                if (IS_PTR_DEFINED(cep->callback)) {
     
    13631391        NTOHS(tcph->sport);
    13641392        NTOHS(tcph->dport);
     1393
     1394        /* SDU 長 より 緊急ポインタが大きい場合 */
     1395        if (tcph->urp > tcph->sum)
     1396                goto drop;
    13651397
    13661398find_cep:
  • EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/tcp_output.c

    r331 r429  
    369369                tcph->flags |= TCP_FLG_URG;
    370370                }
    371         else
     371        else {
     372                tcph->urp = 0;
    372373                cep->snd_up  = cep->snd_una;
     374                }
    373375
    374376#endif  /* of #ifdef TCP_CFG_EXTENTIONS */
  • EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/tcp_subr.c

    r331 r429  
    805805
    806806T_TCP_CEP *
    807 tcp_drop (T_TCP_CEP *cep, ER errno)
     807tcp_drop (T_TCP_CEP *cep, ER err)
    808808{
    809809#ifdef SUPPORT_MIB
     
    815815#endif  /* of #ifdef SUPPORT_MIB */
    816816
    817         cep->error = errno;
     817        cep->error = err;
    818818        if (TCP_FSM_HAVE_RCVD_SYN(cep->fsm_state)) {
    819819                cep->fsm_state = TCP_FSM_CLOSED;
  • EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/tcp_timer.h

    r331 r429  
    8686 */
    8787
    88 #define TCP_SLOW_TMO            (ULONG_C(500)/NET_TIMER_CYCLE)  /* 500 [ms]     */
    89 #define TCP_FAST_TMO            (ULONG_C(200)/NET_TIMER_CYCLE)  /* 200 [ms]     */
     88#define TCP_SLOW_TMO            (ULONG_C(500000)/NET_TIMER_CYCLE)       /* 500,000 [us] */
     89#define TCP_FAST_TMO            (ULONG_C(200000)/NET_TIMER_CYCLE)       /* 200,000 [us] */
    9090
    91 #define TCP_SLOW_HZ             (ULONG_C(1000)/TCP_SLOW_TMO/NET_TIMER_CYCLE)    /* Hz   */
     91#define TCP_SLOW_HZ             (ULONG_C(1000000)/TCP_SLOW_TMO/NET_TIMER_CYCLE) /* Hz   */
    9292
    9393/* TCP タイマ値 */
  • EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/tcp_usrreq.c

    r331 r429  
    897897
    898898        /* tcp_rcv_buf の割当て長をリセットする。*/
    899         cep->rcv_buf_len = 0;
     899        cep->rcv_buf_len -= len;
    900900
    901901        /* 通信端点のロックを解除する。*/
  • EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/tcp_var.h

    r331 r429  
    505505        uint8_t         idix;   /* mpfid のインデックス        */
    506506        uint8_t         flags;  /* フラグ          */
     507#ifdef IF_ETHER_MULTI_NIC
     508        uint8_t         conn_pos;
     509#endif
    507510#ifdef IF_ETHER_NIC_NET_BUF_ALIGN
    508511        uint8_t         nalign[IF_ETHER_NIC_NET_BUF_ALIGN];
     
    817820extern void tcp_init_iss (void);
    818821extern T_TCP_CEP *tcp_close (T_TCP_CEP *cep);
    819 extern T_TCP_CEP *tcp_drop  (T_TCP_CEP *cep, ER errno);
     822extern T_TCP_CEP *tcp_drop  (T_TCP_CEP *cep, ER err);
    820823extern void tcp_respond (T_NET_BUF *nbuf, T_TCP_CEP *cep,
    821824                         T_TCP_SEQ ack, T_TCP_SEQ seq, uint_t rbfree, uint8_t flags);
  • EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/tcpn_usrreq.c

    r331 r429  
    689689                cep->p_myaddr4    = p_myaddr;
    690690                cep->p_dstaddr    = NULL;
    691                 cep->p_myaddr     = NULL;
     691                cep->p_myaddr     = NADR;
    692692
    693693#else   /* of #if API_PROTO == API_PROTO_IPV4 */
    694694
    695695                cep->p_dstaddr4   = NULL;
    696                 cep->p_myaddr4    = NULL;
     696                cep->p_myaddr4    = NADR;
    697697                cep->p_dstaddr    = p_dstaddr;
    698698                cep->p_myaddr     = p_myaddr;
  • EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/udp_output.c

    r331 r429  
    182182#if defined(_IP6_CFG) && TNUM_UDP6_CEPID > 0
    183183
    184                 for (ix = tmax_udp6_cepid; ix -- > 0; ) {
     184                for (ix = TNUM_UDP6_CEPID - 1; ix -- > 0; ) {
    185185
    186186                        if (udp6_cep[ix].flags & UDP_CEP_FLG_POST_OUTPUT) {
     
    194194#if defined(_IP4_CFG) && TNUM_UDP4_CEPID > 0
    195195
    196                 for (ix = tmax_udp4_cepid; ix -- > 0; ) {
     196                for (ix = TNUM_UDP4_CEPID - 1; ix -- > 0; ) {
    197197
    198198                        if (udp4_cep[ix].flags & UDP_CEP_FLG_POST_OUTPUT) {
  • EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/udp_subr.c

    r331 r429  
    146146#define UDP_FIND_CEP            udp6_find_cep
    147147#define UDP_NOTIFY              udp6_notify
    148 #define TMAX_UDP_CEPID          tmax_udp6_cepid
     148#define TMAX_UDP_CEPID          (TNUM_UDP6_CEPID - 1)
    149149#define UDP_CEP                 udp6_cep
    150150#define T_UDP_CEP               T_UDP6_CEP
     
    183183#define UDP_FIND_CEP            udp4_find_cep
    184184#define UDP_NOTIFY              udp4_notify
    185 #define TMAX_UDP_CEPID          tmax_udp4_cepid
     185#define TMAX_UDP_CEPID          (TNUM_UDP4_CEPID - 1)
    186186#define T_UDP_CEP               T_UDP4_CEP
    187187#define UDP_CEP                 udp4_cep
  • EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/udp_var.h

    r331 r429  
    101101typedef ER      (*t_udp_callback)(ID cepid, FN fncd, void *p_parblk);
    102102
     103typedef struct t_udp_rcv_dat_para {
     104        uint_t          len;
     105        T_NET_BUF       *input;
     106        uint_t          off;
     107        union {
     108                T_IPV4EP rep4;
     109                T_IPV6EP rep6;
     110        };
     111        } T_UDP_RCV_DAT_PARA;
     112
    103113/*
    104114 *  UDP 通信端点
     
    141151#endif
    142152
     153#ifdef SUPPORT_IGMP
     154        bool_t igmp_loopback;
     155        uint8_t igmp_ttl;
     156        T_IN4_ADDR      igmp_mcaddr;    /*  */
     157#endif
     158
    143159        } T_UDP6_CEP;
    144160
     
    178194        ER              error;          /* 待ち中に発生したエラー  */
    179195#endif
     196
    180197#ifdef SUPPORT_IGMP
    181198        bool_t igmp_loopback;
     
    183200        T_IN4_ADDR      igmp_mcaddr;    /*  */
    184201#endif
     202
    185203        } T_UDP4_CEP;
    186204
  • EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/udpn_input.c

    r331 r429  
    8888{
    8989        T_UDP_HDR       *udph;
    90         uint_t          len;
     90        T_UDP_RCV_DAT_PARA para;
    9191
    9292        udph = (T_UDP_HDR *)(input->buf + off);
    93         len  = (uint_t)(ntohs(udph->ulen) - UDP_HDR_SIZE);
     93        para.len  = (uint_t)(ntohs(udph->ulen) - UDP_HDR_SIZE);
    9494
    9595        if (cep->rcv_tskid != TA_NULL) {        /* 非ノンブロッキングコールでペンディング中 */
     
    111111                /* データをバッファに移す。*/
    112112                memcpy(cep->rcv_data, GET_UDP_SDU(input, off),
    113                        (size_t)(len < cep->rcv_len ? len : cep->rcv_len));
     113                       (size_t)(para.len < cep->rcv_len ? para.len : cep->rcv_len));
    114114                syscall(rel_net_buf(input));
    115115
     
    117117
    118118#ifdef TCP_CFG_NON_BLOCKING_COMPAT14
    119                         (*cep->callback)(GET_UDP_CEPID(cep), TFN_UDP_RCV_DAT, (void*)(uint32_t)len);
     119                        (*cep->callback)(GET_UDP_CEPID(cep), TFN_UDP_RCV_DAT, (void*)(uint32_t)para.len);
    120120#else
    121                         (*cep->callback)(GET_UDP_CEPID(cep), TFN_UDP_RCV_DAT, (void*)&len);
     121                        (*cep->callback)(GET_UDP_CEPID(cep), TFN_UDP_RCV_DAT, (void*)&para.len);
    122122#endif
    123123                else
     
    134134
    135135#ifdef TCP_CFG_NON_BLOCKING_COMPAT14
    136                 (*cep->callback)(GET_UDP_CEPID(cep), TEV_UDP_RCV_DAT, (void*)(uint32_t)len);
     136                (*cep->callback)(GET_UDP_CEPID(cep), TEV_UDP_RCV_DAT, (void*)(uint32_t)para.len);
    137137#else
    138                 (*cep->callback)(GET_UDP_CEPID(cep), TEV_UDP_RCV_DAT, (void*)&len);
     138                para.input = input;
     139                para.off = off;
     140#if API_PROTO == API_PROTO_IPV4
     141                para.rep4.portno = ntohs(udph->sport);
     142                IN_COPY_TO_HOST(&para.rep4.ipaddr, input);
     143#else
     144                para.rep6.portno = ntohs(udph->sport);
     145                IN_COPY_TO_HOST(&para.rep6.ipaddr, input);
     146#endif
     147                (*cep->callback)(GET_UDP_CEPID(cep), TEV_UDP_RCV_DAT, (void*)&para.len);
    139148#endif
    140149                /*
     
    143152                 *  データを読み出さなかったことになるので、捨てる。
    144153                 */
    145                 if (cep->cb_netbuf != NULL)
    146                         syscall(rel_net_buf(cep->cb_netbuf));
     154                if (cep->cb_netbuf != NULL) {
     155                        if ((input->flags & NB_FLG_NOREL_IFOUT) == 0)
     156                                syscall(rel_net_buf(cep->cb_netbuf));
     157                        cep->cb_netbuf = NULL;
     158                        }
    147159                }
    148160        else {
  • EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/udpn_usrreq.c

    r331 r429  
    322322                else
    323323                        error = UDP_ALLOC_PORT(cep, pk_ccep->myaddr.portno);
    324                
    325                 if (error == E_OK) {
    326 
    327                         /* UDP 通信端点生成æƒ
     324
     325                        if (error == E_OK) {
     326                                /* UDP 通信端点生成æƒ
    328327報をコピーする。*/
    329                         cep->cepatr        = pk_ccep->cepatr;                   /* 通信端点属性           */
    330                         cep->myaddr.ipaddr = pk_ccep->myaddr.ipaddr;            /* 自分のアドレス        */
    331                         cep->callback      = (void*)pk_ccep->callback;          /* コールバック           */
    332 
    333                         /* UDP 通信端点を生成済みにする。*/
    334                         cep->flags |= UDP_CEP_FLG_VALID;
    335                         }
    336                 }
     328                                cep->cepatr        = pk_ccep->cepatr;                   /* 通信端点属性           */
     329                                cep->myaddr.ipaddr = pk_ccep->myaddr.ipaddr;            /* 自分のアドレス        */
     330                                cep->callback      = (void*)pk_ccep->callback;          /* コールバック           */
     331
     332                                /* UDP 通信端点を生成済みにする。*/
     333                                cep->flags |= UDP_CEP_FLG_VALID;
     334                                }
     335                        }
    337336
    338337        /* 通信端点のロックを解除する。*/
     
    426425                return E_NOEXS;
    427426#if defined(SUPPORT_INET6)
    428 #endif
    429 #if defined(SUPPORT_INET4) && defined(SUPPORT_IGMP) && TNUM_UDP4_CEPID > 0
     427#elif defined(SUPPORT_INET4) && defined(SUPPORT_IGMP) && TNUM_UDP4_CEPID > 0
    430428        switch (optname) {
    431429        case IP_MULTICAST_LOOP:
     
    503501                return E_NOEXS;
    504502#if defined(SUPPORT_INET6)
    505 #endif
    506 #if defined(SUPPORT_INET4) && defined(SUPPORT_IGMP) && TNUM_UDP4_CEPID > 0
     503#elif defined(SUPPORT_INET4) && defined(SUPPORT_IGMP) && TNUM_UDP4_CEPID > 0
    507504        switch (optname) {
    508505        case IP_MULTICAST_LOOP:
  • EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/udpn_usrreq_nblk.c

    r331 r429  
    136136
    137137#ifdef TCP_CFG_NON_BLOCKING_COMPAT14
    138                         (*cep->callback)(GET_UDP_CEPID(cep), TFN_UDP_RCV_DAT, (void*)error);
     138                        (*cep->callback)(GET_UDP_CEPID(cep), TFN_UDP_CAN_CEP, (void*)error);
    139139#else
    140                         (*cep->callback)(GET_UDP_CEPID(cep), TFN_UDP_RCV_DAT, (void*)&error);
     140                        (*cep->callback)(GET_UDP_CEPID(cep), TFN_UDP_CAN_CEP, (void*)&error);
    141141#endif
    142142                else
Note: See TracChangeset for help on using the changeset viewer.