본문 바로가기

IT/OMNET++

[OMNET++] Messages and Packets(1)

<본 게시글은 OMNET++SimualtionManual을 공부하면서 개인적으로 저장해놓은 글입니다>

 

cMessage 와 cPacket

cPacket은 통신 네트워크에서 network packets(frame, datagrams, transport packets 등)으로 사용되고 cMessage는 그 외 모든 경우에 사용된다.


cMessage Field

1) name : string(const char *) 형의 이름 변수.
2) Message kind : 음수(0>x)인 경우는 시뮬레이션 library에서 값을 받지만, 0 이상(양수인 경우)은 어떠한 목적으로든 사용자가 사용이 가능하다. 메세지별로 기능이나 구분을 할 때 사용한다.
3) scheduling priority : 같은 arrival time값을 가질 경우 시뮬레이션 커널에서 전송 순서를 정할떄 사용하는 값이다. 거의 사용하지 않는다.
4) send time, arrival time, source module, source gate, destination module, destionation gate는 말 그대로 전송 시간, 도착시간, 소스 모듈, 소스 게이트, 목적지 모듈, 목적지 게이트이다. 사용자가 어떻게 지정해놓았느냐에 따라 값이 바뀐다.
5) Time stamp(arrival time과 헷갈리지 말자)은 utility field로써 프로그래머가 어떤 목적으로든 자유롭게 사용할 수 있는 필드이다. 시뮬레이션 커널에 의해 검사되거나 변경되지 않는다.


cPacket Field 

- cMessage Field를 포함한 추가적인 Field들이 존재한다.
1) packet length : packet의 길이를 bits단위로 표시한다. 패킷이 할당 된 데이터 전송률을 가진 연결을 통과 할 때 전송 지속 시간을 계산하고 비트가 0이 아닌 오류율을 갖는 채널에서의 오류 모델링을 위해 시뮬레이션 커널에 의해 사용된다.
2) encapsulated packet : 프로토콜 레이어 모델링 시 encapsulation 과 decapsulation의 개념을 잡을 때 도움이 된다.
3) bit Error flag : 패킷이 0이 아닌 패킷 에러율 (PER) 또는 비트 에러율 (BER)을 갖는 채널을 통해 전송 된 후에 에러 모델링의 결과를 전달한다. 패킷을 수신 한 후이 플래그를 검사하고 그에 따라 행동하는 것은 수신자의 몫이다.
4) duration field : 지속 시간 필드는 패킷이 데이터 전송률을 가진 채널을 통해 전송 된 후 전송 지속 시간을 전달한다.
5) is-reception-start : is-reception-start 플래그는 패킷이 data rate를 갖는 채널을 통해 이동 한 후이 패킷이 수신의 시작 혹은 끝을 나타내는지 알려준다. 이 플래그는 수신 게이트의 수신시 시작 플래그에 의해 제어된다.


cMessage Class

- cMessage를 선언하는 방법

<cMessage initialization>


- cMessage's Functions

<cMessage 함수들>

(기본적으로는 함수 명에 어떤 기능이 들어가는지 다 나와있는것과 마찬가지이므로 설명이 필요한 함수만 기재)
1) setTimeStamp() 는 setTimeStamp(simTime())과 기능이 동일하다.

2) isPacket()은 특정 메시지가 cPacket의 subclass인 경우 true를 반환하고 그렇지 않으면 false를 반환한다. dynamic_cast으로 변환하여 결과를 얻는 것이 더욱 빠른 방법이다.

3) getCreationTime()은 메세지가 만들어진 시간을 반환한다. retransmission이나 segmentation/reassembly에 관련된 경우에 종종 사용되는 함수이다.

cMessage를 복사하는 법
cMessage *msg = new cMessage();
cMessage *copy = msg->dup();


* 복사된 메세지와 원본 메세지를 구분하는 법


원본 메세지와 복사된 메세지는 다른 ID를 가지게 된다. 그러므로 getID() 함수를 사용하면 서로를 구분할 수 있다. 

다만 getTreeId를 할 경우 원본 메세지는 본인의 ID를 반환하지만 복사된 메세지의 경우 원본 메세지의 ID를 반환하게 된다.

 

cPacket

 

cPacket은 cMessage와 비슷한 면이 많지만 추가적으로 bit length(int64)를 가지고 있다.

<해당 packet의 bit 설정과 관련된 함수들>

또한 부가적으로 bit error flag를 설정할 수 있다.

<bit error flag>

'IT > OMNET++' 카테고리의 다른 글

[OMNET++] 시뮬레이션 도중 발생한 문제  (0) 2020.04.21
[OMNET++] Messages and Packets(3)  (0) 2020.04.06
[OMNET++] Messages and Packets(2)  (0) 2020.04.06