<?xml version="1.0" encoding="UTF-8" standalone="no" ?> | |
<n1:Project xmlns:n1="http://www.conformiq.com/EMF/SimpleStatechart" xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> | |
<statemachine name="GGSN"> | |
<transitions body="" from="//@statemachine.0/@states.0" to="//@statemachine.0/@states.1"/> | |
<transitions body="CLIin:Configure[]/
cli.configure(msg);" from="//@statemachine.0/@states.1" to="//@statemachine.0/@states.2"/> | |
<transitions body="GnIn:CreatePDPcontext[]/
createPDPcontext(msg);" from="//@statemachine.0/@states.2" to="//@statemachine.0/@states.4"/> | |
<transitions body="GnIn:DeletePDPcontext[]/
deletePDPcontext(msg);
require ((uplinkData > 0) || (downlinkData > 0));
if ((uplinkData > 0) && (downlinkData > 0))
 requirement "Payload/Bidirectional payload";" from="//@statemachine.0/@states.5" to="//@statemachine.0/@states.3"/> | |
<transitions body="[nodeConfiguration.chargingEnabled]/
charging.sendInfo(GnOut);" from="//@statemachine.0/@states.3" to="//@statemachine.0/@states.10"/> | |
<transitions body="" from="//@statemachine.0/@states.4" to="//@statemachine.0/@states.5"/> | |
<transitions body="GnIn:UpdatePDPcontext[]/
{
 updatePDPcontext(msg);
 if ((uplinkData > 0) || (downlinkData > 0))
 requirement "PDP context/Update/After data transfer";
 else
 requirement "PDP context/Update/Before data transfer";
}" from="//@statemachine.0/@states.5" to="//@statemachine.0/@states.5"/> | |
<transitions body="[else]/" from="//@statemachine.0/@states.3" to="//@statemachine.0/@states.10"/> | |
<transitions body="[else]/" from="//@statemachine.0/@states.9" to="//@statemachine.0/@states.6"/> | |
<transitions body="[nodeConfiguration.configurationChanged()]/" from="//@statemachine.0/@states.9" to="//@statemachine.0/@states.7"/> | |
<transitions body="CLIin:Prepare[]/
handlePrepare(msg);
requirement "PrepareRestore/Prepare";" from="//@statemachine.0/@states.1" to="//@statemachine.0/@states.8"/> | |
<transitions body="CLIin:Restore[]/
handleRestore(msg);
requirement "PrepareRestore/Restore";" from="//@statemachine.0/@states.1" to="//@statemachine.0/@states.8"/> | |
<transitions body="[]/nodeConfiguration.checkConfiguration();" from="//@statemachine.0/@states.10" to="//@statemachine.0/@states.9"/> | |
<transitions body="CLIin: OverrideConfiguration[]/
require ((msg.overrideCharging == nodeConfiguration.chargingEnabled)
 && (msg.overrideRadiusAuth == nodeConfiguration.radiusAuthEnabled));
requirement "Configuration/Clean up if configuration changed";" from="//@statemachine.0/@states.7" to="//@statemachine.0/@states.6"/> | |
<states xsi:type="n1:InitialState"/> | |
<states internal="
" name="Init" xsi:type="n1:BasicState"/> | |
<states internal="
" name="Operational" xsi:type="n1:BasicState"/> | |
<states internal="
" name="ContextDeleted" xsi:type="n1:BasicState"/> | |
<states internal="" name="CreateContext" xsi:type="n1:BasicState"> | |
<transitions body="[]/" from="//@statemachine.0/@states.4/@states.0" to="//@statemachine.0/@states.4/@states.3"/> | |
<transitions body="GiRadiusIn:RadiusAccessAccept []/
requirement "Radius/Authentication/Wait for Access Accept";" from="//@statemachine.0/@states.4/@states.1" to="//@statemachine.0/@states.4/@states.4"/> | |
<transitions body="[nodeConfiguration.radiusAuthEnabled]/
sendRadiusAuthRequest();" from="//@statemachine.0/@states.4/@states.3" to="//@statemachine.0/@states.4/@states.1"/> | |
<transitions body="[]/
confirmCreatePDPcontext();" from="//@statemachine.0/@states.4/@states.4" to="//@statemachine.0/@states.4/@states.2"/> | |
<transitions body="[else]/" from="//@statemachine.0/@states.4/@states.3" to="//@statemachine.0/@states.4/@states.4"/> | |
<states xsi:type="n1:InitialState"/> | |
<states internal="" name="Wait For Radius Accept" xsi:type="n1:BasicState"/> | |
<states xsi:type="n1:FinalState"/> | |
<states xsi:type="n1:Junction"/> | |
<states xsi:type="n1:Junction"/> | |
</states> | |
<states internal="GnIn:GPDU[]/
{ forwardGPDUtoGi(msg);
 requirement "Payload/Forward uplink"; }

