EMS(element management system)란 하나의 장비를 관리하는 시스템이다. NMS(network management system)란 EMS들을 관리하는 시스템이다. 하나의 장비를 노드라고 하고, 노드의 집합을 그룹이라고 한다. 하나의 그룹 내에서 노드들이 링, 메쉬 등의 형태로 연결되는 것을 망이라고 한다.
가) IRIS3 element를 구성하는 클래스 구조

Element* m_pParent : 상위 element를 저장한다(노드일 경우 그룹의 주소를 저장)
CString m_strName : 노드명, Net명
Int m_state : 해당 장비를 EMS에서 관찰 할 것인가 아닌가를 나타낸다
Int m_nID : IRIS3_ELEM_xx 테이블의 ID 필드, release\config.dbs 파일의 IRIS_NODE의 ID 필드를 나타낸다
Int m_nMgrID : Manager ID 사용하지 않는다
BOOL m_bUsable : 망구성과 관계 없이 UI에서 표현만 하고 싶은 element를 구분할 때 사용된다
Int m_sortKey : Tree 등의 구조에서 정렬을 위해 사용된다



나) DB 파일을 읽어 그룹, 노드, 망(링크) 데이터를 구성하는 순서도

다) 그룹추가

라) 그룹변경

마) 그룹삭제

바) 노드추가

사) 노드변경

아) 노드삭제

자) 링크추가

차) 링크삭제

