static void enable_ccsp_exception_handlers( ) { struct sigaction sigact; memset( &sigact, 0, sizeof( struct sigaction ) ); sigact.sa_sigaction = ccsp_exception_handler; sigact.sa_flags = SA_RESTART | SA_SIGINFO; if (is_core_dump_opened()) { // sigaction(SIGUSR1, &sigact, 0L); // CcspTraceInfo(("Core dump is opened, do not catch signal\n")); } else { // CcspTraceInfo(("Core dump is NOT opened, backtrace if possible\n")); sigaction(SIGINT, &sigact, 0L); sigaction(SIGSEGV, &sigact, 0L); sigaction(SIGILL, &sigact, 0L); sigaction(SIGBUS, &sigact, 0L); sigaction(SIGQUIT, &sigact, 0L); /* sigaction(SIGTERM, &sigact, 0L); sigaction(SIGCHLD, &sigact, 0L); sigaction(SIGUSR1, &sigact, 0L); sigaction(SIGUSR2, &sigact, 0L); sigaction(SIGFPE, &sigact, 0L); sigaction(SIGHUP, &sigact, 0L); */ } return; }
int main(int argc, char* argv[]) { ANSC_STATUS returnStatus = ANSC_STATUS_SUCCESS; int cmdChar = 0; BOOL bRunAsDaemon = TRUE; int idx = 0; char cmd[1024] = {0}; FILE *fd = NULL; DmErr_t err; char *subSys = NULL; extern ANSC_HANDLE bus_handle; /* * Load the start configuration */ gpPnmStartCfg = (PCCSP_COMPONENT_CFG)AnscAllocateMemory(sizeof(CCSP_COMPONENT_CFG)); if ( gpPnmStartCfg ) { CcspComponentLoadCfg(CCSP_PNM_START_CFG_FILE, gpPnmStartCfg); } else { printf("Insufficient resources for start configuration, quit!\n"); exit(1); } /* Set the global pComponentName */ pComponentName = gpPnmStartCfg->ComponentName; #if defined(_DEBUG) && defined(_COSA_SIM_) AnscSetTraceLevel(CCSP_TRACE_LEVEL_INFO); #endif for (idx = 1; idx < argc; idx++) { if ( (strcmp(argv[idx], "-subsys") == 0) ) { AnscCopyString(g_Subsystem, argv[idx+1]); CcspTraceWarning(("\nSubsystem is %s\n", g_Subsystem)); } else if ( strcmp(argv[idx], "-c" ) == 0 ) { bRunAsDaemon = FALSE; } } #if defined(_ANSC_WINDOWSNT) AnscStartupSocketWrapper(NULL); display_info(); cmd_dispatch('e'); while ( cmdChar != 'q' ) { cmdChar = getchar(); cmd_dispatch(cmdChar); } #elif defined(_ANSC_LINUX) if ( bRunAsDaemon ) daemonize(); /*This is used for ccsp recovery manager */ fd = fopen("/var/tmp/CcspPandMSsp.pid", "w+"); if ( !fd ) { CcspTraceWarning(("Create /var/tmp/CcspPandMSsp.pid error. \n")); } else { sprintf(cmd, "%d", getpid()); fputs(cmd, fd); fclose(fd); } if (is_core_dump_opened()) { signal(SIGUSR1, sig_handler); signal(SIGPIPE, SIG_IGN); CcspTraceWarning(("Core dump is opened, do not catch signal\n")); } else { CcspTraceWarning(("Core dump is NOT opened, backtrace if possible\n")); signal(SIGTERM, sig_handler); signal(SIGINT, sig_handler); signal(SIGUSR1, sig_handler); signal(SIGUSR2, sig_handler); signal(SIGSEGV, sig_handler); signal(SIGBUS, sig_handler); signal(SIGKILL, sig_handler); signal(SIGFPE, sig_handler); signal(SIGILL, sig_handler); signal(SIGQUIT, sig_handler); signal(SIGHUP, sig_handler); signal(SIGPIPE, SIG_IGN); } cmd_dispatch('e'); // printf("Calling Docsis\n"); // ICC_init(); // DocsisIf_StartDocsisManager(); #ifdef _COSA_SIM_ subSys = ""; /* PC simu use empty string as subsystem */ #else subSys = NULL; /* use default sub-system */ #endif err = Cdm_Init(bus_handle, subSys, NULL, NULL, pComponentName); if (err != CCSP_SUCCESS) { fprintf(stderr, "Cdm_Init: %s\n", Cdm_StrError(err)); exit(1); } system("touch /tmp/pam_initialized"); printf("Entering P&M loop\n"); if ( bRunAsDaemon ) { while(1) { sleep(30); } } else { while ( cmdChar != 'q' ) { cmdChar = getchar(); cmd_dispatch(cmdChar); } } #endif err = Cdm_Term(); if (err != CCSP_SUCCESS) { fprintf(stderr, "Cdm_Term: %s\n", Cdm_StrError(err)); exit(1); } if ( g_bActive ) { ssp_cancel_pnm(gpPnmStartCfg); g_bActive = FALSE; } return 0; }