/******************************************************************************* * MAIN FUNCTION *******************************************************************************/ int main(int ac, int **av) { time_t now,load_set; int a; int timeunit=1; if( ac > 1 ) timeunit = atoi(av[1]); printf("Started Program![%d]( default : 1 )\n",timeunit); fidb = &stNTAF; memset( &stNTPSTS,0x00,sizeof(stNTPSTS)); memset( &stNTPSTS,0x00,sizeof(stNTPSTS)); ucDStatus = fidb->hwntp[0] = 0; ucStatus = fidb->hwntp[1] = 0; memset(ucStatusFlag,0x00,16); while(EndFlag){ now = time(&now); if( abs(now - load_set ) > timeunit) { //CheckNTPStS(); cpu_compute(); load_set = now ; } } printf("Finished Program!\n"); return 0; }
int main (int argc, char *argv[]) { int64_t time; if (argc < 2) { fprintf (stderr, "need image file source as arg\n"); exit (1); } map_allocate (1); read_image (argv[1]); subr (A, B, SN, SM, SZ/8, &time, 0); printf ("%lld clocks\n", time); dump_image (B, "res_map.pgm"); map_free (1); cpu_compute ("res_cpu.pgm"); exit (0); }
/******************************************************************************* * MAIN FUNCTION *******************************************************************************/ int main() { pst_MsgQ pstMsg; st_MsgQSub stMsgQSub; st_Qentry recvmesg; #ifdef ENABLE_ENCLOSURE struct stat stStat; #endif time_t now, sw_set, dog_set, load_set, load_df; long *pmsg; int i, dRet, EndFlag, dfcnt, dMirrorCnt; char szLoad[6], cOldMirrorStatus[MAX_ENDACE_COUNT], cOldMirrorActiveStatus[MAX_ENDACE_COUNT]; st_SoldfList dflist; EndFlag = 1; for(i = 0; i < MAX_ENDACE_COUNT; i++) { cOldMirrorStatus[i] = 0x00; cOldMirrorActiveStatus[i] = 0x00; } /*** LOG INITIALIZATION****************************************************/ log_init(S_SSHM_LOG_LEVEL, getpid(), SEQ_PROC_CHSMD, LOG_PATH"/CHSMD", "CHSMD"); /*** BLOCK COUNT SETTING - CAUTION! TAF¿Í TAMÀÇ °³¼ö°¡ ´Ù¸£°í, System¸¶´Ù ´Ù¸§À» ±â¾ïÇÏÀÚ. */ if( (dRet = dGetBlocks(FILE_MC_INIT,STR_TSW_COM)) < 0 ){ log_print(LOGN_CRI,LH"ERROR GET McInit INF ",LT); exit(0); } dCurrBlockCnt = dRet; /* CHSMD °øÀ¯¸Þ¸ð¸® ¸Þ½ÃÁö Å¥ ÃʱâÈ */ /*************************************************************************** * SHARED MEMORY INITIALIZATION ***************************************************************************/ if( (dRet = init_CHSMD()) < 0 ){ log_print(LOGN_CRI,LH"FAILED IN init_CHSMD()",LT); exit(0); } if( (dRet = set_version(S_SSHM_VERSION, SEQ_PROC_CHSMD, vERSION)) < 0 ){ log_print(LOGN_DEBUG,LH"set_version error(ret=%d,idx=%d,ver=%s)\n",LT, dRet,SEQ_PROC_CHSMD,vERSION); exit(0); } /*** READ SYSTEM CONFIG FILE **********************************************/ memset(&dflist, 0x00, sizeof(st_SoldfList)); if( (dRet = dGetSYSCFG(&dflist)) < 0) { log_print(LOGN_WARN, LH"FAILED IN dGetSYSCFG() dRet=%d", LT, dRet); exit(0); } gdSysNo = dRet; /*** CHECK DAG CARD TYPE **************************************************/ if( (dRet = dCheckDagType()) < 0 ){ log_print(LOGN_CRI,LH"FAILED IN dCheckDagType()=%d",LT,dRet ); exit(0); } log_print(LOGN_CRI,LH"CHSMD %s Started",LT,vERSION); log_print(LOGN_DEBUG,LH"NTPCNT[%d] STATUSD[%d] STATUSC[%d]", LT,fidb->hwntpcnt, fidb->hwntp[0], fidb->hwntp[1]); /*************************************************************************** * signal and ipc - msgq ***************************************************************************/ dRet = init_prcmd(); if( dRet < 0 ) { log_print(LOGN_DEBUG, LH"[FAIL] INIT_CHSMD() [%d]", LT,dRet ); exit(1); } /*** g_dMirror_Term Àº »ç¿ëµÇÁö ¾ÊÀ½...¤Ì¤Ñ È°¿ëÇÒ ¼ö´Â ÀÖÀ» °Í °°À½, ±×·¡¼ ³»ºñµÒ. */ dRet = dInit_Mirror_Timer(&g_dMirror_Term); if( dRet < 0 ) { log_print( LOGN_CRI, LH"FAIL IN dInit_Mirror_Timer dRet: %d", LT,dRet ); //exit(0); //»ç¿ëÇÏÁö ¾Ê±â ¶§¹®¿¡ ÁÖ¼®Ã³¸®ÇÔ. ¸¸¾à »ç¿ëÇÏ°Ô µÈ´Ù¸é exit(0)¸¦ È°¼ºÈ½ÃÄÑ¾ß ÇÔ. } #ifdef ENABLE_ENCLOSURE dRet = Init_Enclosure(); if( dRet < 0 ) { log_print(LOGN_DEBUG,LH"[ERROR] ENCLOSURE SERIAL FILE OPEN",LT); exit(0); } stat( FILE_MESSAGE, &stStat ); gdMsgOldSize = stStat.st_size; #endif /*************************************************************************** * INITIAL CPU OLD VALUE SETTING ***************************************************************************/ for(i=0; i<2; i++) { cpu_compute(); sleep(1); } now = time(&now); /* INITIALIZE CHSMD FIDB STATUS *******************************************/ fidb->mpsw[SEQ_PROC_CHSMD] = STOP; fidb->mpswinfo[SEQ_PROC_CHSMD].pid = 0; while(EndFlag) { /*********************************************************************** * CHECK MESSAGE QUEUE ***********************************************************************/ if( (dRet = IsRcvedMessage(&pstMsg)) > 0) { memcpy(&stMsgQSub, &pstMsg->llMType, sizeof(stMsgQSub)); recvmesg.mtype = pstMsg->llMType; if( (recvmesg.mtype != KillMC) && (recvmesg.mtype != StartMC)) memcpy(recvmesg.mtext, &pstMsg->szBody[0], sizeof(mml_msg)); else { memcpy(recvmesg.mtext, &pstMsg->szBody[sizeof(long)], sizeof(long)*3); pmsg = (long *)&recvmesg; log_print(LOGN_DEBUG, LH"[TIFB] [%ld] [%ld] [%ld] ", LT,recvmesg.mtype, pmsg[1], pmsg[2]); } } else recvmesg.mtype = NO_MSG; switch(recvmesg.mtype) { case KillMC: /* KillMC·Î ºÎÅÍ ¹ÞÀº ¸Þ½ÃÁö **********************/ pmsg = (long*)&recvmesg; /* ù¹ø° ÷ÀÚ´Â µî·Ï ºí·° ID */ if( (pmsg[1] > 0) && (pmsg[1] < dCurrBlockCnt)) { if( (fidb->mpsw[pmsg[1]] == NORMAL) && (fidb->mpswinfo[pmsg[1]].pid != 0)) Send_AlmMsg(LOCTYPE_PROCESS, INVTYPE_USERPROC, pmsg[1], STOP, fidb->mpsw[pmsg[1]]); if(fidb->mpsw[pmsg[1]] != MASK) fidb->mpsw[pmsg[1]] = STOP; fidb->mpswinfo[pmsg[1]].pid = 0; fidb->mpswinfo[pmsg[1]].when = now; } if(pmsg[1] == 0) { if( (fidb->mpsw[pmsg[1]] == NORMAL) && (fidb->mpswinfo[pmsg[1]].pid != 0)) Send_AlmMsg(LOCTYPE_PROCESS, INVTYPE_USERPROC, pmsg[1], STOP, fidb->mpsw[pmsg[1]]); killmcflag = 1; if(fidb->mpsw[pmsg[1]] != MASK) fidb->mpsw[pmsg[1]] = STOP; fidb->mpswinfo[pmsg[1]].pid = 0; /********************************************************* pmsg[3] Àº T_Alm_StatusÀÇ type ÀÌ time_t¸¦ °®ºz tWhen °ª ´Ü, long typeÀ¸·Î ¹Ù²î¾úÀ» °æ¿ì¿¡ ÇÑÇÔ *********************************************************/ fidb->mpswinfo[pmsg[1]].when = pmsg[3]; } log_print(LOGN_DEBUG, LH"CHECK STATUS : [%ld] [0x%02x]", LT,pmsg[1], fidb->mpsw[pmsg[1]]); /*** pmsg[2] IS PROCESS ID ************************************/ log_print(LOGN_CRI, LH"KillMC -b %s(%ld) : PID:%ld STATUS:0x%02x", LT,STR_TSW_COM[pmsg[1]], pmsg[1], pmsg[2], fidb->mpsw[pmsg[1]]); write_FIDB(); break; case StartMC: /* StartMC·Î ºÎÅÍ ¹ÞÀº ¸Þ½ÃÁö *********************/ pmsg = (long*)&recvmesg; /* ù¹ø° ÷ÀÚ´Â µî·Ï ºí·° ID */ if( (pmsg[1] >= 0) && (pmsg[1] < dCurrBlockCnt)) { if( ((fidb->mpsw[pmsg[1]] == STOP) ||( fidb->mpsw[pmsg[1]] == CRITICAL)) && (fidb->mpswinfo[pmsg[1]].pid == 0)) Send_AlmMsg(LOCTYPE_PROCESS, INVTYPE_USERPROC, pmsg[1], NORMAL, fidb->mpsw[pmsg[1]]); if(pmsg[1] == 0) log_print(LOGN_DEBUG, LH"CHSMD INFORMATION : [%ld] [0x%02x]", LT,pmsg[1], fidb->mpsw[pmsg[1]]); if(fidb->mpsw[pmsg[1]] == MASK) fidb->mpsw[pmsg[1]] = MASK; else if(fidb->mpsw[pmsg[1]] == NOT_EQUIP) { Send_AlmMsg(LOCTYPE_PROCESS, INVTYPE_USERPROC, pmsg[1], NORMAL, CRITICAL); fidb->mpsw[pmsg[1]] = NORMAL; } else fidb->mpsw[pmsg[1]] = NORMAL; /* µÎ¹ø° °ªÀº pidÀÌ´Ù */ fidb->mpswinfo[pmsg[1]].pid = pmsg[2]; fidb->mpswinfo[pmsg[1]].when = now; } log_print(LOGN_CRI, LH"StartMC -b %s(%ld) : PID:%ld STATUS:0x%02x", LT, STR_TSW_COM[pmsg[1]], pmsg[1], pmsg[2], fidb->mpsw[pmsg[1]]); write_FIDB(); /*************************************************************** * BECAUSE FORK TIME PROBLEM ***************************************************************/ break; case NO_MSG: log_print(LOGN_DEBUG, LH"SKIP WHILE LOOP END",LT); EndFlag = 0; break; default: break; } } load_df = load_set = dog_set = sw_set = now; /*************************************************************************** * MAIN WHILE LOOP START ***************************************************************************/ while(StopFlag) { /*********************************************************************** * CHECK MESSAGE QUEUE ***********************************************************************/ if( (dRet = IsRcvedMessage(&pstMsg)) > 0) { memcpy(&stMsgQSub, &pstMsg->llMType, sizeof(stMsgQSub)); recvmesg.mtype = pstMsg->llMType; if( (recvmesg.mtype != KillMC) && (recvmesg.mtype != StartMC)) { memcpy(recvmesg.mtext, &pstMsg->szBody[0], sizeof(mml_msg)); log_print(LOGN_DEBUG, LH"[MMC] RLEN[%d] BLEN[%d] PROID[%d] ", LT, dRet, pstMsg->usBodyLen, pstMsg->ucProID); } else { memcpy(recvmesg.mtext, &pstMsg->szBody[sizeof(long)], sizeof(long)*3); pmsg = (long*)&recvmesg; log_print(LOGN_DEBUG, LH"[TIFB] [%ld] [%ld] [%ld] [%ld] ", LT,recvmesg.mtype, pmsg[1], pmsg[2], pmsg[3]); } } else recvmesg.mtype = NO_MSG; switch(recvmesg.mtype) { case KillMC: /* KillMC·Î ºÎÅÍ ¹ÞÀº ¸Þ½ÃÁö **********************/ pmsg = (long*)&recvmesg; /* ù¹ø° ÷ÀÚ´Â µî·Ï ºí·° ID */ if( (pmsg[1] > 0) && (pmsg[1] < dCurrBlockCnt)) { if( (fidb->mpsw[pmsg[1]] == NORMAL) && (fidb->mpswinfo[pmsg[1]].pid != 0)) Send_AlmMsg(LOCTYPE_PROCESS, INVTYPE_USERPROC, pmsg[1], STOP, fidb->mpsw[pmsg[1]]); if(fidb->mpsw[pmsg[1]] != MASK) fidb->mpsw[pmsg[1]] = STOP; fidb->mpswinfo[pmsg[1]].pid = 0; fidb->mpswinfo[pmsg[1]].when = now; } if(pmsg[1] == 0) { if( (fidb->mpsw[pmsg[1]] == NORMAL) && (fidb->mpswinfo[pmsg[1]].pid != 0)) Send_AlmMsg(LOCTYPE_PROCESS, INVTYPE_USERPROC, pmsg[1], STOP, fidb->mpsw[pmsg[1]]); killmcflag = 1; if(fidb->mpsw[pmsg[1]] != MASK) fidb->mpsw[pmsg[1]] = STOP; fidb->mpswinfo[pmsg[1]].pid = 0; fidb->mpswinfo[pmsg[1]].when = pmsg[3]; } Send_ALMD(); /*** pmsg[2] IS PROCESS ID ************************************/ log_print(LOGN_CRI, LH"KillMC -b %s(%ld) : PID:%ld STATUS:0x%02x", LT,STR_TSW_COM[pmsg[1]], pmsg[1], pmsg[2], fidb->mpsw[pmsg[1]]); write_FIDB(); break; case StartMC: /* StartMC·Î ºÎÅÍ ¹ÞÀº ¸Þ½ÃÁö *********************/ pmsg = (long*)&recvmesg; /* ù¹ø° ÷ÀÚ´Â µî·Ï ºí·° ID */ if( (pmsg[1] >= 0) && (pmsg[1] < dCurrBlockCnt)) { if( ((fidb->mpsw[pmsg[1]] == STOP) || (fidb->mpsw[pmsg[1]] == CRITICAL)) && (fidb->mpswinfo[pmsg[1]].pid == 0)) Send_AlmMsg(LOCTYPE_PROCESS, INVTYPE_USERPROC, pmsg[1], NORMAL, fidb->mpsw[pmsg[1]]); if(fidb->mpsw[pmsg[1]] == MASK) fidb->mpsw[pmsg[1]] = MASK; else if(fidb->mpsw[pmsg[1]] == NOT_EQUIP) { Send_AlmMsg(LOCTYPE_PROCESS, INVTYPE_USERPROC, pmsg[1], NORMAL, CRITICAL); fidb->mpsw[pmsg[1]] = NORMAL; } else fidb->mpsw[pmsg[1]] = NORMAL; fidb->mpswinfo[pmsg[1]].pid = pmsg[2]; fidb->mpswinfo[pmsg[1]].when = now; } Send_ALMD(); /* µÎ¹ø° °ªÀº pidÀÌ´Ù */ log_print(LOGN_CRI, LH"StartMC -b %s(%ld) : PID:%ld STATUS:0x%02x", LT,STR_TSW_COM[pmsg[1]], pmsg[1], pmsg[2], fidb->mpsw[pmsg[1]]); write_FIDB(); /*************************************************************** * BECAUSE FORK TIME PROBLEM ***************************************************************/ sleep(2); break; case NO_MSG: break; default: if( (dRet = MMC_Handle_Proc((mml_msg*)recvmesg.mtext, recvmesg.mtype, pstMsg->llIndex)) < 0) log_print(LOGN_WARN, LH"[MAIN]FAILED IN MMC_Handle_Proc[%d]", LT,dRet); write_FIDB(); break; } now = time(&now); /*********************************************************************** * CHECK PROCESS STATUS PER 2 SECOND ***********************************************************************/ if( abs(now - sw_set ) > PROC_CHECK_LIMIT) { log_print(LOGN_INFO,LH"[CHECK SOFTWARE]",LT); check_software(); sw_set = now ; } /*********************************************************************** * CHECK CPU, MEMORY LOAD PER 1 SECOND ***********************************************************************/ if(abs(now-load_set) > HW_CHECK_LIMIT) { if( (dRet = dLinkCheck()) < 0) log_print( LOGN_CRI, LH"ERROR IN dLinkCheck() dRet=%d", LT, dRet); cpu_compute(); mem_compute(); queue_compute(); nifo_compute(); dCheckHW(); CheckNTPStS(); load_set = now ; } /*********************************************************************** * CHECK DISK LOAD PER 60 SECOND ***********************************************************************/ if(abs(now-load_df) > DISK_CHECK_LIMIT) { log_print(LOGN_DEBUG, LH"[CHECK DISK LOAD]",LT); dGetDF(&dflist); for(dfcnt = 0; dfcnt < dflist.dCount; dfcnt++) { sprintf(szLoad, "%5.2f", (double)(100.0 - dflist.stSoldf[dfcnt].dPercent)); log_print(LOGN_INFO, LH" DF USAGE =%s", LT,szLoad); fidb->disksts[dfcnt].llCur = dflist.stSoldf[dfcnt].llUsed; fidb->disksts[dfcnt].lMax = dflist.stSoldf[dfcnt].llTotal; dCheckLoad(INVTYPE_DISK, dfcnt, szLoad); log_print(LOGN_DEBUG, LH"DCHECKLOAD MPDISK = [%s] OLDSTAT = [0x%x]", LT,szLoad, (char)disk_oldstat[dfcnt]); } load_df = now ; } for(dMirrorCnt = 0; dMirrorCnt < MAX_ENDACE_COUNT; dMirrorCnt++) { if(cOldMirrorStatus[dMirrorCnt] == 0x00) cOldMirrorStatus[dMirrorCnt] = fidb->mirrorsts[dMirrorCnt]; else { if(cOldMirrorStatus[dMirrorCnt] != fidb->mirrorsts[dMirrorCnt]) { Send_AlmMsg(LOCTYPE_PHSC, INVTYPE_MIRROR_STS, dMirrorCnt+1, fidb->mirrorsts[dMirrorCnt], cOldMirrorStatus[dMirrorCnt]); cOldMirrorStatus[dMirrorCnt] = fidb->mirrorsts[dMirrorCnt]; } } if(cOldMirrorActiveStatus[dMirrorCnt] == 0x00) cOldMirrorActiveStatus[dMirrorCnt] = fidb->mirrorActsts[dMirrorCnt]; else { if(cOldMirrorActiveStatus[dMirrorCnt] != fidb->mirrorActsts[dMirrorCnt]) { Send_AlmMsg(LOCTYPE_PHSC, INVTYPE_MIRROR_ACT, dMirrorCnt+1, fidb->mirrorActsts[dMirrorCnt], cOldMirrorActiveStatus[dMirrorCnt]); cOldMirrorActiveStatus[dMirrorCnt] = fidb->mirrorActsts[dMirrorCnt]; } } } } /*************************************************************************** * WHEN CHSMD IS DEAD ***************************************************************************/ if(killmcflag != 1) { if( (fidb->mpsw[SEQ_PROC_CHSMD] == NORMAL) && (fidb->mpswinfo[SEQ_PROC_CHSMD].pid != 0)) Send_AlmMsg(LOCTYPE_PROCESS, INVTYPE_USERPROC, SEQ_PROC_CHSMD, STOP, fidb->mpsw[SEQ_PROC_CHSMD]); fidb->mpsw[SEQ_PROC_CHSMD] = STOP; fidb->mpswinfo[SEQ_PROC_CHSMD].pid = 0; fidb->mpswinfo[SEQ_PROC_CHSMD].when = -1; } write_FIDB(); FinishProgram(); return 0; }