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; }
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; }