본문

OMNeT++ TicToc Tutorial #1. 실행하기

omnetpp에 대한 자료가 별로 없어 이제부터 이에 관한 포스팅을 작성하려 한다. 처음 IDE를 켜면 어떤것부터 손대야 할 지 막막한데, 이때 가장 좋은 방법은 예제를 실행해보는 것이다. 이클립스에서 기본 워크스페이스 (%omnetpp%\samples)로 시작하면 closed 되어있는 예제 프로젝트를 확인할 수 있으며, 그중에 tictoc프로젝트를 열어서 run 버튼을 눌러본다. 



[그림 1] Tictoc1 예제 수행


1. tictoc1.ned

Tictoc1을 구성하는 파일들을 알아본다. 우선 가장먼저 tictoc1.ned가 있다. .ned 파일은 네트워크의 토폴로지, 즉 네트워크의 노드와 그들간의 링크에 관해 서술해놓은 텍스트 파일이다. 이 파일에서는 노드의 형태와, 네트워크의 형태를 나타낸다. 우선 노드가 어떻게 생겨먹었는가에대해서 기술해야 하며, 아래에서는 Txc1이라는 노드형태를 나타내며 여기에는 in이라는 입력과 out이라는 출력(gate/port)을 사용할 수 있다는것을 나타낸다. Simple 키워드는 OMNeT++ 클래스 라이브러리를 사용한 C++로 구현된 컴포넌트를 지칭한다. (txc1.cc에 Txc1클래스가 정의된것을 확인할 수 있다) 만약 atomic한 simple 모듈에서 발전되어, 서브모듈이 필요한 컴포넌트를 만들기 위해서는 module 키워드를 사용할 수 있다.


simple Txc1 {

    gates:

        input in; output out;

}


그리고 이 노드들으로 구성된 네트워크를 만들 차례이다. 네트워크에는 두개의 서브모듈(node)인 tic과 toc이 존재하며 이들은 Txc1 클래스의 인스턴스이다. 매우 직관적인 형태로 노드들간 연결이 connections항 내에 기술되어있으며, 가운데의 delay는 링크의 propagation delay를 의미한다. 


network Tictoc1 {

    submodules:

        tic: Txc1; toc: Txc1;

    connections:

        tic.out --> {  delay = 100ms; } --> toc.in; tic.in <-- {  delay = 100ms; } <-- toc.out;

}


2. txc1.cc
class Txc1 : public cSimpleModule {
  protected:
    virtual void initialize();
    virtual void handleMessage(cMessage *msg);
};
Define_Module(Txc1);

> Txc1 클래스는 cSimpleModule을 상속한다. 이 클래스에서는 초기화를 담당하는 initialize()와 수신 메시지를 처리하는 handleMessage() 두개의 순수가상함수가 재정의되어 사용된다. Define_Module(Txc1); 을 통하여, "Announces the C++ simple module class to OMNeT++, and couples it with the NED simple module declaration of the same name." 즉, OMNeT++상의 NED와 현재 클래스를 서로 연계시키는 과정을 수행한다.


void Txc1::initialize() {

    if (strcmp("tic", getName()) == 0) {

        cMessage *msg = new cMessage("tictocMsg");

        send(msg, "out");

    }

}

void Txc1::handleMessage(cMessage *msg) {

    send(msg, "out");

}


> initialize() 함수는 시뮬레이션이 시작될 때 수행되는 것으로, 만약 자신의 이름이 tic일 경우, cMessage로 메시지를 만들고 이 메시지를 'out' gate/port으로 전송하는 것이다. 그리고 handleMessage()는 메시지를 수신될 때 호출되며 마찬가지로 수신된 메시지를 'out' gate(gate가 더 자주 사용되므로 이제는 gate로 지칭한다)로 보내는 것이다. 


3. omnetpp.ini

omnetpp.ini는 어떤 네트워크를 시뮬레이션 할 것인가에 대해 지정해주는 역할을 한다. 참고로 동일한 시뮬레이션 상에 여러개의 네트워크가 존재할 수 있다. 모델에 특정 인자를 전달하면서(랜덤 시드와 같은) 시뮬레이션 할 수도 있다. 


[General]

network = Tictoc1

이 경우는 시뮬레이션할 네트워크가 Tictoc1이라는 것을 알려준다(tictoc1.ned에서 network Tictoc1 으로 정의한것을 기억하자) 또한 위에 언급한대로 아래와 같이 인자를 넘겨줄 수 있다. 만약 설정하지 않았다면 어떤 네트워크를(config) 사용할것인가 하는 다이얼로그창이 뜨게 된다.


[Config Tictoc4]

network = Tictoc4

Tictoc4.toc.limit = 5

댓글 0

Holic Spirit :: Tistory Edition

design by tokiidesu. powerd by kakao.