OMF Protocol Specifications for XMPP communication

This page describes the different protocol messages used between the OMF entities. It is a 'working' design document, as such this page is expected to change as OMF evolves.

Communication between EC and RC

Initial handshake:

  • EC to RC
<ENROLL id="omf-payload">
  <IMAGE>*</IMAGE>
  <SLICEID>testing_slice</SLICEID>
  <INDEX>1</INDEX>
  <EXPID>norbit_2010_07_16_12_13_31</EXPID>
  <TARGET>omf.nicta.node5</TARGET>
</ENROLL>
  • Reply from RC to EC
<OK id="omf-payload">
  <TARGET>omf.nicta.node5</TARGET>
  <EXPID>norbit_2010_07_16_12_13_31</EXPID>
  <SLICEID>testing_slice</SLICEID>
  <IMAGE>*</IMAGE>
  <REASON>ENROLLED</REASON>
  <INDEX>1</INDEX>
  <MESSAGE>Enrolled into Experiment ID: &apos;norbit_2010_07_16_12_13_31&apos;</MESSAGE>
</OK>

OR

<ERROR id="omf-payload">
  <TARGET>omf.nicta.node5</TARGET>
  <EXPID>norbit_2010_07_16_12_13_31</EXPID>
  <SLICEID>testing_slice</SLICEID>
  <IMAGE>*</IMAGE>
  <REASON>ALREADY_ENROLLED</REASON>
  <INDEX>1</INDEX>
  <MESSAGE>Resource Controller already enrolled! - ignoring this ENROLL command!</MESSAGE>
</ERROR>

OR

<ERROR id="omf-payload">
  <TARGET>omf.nicta.node5</TARGET>
  <EXPID>norbit_2010_07_16_12_13_31</EXPID>
  <SLICEID>testing_slice</SLICEID>
  <IMAGE>foo</IMAGE>
  <REASON>WRONG_IMAGE</REASON>
  <INDEX>1</INDEX>
  <MESSAGE>Requested Image: 'foo' - Current Image: 'bar'</MESSAGE>
</ERROR>

OR

<ERROR id="omf-payload">
  <TARGET>omf.nicta.node5</TARGET>
  <EXPID>norbit_2010_07_16_12_13_31</EXPID>
  <SLICEID>testing_slice</SLICEID>
  <IMAGE>*</IMAGE>
  <REASON>OLD_ENROLL</REASON>
  <INDEX>1</INDEX>
  <MESSAGE>Failed to Process ENROLL command! Maybe it came from an old experiment - ignoring it!</MESSAGE>
</ERROR>

Alias command:

  • EC to RC
<ALIAS id="omf-payload">
  <SLICEID>testing_slice</SLICEID>
  <NAME>Receiver</NAME>
  <EXPID>norbit_2010_07_16_12_13_31</EXPID>
  <TARGET>omf.nicta.node5</TARGET>
</ALIAS>
  • Reply from RC to EC
<OK id="omf-payload">
  <TARGET>omf.nicta.node5</TARGET>
  <EXPID>norbit_2010_07_16_12_13_31</EXPID>
  <SLICEID>testing_slice</SLICEID>
  <REASON>ENROLLED</REASON>
  <NAME>Receiver</NAME>
  <MESSAGE>Enrolled into a new group: &apos;Receiver&apos;</MESSAGE>
</OK>

OR

<ERROR id="omf-payload">
  <TARGET>omf.nicta.node5</TARGET>
  <EXPID>norbit_2010_07_16_12_13_31</EXPID>
  <SLICEID>testing_slice</SLICEID>
  <REASON>WRONG_ALIAS</REASON>
  <NAME>Receiver</NAME>
  <MESSAGE>Failed to Process ALIAS command! Cannot listen on the address for this alias 'Recevier' - ignoring it!</MESSAGE>
</ERROR>

Configure command:

  • EC to RC
<CONFIGURE id="omf-payload">
  <PATH>net/w0/mode</PATH>
  <TARGET>Receiver</TARGET>
  <VALUE>managed</VALUE>
  <EXPID>norbit_2010_07_16_13_25_13</EXPID>
  <SLICEID>testing_slice</SLICEID>
</CONFIGURE>
  • Reply from RC to EC
<OK id="omf-payload">
  <SLICEID>testing_slice</SLICEID>
  <VALUE>managed</VALUE>
  <EXPID>norbit_2010_07_16_13_25_13</EXPID>
  <TARGET>omf.nicta.node5</TARGET>
  <REASON>CONFIGURED</REASON>
  <PATH>net/w0/mode</PATH>
  <MESSAGE>ath0</MESSAGE>
</OK>

OR

<ERROR id="omf-payload">
  <TARGET>omf.nicta.node5</TARGET>
  <VALUE>abcd</VALUE>
  <SLICEID>testing_slice</SLICEID>
  <EXPID>norbit_2010_07_16_13_25_13</EXPID>
  <REASON>FAILED_CONFIGURE</REASON>
  <PATH>net/w0/mode</PATH>
  <MESSAGE>Some error message</MESSAGE>
</ERROR>

Execute command:

  • EC to RC