카) Iris3 element Interface
IRIS3_ELEMENT_DECL void Iris3elem_SetupMaxNodeCount(int maxCount)
관리 가능한 최대 노드 개수 변경 (기본 값 : 256)
IRIS3_ELEMENT_DECL int Iris3elem_GetMaxNodeCount()
관리 가능한 최대 노드 개수 리턴
IRIS3_ELEMENT_DECL ElementManagerInterface* Iris3elem_GetManager()
ElementManager 리턴
IRIS3_ELEMENT_DECL void Iris3elem_SetManager(ElementManagerInterface* manager)
ElementManager 강제 할당
IRIS3_ELEMENT_DECL ElementNode* Iris3elem_GetCurrentNode()
Current 노드 리턴
IRIS3_ELEMENT_DECL Element* Iris3elem_GetCurrentElement()
Current element리턴
IRIS3_ELEMENT_DECL BOOL Iris3elem_SetCurrentElement(Element* pCurrElem, BOOL bUpdateNotify=TRUE)
Current element 지정
IRIS3_ELEMENT_DECL Element* Iris3elem_GetSelectedTreeElement()
선택된 Tree element 반환
IRIS3_ELEMENT_DECL void Iris3elem_SetSelectedTreeElement(Element* pElement)
Tree element 선택
IRIS3_ELEMENT_DECL void Iris3elem_Init(struct DBConnType elemCfgDB, CString emsIniPath, CString nodePosIniPath)
ElementManager에서 사용할 DB, 환경설정 등의 정보를 설정
IRIS3_ELEMENT_DECL void Iris3elem_UseCommandGateway(int nodeTypeID, BOOL bUse)
IRIS3_ELEMENT_DECL BOOL Iris3elem_IsUseCommandGateway(int nodeTypeID)
IRIS3_ELEMENT_DECL void Iris3elem_EnableHeartbeat()
특정 함수나 루틴의 수행시간을 계산해주는 기능의 동작여부를 설정
IRIS3_ELEMENT_DECL BOOL Iris3elem_RegisterHeartbeat(int nodeTypeID, CString strHbCmd, int timeSpan)
노드가 계속 살아 있는지 감시(Heartbeat)하는 인터페이스를 등록
IRIS3_ELEMENT_DECL void Iris3elem_AliveCheckerVersion
연결이 끊어진 노드에 PING 메시지 보내는 Version 설정
IRIS3_ELEMENT_DECL void Iris3elem_CheckAliveForAllNode(BOOL bForAllNode)
class Element의 멤버 변수m_bUsable : 고정된 개수의 elem을 미리 생성해두고, use flag로 액세스를 제어하려는 경우에 사용된다. (0 : not usable, 1: usable)
not usable 노드에 대해서도 Alive 체크를 할 것인지 여부 지정
IRIS3_ELEMENT_DECL void Iris3elem_SetDisconPingInterval(int secs)
연결이 끊어진 노드에 PING 메시지 보내는 간격 설정
IRIS3_ELEMENT_DECL void Iris3elem_SetDisconFirstTimeout(int secs)
노드 단절을 판단하는 첫 번째 초과시간
IRIS3_ELEMENT_DECL void Iris3elem_SetDisconSecondTimeout(int secs)
노드 단절을 판단하는 두 번째 초과시간
IRIS3_ELEMENT_DECL void Iris3elem_RegisterDisconPingCmd(CString strCmd)
단절된 노드에 PING 메시지 보낼 명령 문자열
IRIS3_ELEMENT_DECL void Iris3elem_RegisterDisconConfirmCmd(CString strCmd)
단절된 노드에 보낼 명령 문자열
IRIS3_ELEMENT_DECL void Iris3elem_RegisterDisconPingCmd(int nNodeTypeID, CString strCmd)
단절된 노드에 보낼 명령 문자열 (노드 타입별 지정)
IRIS3_ELEMENT_DECL void Iris3elem_RegisterDisconConfirmCmd(int nNodeTypeID, CString strCmd)
단절된 노드에 보낼 명령 문자열 (노드 타입별 지정)
IRIS3_ELEMENT_DECL BOOL Iris3elem_IsConfirmResponse(ElementNode* pNode)
단절 의심상태에서 마지막으로 보낸 명령어가 CONFIRM 명령인지 여부
IRIS3_ELEMENT_DECL void Iris3elem_InitAllNodeStatus()
모든 노드의 LedInfo 정보를 초기화
IRIS3_ELEMENT_DECL void Iris3elem_BroadcastRtrvSys()
EMS의 모든 노드에게 RTRV-SYS 명령어를 broadcast
RTRV-SYS : TID, NODE_NAME, NODE_ID(GROUP), NE_TYPE, SHELF_TYPE, SHELF_ID, TOPOLOGY, VENDOR 등 노드의 정보를 반환하는 명령어
IRIS3_ELEMENT_DECL void Iris3elem_BroadcastRtrvSys(BOOL bOnlyForUsable)
usable 노드에 RTRV-SYS 명령어를 broadcast
IRIS3_ELEMENT_DECL BOOL Iris3elem_SendCommand(ElementNode* pNode, CString strCmd)
특정 노드에 명령을 전송
IRIS3_ELEMENT_DECL void Iris3elem_SendCommand2(Element* pTargetElement, CString strCmd)
ElementComposite 내의 모든 노드에 명령어를 전송
IRIS3_ELEMENT_DECL void Iris3elem_SendCommand2(Element* pTargetElement, CString strCmd, BOOL bOnlyForUsable)
EMS의 특정 노드에 명령어를 전송
IRIS3_ELEMENT_DECL unsigned int Iris3elem_GetNetType(const char* netTypeStr)
망타입은 STAR, LADM(일렬). RING, MESH 등이 있는데 망타입 문자열 “PtoP”, “STAR” 등을 받으면 Iris에서 Define된 망 타입이 반환
IRIS3_ELEMENT_DECL const char* Iris3elem_GetNetTypeStr(unsigned int netType)
Iris에서 Define된 망 타입을 받으면 망타입 문자열이 반환
IRIS3_ELEMENT_DECL const char* Iris3elem_GetNetTypeDescStr(unsigned int netType)
망타입 alias 문자열 “링”, “메쉬” 등이 반환
IRIS3_ELEMENT_DECL BOOL Iris3elem_SetNetTypeDescStr(unsigned int netType, char* newDescStr)
망타입 alias를 지정
IRIS3_ELEMENT_DECL ElementCreator* Iris3elem_GetElementCreator(int nodeTypeID /* IRIS3_NODETYPEID_xxx */)
ElementCreator 객체 조회
IRIS3_ELEMENT_DECL BOOL Iris3elem_AddElementCreator(int nodeTypeID /* IRIS3_NODETYPEID_xxx */, ElementCreator* creator)
ElementCreator 객체 등록
IRIS3_ELEMENT_DECL ElementNode* default_create_node(unsigned int neType /* IRIS3_NETYPE_xxx */, unsigned char shelfID)
ElementCreator 객체 생성
IRIS3_ELEMENT_DECL ElementNode* default_create_node2(ElementNet* pGroup, unsigned int neType, unsigned char shelfID, unsigned int ip)
ElementCreator 객체 생성 (SetIP 추가)
IRIS3_ELEMENT_DECL ElementNode* default_create_metaaddr(ElementNode* pCurrNode, MetaAddrInfo* pMetaAddrInfo /*OUT*/)
각 노드에 대해 meta_addr을 만들기 위해 필요한 정보를 채우는 함수
IRIS3_ELEMENT_DECL void Iris3elem_TurnOnTidBlock()
Tid를 사용하는 함수
IRIS3_ELEMENT_DECL void Iris3elem_TurnOffTidBlock()
Tid를 사용을 막는 함수
IRIS3_ELEMENT_DECL char* Iris3elem_GetCurrTID()
노드의 Tid를 반환
IRIS3_ELEMENT_DECL int Iris3elem_SaveCurrentNodeTypeID()
lemonif에서 노드 타입별로 리소스ID를 찾을 수 있도록 노드 타입을 기억해 두는 함수
IRIS3_ELEMENT_DECL unsigned int Iris3elem_GetShelfId(int nodeTypeID /* IRIS3_NODETYPEID_xxx */, CString strShelfType)
Shelf타입 문자열을 Shelf ID로 바꿔주는 함수
IRIS3_ELEMENT_DECL int Iris3elem_Xid2Node(char* xid, ElementNode** ppNode)
IRIS3_ELEMENT_DECL void Iris3elem_SetNetSeverityMode( enum Iris3NetSeverityMode mode )
DISCONN 표시 방법 설정 (GROUP내에 모든 노드가 Disconn or Deact일 경우/ GROUP내에 일부 노드가 Disconn or Deact일 경우)
IRIS3_ELEMENT_DECL void Iris3elem_CheckDbVersion()
IRIS3_ELEMENT_DECL BOOL Iris3elem_EnumAllNodes(BOOL (*node_enum_proc)(ElementNode* node, void* param), void* param)
모든 노드에 주어진 콜벡함수 호출
IRIS3_ELEMENT_DECL BOOL Iris3elem_EnumUsableNodes(BOOL (*node_enum_proc)(ElementNode* node, void* param), void* param)
usable 노드를 찾아서 콜벡함수 호출
IRIS3_ELEMENT_DECL void Iris3elem_InitStartup()
Reliable 서비스에 필요한 SAP, Reliable 서비스에 필요한 송신용 callback 과 수신용 callback 2 개를 등록
IRIS3_ELEMENT_DECL void Iris3elem_SetStartupSap(int newSap)
startup sap 지정 : 기본값 = 255
IRIS3_ELEMENT_DECL void Iris3elem_RegisterStartupCmd(CString strCmd)
startup 명령어 지정 : 기본값 = RTRV-SYS;
IRIS3_ELEMENT_DECL int Iris3elem_RegisterRestartUserCallback(void restart_user_cb(struct meta_addr *src, ElementNode* pNode))
startup일때 app에서 뭔가 해주고 싶으면 callback 등록
IRIS3_ELEMENT_DECL void Iris3elem_EnableLoginLogout(BOOL bOnOff)
Login/Logout 기능 사용 여부 등록
IRIS3_ELEMENT_DECL void Iris3elem_RegisterLoginCmd(CString strCmd)
Login 명령어를 등록
IRIS3_ELEMENT_DECL void Iris3elem_RegisterLogoutCmd(CString strCmd)
Logout 명령어를 등록
IRIS3_ELEMENT_DECL BOOL Iris3elem_SendLogin(ElementNode* pNode)
노드에 Login 명령어를 전송
IRIS3_ELEMENT_DECL BOOL Iris3elem_SendLogout(ElementNode* pNode)
노드에 Logout 명령어를 전송
IRIS3_ELEMENT_DECL void Iris3elem_BroadcastLogin()
EMS의 모든 노드에 Login 명령어를 전송
IRIS3_ELEMENT_DECL void Iris3elem_BroadcastLogout()
EMS의 모든 노드에 Logout 명령어를 전송
IRIS3_ELEMENT_DECL void Iris3elem_BroadcastLogin(BOOL bOnlyForUsable)
not usable 노드에 대해서도 Login 명령어를 전송 할 것인지 여부 지정
IRIS3_ELEMENT_DECL void Iris3elem_BroadcastLogout(BOOL bOnlyForUsable)
not usable 노드에 대해서도 Logout 명령어를 전송 할 것인지 여부 지정
IRIS3_ELEMENT_DECL void Iris3elem_SetNodeKeyType(enum Iris3NodeKeyType type)
노드 KEY 타입을 지정 (Iris3NodeKeyType(NODENAME, TID, FULLNAME)으로 지정할 수 있음)
IRIS3_ELEMENT_DECL enum Iris3NodeKeyType Iris3elem_GetNodeKeyType()
노드 KEY 타입 반환
IRIS3_ELEMENT_DECL void Iris3elem_SetLinkNodeKeyType(enum Iris3LinkNodeKeyType type)
링크의 KEY 타입을 지정
IRIS3_ELEMENT_DECL enum Iris3LinkNodeKeyType Iris3elem_GetLinkNodeKeyType()
링크의 KEY 타입을 반환
IRIS3_ELEMENT_DECL void Iris3elem_SetNodePosSectionType(enum Iris3NodePosSectionType type)
node_pos.ini(노드 위치 파일)의 섹션값 타입(NODENAME, TID) 지정
IRIS3_ELEMENT_DECL void Iris3elem_SetNodePosKeyType(enum Iris3NodePosKeyType type)
node_pos.ini(노드 위치 파일)의 KEY 타입 지정
IRIS3_ELEMENT_DECL void Iris3elem_SetSerialNumber(int max)
Client에는 DB가 없으므로 명시적인 초기화 필요
IRIS3_ELEMENT_DECL void Iris3elem_RtrvSysEachTimeCurrentChanged(BOOL bAutoSend, const char* rtrvSysCmd=NULL, BOOL bSendToChild=FALSE, BOOL bSendOnlyForUsable=TRUE)
Current 노드 변경 시 RTRV-SYS명령어를 전송
IRIS3_ELEMENT_DECL void Iris3elem_Persistence_EnableNodeAddAuto(BOOL bAutoAdd)
DB에서 로딩할 때 노드를 자동으로 추가시켜줄 것인지 여부 지정
IRIS3_ELEMENT_DECL void Iris3elem_Persistence_UsePermissionField(BOOL bUse)
IRIS_GROUP 테이블의 PERMISSION_TYPE 필드를 사용할지 여부 지정
IRIS3_ELEMENT_DECL void Iris3elem_Persistence_SetVersion(int ver/*1,2*/)
IRIS3_ELEMENT_DECL void Iris3elem_RegisterSevLevelTable(SevLevelDesicionTable* table)
IRIS3_ELEMENT_DECL int Iris3elem_GetMoreSevLevel(int sev0, int sev1)
IRIS3_ELEMENT_DECL int Iris3elem_GetNodeListCount()
EMS에서 관리하는 전체 노드 개수
IRIS3_ELEMENT_DECL int Iris3elem_GetNodeInfo(int ith, char* iris_code/*OUT*/, char* xid/*OUT*/, unsigned int* ip/*OUT*/)
노드 정보 조회 (Iris code, xid, 노드 ip가 조회)
IRIS3_ELEMENT_DECL int Iris3elem_Xid2Iriscode(char* xid, unsigned char* iris_code/*OUT*/)
xid를 Iris code로 변환
IRIS3_ELEMENT_DECL int Iris3elem_Xid2MetaAddr(char* xid, struct meta_addr** ppAddr/*OUT*/)
xid를 meta 주소값으로 변환
IRIS3_ELEMENT_DECL int Iris3elem_RtXid2GwXid(char* rtXid, char* gwXid/*OUT*/)
IRIS3_ELEMENT_DECL int Iris3elem_GetXidSubpart(char* xid, int idx, char* xid_subpart/*OUT*/)
xid 문자열을 파싱하여 n번째 항목을 리턴