GiIn:UDPpdu[]/
{ forwardUdpPduToGn(msg);
 requirement "Payload/Forward downlink"; }" name="DataForwarding" xsi:type="n1:BasicState"/> | |
<states xsi:type="n1:FinalState"/> | |
<states internal="" name="Cleanup" xsi:type="n1:BasicState"/> | |
<states xsi:type="n1:FinalState"/> | |
<states xsi:type="n1:Junction"/> | |
<states xsi:type="n1:Junction"/> | |
</statemachine> | |
<diagrams statemachine="//@statemachine.0"> | |
<items state="//@statemachine.0/@states.0" xsi:type="n1:DiagramInitialState"> | |
<location x="400" y="40"/> | |
</items> | |
<items height="70" state="//@statemachine.0/@states.1" width="199" xsi:type="n1:DiagramBasicState"> | |
<location x="300" y="176"/> | |
</items> | |
<items autolayout="true" transition="//@statemachine.0/@transitions.0" xsi:type="n1:DiagramTransition"> | |
<bodylocation align="0" valign="0.5" x="410" y="118"/> | |
<route x="400" y="60"/> | |
<route x="400" y="176"/> | |
</items> | |
<items height="114" note="Interfaces/ports:

CLIin		CLI commands
GnIn/GnOut	i/f to SGSN
GiIn/GiOut		i/f to internet" width="288" xsi:type="n1:DiagramNote"> | |
<location x="263" y="-117"/> | |
</items> | |
<items height="70" state="//@statemachine.0/@states.2" width="199" xsi:type="n1:DiagramBasicState"> | |
<location x="278" y="363"/> | |
</items> | |
<items height="100" state="//@statemachine.0/@states.3" width="200" xsi:type="n1:DiagramBasicState"> | |
<location x="800" y="700"/> | |
</items> | |
<items height="89" state="//@statemachine.0/@states.4" width="202" xsi:type="n1:DiagramBasicState"> | |
<location x="798" y="158"/> | |
</items> | |
<items autolayout="true" transition="//@statemachine.0/@transitions.1" xsi:type="n1:DiagramTransition"> | |
<bodylocation align="0" valign="0.5" x="409.5" y="304.5"/> | |
<route x="399.5" y="246"/> | |
<route x="399.5" y="363"/> | |
</items> | |
<items autolayout="true" transition="//@statemachine.0/@transitions.2" xsi:type="n1:DiagramTransition"> | |
<bodylocation align="0" valign="0.5" x="910" y="113.5"/> | |
<route x="477" y="400"/> | |
<route x="600" xsi:type="n1:DiagramLayoutMarker" y="400"/> | |
<route x="600" xsi:type="n1:DiagramLayoutMarker" y="42"/> | |
<route x="900" y="42"/> | |
<route x="900" xsi:type="n1:DiagramLayoutMarker" y="69"/> | |
<route x="900" y="158"/> | |
</items> | |
<items autolayout="true" transition="//@statemachine.0/@transitions.3" xsi:type="n1:DiagramTransition"> | |
<bodylocation align="0" valign="0.5" x="915.5" y="631.5"/> | |
<route x="905.5" y="563"/> | |
<route x="905.5" y="700"/> | |
</items> | |
<items autolayout="true" transition="//@statemachine.0/@transitions.4" xsi:type="n1:DiagramTransition"> | |
<bodylocation align="0.5" constraintBottom="843" constraintLeft="1020" valign="0" x="1194.5" y="760"/> | |
<route x="1000" y="750"/> | |
<route x="1389" y="750"/> | |
<route x="1389" xsi:type="n1:DiagramLayoutMarker" y="863"/> | |
<route x="900" y="863"/> | |
<route x="900" y="890"/> | |
</items> | |
<items height="108" note="GGSN Rule No. 1 – Payload 
Payload shall always be transmitted in a test case whenever a successful PDP Context Activation has been performed.
" width="374" xsi:type="n1:DiagramNote"> | |
<location x="1297" y="552"/> | |
</items> | |
<items autolayout="true" transition="//@statemachine.0/@transitions.5" xsi:type="n1:DiagramTransition"> | |
<bodylocation align="0" valign="0.5" x="909" y="288"/> | |
<route x="899" y="247"/> | |
<route x="899" y="329"/> | |
</items> | |
<items height="234" state="//@statemachine.0/@states.5" width="307" xsi:type="n1:DiagramBasicState"> | |
<location x="752" y="329"/> | |
</items> | |
<items autolayout="true" transition="//@statemachine.0/@transitions.6" xsi:type="n1:DiagramTransition"> | |
<bodylocation align="0.5" constraintLeft="1207" constraintTop="268" valign="1" x="1364.5" y="453"/> | |
<route x="1059" y="463"/> | |
<route x="1187" xsi:type="n1:DiagramLayoutMarker" y="463"/> | |
<route x="1544" y="463"/> | |
<route x="1544" xsi:type="n1:DiagramLayoutMarker" y="248"/> | |
<route x="1032" y="248"/> | |
<route x="1032" y="329"/> | |
</items> | |
<items state="//@statemachine.0/@states.6" xsi:type="n1:DiagramFinalState"> | |
<location x="1209" y="1234"/> | |
</items> | |
<items autolayout="true" transition="//@statemachine.0/@transitions.7" xsi:type="n1:DiagramTransition"> | |
<bodylocation align="0.5" valign="1" x="599.5" y="744"/> | |
<route x="800" y="754"/> | |
<route x="399" xsi:type="n1:DiagramLayoutMarker" y="754"/> | |
<route x="402" y="754"/> | |
<route x="402" xsi:type="n1:DiagramLayoutMarker" y="862"/> | |
<route x="900" y="862"/> | |
<route x="900" y="890"/> | |
</items> | |
<items height="100" state="//@statemachine.0/@states.7" width="200" xsi:type="n1:DiagramBasicState"> | |
<location x="1561" y="1017"/> | |
</items> | |
<items autolayout="true" transition="//@statemachine.0/@transitions.8" xsi:type="n1:DiagramTransition"> | |
<bodylocation align="0" valign="0.5" x="910" y="1122"/> | |
<route x="900" y="1010"/> | |
<route x="900" xsi:type="n1:DiagramLayoutMarker" y="1234"/> | |
<route x="1189" y="1234"/> | |
</items> | |
<items autolayout="true" transition="//@statemachine.0/@transitions.9" xsi:type="n1:DiagramTransition"> | |
<bodylocation align="0.5" constraintBottom="1006" constraintLeft="930" valign="0" x="1214" y="1010"/> | |
<route x="910" y="1000"/> | |
<route x="1661" y="1000"/> | |
<route x="1661" y="1017"/> | |
</items> | |
<items height="53" note="Restore default configuration only if needed" width="236" xsi:type="n1:DiagramNote"> | |
<location x="1485" y="1152"/> | |
</items> | |
<items state="//@statemachine.0/@states.8" xsi:type="n1:DiagramFinalState"> | |
<location x="-100" y="200"/> | |
</items> | |
<items autolayout="true" transition="//@statemachine.0/@transitions.10" xsi:type="n1:DiagramTransition"> | |
<bodylocation align="0" valign="0.5" x="-90" y="140"/> | |
<route x="300" y="200"/> | |
<route x="246" xsi:type="n1:DiagramLayoutMarker" y="200"/> | |
<route x="246" xsi:type="n1:DiagramLayoutMarker" y="100"/> | |
<route x="-100" xsi:type="n1:DiagramLayoutMarker" y="100"/> | |
<route x="-100" y="180"/> | |
</items> | |
<items autolayout="true" transition="//@statemachine.0/@transitions.11" xsi:type="n1:DiagramTransition"> | |
<bodylocation align="0.5" valign="1" x="73.5" y="290"/> | |
<route x="300" y="223"/> | |
<route x="246" xsi:type="n1:DiagramLayoutMarker" y="223"/> | |
<route x="247" y="223"/> | |
<route x="247" xsi:type="n1:DiagramLayoutMarker" y="300"/> | |
<route x="-100" xsi:type="n1:DiagramLayoutMarker" y="300"/> | |
<route x="-100" y="220"/> | |
</items> | |
<items state="//@statemachine.0/@states.9" xsi:type="n1:DiagramJunction"> | |
<location x="900" y="1000"/> | |
</items> | |
<items autolayout="true" transition="//@statemachine.0/@transitions.12" xsi:type="n1:DiagramTransition"> | |
<bodylocation align="0" valign="0.5" x="910" y="950"/> | |
<route x="900" y="910"/> | |
<route x="900" y="990"/> | |
</items> | |
<items state="//@statemachine.0/@states.10" xsi:type="n1:DiagramJunction"> | |
<location x="900" y="900"/> | |
</items> | |
<items autolayout="true" transition="//@statemachine.0/@transitions.13" xsi:type="n1:DiagramTransition"> | |
<bodylocation align="0.5" constraintBottom="1194" constraintRight="1541" valign="0" x="1385" y="1077"/> | |
<route x="1561" y="1067"/> | |
<route x="1209" y="1067"/> | |
<route x="1209" y="1214"/> | |
</items> | |
</diagrams> | |
<diagrams substate="//@statemachine.0/@states.4"> | |
<items state="//@statemachine.0/@states.4/@states.0" xsi:type="n1:DiagramInitialState"> | |
<location x="198" y="68"/> | |
</items> | |
<items height="80" state="//@statemachine.0/@states.4/@states.1" width="223" xsi:type="n1:DiagramBasicState"> | |
<location x="387" y="284"/> | |
</items> | |
<items autolayout="true" transition="//@statemachine.0/@states.4/@transitions.0" xsi:type="n1:DiagramTransition"> | |
<bodylocation align="0.5" constraintBottom="138" constraintLeft="238" valign="0" x="359.5" y="78"/> | |
<route x="218" y="68"/> | |
<route x="501" y="68"/> | |
<route x="501" y="158"/> | |
</items> | |
<items state="//@statemachine.0/@states.4/@states.2" xsi:type="n1:DiagramFinalState"> | |
<location x="500" y="600"/> | |
</items> | |
<items autolayout="true" transition="//@statemachine.0/@states.4/@transitions.1" xsi:type="n1:DiagramTransition"> | |
<bodylocation align="0" valign="0.5" x="510" y="417"/> | |
<route x="500" y="364"/> | |
<route x="500" y="470"/> | |
</items> | |
<items state="//@statemachine.0/@states.4/@states.3" xsi:type="n1:DiagramJunction"> | |
<location x="501" y="168"/> | |
</items> | |
<items autolayout="true" transition="//@statemachine.0/@states.4/@transitions.2" xsi:type="n1:DiagramTransition"> | |
<bodylocation align="0" valign="0.5" x="511" y="231"/> | |
<route x="501" y="178"/> | |
<route x="501" y="284"/> | |
</items> | |
<items state="//@statemachine.0/@states.4/@states.4" xsi:type="n1:DiagramJunction"> | |
<location x="500" y="480"/> | |
</items> | |
<items autolayout="true" transition="//@statemachine.0/@states.4/@transitions.3" xsi:type="n1:DiagramTransition"> | |
<bodylocation align="0" valign="0.5" x="510" y="535"/> | |
<route x="500" y="490"/> | |
<route x="500" y="580"/> | |
</items> | |
<items autolayout="true" transition="//@statemachine.0/@states.4/@transitions.4" xsi:type="n1:DiagramTransition"> | |
<bodylocation align="0.5" constraintBottom="458" constraintRight="281" valign="0" x="300.5" y="177"/> | |
<route x="501" y="167"/> | |
<route x="301" xsi:type="n1:DiagramLayoutMarker" y="167"/> | |
<route x="300" y="167"/> | |
<route x="300" xsi:type="n1:DiagramLayoutMarker" y="478"/> | |
<route x="500" y="478"/> | |
</items> | |
</diagrams> | |
</n1:Project> |