<EXECUTE id="omf-payload">
  <ENV>OML_SERVER=tcp:10.0.0.200:3003 OML_EXP_ID=norbit_2010_07_16_13_25_13 OML_NAME=Receiver </ENV>
  <PATH>/usr/bin/otr2</PATH>
  <TARGET>Receiver</TARGET>
  <EXPID>norbit_2010_07_16_13_25_13</EXPID>
  <OMLCONFIG>
    <omlc exp_id="norbit_2010_07_16_13_25_13" id="Receiver">
      <collect url="tcp:10.0.0.200:3003">
        <mp name="udp_in" samples="3"/>
      </collect>
    </omlc>
  </OMLCONFIG>
  <APPID>test_app_otr2</APPID>
  <SLICEID>testing_slice</SLICEID>
  <CMDLINEARGS>--udp:local_host 192.168.1.2 --udp:local_port 3000</CMDLINEARGS>
</EXECUTE>
  • Reply from RC to EC
<APP_EVENT id="omf-payload">
  <SLICEID>testing_slice</SLICEID>
  <VALUE>STARTED</VALUE>
  <EXPID>norbit_2010_07_16_13_25_13</EXPID>
  <APPID>test_app_otr2</APPID>
  <TARGET>omf.nicta.node5</TARGET>
  <MESSAGE></MESSAGE>
</APP_EVENT>
  • When Application terminates, reply from RC to EC
<APP_EVENT id="omf-payload">
  <SLICEID>testing_slice</SLICEID>
  <VALUE>DONE.OK</VALUE>
  <EXPID>norbit_2010_07_16_13_25_13</EXPID>
  <APPID>test_app_otr2</APPID>
  <TARGET>omf.nicta.node5</TARGET>
  <MESSAGE>status: 0</MESSAGE>
</APP_EVENT>

OR

<APP_EVENT id="omf-payload">
  <SLICEID>testing_slice</SLICEID>
  <VALUE>DONE.ERROR</VALUE>
  <EXPID>norbit_2010_07_16_13_55_47</EXPID>
  <APPID>test_app_otr2</APPID>
  <TARGET>omf.nicta.node5</TARGET>
  <MESSAGE>status: 32512</MESSAGE>
</APP_EVENT>

Application Events:

  • RC to EC
<APP_EVENT id="omf-payload">
  <SLICEID>testing_slice</SLICEID>
  <VALUE>STDOUT</VALUE>
  <EXPID>norbit_2010_07_16_13_25_13</EXPID>
  <APPID>test_app_otr2</APPID>
  <TARGET>omf.nicta.node5</TARGET>
  <MESSAGE># OTG2 Traffic Sink V1.1</MESSAGE>
</APP_EVENT>

OR

<APP_EVENT id="omf-payload">
  <SLICEID>testing_slice</SLICEID>
  <VALUE>STDERR</VALUE>
  <EXPID>norbit_2010_07_16_13_55_47</EXPID>
  <APPID>test_app_otr2</APPID>
  <TARGET>omf.nicta.node5</TARGET>
  <MESSAGE>env: /usr/bin/otr2: No such file or directory</MESSAGE>
</APP_EVENT>

Device Events:

  • RC to EC
<DEV_EVENT id="omf-payload">
  <TARGET>omf.nicta.node5</TARGET>
  <VALUE>CELL_ID</VALUE>
  <SLICEID>testing_slice</SLICEID>
  <APPID>net/w0</APPID>
  <EXPID>norbit_2010_07_16_14_01_03</EXPID>
  <MESSAGE>Not-Associated</MESSAGE>
</DEV_EVENT>

Reset Command:

  • EC to RC
<RESET id="omf-payload">
  <TARGET>*</TARGET>
  <EXPID>norbit_2010_07_16_13_25_13</EXPID>
  <SLICEID>testing_slice</SLICEID>
</RESET>


OLD SPECIFICATION

BELOW ARE OLD SPECIFICATION, KEPT ONLY FOR INFORMATION

Communication between NodeHandler (aka Experiment Controller) and NodeAgent (aka Resource Controller):

  • Message from NH to NA should have the following format:
    <command> <argument1> <argument2> etc...
  • Note: This was the format also documented in the original NA TCP server communicator. However, in the case of PubSub communicator <target> is no longer relevant in a pub/sub communication scheme, that's why it's not supported anymore.
  • 'YOUARE' message: YOUARE <sessionID> <experimentID> <name> <alias1> <alias2> etc...
    - YOUARE message is sent from NH to NA. It is typically the first message sent.
    - <sessionID> the session ID that the NA should use
    - <experimentID> the experiment ID that the NA should use
    - <name> becomes the Agent Name for this Session/Experiment.
    - <alias1> etc... the optional aliases for this NA
    - NOTE: After receiving a 'YOUARE' the NA has to reply back with a heartbeat 'HB' message.
  • 'HB' heartbeat message: <name> <seqno> HB <outofseq> <inseqcount> <now> <delta>
    - <name> is the name of the agent sending the heartbeat
    - HB message is sent as acknowledgment from the NA to the NH.
    - In the original Multicast Communication scheme between NH-NA, it is used to ACK correct reception and execution of a command.
    - In the later TCP-based Communication scheme (NH=client / NA=server), it is used to ACK correct execution of a command (e.g. CONFIGURE, EXEC,...)
    - In the new under-development PubSub Communication scheme, it will also be used to ACK correct execution of a command.
    - When used in these last two schemes, the fields are set as follows: seq = 0, outofseq = inseqcount = now = delta = -1.
  • ...