Beispiel #1
0
bool TCPIP_Commands_Initialize(const TCPIP_STACK_MODULE_CTRL* const stackCtrl, const TCPIPCMD_MODULE_CONFIG* const pCmdInit)
{
    if(stackCtrl->stackAction == TCPIP_STACK_ACTION_IF_UP)
    {   // interface restart
        return true;
    }


    // stack init
    initialNetIfs = stackCtrl->nIfs;
    initialHeapH = stackCtrl->memH;

    // create command group
    if (!_SYS_COMMAND_ADDGRP(tcpipCmdTbl, sizeof(tcpipCmdTbl)/sizeof(*tcpipCmdTbl), "tcpip", ": stack commands"))
    {
        SYS_ERROR(SYS_ERROR_ERROR, "Failed to create TCPIP Commands\r\n");
        return false;
    }

#if defined(TCPIP_STACK_COMMANDS_STORAGE_ENABLE)
    // get storage for interfaces configuration
    // cannot be taken from the TCPIP-HEAP because we need it persistent after
    // TCPIP_STACK_Deinit() is called!
    if(pCmdStgDcpt == 0 && pCmdNetConf == 0)
    {
        pCmdStgDcpt = (TCPIP_COMMAND_STG_DCPT*)SystemCalloc(initialNetIfs, sizeof(*pCmdStgDcpt));
        pCmdNetConf = (TCPIP_NETWORK_CONFIG*)SystemCalloc(initialNetIfs, sizeof(*pCmdNetConf));
        if(pCmdStgDcpt == 0 || pCmdNetConf == 0)
        {   // failure is not considered to be catastrophic
            SYS_ERROR(SYS_ERROR_WARN, "Failed to create TCPIP Commands Storage/Config\r\n");
        }
    }
#endif  // defined(TCPIP_STACK_COMMANDS_STORAGE_ENABLE)

#if defined(TCPIP_IF_MRF24W) && defined(TCPIP_STACK_COMMANDS_WIFI_ENABLE)
    WIFICommandsInit();
#endif

#if defined(TCPIP_STACK_USE_ICMP_CLIENT)
    hIcmp = 0;

    icmptickH = _TCPIPStackAsyncHandlerRegister(TCPIPCommandsTask, 0, 0);
    if(icmptickH == 0)
    {   // timer is not active now
        SYS_ERROR(SYS_ERROR_ERROR, "ICMP tick registration failed\r\n");
        return false;
    }
    // else the timer will start when we send a query
    icmpCmdStat = TCPIP_PING_CMD_IDLE;
    icmpAckRecv = 0;

#endif  // defined(TCPIP_STACK_USE_ICMP_CLIENT)

    return true;
}
Beispiel #2
0
bool TCPIP_ANNOUNCE_Init(const TCPIP_STACK_MODULE_CTRL* const stackCtrl, const TCPIP_ANNOUNCE_MODULE_CONFIG* announceData)
{
    if(stackCtrl->stackAction == TCPIP_STACK_ACTION_IF_UP)
    {   // interface restart
        return true;
    }
    
    // stack init    
    if(announceInitCount == 0)
    {   // first time we're run
        // store the memory allocation handle
        announceMemH = stackCtrl->memH;
        announceIfs = stackCtrl->nIfs;
        announceRequestMask = 0;
#if defined (TCPIP_STACK_USE_DHCP_CLIENT)
        announceDHCPHandler = TCPIP_DHCP_HandlerRegister(0, (TCPIP_DHCP_EVENT_HANDLER)ANNOUNCE_Notify, NULL);
        if (announceDHCPHandler == NULL)
        {
            _TCPIP_AnnounceCleanup();
            return false;
        }
#endif
#if defined (TCPIP_STACK_USE_IPV6)
        announceIPV6Handler = TCPIP_IPV6_HandlerRegister(0, (IPV6_EVENT_HANDLER)ANNOUNCE_Notify, NULL);
        if (announceIPV6Handler == NULL)
        {
            _TCPIP_AnnounceCleanup();
            return false;
        }
#endif

        announceAsyncHandle = _TCPIPStackAsyncHandlerRegister(TCPIP_ANNOUNCE_Send, TCPIP_ANNOUNCE_TaskPending, 0);
        if(announceAsyncHandle == 0)
        {
            _TCPIP_AnnounceCleanup();
            return false;
        }

        // initstatus
        announceDcpt.sm = DISCOVERY_HOME;
        announceDcpt.skt = INVALID_UDP_SOCKET;
    }
    
    
    announceInitCount++;

    return true;
}