|
|
EMS(element management system)란 하나의 장비를 관리하는 시스템이다. NMS(network management system)란 EMS들을 관리하는 시스템이다. 하나의 장비를 노드라고 하고, 노드의 집합을 그룹이라고 한다. 하나의 그룹 내에서 노드들이 링, 메쉬 등의 형태로 연결되는 것을 망이라고 한다.
|
|
|
|
|
|
### 가) IRIS3 element를 구성하는 클래스 구조
|
|
|
<img src="Element_Image/elementClass1.png" width="200">
|
|
|
|
|
|
**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 등의 구조에서 정렬을 위해 사용된다
|
|
|
#### 가) IRIS3 element를 구성하는 클래스 구조
|
|
|
<img src="Element_Image/elementClass1.png" width="300">
|
|
|
|
|
|
| **변수** | **기능** |
|
|
|
| -------- | -------- |
|
|
|
| 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 필드 |
|
|
|
| BOOL m_bUsable | 망구성과 관계 없이 UI에서 표현만 하고 싶은 element를 구분할 때 사용 |
|
|
|
| Int m_sortKey | Tree 등의 구조에서 정렬을 위해 사용 |
|
|
|
<br>
|
|
|
|
|
|
<img src="Element_Image/elementClass2.png" width="500">
|
|
|
**BOOL m_bAutoNode :** ATOM 프로젝트에서 MS는 True이고 ES False이다
|
|
|
**unsinged int m_neType :** 역할에 따른 구분(LEDINFO 참조), ATOM 프로젝트에서 COT, RT1, RT2 에 따라서 neType이 구분된다(IRIS3_NETYPE_ATOM_COT)
|
|
|
**unsinged int m_nodeTypeID :** 형상에 따른 구분(irisp code 참조)( IRIS3_NODETYPEID_ATOM_RT2)
|
|
|
**unsigned int m_sysId :** signal, cot, ring, netype으로 만들어내는 ID
|
|
|
**ElementNode\* m_pGateway :** 노드의 Gateway 포인터를 저장하고 있는 멤버 변수, Gateway 노드는 NULL값을 가지고 있다
|
|
|
**CString m_strTId :** void ElementNode::SetStatus(struct NODE_STATUS\* pLedInfo, int size) 함수에서 LedInfo를 받으면 pLedFunSet->get_tid로 받아온 값이 저장
|
|
|
**ULONG m_nodeIP :** 사용자가 입력하는 노드 IP
|
|
|
**struct meta_addr m_metaAddr :** CreateMetaAddr2()로 생성한 meta 주소값, Iris3elem_Init() 수행 후, Iris3elem_AddElementCreator() 인터페이스를 이욯아여 meta 주소값을 만들어 내는 콜백함수 등록
|
|
|
|
|
|
<img src="Element_Image/elementClass3.png" width="500">
|
|
|
**Element :** 노드, 망, 그룹을 공통적으로 표현하기 위한 추상 클래스로 노드와 망에서 구현되어야 할 인터페이스가 정의 되어 있다
|
|
|
**ElementComposite :** 노드, 그룹, 망의 포함관계를 표현할 수 있는 클래스. 멤버변수 m_vecItem에 그룹내의 노드가 포함되어 있고 노드의 추가/ 삭제 /검색 인터페이스가 정의되어 있다
|
|
|
**ElementNode :** neType, shelf Type 등 노드정보를 표현하는 클래스
|
|
|
**ElementNet :** 링크 정보, 망 타입 등 망정보를 표현하는 클래스
|
|
|
**ElementNetGroup :** 망 개념이 없는 그룹용 클래스
|
|
|
**ElementFactory :** 노드와 그룹객체를 생성해내는 팩토리클래스
|
|
|
**ElementSearcher :** 노드 및 망을 검색하는 기능을 제공하는 클래스
|
|
|
|
|
|
<img src="Element_Image/elementClass4.png" width="500">
|
|
|
**ElementObservable :** 망 구성이 변경되었을 때 알림 기능을 제공하는 클래스로 AddElementObserver()로 알람을 받을 클래스를 등록한다
|
|
|
**ElementObserver :** ElementObservable에서 등록된 클래스에서 ElementObserver를 상속받아 UpdateElementObser 함수로 Notification이 발생한다
|
|
|
**ElementManagerInterface :** ElementManager에 사용되는 인터페이스를 정의한 추상 클래스
|
|
|
**ElementManager :** 노드의 추가/삭제 및 노드와 망 전체 리스트를 관리하는 클래스
|
|
|
|
|
|
### 나) DB 파일을 읽어 그룹, 노드, 망(링크) 데이터를 구성하는 순서도
|
|
|
<img src="Element_Image/elementFlow1.png" width="500">
|
|
|
|
|
|
### 다) 그룹추가
|
|
|
<img src="Element_Image/elementFlowGroupAdd.png" width="500">
|
|
|
|
|
|
### 라) 그룹변경
|
|
|
<img src="Element_Image/elementFlowGroupModify.png" width="500">
|
|
|
|
|
|
### 마) 그룹삭제
|
|
|
<img src="Element_Image/elementFlowGroupDel.png" width="500">
|
|
|
|
|
|
### 바) 노드추가
|
|
|
<img src="Element_Image/elementFlowNodeAdd.png" width="500">
|
|
|
|
|
|
### 사) 노드변경
|
|
|
<img src="Element_Image/elementFlowNodeModify.png" width="500">
|
|
|
|
|
|
### 아) 노드삭제
|
|
|
<img src="Element_Image/elementFlowNodeDel.png" width="500">
|
|
|
|
|
|
### 자) 링크추가
|
|
|
<img src="Element_Image/elementFlowLinkAdd.png" width="500">
|
|
|
|
|
|
### 차) 링크삭제
|
|
|
<img src="Element_Image/elementFlowLinkDel.png" width="500">
|
|
|
|
|
|
### 카) 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번째 항목을 리턴 |
|
|
\ No newline at end of file |
|
|
|
|
|
| **변수** | **기능** |
|
|
|
| -------- | -------- |
|
|
|
| BOOL m_bAutoNode | ATOM 프로젝트에서 Main Shelf, Extension Shelf 구분(MS = True, ES = False) |
|
|
|
| unsinged int m_neType | 역할에 따른 구분(LEDINFO 참조), ATOM 프로젝트에서 COT, RT1, RT2 에 따라서 neType 구분(IRIS3_NETYPE_ATOM_COT) |
|
|
|
| unsinged int m_nodeTypeID | 형상에 따른 구분(irisp code 참조 : IRIS3_NODETYPEID_ATOM_RT2) |
|
|
|
| unsigned int m_sysId | signal, cot, ring, netype으로 만들어내는 ID |
|
|
|
| ElementNode\* m_pGateway | 노드의 Gateway 포인터를 저장하고 있는 멤버 변수(Gateway 노드는 NULL값) |
|
|
|
| CString m_strTId | void ElementNode::SetStatus(struct NODE_STATUS\* pLedInfo, int size) 함수에서 LedInfo를 받으면 pLedFunSet->get_tid로 받아온 값이 저장 |
|
|
|
| ULONG m_nodeIP | 사용자가 입력하는 노드 IP |
|
|
|
| struct meta_addr m_metaAddr | CreateMetaAddr2()로 생성한 meta 주소값, Iris3elem_Init() 수행 후, Iris3elem_AddElementCreator() 인터페이스를 이욯아여 meta 주소값을 만들어 내는 콜백함수 등록 |
|
|
|
<br>
|
|
|
|
|
|
<img src="Element_Image/elementClass3.png" width="700">
|
|
|
|
|
|
| **클래스** | **기능** |
|
|
|
| -------- | -------- |
|
|
|
| ElementComposite | 노드, 그룹, 망의 포함관계를 표현할 수 있는 클래스. 멤버변수 m_vecItem에 그룹내의 노드가 포함되어 있고 노드의 추가/ 삭제 /검색 인터페이스가 정의 |
|
|
|
| ElementNode | neType, shelf Type 등 노드정보를 표현하는 클래스 |
|
|
|
| ElementNet | 링크 정보, 망 타입 등 망정보를 표현하는 클래스 |
|
|
|
| ElementNetGroup | 망 개념이 없는 그룹용 클래스 |
|
|
|
| ElementFactory | 노드와 그룹객체를 생성해내는 팩토리클래스 |
|
|
|
| ElementSearcher | 노드 및 망을 검색하는 기능을 제공하는 클래스 |
|
|
|
<br>
|
|
|
|
|
|
<img src="Element_Image/elementClass4.png" width="700">
|
|
|
|
|
|
| **클래스** | **기능** |
|
|
|
| -------- | -------- |
|
|
|
| ElementObservable | 망 구성이 변경되었을 때 알림 기능을 제공하는 클래스, AddElementObserver()로 알람을 받을 클래스를 등록 |
|
|
|
| ElementObserver | ElementObservable에서 등록된 클래스에서 ElementObserver를 상속받아 UpdateElementObser 함수로 Notification이 발생 |
|
|
|
| ElementManagerInterface | ElementManager에 사용되는 인터페이스를 정의한 추상 클래스 |
|
|
|
| ElementManager | 노드의 추가/삭제 및 노드와 망 전체 리스트를 관리하는 클래스 |
|
|
|
<br>
|
|
|
|
|
|
#### 나) DB 파일을 읽어 그룹, 노드, 망(링크) 데이터를 구성하는 순서도
|
|
|
<img src="Element_Image/elementFlow1.png" width="300">
|
|
|
|
|
|
#### 다) 그룹추가
|
|
|
<img src="Element_Image/elementFlowGroupAdd.png" width="700">
|
|
|
|
|
|
#### 라) 그룹변경
|
|
|
<img src="Element_Image/elementFlowGroupModify.png" width="700">
|
|
|
|
|
|
#### 마) 그룹삭제
|
|
|
<img src="Element_Image/elementFlowGroupDel.png" width="700">
|
|
|
|
|
|
#### 바) 노드추가
|
|
|
<img src="Element_Image/elementFlowNodeAdd.png" width="700">
|
|
|
|
|
|
#### 사) 노드변경
|
|
|
<img src="Element_Image/elementFlowNodeModify.png" width="700">
|
|
|
|
|
|
#### 아) 노드삭제
|
|
|
<img src="Element_Image/elementFlowNodeDel.png" width="700">
|
|
|
|
|
|
#### 자) 링크추가
|
|
|
<img src="Element_Image/elementFlowLinkAdd.png" width="700">
|
|
|
|
|
|
#### 차) 링크삭제
|
|
|
<img src="Element_Image/elementFlowLinkDel.png" width="700">
|
|
|
|
|
|
#### 카) 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_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 void Iris3elem_SetNetSeverityMode( enum Iris3NetSeverityMode mode ) | DISCONN 표시 방법 설정 (GROUP내에 모든 노드가 Disconn or Deact일 경우/ GROUP내에 일부 노드가 Disconn or Deact일 경우) |
|
|
|
| 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 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_GetXidSubpart(char* xid, int idx, char* xid_subpart/\*OUT\*/) | xid 문자열을 파싱하여 n번째 항목을 리턴 | |