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
Files:
1 added
58 edited

Legend:

Unmodified
Added
Removed
  • EcnlProtoTool/trunk/asp3_dcre/tinet/Makefile.tinet

    r331 r429  
    9393               in_subr.o route_cfg.o
    9494TINET_CFG_COBJS := $(TINET_CFG_COBJS) tinet_cfg.o
     95TINET_CFG2_OUT_SRCS := $(TINET_CFG2_OUT_SRCS) tinet_cfg.h tinet_cfg.c
    9596
    9697#  IPv6
     
    328329
    329330        CFG_COBJS := $(CFG_COBJS) $(TINET_CFG_COBJS)
     331        CFG2_OUT_SRCS := $(CFG2_OUT_SRCS) $(TINET_CFG2_OUT_SRCS)
    330332
    331333        CLEAN_FILES := $(CLEAN_FILES) $(TINET_CFG_OUT) $(MAKE_TINET_LIB)
  • EcnlProtoTool/trunk/asp3_dcre/tinet/net/ethernet.c

    r331 r429  
    195195
    196196/**
    197  * Called by a driver when its link goes up
    198  */
    199 void ether_set_link_up(T_IFNET *ether)
    200 {
    201   if (!(ether->flags & IF_FLAG_LINK_UP)) {
    202     ether->flags |= IF_FLAG_LINK_UP;
    203 
    204     if (ether->flags & IF_FLAG_UP) {
    205 #if LWIP_ARP
    206       /* For Ethernet network interfaces, we would like to send a "gratuitous ARP" */
    207       if (ether->flags & IF_FLAG_ETHARP) {
    208         etharp_gratuitous(ether);
    209       }
    210 #endif /* LWIP_ARP */
    211 
    212 #if LWIP_IGMP
    213       /* resend IGMP memberships */
    214       if (ether->_flags & IF_FLAG_IGMP) {
    215         igmp_report_groups(ether);
    216       }
    217 #endif /* LWIP_IGMP */
    218     }
    219     if (ether->link_callback) {
    220       (ether->link_callback)(ether);
    221     }
    222   }
    223 }
     197 * ether_set_link_up -- リンクしたときにNICから呼び出される
     198 */
     199void
     200ether_set_link_up()
     201{
     202        if (!(ether_ifnet.flags & IF_FLAG_LINK_UP)) {
     203                ether_ifnet.flags |= IF_FLAG_LINK_UP;
     204
     205                if (ether_ifnet.flags & IF_FLAG_UP) {
     206#if defined(_IP4_CFG) && defined(SUPPORT_ETHER)
     207                        /* ARP再構築? */
     208#endif /* #if defined(_IP4_CFG) && defined(SUPPORT_ETHER) */
     209
     210#ifdef SUPPORT_IGMP
     211                        /* IGMP参加 */
     212#endif /* #ifdef SUPPORT_IGMP */
     213                        }
     214                if (ether_ifnet.link_callback) {
     215                        (ether_ifnet.link_callback)(&ether_ifnet);
     216                        }
     217                }
     218        }
    224219
    225220/**
    226  * Called by a driver when its link goes down
    227  */
    228 void ether_set_link_down(T_IFNET *ether)
    229 {
    230   if (ether->flags & IF_FLAG_LINK_UP) {
    231     ether->flags &= ~IF_FLAG_LINK_UP;
    232     if (ether->link_callback) {
    233       (ether->link_callback)(ether);
    234     }
    235   }
    236 }
    237 
    238 /**
    239  * Set callback to be called when link is brought up/down
    240  */
    241 void ether_set_link_callback(ether_status_callback_fn link_callback)
     221 * ether_set_link_up -- リンクが切断したときにNICから呼び出される
     222 */
     223void
     224ether_set_link_down()
     225{
     226        if (ether_ifnet.flags & IF_FLAG_LINK_UP) {
     227                ether_ifnet.flags &= ~IF_FLAG_LINK_UP;
     228                if (ether_ifnet.link_callback) {
     229                        (ether_ifnet.link_callback)(&ether_ifnet);
     230                        }
     231                }
     232        }
     233
     234/*
     235 * ether_set_up -- DHCPでアドレスが設定されたとき呼び出される
     236 */
     237
     238void
     239ether_set_up()
     240{
     241        if (!(ether_ifnet.flags & IF_FLAG_UP)) {
     242                ether_ifnet.flags |= IF_FLAG_UP;
     243                if (ether_ifnet.link_callback) {
     244                        (ether_ifnet.link_callback)(&ether_ifnet);
     245                        }
     246                }
     247        }
     248
     249/*
     250 * ether_set_down -- DHCPでアドレスが解放されたとき呼び出される
     251 */
     252
     253void
     254ether_set_down()
     255{
     256        if (ether_ifnet.flags & IF_FLAG_UP) {
     257                ether_ifnet.flags &= ~IF_FLAG_UP;
     258                if (ether_ifnet.link_callback) {
     259                        (ether_ifnet.link_callback)(&ether_ifnet);
     260                        }
     261                }
     262        }
     263
     264/*
     265 * ether_set_link_callback -- リンク状態変化時のコールバック登録
     266 */
     267
     268void
     269ether_set_link_callback(ether_status_callback_fn link_callback)
    242270{
    243271        ether_ifnet.link_callback = link_callback;
    244 }
     272        if (ether_ifnet.link_callback) {
     273                (ether_ifnet.link_callback)(&ether_ifnet);
     274                }
     275        }
    245276
    246277/*
  • EcnlProtoTool/trunk/asp3_dcre/tinet/net/ethernet.h

    r331 r429  
    9999
    100100#if defined(__RX)
    101 
    102101#pragma pack
     102#elif defined(_MSC_VER)
     103#pragma pack(push, 1)
     104#endif
     105
     106#if defined(__RX) || defined(_MSC_VER)
     107
    103108typedef struct t_ether_header {
    104109
     
    113118        uint16_t        type;
    114119        } T_ETHER_HDR;
    115 #pragma packoption
    116120
    117121#elif defined(TOPPERS_S810_CLG3_85)     /* of #if defined(__RX) */
     
    143147        uint8_t         shost[ETHER_ADDR_LEN];
    144148        uint16_t        type;
    145         } __attribute__((packed, aligned(2)))T_ETHER_HDR;
     149        } __attribute__((packed, aligned(2))) T_ETHER_HDR;
    146150
    147151#endif  /* of #if defined(__RX) */
     
    158162typedef struct t_ether_addr {
    159163        uint8_t         lladdr[ETHER_ADDR_LEN];
    160         } __attribute__((packed, aligned(2)))T_ETHER_ADDR;
     164        } __attribute__((packed, aligned(2))) T_ETHER_ADDR;
     165
     166#if defined(__RX)
     167#pragma packoption
     168#elif defined(_MSC_VER)
     169#pragma pack(pop)
     170#endif
    161171
    162172/*
     
    208218                                                        /* インタフェースのマルチキャストアドレスへの変換              */
    209219
     220#define IF_FLAG_UP                              0x01U
     221#define IF_FLAG_LINK_UP                 0x10U
     222
    210223/*
    211224 *  前方参照
     
    266279#endif  /* of #ifdef T_IF_ETHER_NIC_SOFTC */
    267280
    268 #define IF_FLAG_UP                              0x01U
    269 #define IF_FLAG_LINK_UP                 0x10U
    270 
    271281/*
    272282 *  変数
     
    304314extern uint32_t ether_srand (void);
    305315
    306 /** Function prototype for netif status- or link-callback functions. */
    307316typedef void (*ether_status_callback_fn)(T_IFNET *ether);
    308317extern void ether_set_link_callback(ether_status_callback_fn link_callback);
    309 extern void ether_set_link_up(T_IFNET *ether);
    310 extern void ether_set_link_down(T_IFNET *ether);
     318extern void ether_set_link_up();
     319extern void ether_set_link_down();
     320extern void ether_set_up();
     321extern void ether_set_down();
    311322
    312323#endif  /* of #ifdef SUPPORT_ETHER */
  • EcnlProtoTool/trunk/asp3_dcre/tinet/net/if_arp.h

    r331 r429  
    9191        uint8_t         proto_len;      /* プロトコル長                       */
    9292        uint16_t        opcode;         /* 命令コード                        */
    93         } __attribute__((packed, aligned(2)))T_ARP_HDR;
     93        } __attribute__((packed, aligned(2))) T_ARP_HDR;
    9494
    9595#define ARP_HDR_SIZE                    (sizeof(T_ARP_HDR))
     
    119119typedef struct arpcom {
    120120        uint8_t         mac_addr[ETHER_ADDR_LEN];
    121         } __attribute__((packed, aligned(2)))T_ARPCOM;
     121        } __attribute__((packed, aligned(2))) T_ARPCOM;
    122122
    123123/*
  • EcnlProtoTool/trunk/asp3_dcre/tinet/net/net_asp.cfg

    r331 r429  
    4141
    4242INCLUDE("net/net.cfg");
     43
     44#ifndef NOUSE_MPF_NET_BUF
    4345
    4446/*
     
    169171                });
    170172#endif  /* of #if defined(NUM_MPF_NET_BUF6_65536) && NUM_MPF_NET_BUF6_65536 > 0 */
     173
     174#endif
  • EcnlProtoTool/trunk/asp3_dcre/tinet/net/net_buf.c

    r331 r429  
    6868#include <netinet/tcp_var.h>
    6969
     70#ifndef NOUSE_MPF_NET_BUF
     71
    7072/*
    7173 *  関数
     
    226228#endif  /* of #if defined(NUM_MPF_NET_BUF_128) && NUM_MPF_NET_BUF_128 > 0 */
    227229
    228 #if defined(_IP4_CFG)
     230#if defined(_IP6_CFG)
     231
     232#if defined(NUM_MPF_NET_BUF_CSEG) && NUM_MPF_NET_BUF_CSEG > 0
     233        {
     234                MPF_NET_BUF_CSEG,
     235                IF_HDR_SIZE + IP_HDR_SIZE + TCP_HDR_SIZE,
     236
     237#if NET_COUNT_ENABLE & PROTO_FLG_NET_BUF
     238
     239                NUM_MPF_NET_BUF_CSEG,
     240
     241#endif  /* of #if NET_COUNT_ENABLE & PROTO_FLG_NET_BUF */
     242
     243                },
     244#endif  /* of #if defined(NUM_MPF_NET_BUF_CSEG) && NUM_MPF_NET_BUF_CSEG > 0 */
     245
     246#endif  /* of #if defined(_IP6_CFG) */
    229247
    230248#if defined(NUM_MPF_NET_BUF_64) && NUM_MPF_NET_BUF_64 > 0
     
    242260#endif  /* of #if defined(NUM_MPF_NET_BUF_64) && NUM_MPF_NET_BUF_64 > 0 */
    243261
    244 #endif  /* of #if defined(_IP4_CFG) */
     262#if defined(_IP4_CFG) && !defined(_IP6_CFG)
    245263
    246264#if defined(NUM_MPF_NET_BUF_CSEG) && NUM_MPF_NET_BUF_CSEG > 0
     
    257275                },
    258276#endif  /* of #if defined(NUM_MPF_NET_BUF_CSEG) && NUM_MPF_NET_BUF_CSEG > 0 */
     277
     278#endif  /* of #if defined(_IP4_CFG) && !defined(_IP6_CFG) */
    259279
    260280        };
     
    307327
    308328        while (1) {
    309                 if ((error = tget_mpf((ID)net_buf_table[ix].index, (void*)buf, ix == 0 ? tmout : TMO_POL)) == E_OK) {
     329                if ((error = tget_mpf((ID)net_buf_table[ix].index, (void **)buf, ix == 0 ? tmout : TMO_POL)) == E_OK) {
    310330                        (*buf)->idix  = (uint8_t)ix;
    311331                        (*buf)->len   = (uint16_t)minlen;
    312332                        (*buf)->flags = 0;
    313 
     333#ifdef IF_ETHER_MULTI_NIC
     334                        (*buf)->conn_pos = 0;
     335#endif
    314336#if NET_COUNT_ENABLE & PROTO_FLG_NET_BUF
    315337                        NET_COUNT_NET_BUF(net_buf_table[ix].allocs, 1);
     
    318340                        return error;
    319341                        }
    320                 else if (ix == 0 || net_buf_table[ix].size > maxlen)
     342                ix --;
     343                if (ix < 0 || net_buf_table[ix].size > maxlen)
    321344                        break;
    322                 ix --;
    323345                }
    324346
     
    349371
    350372        while (1) {
    351                 if ((error = tget_mpf((ID)net_buf_table[ix].index, (void*)buf,
     373                if ((error = tget_mpf((ID)net_buf_table[ix].index, (void **)buf,
    352374                                      ix == sizeof(net_buf_table) / sizeof(T_NET_BUF_ENTRY) - 1 ? tmout : TMO_POL)) == E_OK) {
    353375                        (*buf)->idix  = (uint8_t)ix;
    354376                        (*buf)->len   = net_buf_table[ix].size;
    355377                        (*buf)->flags = 0;
     378#ifdef IF_ETHER_MULTI_NIC
     379                        (*buf)->conn_pos = 0;
     380#endif
    356381
    357382#if NET_COUNT_ENABLE & PROTO_FLG_NET_BUF
     
    450475                /* 固定メモリプールに返す。*/
    451476
    452 #if NET_COUNT_ENABLE & PROTO_FLG_NET_BUF
    453                 net_buf_table[buf->idix].busies --;
    454 #endif
    455                 if ((error = rel_mpf((ID)net_buf_table[buf->idix].index, buf)) != E_OK) {
    456                         syslog(LOG_WARNING, "[NET BUF] %s, ID=%d.", itron_strerror(error), buf->idix);
     477                int idix = buf->idix;
     478#if NET_COUNT_ENABLE & PROTO_FLG_NET_BUF
     479                net_buf_table[idix].busies --;
     480#endif
     481                if ((error = rel_mpf((ID)net_buf_table[idix].index, buf)) != E_OK) {
     482                        syslog(LOG_WARNING, "[NET BUF] %s, ID=%d.", itron_strerror(error), idix);
    457483                        }
    458484                }
     
    505531        return (uint_t)net_buf_table[0].size;
    506532        }
     533
     534#else
     535#include <stdlib.h>
     536
     537/*
     538 *  tget_net_buf_ex -- ネットワークバッファを獲得する(拡張機能)。
     539 */
     540
     541ER
     542tget_net_buf_ex (T_NET_BUF **buf, uint_t minlen, uint_t maxlen, ATR nbatr, TMO tmout)
     543{
     544        uint_t len = (minlen > maxlen) ? minlen : maxlen;
     545        *buf = (T_NET_BUF *)malloc(sizeof(T_NET_BUF) - sizeof(((T_NET_BUF *)0)->buf) + len);
     546        if (*buf == NULL)
     547                return E_NOMEM;
     548
     549        (*buf)->idix = 0;
     550        (*buf)->len = (uint16_t)len;
     551        (*buf)->flags = 0;
     552#ifdef IF_ETHER_MULTI_NIC
     553        (*buf)->conn_pos = 0;
     554#endif
     555
     556        return E_OK;
     557        }
     558
     559/*
     560 *  tget_net_buf -- ネットワークバッファを獲得する(互換)。
     561 */
     562
     563ER
     564tget_net_buf (T_NET_BUF **buf, uint_t len, TMO tmout)
     565{
     566        return tget_net_buf_ex(buf, len, len, NBA_SEARCH_ASCENT, tmout);
     567        }
     568
     569
     570/*
     571 * rel_net_buf -- ネットワークバッファを返却する。
     572 */
     573
     574ER
     575rel_net_buf (T_NET_BUF *buf)
     576{
     577        free(buf);
     578
     579        return E_OK;
     580        }
     581
     582
     583/*
     584 * net_buf_max_siz -- ネットワークバッファの最大サイズを返す。
     585 */
     586
     587uint_t
     588net_buf_max_siz (void)
     589{
     590        return (uint_t)IF_PDU_SIZE;
     591        }
     592
     593#endif
  • EcnlProtoTool/trunk/asp3_dcre/tinet/net/net_buf.h

    r331 r429  
    5555        uint8_t         idix;   /* mpfid のインデックス        */
    5656        uint8_t         flags;  /* フラグ          */
     57#ifdef IF_ETHER_MULTI_NIC
     58        uint8_t         conn_pos;
     59#endif
    5760#ifdef IF_ETHER_NIC_NET_BUF_ALIGN
    5861        uint8_t         nalign[IF_ETHER_NIC_NET_BUF_ALIGN];
     
    8083        uint8_t         idix;   /* mpfid のインデックス        */
    8184        uint8_t         flags;  /* フラグ          */
     85#ifdef IF_ETHER_MULTI_NIC
     86        uint8_t         conn_pos;
     87#endif
    8288#ifdef IF_ETHER_NIC_NET_BUF_ALIGN
    8389        uint8_t         nalign[IF_ETHER_NIC_NET_BUF_ALIGN];
     
    97103        uint8_t         idix;   /* mpfid のインデックス        */
    98104        uint8_t         flags;  /* フラグ          */
     105#ifdef IF_ETHER_MULTI_NIC
     106        uint8_t         conn_pos;
     107#endif
    99108#ifdef IF_ETHER_NIC_NET_BUF_ALIGN
    100109        uint8_t         nalign[IF_ETHER_NIC_NET_BUF_ALIGN];
     
    114123        uint8_t         idix;   /* mpfid のインデックス        */
    115124        uint8_t         flags;  /* フラグ          */
     125#ifdef IF_ETHER_MULTI_NIC
     126        uint8_t         conn_pos;
     127#endif
    116128#ifdef IF_ETHER_NIC_NET_BUF_ALIGN
    117129        uint8_t         nalign[IF_ETHER_NIC_NET_BUF_ALIGN];
     
    131143        uint8_t         idix;   /* mpfid のインデックス        */
    132144        uint8_t         flags;  /* フラグ          */
     145#ifdef IF_ETHER_MULTI_NIC
     146        uint8_t         conn_pos;
     147#endif
    133148#ifdef IF_ETHER_NIC_NET_BUF_ALIGN
    134149        uint8_t         nalign[IF_ETHER_NIC_NET_BUF_ALIGN];
     
    148163        uint8_t         idix;   /* mpfid のインデックス        */
    149164        uint8_t         flags;  /* フラグ          */
     165#ifdef IF_ETHER_MULTI_NIC
     166        uint8_t         conn_pos;
     167#endif
    150168#ifdef IF_ETHER_NIC_NET_BUF_ALIGN
    151169        uint8_t         nalign[IF_ETHER_NIC_NET_BUF_ALIGN];
     
    167185        uint8_t         idix;   /* mpfid のインデックス        */
    168186        uint8_t         flags;  /* フラグ          */
     187#ifdef IF_ETHER_MULTI_NIC
     188        uint8_t         conn_pos;
     189#endif
    169190#ifdef IF_ETHER_NIC_NET_BUF_ALIGN
    170191        uint8_t         nalign[IF_ETHER_NIC_NET_BUF_ALIGN];
  • EcnlProtoTool/trunk/asp3_dcre/tinet/net/net_count.c

    r331 r429  
    222222T_NET_COUNT     net_count_igmp;
    223223
    224 #endif  /* of #if NET_COUNT_ENABLE & PROTO_FLG_ICMP4 */
     224#endif  /* of #if NET_COUNT_ENABLE & PROTO_FLG_IGMP */
    225225
    226226#endif  /* of #if defined(_IP4_CFG) */
  • EcnlProtoTool/trunk/asp3_dcre/tinet/net/net_rename.h

    r331 r429  
    7171#define tget_net_buf_ex         _tinet_tget_net_buf_ex
    7272#define tget_net_buf            _tinet_tget_net_buf
    73 #define rel_net_buf             _tinet_rel_net_buf
    74 #define rus_net_buf             _tinet_rus_net_buf
    75 #define net_buf_siz             _tinet_net_buf_siz
     73#define rel_net_buf                     _tinet_rel_net_buf
     74#define rus_net_buf                     _tinet_rus_net_buf
     75#define net_buf_siz                     _tinet_net_buf_siz
    7676#define net_buf_max_siz         _tinet_net_buf_max_siz
    7777#define nbuf_get_tbl            _tinet_nbuf_get_tbl
  • EcnlProtoTool/trunk/asp3_dcre/tinet/netapp/Makefile.netapp

    r331 r429  
    183183                NETAPP_COBJS := $(NETAPP_COBJS) udp6_echo_cli.o
    184184                NETAPP_KERNEL_CFG := $(NETAPP_KERNEL_CFG) $(NETAPP_DIRS)/udp6_echo_cli.cfg
    185        
     185
    186186                ifeq ($(SUPPORT_INET4),true)
    187187                        ifeq ($(USE_UDP4_ECHO_CLI),true)
     
    191191                        endif
    192192                endif
    193         else
     193                else
    194194                ifeq ($(SUPPORT_INET4),true)
    195195                        SUPPORT_UDP = true
     
    364364ifeq ($(TARGET_KERNEL),ASP)
    365365
    366         APPLDIR := $(APPLDIR) $(NETAPP_DIRS)
     366        APPLDIRS := $(APPLDIRS) $(NETAPP_DIRS)
    367367        APPL_COBJS := $(APPL_COBJS) $(NETAPP_COBJS)
    368368        APPL_CFLAGS := $(APPL_CFLAGS) -fno-strict-aliasing
     
    382382ifeq ($(TARGET_KERNEL),ASP)
    383383
    384         APPLDIR := $(APPLDIR) $(SRCDIR)/pdic/sc1602
     384        APPLDIRS := $(APPLDIRS) $(SRCDIR)/pdic/sc1602
    385385
    386386endif
  • EcnlProtoTool/trunk/asp3_dcre/tinet/netapp/dbg_cons.c

    r331 r429  
    666666                    "IX Expire State      MAC Address       IP Address\n");
    667667
    668         /* expire の単位は [ms]。*/
     668        /* expire の単位は [us]。*/
    669669        get_tim(&now);
    670670        cache = nd6_get_cache();
     
    705705                    "IX Expire MAC Address       IP Address\n");
    706706
    707         /* expire の単位は [ms]。*/
     707        /* expire の単位は [us]。*/
    708708        cache = arp_get_cache();
    709709        for (ix = 0; ix < NUM_ARP_ENTRY; ix ++) {
     
    753753        WAI_NET_CONS_PRINTF();
    754754        get_tim(&now);
    755         cons_printf(portid, "ネットワーク統計情報\t経過時間[ms]\t%lu\t", now);
     755        cons_printf(portid, "ネットワーク統計情報\t経過時間[us]\t%lu\t", now);
    756756        if (now > (1000 * 3600 * 24))
    757757                cons_printf(portid, "%3lu日 %2lu時間 %2lu分 %2lu秒\n",
     
    938938                }
    939939
    940         cons_printf(portid, "\nネットワーク統計情報\t経過時間[ms]\t%lu\t", now);
     940        cons_printf(portid, "\nネットワーク統計情報\t経過時間[us]\t%lu\t", now);
    941941        if (now > (1000 * 3600 * 24))
    942942                cons_printf(portid, "%3lu日 %2lu時間 %2lu分 %2lu秒\n",
     
    10651065        WAI_NET_CONS_PRINTF();
    10661066        get_tim(&now);
    1067         cons_printf(portid, "ネットワークバッファ情報\t経過時間[ms]\t%u\n", now);
     1067        cons_printf(portid, "ネットワークバッファ情報\t経過時間[us]\t%u\n", now);
    10681068
    10691069#if NET_COUNT_ENABLE
     
    15771577        cons_printf(portid, " IP Address\n");
    15781578
    1579         /* expire の単位は [ms]。*/
     1579        /* expire の単位は [us]。*/
    15801580        get_tim(&now);
    15811581        dr = nd6_get_drl(&count);
     
    22982298
    22992299        cons_printf(portid, "ND:\n");
    2300         cons_printf(portid, "  TMO_ND6_RTR_SOL_DELAY:    %5d[ms]\n", TMO_ND6_RTR_SOL_DELAY);
    2301         cons_printf(portid, "  TMO_ND6_RTR_SOL_INTERVAL: %5d[ms]\n", TMO_ND6_RTR_SOL_INTERVAL);
     2300        cons_printf(portid, "  TMO_ND6_RTR_SOL_DELAY:    %5d[us]\n", TMO_ND6_RTR_SOL_DELAY);
     2301        cons_printf(portid, "  TMO_ND6_RTR_SOL_INTERVAL: %5d[us]\n", TMO_ND6_RTR_SOL_INTERVAL);
    23022302        cons_printf(portid, "  NUM_IP6_DAD_COUNT:        %5d\n",     NUM_IP6_DAD_COUNT);
    23032303        cons_printf(portid, "  NUM_ND6_CACHE_ENTRY:      %5d\n",     NUM_ND6_CACHE_ENTRY);
  • EcnlProtoTool/trunk/asp3_dcre/tinet/netapp/dhcp4.h

    r331 r429  
    9393        uint8_t         file   [DHCP4_FILE_LEN];                /* boot file name               */
    9494        uint8_t         options[DHCP4_DFLT_OPT_LEN];    /* optional parameters field    */
    95         } T_DHCP4_MSG;
     95        } __attribute__((packed)) T_DHCP4_MSG;
    9696
    9797/* packet type の定義 */
  • EcnlProtoTool/trunk/asp3_dcre/tinet/netapp/dhcp4_cli.c

    r331 r429  
    206206#endif
    207207
     208#ifdef SEM_DHCP4_CLI_TIMER
     209#define DHCP4_CLI_TIMER_LOCK() do { syscall(wai_sem(SEM_DHCP4_CLI_TIMER)); } while(0)
     210#define DHCP4_CLI_TIMER_UNLOCK() do { syscall(sig_sem(SEM_DHCP4_CLI_TIMER)); } while(0)
     211#else
     212#define DHCP4_CLI_TIMER_LOCK() do { } while(0)
     213#define DHCP4_CLI_TIMER_UNLOCK() do { } while(0)
     214#endif
     215
     216#ifdef SEM_DHCP4_CLI_READY
     217#define DHCP4_CLI_READY_WAIT(ct) do { syscall(wai_sem(SEM_DHCP4_CLI_READY)); } while(0)
     218#define DHCP4_CLI_READY_SIGNAL(ct) do { syscall(sig_sem(SEM_DHCP4_CLI_READY)); } while(0)
     219#else
     220#define DHCP4_CLI_READY_WAIT(ct) do { } while(0)
     221#define DHCP4_CLI_READY_SIGNAL(ct) do { ct->sig = 1; syscall(wup_tsk(ct->tskid)); } while(0)
     222#endif
     223
    208224/*
    209225 *  dhcp4_cksum -- チェックサムの計算関数
     
    381397#endif  /* of #ifdef USE_LCD */
    382398#endif
    383 
     399                ether_set_down();
    384400                }
    385401        }
     
    508524                lcd_putc(LCD_PORTID, '\n');
    509525#endif  /* of #ifdef USE_LCD */
    510         if (ct->set_addr_callback != NULL)
    511                 ct->set_addr_callback();
    512 
     526                ether_set_up();
    513527                }
    514528        }
     
    951965        int ix;
    952966
    953         syscall(wai_sem(SEM_DHCP4_CLI_TIMER));
     967        DHCP4_CLI_TIMER_LOCK();
    954968        for (ix = NUM_DHCP4C_TIMERS; ix -- > 0; )
    955969                ct->timers[ix] = 0;
    956         syscall(sig_sem(SEM_DHCP4_CLI_TIMER));
     970        DHCP4_CLI_TIMER_UNLOCK();
    957971        }
    958972
     
    970984
    971985        /* OFFER メッセージ受信タイムアウトを設定する。*/
    972         syscall(wai_sem(SEM_DHCP4_CLI_TIMER));
     986        DHCP4_CLI_TIMER_LOCK();
    973987        ct->timers[DHCP4C_TIMER_RCV_OFFER] = SYSTIM2TIMER(TMO_DHCP4C_OFFER);
    974         syscall(sig_sem(SEM_DHCP4_CLI_TIMER));
     988        DHCP4_CLI_TIMER_UNLOCK();
    975989
    976990        /* 送信å
     
    9871001        /* DISCOVER メッセージを送信する。*/
    9881002        ct->flags |= DHCP4C_FLAG_TMOUT_SND_DISC;
    989         syscall(sig_sem(SEM_DHCP4_CLI_READY));
     1003        DHCP4_CLI_READY_SIGNAL(ct);
    9901004        }
    9911005
     
    10181032
    10191033        /* EXPIRE、RENEW、REBIND タイマーを設定する。*/
    1020         syscall(wai_sem(SEM_DHCP4_CLI_TIMER));
     1034        DHCP4_CLI_TIMER_LOCK();
    10211035        ct->timers[DHCP4C_TIMER_EXPIRE] = SYSTIM2TIMER(ct->expire);             /* EXPIRE      までの時間 */
    10221036        ct->timers[DHCP4C_TIMER_REBIND] = SYSTIM2TIMER(ct->rebind);             /* REBIND(T2)までの時間 */
    10231037        ct->timers[DHCP4C_TIMER_RENEW]  = SYSTIM2TIMER(ct->renew);              /* RENEW (T1)までの時間 */
    1024         syscall(sig_sem(SEM_DHCP4_CLI_TIMER));
     1038        DHCP4_CLI_TIMER_UNLOCK();
    10251039
    10261040        /* BOUND 状æ
     
    10481062‹ãŒ RENEW 以外では ACK/NAK メッセージ受信タイムアウトを設定する。*/
    10491063        if (fsm != DHCP4_FSM_RENEW) {
    1050                 syscall(wai_sem(SEM_DHCP4_CLI_TIMER));
     1064                DHCP4_CLI_TIMER_LOCK();
    10511065                ct->timers[DHCP4C_TIMER_RCV_ACK] = SYSTIM2TIMER(TMO_DHCP4C_ACK);
    1052                 syscall(sig_sem(SEM_DHCP4_CLI_TIMER));
     1066                DHCP4_CLI_TIMER_UNLOCK();
    10531067                }
    10541068
     
    10731087        /* REQUEST メッセージを送信する。*/
    10741088        ct->flags |= DHCP4C_FLAG_TMOUT_SND_REQ;
    1075         syscall(sig_sem(SEM_DHCP4_CLI_READY));
     1089        DHCP4_CLI_READY_SIGNAL(ct);
    10761090        }
    10771091
     
    11031117        /* RELEASE メッセージを送信する。*/
    11041118        ct->flags |= DHCP4C_FLAG_TMOUT_SND_REL;
    1105         syscall(sig_sem(SEM_DHCP4_CLI_READY));
     1119        DHCP4_CLI_READY_SIGNAL(ct);
    11061120        }
    11071121
     
    11161130        uint8_t *option;
    11171131
    1118         memset((void*)&ct->snd_msg->msg, sizeof(ct->snd_msg->msg), 0);
     1132        memset((void*)&ct->snd_msg->msg, 0, sizeof(ct->snd_msg->msg));
    11191133        ct->snd_msg->len = sizeof(ct->snd_msg->msg);
    11201134
     
    14101424
    14111425                /* REQUEST メッセージ送信タイマーを停止する。*/
    1412                 syscall(wai_sem(SEM_DHCP4_CLI_TIMER));
     1426                DHCP4_CLI_TIMER_LOCK();
    14131427                ct->timers[DHCP4C_TIMER_SND_REQ] = 0;
    1414                 syscall(sig_sem(SEM_DHCP4_CLI_TIMER));
     1428                DHCP4_CLI_TIMER_UNLOCK();
    14151429
    14161430                /*
     
    14641478
    14651479                /* ACK/NAK メッセージ受信タイマーを停止する。*/
    1466                 syscall(wai_sem(SEM_DHCP4_CLI_TIMER));
     1480                DHCP4_CLI_TIMER_LOCK();
    14671481                ct->timers[DHCP4C_TIMER_RCV_ACK] = 0;
    1468                 syscall(sig_sem(SEM_DHCP4_CLI_TIMER));
     1482                DHCP4_CLI_TIMER_UNLOCK();
    14691483
    14701484                /*
     
    15441558
    15451559        /* 再送信タイムアウトを設定する。*/
    1546         syscall(wai_sem(SEM_DHCP4_CLI_TIMER));
     1560        DHCP4_CLI_TIMER_LOCK();
    15471561        ct->timers[DHCP4C_TIMER_SND_REQ] = SYSTIM2TIMER(ct->interval);
    1548         syscall(sig_sem(SEM_DHCP4_CLI_TIMER));
     1562        DHCP4_CLI_TIMER_UNLOCK();
    15491563        }
    15501564
     
    15821596        /* メッセージ送信å¾
    15831597ちを行う。*/
    1584         syscall(wai_sem(SEM_DHCP4_CLI_READY));
     1598        DHCP4_CLI_READY_WAIT(ct);
    15851599
    15861600        /* SLEEP 状æ
     
    16021616
    16031617                /* DISCOVER メッセージ送信タイマーを停止する。*/
    1604                 syscall(wai_sem(SEM_DHCP4_CLI_TIMER));
     1618                DHCP4_CLI_TIMER_LOCK();
    16051619                ct->timers[DHCP4C_TIMER_SND_DISC] = 0;
    1606                 syscall(sig_sem(SEM_DHCP4_CLI_TIMER));
     1620                DHCP4_CLI_TIMER_UNLOCK();
    16071621
    16081622                /* REQUEST メッセージを送信して REQUEST 状æ
     
    16341648
    16351649                /* OFFER メッセージ受信タイマーを停止する。*/
    1636                 syscall(wai_sem(SEM_DHCP4_CLI_TIMER));
     1650                DHCP4_CLI_TIMER_LOCK();
    16371651                ct->timers[DHCP4C_TIMER_RCV_OFFER] = 0;
    1638                 syscall(sig_sem(SEM_DHCP4_CLI_TIMER));
     1652                DHCP4_CLI_TIMER_UNLOCK();
    16391653
    16401654                /* REQUEST メッセージを送信して REQUEST 状æ
     
    16921706
    16931707        /* 再送信タイムアウトを設定する。*/
    1694         syscall(wai_sem(SEM_DHCP4_CLI_TIMER));
     1708        DHCP4_CLI_TIMER_LOCK();
    16951709        ct->timers[DHCP4C_TIMER_SND_DISC] = SYSTIM2TIMER(ct->interval);
    1696         syscall(sig_sem(SEM_DHCP4_CLI_TIMER));
    1697         }
     1710        DHCP4_CLI_TIMER_UNLOCK();
     1711        }
     1712
     1713#ifdef DHCP4_CLI_TASK
    16981714
    16991715/*
     
    17061722        int ix;
    17071723
    1708         syscall(wai_sem(SEM_DHCP4_CLI_TIMER));
     1724        DHCP4_CLI_TIMER_LOCK();
    17091725        for (ix = NUM_DHCP4C_TIMERS; ix -- > 0; ) {
    17101726                if (ct->timers[ix] != 0) {
     
    17121728                        if (ct->timers[ix] == 0) {
    17131729                                ct->flags = (ct->flags & ~DHCP4C_FLAG_TMOUT_MASK) | DHCP4C_FLAG_TMOUT_TIMER | ix;
    1714                                 syscall(sig_sem(SEM_DHCP4_CLI_READY));
     1730                                DHCP4_CLI_READY_SIGNAL(ct);
    17151731                                }
    17161732                        }
    17171733                }
    1718         syscall(sig_sem(SEM_DHCP4_CLI_TIMER));
     1734        DHCP4_CLI_TIMER_UNLOCK();
    17191735
    17201736        /* 1秒毎にタイムアウトする。*/
    17211737        timeout((callout_func)dhcpc_timer, ct, NET_TIMER_HZ);
    17221738        }
     1739
     1740#endif
    17231741
    17241742/*
     
    18321850        }
    18331851
     1852#ifdef DHCP4_CLI_TASK
     1853
    18341854/*
    18351855 *  dispatch_event -- イベント毎の処理
     
    18451865                /* メッセージの受信とタイムアウトをå¾
    18461866つ。*/
    1847                 syscall(wai_sem(SEM_DHCP4_CLI_READY));
     1867                DHCP4_CLI_READY_WAIT(ct);
    18481868
    18491869                if (ct->flags & DHCP4C_FLAG_RCV_MSG) {
     
    18631883        }
    18641884
     1885#endif
     1886
    18651887/*
    18661888 *  init_context -- DHCP クライアントコンテキスト構造体を初期化する。
     
    18681890
    18691891static void
    1870 init_context (T_DHCP4_CLI_CONTEXT *ct, ID cepid)
     1892init_context (T_DHCP4_CLI_CONTEXT *ct, ID tskid, ID cepid)
    18711893{
    18721894        memset(ct, 0, sizeof(*ct));
     1895        ct->tskid       = tskid;
    18731896        ct->cepid       = cepid;
    18741897        ct->sc          = IF_ETHER_NIC_GET_SOFTC();
    18751898        ct->dst.portno  = DHCP4_SRV_CFG_PORTNO;
    18761899        ct->dst.ipaddr  = IPV4_ADDRANY;
    1877         ct->set_addr_callback = DHCP4_CLI_SET_ADDR_CALLBACK;
    18781900        }
    18791901
     
    19681990
    19691991                /* SLEEP を解除する。*/
    1970                 wup_tsk(DHCP4_CLI_TASK);
     1992                context.req = 1;
     1993                wup_tsk(context.tskid);
    19711994                return E_OK;
    19721995                }
     
    20612084                                }
    20622085                        }
    2063                 syscall(sig_sem(SEM_DHCP4_CLI_READY));
     2086                DHCP4_CLI_READY_SIGNAL((&context));
    20642087                }
    20652088        return E_OK;
    20662089        }
     2090
     2091#ifdef DHCP4_CLI_TASK
    20672092
    20682093/*
     
    20752100        T_DHCP4_CLI_CONTEXT     *ct;
    20762101        ID                      tskid;
    2077         ER                      error;
     2102        ER                      error = E_OK;
    20782103
    20792104        dly_tsk(1000);
     
    20842109
    20852110        /* DHCP クライアントコンテキスト構造体を初期化する。*/
    2086         init_context(ct, (ID)exinf);
     2111        init_context(ct, tskid, (ID)exinf);
     2112        ct->fsm = DHCP4_FSM_SLEEP;
    20872113
    20882114        while (true) {
    2089 
    2090                 /* 1秒毎にタイムアウトするようにタイマーを設定する。*/
    2091                 timeout((callout_func)dhcpc_timer, ct, NET_TIMER_HZ / DHCP4C_TIMER_HZ);
    2092 
    2093                 /* メッセージ構造体を初期化する。*/
    2094                 if ((error = init_cli_msg(ct)) == E_OK) {
    2095 
    2096                         /* SELECT 状æ
    2097 ‹ã«é·ç§»ã™ã‚‹ã€‚*/
    2098                         start_select(ct);
    2099 
    2100                         /* メインループ */
    2101                         error = dispatch_event(ct);
    2102                         }
    2103 
    2104                 /* å
    2105 ¨ã¦ã® TIMER をキャンセルする。*/
    2106                 cancel_all_timers(ct);
    2107 
    2108                 /* タイマーを停止する。*/
    2109                 untimeout((callout_func)dhcpc_timer, ct);
    2110 
    2111                 /* メッセージ構造体を解放する。*/
    2112                 rel_cli_msg (ct);
    21132115
    21142116                /* リースを解放後、再取得が指定されていなければ休止する。*/
     
    21162118
    21172119                        /* 休止する。*/
    2118                         if (error == E_OK)
    2119                                 syslog(LOG_NOTICE, "[DHCP4C] lease released, go to sleep.");
     2120                        if (error == E_OK) {
     2121                                if (ct->fsm != DHCP4_FSM_SLEEP)
     2122                                        syslog(LOG_NOTICE, "[DHCP4C] lease released, go to sleep.");
     2123                        }
    21202124                        else {
    21212125                                syslog(LOG_NOTICE, "[DHCP4C] server not available, go to sleep, error: %s.", itron_strerror(error));
     
    21262130                ct->flags = 0;
    21272131                ct->error = E_OK;
    2128                 }
    2129         }
    2130 
     2132
     2133                /* 1秒毎にタイムアウトするようにタイマーを設定する。*/
     2134                timeout((callout_func)dhcpc_timer, ct, NET_TIMER_HZ / DHCP4C_TIMER_HZ);
     2135
     2136                /* メッセージ構造体を初期化する。*/
     2137                if ((error = init_cli_msg(ct)) == E_OK) {
     2138
     2139                        /* SELECT 状æ
     2140‹ã«é·ç§»ã™ã‚‹ã€‚*/
     2141                        start_select(ct);
     2142
     2143                        /* メインループ */
     2144                        error = dispatch_event(ct);
     2145                        }
     2146
     2147                /* å
     2148¨ã¦ã® TIMER をキャンセルする。*/
     2149                cancel_all_timers(ct);
     2150
     2151                /* タイマーを停止する。*/
     2152                untimeout((callout_func)dhcpc_timer, ct);
     2153
     2154                /* メッセージ構造体を解放する。*/
     2155                rel_cli_msg (ct);
     2156                }
     2157        }
     2158
     2159#else
     2160
     2161T_DHCP4_CLI_CONTEXT *
     2162dhcp4_cli_initialize(ID tskid, ID cepid)
     2163{
     2164        T_DHCP4_CLI_CONTEXT *ct = &context;
     2165        /* DHCP クライアントコンテキスト構造体を初期化する。*/
     2166        init_context(ct, tskid, cepid);
     2167        ct->fsm = DHCP4_FSM_SLEEP;
     2168        ct->timer = TMO_FEVR;
     2169        return ct;
     2170        }
     2171
     2172int
     2173dhcp4_cli_get_timer(T_DHCP4_CLI_CONTEXT *ct)
     2174{
     2175        if (ct->fsm == DHCP4_FSM_SLEEP)
     2176                return TMO_FEVR;
     2177
     2178        return ct->timer;
     2179        }
     2180
     2181void
     2182dhcp4_cli_progress(T_DHCP4_CLI_CONTEXT *ct, int elapse)
     2183{
     2184        int ix;
     2185
     2186        if ((ct->fsm == DHCP4_FSM_SLEEP) || (ct->timer == TMO_FEVR))
     2187                return;
     2188
     2189        ct->timer -= elapse;
     2190        if (ct->timer > 0)
     2191                return;
     2192
     2193        /* 1秒毎にタイムアウトするようにタイマーを設定する。*/
     2194        ct->timer = 1000 * 1000;
     2195
     2196        for (ix = NUM_DHCP4C_TIMERS; ix-- > 0; ) {
     2197                if (ct->timers[ix] != 0) {
     2198                        ct->timers[ix] --;
     2199                        if (ct->timers[ix] <= 0) {
     2200                                ct->timers[ix] = 0;
     2201                                ct->flags = (ct->flags & ~DHCP4C_FLAG_TMOUT_MASK) | DHCP4C_FLAG_TMOUT_TIMER | ix;
     2202                                DHCP4_CLI_READY_SIGNAL(ct);
     2203                                }
     2204                        }
     2205                }
     2206        }
     2207
     2208void
     2209dhcp4_cli_wakeup(T_DHCP4_CLI_CONTEXT *ct)
     2210{
     2211        if (ct->req) {
     2212                ct->req = 0;
     2213                if (ct->snd_msg == NULL) {
     2214                        ct->flags = 0;
     2215                        ct->error = E_OK;
     2216
     2217                        /* メッセージ構造体を初期化する。*/
     2218                        if ((ct->error = init_cli_msg(ct)) != E_OK)
     2219                                return;
     2220
     2221                        ct->timer = 1000 * 1000;
     2222
     2223                        /* SELECT 状æ
     2224‹ã«é·ç§»ã™ã‚‹ã€‚*/
     2225                        start_select(ct);
     2226                        }
     2227                }
     2228
     2229        if (!ct->sig)
     2230                return;
     2231        ct->sig = 0;
     2232
     2233        if (ct->flags & DHCP4C_FLAG_RCV_MSG) {
     2234                while (ct->val_lst != NULL) {
     2235                        ct->error = eval_rcv_msg(ct);
     2236                        }
     2237                ct->flags &= ~DHCP4C_FLAG_RCV_MSG;
     2238                }
     2239        }
     2240
     2241void
     2242dhcp4_cli_timeout(T_DHCP4_CLI_CONTEXT *ct)
     2243{
     2244        if (ct->flags & DHCP4C_FLAG_TMOUT_MASK)
     2245                ct->error = dispatch_timeout(ct);
     2246
     2247        if (ct->error != E_OK || ct->fsm == DHCP4_FSM_SLEEP) {
     2248                /* å
     2249¨ã¦ã® TIMER をキャンセルする。*/
     2250                cancel_all_timers(ct);
     2251                ct->timer = TMO_FEVR;
     2252
     2253                /* メッセージ構造体を解放する。*/
     2254                rel_cli_msg(ct);
     2255
     2256                /* リースを解放後、再取得が指定されていなければ休止する。*/
     2257                if (!(ct->flags & DHCP4C_FLAG_RENEW)) {
     2258
     2259                        /* 休止する。*/
     2260                        if (ct->error == E_OK) {
     2261                                if (ct->fsm != DHCP4_FSM_SLEEP)
     2262                                        syslog(LOG_NOTICE, "[DHCP4C] lease released, go to sleep.");
     2263                        }
     2264                        else {
     2265                                syslog(LOG_NOTICE, "[DHCP4C] server not available, go to sleep, error: %s.", itron_strerror(ct->error));
     2266                                ct->error = E_OK;
     2267                                ct->fsm = DHCP4_FSM_SLEEP;
     2268                                }
     2269                        }
     2270                }
     2271        }
     2272
     2273#endif /* DHCP4_CLI_TASK */
    21312274#endif  /* of #ifdef DHCP4_CLI_CFG */
  • EcnlProtoTool/trunk/asp3_dcre/tinet/netapp/dhcp4_cli.h

    r331 r429  
    206206
    207207/* 受信タイムアウト     */
    208 #define TMO_DHCP4C_OFFER        ULONG_C(120*1000)       /* OFFER メッセージ        */
    209 #define TMO_DHCP4C_ACK          ULONG_C(60*1000)        /* ACK/NAK メッセージ      */
     208#define TMO_DHCP4C_OFFER        (ULONG_C(120)*SYSTIM_HZ)        /* OFFER メッセージ        */
     209#define TMO_DHCP4C_ACK          (ULONG_C(60)*SYSTIM_HZ) /* ACK/NAK メッセージ      */
    210210
    211211/* リース時間の既定値  */
    212 #define TMO_DHCP4C_DEF_LEASE    ULONG_C(12*60*60*1000)  /* 標準時間 */
    213 #define TMO_DHCP4C_MIN_LEASE    ULONG_C(60*1000)        /* 最小時間 */
     212#define TMO_DHCP4C_DEF_LEASE    (ULONG_C(12*60*60)*SYSTIM_HZ)   /* 標準時間 */
     213#define TMO_DHCP4C_MIN_LEASE    (ULONG_C(60)*SYSTIM_HZ) /* 最小時間 */
    214214
    215215/* メッセージの送信周期       */
    216 #define TMO_DHCP4C_INIT_INTVL   ULONG_C(3*1000)         /* 初期値    */
    217 #define TMO_DHCP4C_MAX_BACKOFF  ULONG_C(15*1000)        /* 制限値    */
     216#define TMO_DHCP4C_INIT_INTVL   (ULONG_C(3)*SYSTIM_HZ)          /* 初期値    */
     217#define TMO_DHCP4C_MAX_BACKOFF  (ULONG_C(15)*SYSTIM_HZ) /* 制限値    */
    218218
    219219/* DHCP サーバへの UDP 送信タイムアウト    */
     
    230230ち時間       */
    231231#define TMO_DHCP4C_SND_REL_WAIT ULONG_C(1000000)        /* [us] */
    232 
    233 /* DHCP でアドレスが更新された時に呼び出すコールバック関数 */
    234 #ifndef DHCP4_CLI_SET_ADDR_CALLBACK
    235 #define DHCP4_CLI_SET_ADDR_CALLBACK NULL
    236 #endif
    237232
    238233#ifndef _MACRO_ONLY
  • EcnlProtoTool/trunk/asp3_dcre/tinet/netapp/dhcp4_cli_var.h

    r331 r429  
    181181        RELTIM          interval;       /* 送信間隔                 */
    182182        ER_UINT         error;          /* エラー・データ長             */
    183         ID              cepid;          /* CEP ID                       */
     183        ID                      tskid;          /* タスクID */
     184        ID                      cepid;          /* CEP ID                       */
    184185        uint32_t        xid;            /* トランザクション ID          */
    185186        uint16_t        flags;          /* 各種フラグ                      */
     
    188189        uint8_t         fsm;            /* 現在の状æ
    189190‹                       */
    190         void (* set_addr_callback)();   /* アドレス設定時のコールバック */
     191        uint8_t         req;
     192        uint8_t         sig;
     193        int timer;
    191194        } T_DHCP4_CLI_CONTEXT;
    192195
  • EcnlProtoTool/trunk/asp3_dcre/tinet/netapp/netapp_subr.c

    r331 r429  
    4444#include <sil.h>
    4545#include <syssvc/serial.h>
    46 #include <syssvc/logtask.h>
     46#include <target_syssvc.h>
     47#define LOGTASK_PORTID SIO_PORTID
    4748#include <t_syslog.h>
    4849#include "kernel_cfg.h"
  • EcnlProtoTool/trunk/asp3_dcre/tinet/netapp/resolver.c

    r331 r429  
    5959#include <kernel.h>
    6060#include <t_syslog.h>
    61 #include <syssvc/logtask.h>
     61#include <target_syssvc.h>
     62#define LOGTASK_PORTID SIO_PORTID
    6263#include "kernel_cfg.h"
    6364#include "tinet_cfg.h"
     
    253254{
    254255        uint_t          label_len;
    255         uint8_t         *tail;
     256        char            *tail;
    256257
    257258        while (*name != '\0') {
     
    265266
    266267                /* ラベル長を設定する。*/
    267                 label_len = tail - (uint8_t*)name;
     268                label_len = tail - name;
    268269                if (label_len > DNS_LABEL_LENGTH) {     /* 63 オクテットをè¶
    269270えるとエラー */
     
    421422
    422423                        /* ドメイン名を追加する。*/
    423                         if ((offset = add_name(msg, msg_size, offset, dns_domain_name)) < 0)
     424                        if ((offset = add_name(msg, msg_size, offset, (char *)dns_domain_name)) < 0)
    424425                                return offset;
    425426
     
    10751076
    10761077        if (new == NULL)
    1077                 strcpy(dns_domain_name, RSLV_CFG_DNS_DOMAIN_NAME_STR);
     1078                strcpy((char *)dns_domain_name, RSLV_CFG_DNS_DOMAIN_NAME_STR);
    10781079        else {
    10791080                dst = dns_domain_name;
  • EcnlProtoTool/trunk/asp3_dcre/tinet/netapp/resolver.h

    r331 r429  
    7070 */
    7171
    72 #define TMO_DNS_UDP_SND         ULONG_C(1*1000) /* [ms]、DNS サーバへの   UDP 送信タイムアウト    */
    73 #define TMO_DNS_UDP_RCV         ULONG_C(5*1000) /* [ms]、DNS サーバからの UDP 受信タイムアウト   */
     72#define TMO_DNS_UDP_SND         ULONG_C(1*1000*1000)    /* [us]、DNS サーバへの   UDP 送信タイムアウト    */
     73#define TMO_DNS_UDP_RCV         ULONG_C(5*1000*1000)    /* [us]、DNS サーバからの UDP 受信タイムアウト   */
    7474#define NUM_DNS_UDP_RETRY       1               /* リトライ回数                                   */
    7575
  • EcnlProtoTool/trunk/asp3_dcre/tinet/netapp/wwws.c

    r331 r429  
    708708        len += put_str(cepid, srbuf, response);
    709709        get_tim(&finish);
    710         syslog(LOG_NOTICE, "[WWWn:%02u SND] send: index.html, len: %4u, time: %lu [ms]",
     710        syslog(LOG_NOTICE, "[WWWn:%02u SND] send: index.html, len: %4u, time: %lu [us]",
    711711                           cepid, len, (finish - start) * 1000 / SYSTIM_HZ);
    712712        return E_OK;
     
    16091609
    16101610        get_tim(&finish);
    1611         syslog(LOG_NOTICE, "[WWWn:%02u SND]send: stat.html,  len: %4u, time: %lu [ms]",
     1611        syslog(LOG_NOTICE, "[WWWn:%02u SND]send: stat.html,  len: %4u, time: %lu [us]",
    16121612                           cepid, len, (finish - start) * 1000 / SYSTIM_HZ);
    16131613        return E_OK;
  • EcnlProtoTool/trunk/asp3_dcre/tinet/netdev/if_mbed/if_mbed.c

    r331 r429  
    44 *  Copyright (C) 2001-2009 by Dep. of Computer Science and Engineering
    55 *                   Tomakomai National College of Technology, JAPAN
    6  *  Copyright (C) 2014 Cores Co., Ltd. Japan
     6 *  Copyright (C) 2014-2019 Cores Co., Ltd. Japan
    77 *
    88 *  上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ
     
    6464 * SUCH DAMAGE.
    6565 *
    66  * $FreeBSD: src/sys/i386/isa/if_mbed.c,v 1.148.2.4 1999/09/25 13:08:18 nyan Exp $
     66 * $FreeBSD: src/sys/i386/isa/if_ed.c,v 1.148.2.4 1999/09/25 13:08:18 nyan Exp $
    6767 */
    6868
     
    200200if_mbed_setrcr(T_IF_SOFTC *ic)
    201201{
    202         T_MBED_SOFTC    *sc = ic->sc;
    203202}
    204203
     
    318317if_mbed_init(T_IF_SOFTC *ic)
    319318{
    320         T_MBED_SOFTC *sc = ic->sc;
    321 
    322319        /* mbed_init 本体を呼び出す。*/
    323320        if_mbed_init_sub(ic);
     
    347344                                }
    348345                                if (link_mode_new != NEGO_FAIL) {
    349                                         ethernetext_set_link_mode(link_mode_new);
     346                                        ethernetext_set_link_mode(link_mode_new | PROMISCUOUS_MODE);
    350347                                        ETHER.EESIPR0 |= EDMAC_EESIPR_INI_TRANS;
    351348                                        ether_set_link_up(ether);
     
    373370if_mbed_read(T_IF_SOFTC *ic)
    374371{
    375         T_MBED_SOFTC *sc = ic->sc;
    376372        T_NET_BUF *input = NULL;
    377373        uint_t align;
     
    406402if_mbed_start(T_IF_SOFTC *ic, T_NET_BUF *output)
    407403{
    408         T_MBED_SOFTC *sc = ic->sc;
    409404        int32_t len, res, pos;
    410405
     
    429424if_mbed_eth_handler(void)
    430425{
    431     uint32_t stat_edmac;
    432     uint32_t stat_etherc;
    433 
    434     /* Clear the interrupt request flag */
    435     stat_edmac = (ETHER.EESR0 & ETHER.EESIPR0);       /* Targets are restricted to allowed interrupts */
    436     ETHER.EESR0 = stat_edmac;
    437     /* Reception-related */
    438     if (stat_edmac & EDMAC_EESIPR_INI_RECV) {
    439                 isig_sem(if_softc.semid_rxb_ready);
    440     }
     426        uint32_t stat_edmac;
     427        uint32_t stat_etherc;
     428        ER ret;
     429       
     430        /* Clear the interrupt request flag */
     431        stat_edmac = (ETHER.EESR0 & ETHER.EESIPR0);       /* Targets are restricted to allowed interrupts */
     432        ETHER.EESR0 = stat_edmac;
     433        /* Reception-related */
     434        if (stat_edmac & EDMAC_EESIPR_INI_RECV) {
     435                ret = isig_sem(if_softc.semid_rxb_ready);
     436                if (ret != E_OK)
     437                        syslog(LOG_INFO, "semid_rxb_ready %d %x", ret, stat_edmac & EDMAC_EESIPR_INI_RECV);
     438        }
    441439        if (stat_edmac & EDMAC_EESIPR_INI_TRANS) {
    442                 isig_sem(if_softc.semid_txb_ready);
    443         }
    444     /* E-MAC-related */
    445     if (stat_edmac & EDMAC_EESIPR_INI_EtherC) {
    446         /* Clear the interrupt request flag */
    447         stat_etherc = (ETHER.ECSR0 & ETHER.ECSIPR0);  /* Targets are restricted to allowed interrupts */
    448         ETHER.ECSR0  = stat_etherc;
    449     }
    450 }
     440                ret = isig_sem(if_softc.semid_txb_ready);
     441                if (ret != E_OK)
     442                        syslog(LOG_INFO, "semid_txb_ready %d %x", ret, stat_edmac & EDMAC_EESIPR_INI_TRANS);
     443        }
     444        /* E-MAC-related */
     445        if (stat_edmac & EDMAC_EESIPR_INI_EtherC) {
     446                /* Clear the interrupt request flag */
     447                stat_etherc = (ETHER.ECSR0 & ETHER.ECSIPR0);  /* Targets are restricted to allowed interrupts */
     448                ETHER.ECSR0  = stat_etherc;
     449        }
     450}
  • EcnlProtoTool/trunk/asp3_dcre/tinet/netdev/if_mbed/if_mbed.cfg

    r321 r429  
    44 *  Copyright (C) 2001-2009 by Dep. of Computer Science and Engineering
    55 *                   Tomakomai National College of Technology, JAPAN
    6  *  Copyright (C) 2014 Cores Co., Ltd. Japan
     6 *  Copyright (C) 2014-2019 Cores Co., Ltd. Japan
    77 *
    88 *  上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ
  • EcnlProtoTool/trunk/asp3_dcre/tinet/netdev/if_mbed/if_mbed.h

    r321 r429  
    44 *  Copyright (C) 2001-2009 by Dep. of Computer Science and Engineering
    55 *                   Tomakomai National College of Technology, JAPAN
    6  *  Copyright (C) 2014 Cores Co., Ltd. Japan
     6 *  Copyright (C) 2014-2019 Cores Co., Ltd. Japan
    77 *
    88 *  上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ
  • EcnlProtoTool/trunk/asp3_dcre/tinet/netdev/if_mbed/nic.cfg

    r321 r429  
    44 *  Copyright (C) 2001-2009 by Dep. of Computer Science and Engineering
    55 *                   Tomakomai National College of Technology, JAPAN
    6  *  Copyright (C) 2014 Cores Co., Ltd. Japan
     6 *  Copyright (C) 2014-2019 Cores Co., Ltd. Japan
    77 *
    88 *  上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ
  • EcnlProtoTool/trunk/asp3_dcre/tinet/netdev/if_mbed/nic_asp.cfg

    r321 r429  
    44 *  Copyright (C) 2001-2009 by Dep. of Computer Science and Engineering
    55 *                   Tomakomai National College of Technology, JAPAN
    6  *  Copyright (C) 2014 Cores Co., Ltd. Japan
     6 *  Copyright (C) 2014-2019 Cores Co., Ltd. Japan
    77 *
    88 *  上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ
  • EcnlProtoTool/trunk/asp3_dcre/tinet/netdev/if_mbed/nic_rename.h

    r321 r429  
    44 *  Copyright (C) 2001-2009 by Dep. of Computer Science and Engineering
    55 *                   Tomakomai National College of Technology, JAPAN
    6  *  Copyright (C) 2014 Cores Co., Ltd. Japan
     6 *  Copyright (C) 2014-2019 Cores Co., Ltd. Japan
    77 *
    88 *  上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ
  • EcnlProtoTool/trunk/asp3_dcre/tinet/netdev/if_mbed/tinet_nic_config.h

    r321 r429  
    44 *  Copyright (C) 2001-2009 by Dep. of Computer Science and Engineering
    55 *                   Tomakomai National College of Technology, JAPAN
    6  *  Copyright (C) 2014 Cores Co., Ltd. Japan
     6 *  Copyright (C) 2014-2019 Cores Co., Ltd. Japan
    77 *
    88 *  上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ
  • EcnlProtoTool/trunk/asp3_dcre/tinet/netdev/if_mbed/tinet_nic_defs.h

    r321 r429  
    44 *  Copyright (C) 2001-2009 by Dep. of Computer Science and Engineering
    55 *                   Tomakomai National College of Technology, JAPAN
    6  *  Copyright (C) 2014 Cores Co., Ltd. Japan
     6 *  Copyright (C) 2014-2019 Cores Co., Ltd. Japan
    77 *
    88 *  上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ
  • 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
  • EcnlProtoTool/trunk/asp3_dcre/tinet/netinet6/in6_subr.c

    r331 r429  
    369369
    370370        /* IPv6 ヘッダを設定する。*/
    371         if ((error = in6_set_header(*nbuf, len, dstaddr, srcaddr, next, hlim)) != E_OK)
     371        if ((error = in6_set_header(*nbuf, len, dstaddr, srcaddr, next, hlim)) != E_OK) {
     372                syscall(rel_net_buf(*nbuf));
     373                *nbuf = NULL;
    372374                return error;
     375                }
    373376
    374377        /* 4 オクテット境界までパディングで埋める。*/
     
    662665 *  in6_rtredirect -- ルーティング表にエントリを登録する。
    663666 *
    664  *    注意: 引数 tmo の単位は [ms]。
     667 *    注意: 引数 tmo の単位は [us]。
    665668 */
    666669
  • EcnlProtoTool/trunk/asp3_dcre/tinet/netinet6/in6_var.h

    r331 r429  
    184184         * vltime と pltime は、追加/変更してからの相対時間
    185185         */
    186         uint32_t        vltime;         /* 有効時間 [ms]                    */
    187         uint32_t        pltime;         /* 推奨有効時間 [ms]          */
     186        uint32_t        vltime;         /* 有効時間 [us]                    */
     187        uint32_t        pltime;         /* 推奨有効時間 [us]          */
    188188        } __attribute__((packed, aligned(2)))T_IN6_ADDR_LIFETIME;
    189189
  • EcnlProtoTool/trunk/asp3_dcre/tinet/netinet6/ip6_var.h

    r331 r429  
    152152        uint8_t         idix;   /* mpfid のインデックス        */
    153153        uint8_t         unit;   /* インタフェース番号    */
     154#ifdef IF_ETHER_MULTI_NIC
     155        uint8_t         conn_pos;
     156#endif
    154157#ifdef IF_ETHER_NIC_NET_BUF_ALIGN
    155158        uint8_t         nalign[IF_ETHER_NIC_NET_BUF_ALIGN];
     
    172175        uint8_t         idix;   /* mpfid のインデックス        */
    173176        uint8_t         flags;  /* フラグ          */
     177#ifdef IF_ETHER_MULTI_NIC
     178        uint8_t         conn_pos;
     179#endif
    174180#ifdef IF_ETHER_NIC_NET_BUF_ALIGN
    175181        uint8_t         nalign[IF_ETHER_NIC_NET_BUF_ALIGN];
     
    224230        uint8_t         idix;   /* mpfid のインデックス        */
    225231        uint8_t         flags;  /* フラグ          */
     232#ifdef IF_ETHER_MULTI_NIC
     233        uint8_t         conn_pos;
     234#endif
    226235#ifdef IF_ETHER_NIC_NET_BUF_ALIGN
    227236        uint8_t         nalign[IF_ETHER_NIC_NET_BUF_ALIGN];
  • EcnlProtoTool/trunk/asp3_dcre/tinet/netinet6/nd6.c

    r331 r429  
    353353                        if (nd6_cache[mix].hold != NULL) {
    354354                                syscall(rel_net_buf(nd6_cache[mix].hold));
     355                                nd6_cache[mix].hold = NULL;
    355356                                }
    356357                        fix = mix;
     
    562563                        if (ln->hold != NULL) {
    563564                                syscall(rel_net_buf(ln->hold));
     565                                ln->hold = NULL;
    564566                                }
    565567
  • EcnlProtoTool/trunk/asp3_dcre/tinet/netinet6/nd6.h

    r331 r429  
    8181        T_NET_BUF       *hold;
    8282        TMO             tmout;
    83         SYSTIM          expire;         /* [ms] 有効時間が切れる時刻      */
     83        SYSTIM          expire;         /* [us] 有効時間が切れる時刻      */
    8484        T_IF_ADDR       ifaddr;
    8585        uint8_t         state;
     
    183183typedef struct t_def_router {
    184184        T_IN6_ADDR      addr;
    185         SYSTIM          expire;         /* [ms] 有効時間が切れる時刻      */
    186         uint32_t        lifetime;       /* [ms] 有効時間                    */
     185        SYSTIM          expire;         /* [us] 有効時間が切れる時刻      */
     186        uint32_t        lifetime;       /* [us] 有効時間                    */
    187187        uint16_t        plistmap;       /* プレフィックスマップ           */
    188188        uint8_t         flags;          /* ルータ通知のフラグ            */
  • EcnlProtoTool/trunk/asp3_dcre/tinet/netinet6/nd6_rtr.c

    r331 r429  
    999999                return;
    10001000
    1001         /* ルータ要請ヘッダを設定する。*/
    1002         rsh = GET_ROUTER_SOLICIT_HDR(output, IF_IP6_ROUTER_SOLICIT_HDR_OFFSET);
    1003         rsh->hdr.type       = ND_ROUTER_SOLICIT;
    1004         rsh->hdr.code       = 0;
    1005         rsh->nd_rs_reserved = 0;
     1001        /* ルータ要請ヘッダを設定する。*/
     1002        rsh = GET_ROUTER_SOLICIT_HDR(output, IF_IP6_ROUTER_SOLICIT_HDR_OFFSET);
     1003        rsh->hdr.type       = ND_ROUTER_SOLICIT;
     1004        rsh->hdr.code       = 0;
     1005        rsh->nd_rs_reserved = 0;
    10061006
    10071007        /* チェックサムを計算する。*/
  • EcnlProtoTool/trunk/asp3_dcre/tinet/tcpip_sym.def

    r331 r429  
    1515TMO_UDP_OUTPUT
    1616TMO_ICMP_OUTPUT
     17TMO_IGMP_OUTPUT
    1718TMO_ND6_NS_OUTPUT
    1819TMO_ND6_NA_OUTPUT
  • EcnlProtoTool/trunk/asp3_dcre/tinet/tinet.trb

    r331 r429  
    124124#include <net/ethernet.h>
    125125#include <net/net.h>
     126#include <net/net_endian.h>
    126127#include <net/net_buf.h>
    127128#include <netinet/in.h>
     
    142143$tinetCfgC.add(" */")
    143144$tinetCfgC.add()
    144 $includeFiles.each do |file|
    145   $tinetCfgC.add("#include #{file}")
    146 end
     145GenerateIncludes($tinetCfgC)
    147146
    148147$tinetCfgC.add()
  • EcnlProtoTool/trunk/asp3_dcre/tinet/tinet_asp.cfg

    r331 r429  
    7373INCLUDE("netinet/if_ether.cfg");
    7474INCLUDE("netinet/ip.cfg");
     75INCLUDE("netinet/ip_igmp.cfg");
    7576INCLUDE("netinet/tcp.cfg");
    7677INCLUDE("netinet/udp.cfg");
Note: See TracChangeset for help on using the changeset viewer.