File: Complex_proc.signalling

package info (click to toggle)
msc-generator 8.1-2
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 180,648 kB
  • sloc: cpp: 133,265; yacc: 23,546; ansic: 7,210; sh: 4,512; lex: 2,028; makefile: 1,085
file content (203 lines) | stat: -rw-r--r-- 5,892 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
msc=omegapple;


defproc procedure {
msc+=hcn;


|||;
->gw.f=>bs1.f==>ue [pkt]: Downlink packet;
note at gw.f: TEID=1 added;
note at bs1.f: Tx over radio [note.pos=near];
<-gw.f<=bs1.f<==ue [pkt]: Uplink packet;
note at bs1.f: TEID=11 added [note.pos=near];
note at bs1.f: Rx over radio;

>bs1.cnc: Handover trigger
           \-target BS;
bs1.cnc=>cnc: HANDOVER
              \-target BS;
cnc--cnc: Decides on new chain
          graph and site mapping;

cnc--cnc: Decides on new UL/DL
          TEIDs for target BS
          \-UL-TEID(GW)=12, DL-TEID(tBS)=2;

cnc--cnc: Decides on new ids for PP contexts
          \-HB, PPx in tBS will be by id3/id5, id4;


.._gw: Set up UL reordering {
    cnc=>gw.cnc->gw.h: INSERT to HB(id1):
                       \-old TEID=11, new TEID=12;
    activate gw.h;
    cnc=>gw.cnc->gw.f: INSERT:
                       \-TEID=11 or 12 => add HB(id1);
    gw.cnc=>cnc: INSERT ACK;
};
comment: Uplink packets arriving on the new path
         are held off until all packets from the
         old path have passed.;

cnc=>bs2.cnc: HANDOVER REQ
              \-from (sBS with UL-TEIDin=-, DL-TEIDin=1) fetch (PPx(id2), ...)
              use UL-TEIDout=12, DL-TEIDin=2, PPx(id4), HB(id3/id5), ...;
..:Set up reordering {
    {
        bs2.cnc->bs2.h: INSERT to HB(id3):
                        \-old TEID=11, new TEID=-;
        activate bs2.h;
        bs2.cnc->bs2.f: INSERT:
                        \-TEID=11 or - => add HB(id3);
    };
    vertical brace: uplink [number=no];
    {
        bs2.cnc->bs2.h: INSERT to HB(id5):
                        \-old TEID=1, new TEID=2;
        bs2.cnc->bs2.f: INSERT:
                        \-TEID=1 or 2 => add HB(id5);
    };
    vertical brace: downlink[number=no];
};
bs2.cnc=>bs1.cnc: Forward & Take context
                  \-Forward: UL-TEIDin:-, DL-TEIDin:1 to tBS
                  Take context: PPx(id2);
bs1.cnc->bs1.f:INSERT:
               TEID=- or 1: fw to tBS;

->gw.f=>bs1.f[pkt]: Downlink packet;
note at gw.f: TEID=1 added;
bs1.f=>bs2.f-bs2.h [pkt];
note at bs2.h: Buffered;
bs2.h<=bs2.f<=bs1.f<==ue [pkt]: Uplink packet;
note at bs1.f: TEID=11 added;
{
    bs1.cnc>ue: Handover command;
    mark $$~ue_switch_top [centerline=yes];
    bs1.cnc->bs1.f [pkt, color=green-30]:EOT packet;
    bs1.f=>bs2.f-bs2.h [pkt, color=green-30];
    note at bs2.h: note last pkt
                   on old UL path [];
};
vertical brace [side=end, number=no]:
  \-Can happen in parallel
  to context transfer;

bs1.cnc<->bs1.p: Extract context;
bs1.cnc=>bs2.cnc: Sending Context;
parallel bs1.cnc--bs1.p: Deleting flow entries;
deactivate bs1.f;

..:Set up target BS {
    bs2.cnc->bs2.p: INSERT:
                    \-PPx(using id4);
    bs2.cnc->bs2.f: INSERT:
                    \-TEID=1,2,11,12 => PPx(id4);
    activate bs2.f;
};
bs2.cnc->bs2.h: Release buffered
                packets;
parallel bs2.cnc=>cnc: HANDOVER ACK;
mark $$~sw_path_top [centerline=yes];
bs2.h=>bs2.f==>ue [pkt]: Downlink packet;
note at bs2.h: reorders old and new paths;
bs2.h=>bs2.f [pkt];
bs2.f=>gw.h [pkt]: Uplink packet;
note at gw.h: reorders old and new paths;
gw.h=>gw.f [pkt];
gw.f-> [pkt];

cnc=>gw.cnc->gw.f: UPDATE:
                  \-DL TEIDout encaps@IP (to 2 & iBS);
mark $$~sw_path_bottom [centerline=yes];
vertical pointer $$~sw_path_top>$$~sw_path_bottom at cnc+;
gw.cnc=>gw.f=>bs1.f [pkt, color=green-30]:EOT packet;
bs1.f=>bs2.f-bs2.h [pkt, color=green-30];
note at bs2.h: note last pkt
               on old DL path [note.pos=near];

->gw.f=>bs2.f==>ue [pkt]: Downlink packet;

gw.cnc=>cnc:UPDATE ACK;

ue>bs2.cnc:RRC connection establishment;
mark $$~ue_switch_bottom [centerline=yes];
mark $$~ue_switch_bottom2 [offset = 0];
vertical pointer $$~ue_switch_top>$$~ue_switch_bottom  at ue-;

parallel gw.h--gw.cnc: \-When buffer empties,
                         it is removed from path;
deactivate gw.h;

ue==>bs2.f=>bs2.h [pkt]: Uplink packet;
note at bs1.h: reorders old and new paths;
mark $$~ue_switch_bottom3 [centerline=yes];
vertical pointer $$~ue_switch_bottom2>$$~ue_switch_bottom3 at ue-;
bs2.h=>bs2.f [pkt];
bs2.f=>gw.f-> [pkt];

parallel bs2.h--bs2.cnc: \-When buffer empties,
                         it is removed from path;
deactivate bs2.h;

ue==>bs2.f=>gw.h-> [pkt]: Uplink packet;

};


