18.01.2013 Views

Cross-Platform Protocol Development Based on OMNeT++

Cross-Platform Protocol Development Based on OMNeT++

Cross-Platform Protocol Development Based on OMNeT++

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

completely independent<br />

completely independent<br />

User Code<br />

NBH<br />

Rout.<br />

MAC AL<br />

CSMA<br />

Appl.<br />

Rout.<br />

Fork<br />

CometOS<br />

HIL<br />

CometOS Core<br />

Module<br />

InputGate<br />

OutputGate<br />

Message<br />

Object<br />

Scheduler<br />

ATmega128RFA1 other platforms<br />

User Code<br />

NBH<br />

Rout.<br />

MAC AL<br />

CSMA<br />

platform dependent<br />

(a) Hardware <str<strong>on</strong>g>Platform</str<strong>on</strong>g><br />

Appl.<br />

Rout.<br />

Fork<br />

(b) <strong>OMNeT++</strong> envir<strong>on</strong>ment<br />

Module<br />

InputGate<br />

OutputGate<br />

Message<br />

Object<br />

CometOS<br />

Adapter<br />

Figure 1: CometOS Architecture<br />

platform independent<br />

<strong>OMNeT++</strong><br />

machine code instructi<strong>on</strong> level (a per-instructi<strong>on</strong> hardware<br />

emulati<strong>on</strong>). Additi<strong>on</strong>ally, COOJA also enables the simulati<strong>on</strong><br />

of TinyOS code.<br />

3. ARCHITECTURE<br />

A key design goal for CometOS is to provide a lightweight,<br />

flexible and extensible framework for a rapid network protocol<br />

development. Most c<strong>on</strong>cepts are directly adopted from<br />

<strong>OMNeT++</strong>. The core of CometOS comprises the classes<br />

Module, InputGate, OuputGate, Message and Object. These<br />

implement the basic c<strong>on</strong>cepts of <strong>OMNeT++</strong>: message passing<br />

via input and output gates, scheduling of self-messages<br />

and attaching arbitrary objects to message instances.<br />

As shown in Fig. 1, the realizati<strong>on</strong> of CometOS is split<br />

into two major parts. The upper and lower figures show<br />

the architecture for a target hardware and <strong>OMNeT++</strong>, respectively.<br />

Both have in comm<strong>on</strong> that user protocols can be<br />

implemented and executed without porting effort.<br />

Besides user code, the architecture for the actual hardware<br />

platform c<strong>on</strong>sists of a platform-independent core framework<br />

that implements the module and message passing c<strong>on</strong>cept.<br />

This requires a scheduler, which is itself part of a hardwareindependent<br />

layer (HIL). Note that the scheduler interface<br />

is not directly exposed to the user code. Its functi<strong>on</strong>ality is<br />

<strong>on</strong>ly accessible through the Module class. Furthermore, the<br />

HIL provides high-level interfaces for accessing parts of the<br />

target hardware, e.g., the medium access c<strong>on</strong>trol abstracti<strong>on</strong><br />

layer (MAC AL). Details <strong>on</strong> the implementati<strong>on</strong> of CometOS<br />

for a target platform are given in Sect. 3.5.<br />

For the simulati<strong>on</strong> of user code the functi<strong>on</strong>ality of CometOS<br />

is mapped to the infrastructure of <strong>OMNeT++</strong> using<br />

the class adapter pattern. That way, simulati<strong>on</strong>s of protocols<br />

written for CometOS do not differ from dedicated<br />

<strong>OMNeT++</strong> simulati<strong>on</strong>s. Runtime support for inspecti<strong>on</strong> of<br />

modules and messages, locati<strong>on</strong> of undisposed objects and<br />

eventlogging is maintained. If needed, models for simulating<br />

hardware-specific comp<strong>on</strong>ents have to be implemented (e.g.,<br />

MAC AL).<br />

1 using namespace cometos ;<br />

2<br />

3 c l a s s MyMessage : public Message {<br />

4 } ;<br />

5<br />

6 c l a s s MySender : public Module {<br />

7 public :<br />

8 OutputGate gateOut ;<br />

9<br />

10 MySender ( ) :<br />

11 gateOut ( this , ”gateOut ”)<br />

12 {}<br />

13<br />

14 void i n i t i a l i z e ( ) {<br />

15 s c h e d u l e (new Message , &MySender : : t r a f f i c ) ;<br />

16 }<br />

17<br />

18 void t r a f f i c ( Message ∗ t i m e r ) {<br />

19 gateOut . send (new MyMessage ) ;<br />

20 s c h e d u l e ( timer , &MySender : : t r a f f i c , 5 0 0 ) ;<br />

21 }<br />

22 } ;<br />

23<br />

24 c l a s s MyReceiver : public Module {<br />

25 public :<br />

26<br />

27 InputGate g a t e I n ;<br />

28<br />

29 MyReceiver ( ) :<br />

30 g a t e I n ( this , &MyReceiver : : handle , ” g a t e I n ”)<br />

31 {}<br />

32<br />

33 void handle ( MyMessage ∗msg ) {<br />

34 // p r o c e s s message r e c e p t i o n<br />

35 delete msg ;<br />

36 }<br />

37 } ;<br />

Listing 1: Gates and Message Passing<br />

In comparis<strong>on</strong> to <strong>OMNeT++</strong>, CometOS provides less rich<br />

functi<strong>on</strong>ality due to the need of running it <strong>on</strong> resourcec<strong>on</strong>strained<br />

microc<strong>on</strong>trollers, e.g., <strong>on</strong>ly a clock accuracy of<br />

millisec<strong>on</strong>ds is currently provided by each Module. In the<br />

following the main principles are introduced in more detail.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!