From fce30a7e204bc0724e8f3fe08d70dbec1aea8002 Mon Sep 17 00:00:00 2001 From: Ludovic Apvrille <ludovic.apvrille@telecom-paris.fr> Date: Mon, 22 May 2023 14:13:46 +0200 Subject: [PATCH] improving test on sec from diplo models --- modeling/SysMLSec/AliceAndBobHW.xml | 18 +-- .../tmltranslator/DiplodocusSecurityTest.java | 17 ++- .../keyexchange.tarchi | 116 ++++++++++++++++++ .../keyexchange.tmap | 24 ++++ .../keyexchange.tml | 38 ++++++ .../test_diplo_security_models/mac.tarchi | 116 ++++++++++++++++++ .../test_diplo_security_models/mac.tmap | 24 ++++ .../test_diplo_security_models/mac.tml | 34 +++++ 8 files changed, 375 insertions(+), 12 deletions(-) create mode 100644 ttool/src/test/resources/tmltranslator/test_diplo_security_models/keyexchange.tarchi create mode 100644 ttool/src/test/resources/tmltranslator/test_diplo_security_models/keyexchange.tmap create mode 100644 ttool/src/test/resources/tmltranslator/test_diplo_security_models/keyexchange.tml create mode 100644 ttool/src/test/resources/tmltranslator/test_diplo_security_models/mac.tarchi create mode 100644 ttool/src/test/resources/tmltranslator/test_diplo_security_models/mac.tmap create mode 100644 ttool/src/test/resources/tmltranslator/test_diplo_security_models/mac.tml diff --git a/modeling/SysMLSec/AliceAndBobHW.xml b/modeling/SysMLSec/AliceAndBobHW.xml index 9c6a11bd43..4bbc4bde31 100644 --- a/modeling/SysMLSec/AliceAndBobHW.xml +++ b/modeling/SysMLSec/AliceAndBobHW.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> -<TURTLEGMODELING version="1.0beta" ANIMATE_INTERACTIVE_SIMULATION="true" ACTIVATE_PENALTIES="true" UPDATE_INFORMATION_DIPLO_SIM="true" ANIMATE_WITH_INFO_DIPLO_SIM="true" OPEN_DIAG_DIPLO_SIM="false" LAST_SELECTED_MAIN_TAB="8" LAST_SELECTED_SUB_TAB="0"> +<TURTLEGMODELING version="1.0beta" ANIMATE_INTERACTIVE_SIMULATION="false" ACTIVATE_PENALTIES="true" UPDATE_INFORMATION_DIPLO_SIM="false" ANIMATE_WITH_INFO_DIPLO_SIM="false" OPEN_DIAG_DIPLO_SIM="false" LAST_SELECTED_MAIN_TAB="9" LAST_SELECTED_SUB_TAB="0"> <Modeling type="TML Component Design" nameTab="SymmetricExchange" tabs="TML Component Task Diagram$Bob$Alice" > <TMLComponentTaskDiagramPanel name="TML Component Task Diagram" minX="10" maxX="2500" minY="10" maxY="1500" channels="true" events="true" requests="true" considerExecOperators="true" considerTimingOperators="true" zoom="1.0" > @@ -8,8 +8,8 @@ <cdparam x="392" y="173" /> <sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> <infoparam name="connector" value="Connector between ports" /> -<P1 x="412" y="187" id="13" /> -<P2 x="466" y="188" id="2" /> +<P1 x="399" y="174" id="13" /> +<P2 x="479" y="175" id="2" /> <AutomaticDrawing data="true" /> <new d="false" /> </CONNECTOR> @@ -862,8 +862,8 @@ <cdparam x="578" y="303" /> <sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> <infoparam name="connector" value="Connector between ports" /> -<P1 x="590" y="318" id="371" /> -<P2 x="659" y="318" id="358" /> +<P1 x="577" y="306" id="371" /> +<P2 x="671" y="306" id="358" /> <AutomaticDrawing data="true" /> <new d="false" /> </CONNECTOR> @@ -871,8 +871,8 @@ <cdparam x="578" y="246" /> <sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> <infoparam name="connector" value="Connector between ports" /> -<P1 x="590" y="275" id="369" /> -<P2 x="659" y="275" id="356" /> +<P1 x="577" y="263" id="369" /> +<P2 x="671" y="263" id="356" /> <AutomaticDrawing data="true" /> <new d="false" /> </CONNECTOR> @@ -1853,8 +1853,8 @@ <cdparam x="404" y="206" /> <sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> <infoparam name="connector" value="Connector between ports" /> -<P1 x="404" y="206" id="745" /> -<P2 x="480" y="206" id="734" /> +<P1 x="391" y="193" id="745" /> +<P2 x="493" y="193" id="734" /> <AutomaticDrawing data="true" /> <new d="false" /> </CONNECTOR> diff --git a/ttool/src/test/java/tmltranslator/DiplodocusSecurityTest.java b/ttool/src/test/java/tmltranslator/DiplodocusSecurityTest.java index cc0266ef04..dfe0bdd92b 100644 --- a/ttool/src/test/java/tmltranslator/DiplodocusSecurityTest.java +++ b/ttool/src/test/java/tmltranslator/DiplodocusSecurityTest.java @@ -43,13 +43,24 @@ import static org.junit.Assert.*; public class DiplodocusSecurityTest extends AbstractTest { final static String DIR_GEN = "tmltranslator/test_diplo_security/"; final static String DIR_MODELS = "tmltranslator/test_diplo_security_models/"; - final String [] MODELS_DIPLO_SECURITY = {"symetric", "nonce"}; + final String [] MODELS_DIPLO_SECURITY = {"symetric", "nonce", "keyexchange", "mac"}; private static final List<List<String>> LIST_OF_LISTS_OF_QUERIES = Arrays.asList( Arrays.asList("Query not attacker(Alice___SymmetricExchange__comm_chData[!1 = v]) is true.", - "Query inj-event(authenticity___Bob___SymmetricExchange__comm_chData___aftersignalstate_SymmetricExchange_comm_SymmetricExchange_comm(dummyM)) ==> inj-event(authenticity___Alice___SymmetricExchange__comm_chData___signalstate_SymmetricExchange_comm_SymmetricExchange_comm(dummyM)) is false."), + "Query inj-event(authenticity___Bob___SymmetricExchange__comm_chData___aftersignalstate_SymmetricExchange_comm_" + + "SymmetricExchange_comm(dummyM)) ==> inj-event(authenticity___Alice___SymmetricExchange__comm_chData" + + "___signalstate_SymmetricExchange_comm_SymmetricExchange_comm(dummyM)) is false."), Arrays.asList("Query not attacker(Alice___nonce__comm_chData[!1 = v]) is true.", "Query inj-event(authenticity___Bob___nonce__comm_chData___aftersignalstate_nonce_comm_nonce_comm(dummyM)) ==> inj-event" + - "(authenticity___Alice___nonce__comm_chData___signalstate_nonce_comm_nonce_comm(dummyM)) is false.") + "(authenticity___Alice___nonce__comm_chData___signalstate_nonce_comm_nonce_comm(dummyM)) is false."), + Arrays.asList("Query not attacker(Alice___KeyExchange__comm_chData[!1 = v]) is true.", "RESULT inj-event" + + "(authenticity___Bob___KeyExchange__comm_chData___aftersignalstate_KeyExchange_comm_KeyExchange_comm283" + + "(dummyM)) ==> inj-event(authenticity___Alice___KeyExchange__comm_chData___signalstate_KeyExchange_comm_KeyExchange_comm239" + + "(dummyM)) is true.", "Query inj-event(authenticity___Bob___KeyExchange__comm_chData___aftersignalstate_KeyExchange_comm" + + "_KeyExchange_comm283(dummyM)) ==> inj-event(authenticity___Alice___KeyExchange__comm_chData" + + "___signalstate_KeyExchange_comm_KeyExchange_comm239(dummyM)) is true."), + Arrays.asList("Query not attacker(Alice___MAC__comm_chData[!1 = v]) is true.", + "Query inj-event(authenticity___Bob___MAC__comm_chData___aftersignalstate_MAC_comm_MAC_comm(dummyM)) ==> inj-event(authenticity" + + "___Alice___MAC__comm_chData___signalstate_MAC_comm_MAC_comm(dummyM)) is false") ); private static final String PROVERIF_SUMMARY = "Verification summary:"; private static final String PROVERIF_QUERY = "Query"; diff --git a/ttool/src/test/resources/tmltranslator/test_diplo_security_models/keyexchange.tarchi b/ttool/src/test/resources/tmltranslator/test_diplo_security_models/keyexchange.tarchi new file mode 100644 index 0000000000..5b05969400 --- /dev/null +++ b/ttool/src/test/resources/tmltranslator/test_diplo_security_models/keyexchange.tarchi @@ -0,0 +1,116 @@ +// Master clock frequency - in MHz +MASTERCLOCKFREQUENCY 200 + +NODE BRIDGE BridgeAlice +SET BridgeAlice bufferByteSize 4 +SET BridgeAlice clockDivider 1 + +NODE BRIDGE BridgeBob +SET BridgeBob bufferByteSize 4 +SET BridgeBob clockDivider 1 + +NODE MEMORY ExternalMemory +SET ExternalMemory byteDataSize 4 +SET ExternalMemory clockDivider 1 + +NODE MEMORY MemoryAlice +SET MemoryAlice byteDataSize 4 +SET MemoryAlice clockDivider 1 + +NODE MEMORY MemoryBob +SET MemoryBob byteDataSize 4 +SET MemoryBob clockDivider 1 + +NODE BUS BusBob +SET BusBob byteDataSize 4 +SET BusBob pipelineSize 1 +SET BusBob arbitration 0 +SET BusBob sliceTime 10000 +SET BusBob burstSize 100 +SET BusBob privacy private +SET BusBob clockDivider 1 + +NODE BUS BusAlice +SET BusAlice byteDataSize 4 +SET BusAlice pipelineSize 1 +SET BusAlice arbitration 0 +SET BusAlice sliceTime 10000 +SET BusAlice burstSize 100 +SET BusAlice privacy private +SET BusAlice clockDivider 1 + +NODE BUS ExternalBus +SET ExternalBus byteDataSize 4 +SET ExternalBus pipelineSize 1 +SET ExternalBus arbitration 0 +SET ExternalBus sliceTime 10000 +SET ExternalBus burstSize 100 +SET ExternalBus privacy public +SET ExternalBus clockDivider 1 + +NODE CPU CPUAlice +SET CPUAlice nbOfCores 1 +SET CPUAlice byteDataSize 4 +SET CPUAlice pipelineSize 5 +SET CPUAlice goIdleTime 10 +SET CPUAlice maxConsecutiveIdleCycles 10 +SET CPUAlice taskSwitchingTime 20 +SET CPUAlice branchingPredictionPenalty 2 +SET CPUAlice cacheMiss 5 +SET CPUAlice schedulingPolicy 0 +SET CPUAlice sliceTime 10000 +SET CPUAlice execiTime 1 +SET CPUAlice execcTime 1 +SET CPUAlice clockDivider 1 + +NODE CPU CPUBob +SET CPUBob nbOfCores 1 +SET CPUBob byteDataSize 4 +SET CPUBob pipelineSize 5 +SET CPUBob goIdleTime 10 +SET CPUBob maxConsecutiveIdleCycles 10 +SET CPUBob taskSwitchingTime 20 +SET CPUBob branchingPredictionPenalty 2 +SET CPUBob cacheMiss 5 +SET CPUBob schedulingPolicy 0 +SET CPUBob sliceTime 10000 +SET CPUBob execiTime 1 +SET CPUBob execcTime 1 +SET CPUBob clockDivider 1 + +NODE LINK link_BridgeBob_to_BusBob +SET link_BridgeBob_to_BusBob node BridgeBob +SET link_BridgeBob_to_BusBob bus BusBob +SET link_BridgeBob_to_BusBob priority 0 +NODE LINK link_BridgeBob_to_ExternalBus +SET link_BridgeBob_to_ExternalBus node BridgeBob +SET link_BridgeBob_to_ExternalBus bus ExternalBus +SET link_BridgeBob_to_ExternalBus priority 0 +NODE LINK link_BridgeAlice_to_ExternalBus +SET link_BridgeAlice_to_ExternalBus node BridgeAlice +SET link_BridgeAlice_to_ExternalBus bus ExternalBus +SET link_BridgeAlice_to_ExternalBus priority 0 +NODE LINK link_BridgeAlice_to_BusAlice +SET link_BridgeAlice_to_BusAlice node BridgeAlice +SET link_BridgeAlice_to_BusAlice bus BusAlice +SET link_BridgeAlice_to_BusAlice priority 0 +NODE LINK link_ExternalMemory_to_ExternalBus +SET link_ExternalMemory_to_ExternalBus node ExternalMemory +SET link_ExternalMemory_to_ExternalBus bus ExternalBus +SET link_ExternalMemory_to_ExternalBus priority 0 +NODE LINK link_CPUAlice_to_BusAlice +SET link_CPUAlice_to_BusAlice node CPUAlice +SET link_CPUAlice_to_BusAlice bus BusAlice +SET link_CPUAlice_to_BusAlice priority 0 +NODE LINK link_MemoryAlice_to_BusAlice +SET link_MemoryAlice_to_BusAlice node MemoryAlice +SET link_MemoryAlice_to_BusAlice bus BusAlice +SET link_MemoryAlice_to_BusAlice priority 0 +NODE LINK link_MemoryBob_to_BusBob +SET link_MemoryBob_to_BusBob node MemoryBob +SET link_MemoryBob_to_BusBob bus BusBob +SET link_MemoryBob_to_BusBob priority 0 +NODE LINK link_CPUBob_to_BusBob +SET link_CPUBob_to_BusBob node CPUBob +SET link_CPUBob_to_BusBob bus BusBob +SET link_CPUBob_to_BusBob priority 0 diff --git a/ttool/src/test/resources/tmltranslator/test_diplo_security_models/keyexchange.tmap b/ttool/src/test/resources/tmltranslator/test_diplo_security_models/keyexchange.tmap new file mode 100644 index 0000000000..d0d283372a --- /dev/null +++ b/ttool/src/test/resources/tmltranslator/test_diplo_security_models/keyexchange.tmap @@ -0,0 +1,24 @@ +TMLSPEC + #include "keyexchange.tml" +ENDTMLSPEC + +TMLARCHI + #include "keyexchange.tarchi" +ENDTMLARCHI + +TMLMAPPING + MAP CPUAlice KeyExchange__Alice + SET KeyExchange__Alice priority 0 + MAP CPUBob KeyExchange__Bob + SET KeyExchange__Bob priority 0 + MAP ExternalMemory KeyExchange__comm + SET KeyExchange__comm priority 0 + MAP ExternalBus KeyExchange__comm + SET KeyExchange__comm priority 0 + MAP BusAlice KeyExchange__comm + SET KeyExchange__comm priority 0 + MAP BusBob KeyExchange__comm + SET KeyExchange__comm priority 0 + MAPSEC MemoryBob aenc + MAPSEC MemoryAlice symKey +ENDTMLMAPPING diff --git a/ttool/src/test/resources/tmltranslator/test_diplo_security_models/keyexchange.tml b/ttool/src/test/resources/tmltranslator/test_diplo_security_models/keyexchange.tml new file mode 100644 index 0000000000..6de0229a51 --- /dev/null +++ b/ttool/src/test/resources/tmltranslator/test_diplo_security_models/keyexchange.tml @@ -0,0 +1,38 @@ +// TML Application - FORMAT 0.2 +// Application: /Users/ludovicapvrille/TTool/modeling/SysMLSec/AliceAndBobHW.xml +// Generated: Mon May 22 13:40:05 CEST 2023 + +// PRAGMAS + +// Channels +CHANNEL KeyExchange__comm NBRNBW 4 OUT KeyExchange__Alice IN KeyExchange__Bob +VCCHANNEL KeyExchange__comm 0 +CONFCHANNEL KeyExchange__comm +AUTHCHANNEL KeyExchange__comm + +// Events + +// Requests + +TASK KeyExchange__Alice + TASKOP + //Local variables + + //Behavior + EXECC 100 aenc AE 100 100 0 0 - - 1 + WRITE KeyExchange__comm 1+0 aenc + EXECC 100 symKey SE 100 100 0 0 - - 1 + WRITE KeyExchange__comm 1+0 symKey +ENDTASK + +TASK KeyExchange__Bob + TASKOP + //Local variables + + //Behavior + READ KeyExchange__comm 1+0 aenc + EXECC 100 aenc AE 100 100 0 0 - - 2 + READ KeyExchange__comm 1+0 symKey + EXECC 100 symKey SE 100 100 0 0 - - 2 +ENDTASK + diff --git a/ttool/src/test/resources/tmltranslator/test_diplo_security_models/mac.tarchi b/ttool/src/test/resources/tmltranslator/test_diplo_security_models/mac.tarchi new file mode 100644 index 0000000000..5b05969400 --- /dev/null +++ b/ttool/src/test/resources/tmltranslator/test_diplo_security_models/mac.tarchi @@ -0,0 +1,116 @@ +// Master clock frequency - in MHz +MASTERCLOCKFREQUENCY 200 + +NODE BRIDGE BridgeAlice +SET BridgeAlice bufferByteSize 4 +SET BridgeAlice clockDivider 1 + +NODE BRIDGE BridgeBob +SET BridgeBob bufferByteSize 4 +SET BridgeBob clockDivider 1 + +NODE MEMORY ExternalMemory +SET ExternalMemory byteDataSize 4 +SET ExternalMemory clockDivider 1 + +NODE MEMORY MemoryAlice +SET MemoryAlice byteDataSize 4 +SET MemoryAlice clockDivider 1 + +NODE MEMORY MemoryBob +SET MemoryBob byteDataSize 4 +SET MemoryBob clockDivider 1 + +NODE BUS BusBob +SET BusBob byteDataSize 4 +SET BusBob pipelineSize 1 +SET BusBob arbitration 0 +SET BusBob sliceTime 10000 +SET BusBob burstSize 100 +SET BusBob privacy private +SET BusBob clockDivider 1 + +NODE BUS BusAlice +SET BusAlice byteDataSize 4 +SET BusAlice pipelineSize 1 +SET BusAlice arbitration 0 +SET BusAlice sliceTime 10000 +SET BusAlice burstSize 100 +SET BusAlice privacy private +SET BusAlice clockDivider 1 + +NODE BUS ExternalBus +SET ExternalBus byteDataSize 4 +SET ExternalBus pipelineSize 1 +SET ExternalBus arbitration 0 +SET ExternalBus sliceTime 10000 +SET ExternalBus burstSize 100 +SET ExternalBus privacy public +SET ExternalBus clockDivider 1 + +NODE CPU CPUAlice +SET CPUAlice nbOfCores 1 +SET CPUAlice byteDataSize 4 +SET CPUAlice pipelineSize 5 +SET CPUAlice goIdleTime 10 +SET CPUAlice maxConsecutiveIdleCycles 10 +SET CPUAlice taskSwitchingTime 20 +SET CPUAlice branchingPredictionPenalty 2 +SET CPUAlice cacheMiss 5 +SET CPUAlice schedulingPolicy 0 +SET CPUAlice sliceTime 10000 +SET CPUAlice execiTime 1 +SET CPUAlice execcTime 1 +SET CPUAlice clockDivider 1 + +NODE CPU CPUBob +SET CPUBob nbOfCores 1 +SET CPUBob byteDataSize 4 +SET CPUBob pipelineSize 5 +SET CPUBob goIdleTime 10 +SET CPUBob maxConsecutiveIdleCycles 10 +SET CPUBob taskSwitchingTime 20 +SET CPUBob branchingPredictionPenalty 2 +SET CPUBob cacheMiss 5 +SET CPUBob schedulingPolicy 0 +SET CPUBob sliceTime 10000 +SET CPUBob execiTime 1 +SET CPUBob execcTime 1 +SET CPUBob clockDivider 1 + +NODE LINK link_BridgeBob_to_BusBob +SET link_BridgeBob_to_BusBob node BridgeBob +SET link_BridgeBob_to_BusBob bus BusBob +SET link_BridgeBob_to_BusBob priority 0 +NODE LINK link_BridgeBob_to_ExternalBus +SET link_BridgeBob_to_ExternalBus node BridgeBob +SET link_BridgeBob_to_ExternalBus bus ExternalBus +SET link_BridgeBob_to_ExternalBus priority 0 +NODE LINK link_BridgeAlice_to_ExternalBus +SET link_BridgeAlice_to_ExternalBus node BridgeAlice +SET link_BridgeAlice_to_ExternalBus bus ExternalBus +SET link_BridgeAlice_to_ExternalBus priority 0 +NODE LINK link_BridgeAlice_to_BusAlice +SET link_BridgeAlice_to_BusAlice node BridgeAlice +SET link_BridgeAlice_to_BusAlice bus BusAlice +SET link_BridgeAlice_to_BusAlice priority 0 +NODE LINK link_ExternalMemory_to_ExternalBus +SET link_ExternalMemory_to_ExternalBus node ExternalMemory +SET link_ExternalMemory_to_ExternalBus bus ExternalBus +SET link_ExternalMemory_to_ExternalBus priority 0 +NODE LINK link_CPUAlice_to_BusAlice +SET link_CPUAlice_to_BusAlice node CPUAlice +SET link_CPUAlice_to_BusAlice bus BusAlice +SET link_CPUAlice_to_BusAlice priority 0 +NODE LINK link_MemoryAlice_to_BusAlice +SET link_MemoryAlice_to_BusAlice node MemoryAlice +SET link_MemoryAlice_to_BusAlice bus BusAlice +SET link_MemoryAlice_to_BusAlice priority 0 +NODE LINK link_MemoryBob_to_BusBob +SET link_MemoryBob_to_BusBob node MemoryBob +SET link_MemoryBob_to_BusBob bus BusBob +SET link_MemoryBob_to_BusBob priority 0 +NODE LINK link_CPUBob_to_BusBob +SET link_CPUBob_to_BusBob node CPUBob +SET link_CPUBob_to_BusBob bus BusBob +SET link_CPUBob_to_BusBob priority 0 diff --git a/ttool/src/test/resources/tmltranslator/test_diplo_security_models/mac.tmap b/ttool/src/test/resources/tmltranslator/test_diplo_security_models/mac.tmap new file mode 100644 index 0000000000..605264b48a --- /dev/null +++ b/ttool/src/test/resources/tmltranslator/test_diplo_security_models/mac.tmap @@ -0,0 +1,24 @@ +TMLSPEC + #include "mac.tml" +ENDTMLSPEC + +TMLARCHI + #include "mac.tarchi" +ENDTMLARCHI + +TMLMAPPING + MAP CPUAlice MAC__Alice + SET MAC__Alice priority 0 + MAP CPUBob MAC__Bob + SET MAC__Bob priority 0 + MAP ExternalMemory MAC__comm + SET MAC__comm priority 0 + MAP ExternalBus MAC__comm + SET MAC__comm priority 0 + MAP BusAlice MAC__comm + SET MAC__comm priority 0 + MAP BusBob MAC__comm + SET MAC__comm priority 0 + MAPSEC MemoryAlice mac + MAPSEC MemoryBob mac +ENDTMLMAPPING diff --git a/ttool/src/test/resources/tmltranslator/test_diplo_security_models/mac.tml b/ttool/src/test/resources/tmltranslator/test_diplo_security_models/mac.tml new file mode 100644 index 0000000000..01b38d3e83 --- /dev/null +++ b/ttool/src/test/resources/tmltranslator/test_diplo_security_models/mac.tml @@ -0,0 +1,34 @@ +// TML Application - FORMAT 0.2 +// Application: /Users/ludovicapvrille/TTool/modeling/SysMLSec/AliceAndBobHW.xml +// Generated: Mon May 22 14:07:26 CEST 2023 + +// PRAGMAS + +// Channels +CHANNEL MAC__comm NBRNBW 4 OUT MAC__Alice IN MAC__Bob +VCCHANNEL MAC__comm 0 +CONFCHANNEL MAC__comm +AUTHCHANNEL MAC__comm + +// Events + +// Requests + +TASK MAC__Alice + TASKOP + //Local variables + + //Behavior + EXECC 100 mac MAC 100 100 0 0 - - 1 + WRITE MAC__comm 1+0 mac +ENDTASK + +TASK MAC__Bob + TASKOP + //Local variables + + //Behavior + READ MAC__comm 1+0 mac + EXECC 100 mac MAC 100 100 0 0 - - 2 +ENDTASK + -- GitLab