hspace right comment 120;
defstyle comment [text.wrap=yes];
defstyle arrow [arrow.midtype=dot];
defstyle entitygroup, box [fill.color=lgray];
defstyle entity [vfill.color=lgray+20];

defstyle CP [fill.color=navy-40, line.color=navy, vline.color=navy,
            vline.width=2];
defstyle pkt [line.color=blue, arrow.midtype=dot,
    arrow.color=blue, text.color=blue];
defstyle ==> [line.type=triple_thick, line.width=1.5];
defstyle => [line.width=2];
defstyle -> [line.width=2];

ue: UE;

_bs1: source Base Station [fill.color=lgray+40] {
    _bs1.dp: Data Plane {
        bs1.p: PPx tables;
        activate bs1.f: FlowTables;
        bs1.h: HOBUff;
    };
    bs1.cnc: Local CNC [CP];
};

_bs2: target Base Station [fill.color=lgray+40]  {
    _bs2.dp: Data Plane {
        bs2.p: PPx tables;
        bs2.f: FlowTables;
        bs2.h: HOBUff;
    };
    bs2.cnc: Local CNC [CP];
};

_gw: GW site  [fill.color=lgray+40] {
    _gw.dp: Data Plane {
        gw.p: PPx tables;
        activate gw.f: FlowTables;
        gw.h: HOBUff;
    };
    gw.cnc: Local CNC [CP];
};

cnc: CNC [CP];
comment: Packets processed by a DP node are
         shown to pass only the flow table
         and not the PPx tables. This is just
         to simplify rendering. Packets in reality
         are also processed by PPs.\n
         Gray bars indicate DP state kept for user;

replay procedure;
replay procedure;