Newer
Older
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
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
/**
* @author ETSI / STF422_EETS
* @version $URL:$
* $Id:$
* @desc Inter-ITS-SCU communications (ISO 24102-4) functions
*/
module LibItsMgt_Functions {
// LibCommon
import from LibCommon_BasicTypesAndValues {
const
c_uInt8Max;
};
import from LibCommon_Sync {
function
f_selfOrClientSyncAndVerdict, f_selfOrClientSyncAndVerdictPreamble
};
import from LibCommon_VerdictControl all;
// LibIts
import from CALMmanagement language "ASN.1:1997" {
type
ITS_scuId
};
import from CALMiitsscu language "ASN.1:1997" {
type PduCounter
};
import from CALMmsap language "ASN.1:1997" {
type
CommandRef, MN_Request_request, FWTupdate
};
import from CALMfsap language "ASN.1:1997" {
type
GCregServer, GCregClient, GCderegClient, GCctxTxCmd, CTXrxNot
};
import from LibItsMgt_TypesAndValues {
type MacAddressType
};
import from LibItsMgt_Templates all;
import from LibItsMgt_Pixits all;
import from LibIts_Interface {
type
ItsMgt,
MgtMNSapCommandReqInd
};
// FIXME To be removed
group mfSAP {
// /**
// * @desc Application annouce to its communication needs to the CI selection manager
// * @param p_itsAppReg the Request to be processed (ITS_S_Appl_Reg)
// * @return 'true' on success, 'false' otherwise
// * @verdict Unchanged
// *
// * See ISO/CD 24102-3 Clause C.2.2
// */
// function f_mgtItsApplReg(in template (value) ITS_S_Appl_Reg p_itsAppReg) runs on ItsMgt
// return boolean {
// var CommandRef v_commandRef := f_getNextCommandRef();
// var MgtMFSapRequestConfirmInd v_result;
//
// // Send ITS-S-Appl-Reg MF-REQUEST.request
// mgtMFSapPort.send(m_mgtMFSapRequestReq(m_itsApplReg(v_commandRef, p_itsAppReg)));
// tc_ac.start;
// // Wait for ITS-S-Appl-Reg MF-REQUEST.confirm
// alt {
// [] mgtMFSapPort.receive(mw_mgtMFSapRequestConfirmInd(mw_itsApplReg(v_commandRef))) -> value v_result {
// tc_ac.stop;
// // Return ITS_scuId value
// vc_scuId := v_result.msgIn.reqConfirm.lDMregister;
// return true;
// }
// [] tc_ac.timeout {
// log("*** f_mgtItsApplReg: FAIL: Expected MF-REQUEST.confirm service primitive not received ***");
// f_selfOrClientSyncAndVerdict("error", e_error);
// }
// } // End of 'alt' statement
//
// return false;
// } // End of function f_mgtItsApplReg
// /**
// * @desc Allows an ITS-S application to announce its communication needs to the CI selection manager
// * @param p_gCregClient Groupcast registration message
// * @return 'true' on success, 'false' otherwise
// * @verdict Unchanged on success, set to fail on error (e_timeout)
// *
// * See ISO/CD 24102-3 Clause C.2.2
// */
// function f_mgtItsApplRegToGroupcasting(in template (value)GCregClient p_gCregClient) runs on ItsMgt
// return boolean {
// var CommandRef v_commandRef := f_getNextCommandRef();
//
// // Send GCregClient MF-REQUEST.request
// mgtMFSapPort.send(m_mgtMFSapRequestReq(m_gCregClientReqReq(v_commandRef, p_gCregClient)));
// tc_ac.start;
// // Wait for GCregClient MF-REQUEST.confirm
// alt {
// [] mgtMFSapPort.receive(mw_mgtMFSapRequestConfirmInd(mdw_gCregClientReqConf(v_commandRef))) {
// tc_ac.stop;
// return true;
// }
// [] tc_ac.timeout {
// log("*** f_mgtItsApplRegToGroupcasting: FAIL: Expected MF-REQUEST.confirm service primitive not received ***");
// f_selfOrClientSyncAndVerdict("error", e_error);
// }
// } // End of 'alt' statement
//
// return false;
// } // End of function f_mgtItsApplRegToGroupcasting
// /**
// * @desc Allows an ITS-S application to deregister its registration information at the groupcasting manager using the services of the groupcasting registration handler
// * @param p_gCderegClient Groupcast deregistration message
// * @return 'true' on success, 'false' otherwise
// * @verdict Unchanged on success, set to fail on error (e_timeout)
// *
// * See ISO/CD 24102-3 Clause C.2.8
// */
// function f_mgtItsApplDeregToGroupcasting(in template (value)GCderegClient p_gCderegClient) runs on ItsMgt
// return boolean {
// var CommandRef v_commandRef := f_getNextCommandRef();
//
// // Send GCderegClient MF-REQUEST.request
// mgtMFSapPort.send(m_mgtMFSapRequestReq(m_gCderegClientReqReq(v_commandRef, p_gCderegClient)));
// tc_ac.start;
// // Wait for GCderegClient MF-REQUEST.confirm
// alt {
// [] mgtMFSapPort.receive(mw_mgtMFSapRequestConfirmInd(mdw_gCderegClientReqConf(v_commandRef))) {
// tc_ac.stop;
// return true;
// }
// [] tc_ac.timeout {
// log("*** f_mgtItsApplDeregToGroupcasting: FAIL: Expected MF-REQUEST.confirm service primitive not received ***");
// f_selfOrClientSyncAndVerdict("error", e_error);
// }
// } // End of 'alt' statement
//
// return false;
// } // End of function f_mgtItsApplDeregToGroupcasting
// /**
// * @desc
// * @param p_commandRef
// * @param p_gCregServer
// * @verdict Unchanged
// */
// function f_mgtGenerateGCregServer(in CommandRef p_commandRef, in template (value) GCregServer p_gCregServer) runs on ItsMgt {
// // Send GCregServer MF-COMMAND.request
// mgtMFSapPort.send(m_mgtMFSapRequestReq(m_gCregServerRequestReq(p_commandRef, p_gCregServer)));
// } // End of function f_mgtGenerateGCregServer
} // End of group mfSAP
// FIXME To be removed
group mnSap {
/**
* @desc Generate COMMAND.request/GCctxTxCmd message on MN-SAP
* @param p_commandRef Unique cyclic reference number of command. Same value as in related MN-REQUEST.request
* @param p_gCctxTxCmd "Service Context Message" (CTX)
* @verdict Unchanged
*/
// FIXME To be removed - Moved on NF-SAP
// function f_mgtGenerateGCctxTxCmd(in CommandRef p_commandRef, in template (value) GCctxTxCmd p_gCctxTxCmd) runs on ItsMgt {
//
// // Send GCctxTxCmd MF-COMMAND.request
// mgtMNSapPort.send(m_mgtMNSapCommandReq(m_gCctxTxCmdComReq(p_commandRef, p_gCctxTxCmd)));
// } // End of function f_mgtGenerateGCctxTxCmd
/**
* @desc Generate REQUEST.request/CTXrxNot message on MN-SAP
* @param p_commandRef Unique cyclic reference number of command. Same value as in related MN-REQUEST.request
* @param p_cTXrxNot TODO
* @verdict Unchanged
*/
// FIXME To be removed - Moved on NF-SAP
// function f_mgtGenerateCTXrxNot(in CommandRef p_commandRef, in template (value) CTXrxNot p_cTXrxNot) runs on ItsMgt {
// // Send CTXrxNot MF-REQUEST.request
// mgtMNSapPort.send(m_mgtMNSapRequestReq(m_cTXrxNotRequestReq(p_commandRef, p_cTXrxNot)));
// } // End of function f_mgtGenerateCTXrxNot
} // end of group mnSap
group mgtAltsteps {
group mfSap {
/**
* @desc The base default.
* See ISO/CD 24102-3 Clause 8.2
*/
altstep a_mgtMFSapPortDefault() runs on ItsMgt {
[] mgtMFSapPort.receive(mw_mgtMFSapCommandReq(mw_mfCommandRequest_any)) { // Receive any MF-COMMAND.request message
log("*** a_mgtMFSapPortDefault: INFO: MF-SAP service primitive received in default ***");
repeat;
}
// [] mgtMFSapPort.receive(mw_mgtMFSapCommandInd(mw_mfCommandRequest_any)) { // Receive any MF-COMMAND.request message
// log("*** a_mgtMFSapPortDefault: INFO: MF-SAP service primitive received in default ***");
// repeat;
// }
// [] mgtMFSapPort.receive(mw_mgtMFSapRequestConfirmInd(mw_mfRequestConfirm_any)) { // Receive any MF-REQUEST.confirm message
// log("*** a_mgtMFSapPortDefault: INFO: MF-SAP service primitive received in default ***");
// repeat;
// }
[] mgtMFSapPort.receive { // Receive unknown message
log("*** a_mgtMFSapPortDefault: ERROR: event received on MgtMFSapPort port in default ***");
f_selfOrClientSyncAndVerdict("error", e_error);
}
} // End of altstep a_mgtMFSapPortDefault
// /**
// * @desc Wait for REQUEST.confirm/GCregServer MF-REQUEST.confirm
// * @param p_commandRef Unique cyclic reference number of command. Same value as in related MN-REQUEST.request
// * @verdict Unchanged
// */
// altstep a_mgtAwaitGCregServerReqConf(in CommandRef p_commandRef) runs on ItsMgt {
//
// [] mgtMFSapPort.receive(mw_mgtMFSapRequestConfirmInd(mdw_gCregServerRequestConf(p_commandRef))) {
// log("*** a_mgtAwaitGCregServerReqConf: INFO: MF-SAP GCregServer service primitive received ***");
// repeat;
// }
// } // End of altstep a_mgtAwaitGCregServerReqConf
} // End of group mfSap
group mnSap {
/**
* @desc The base default.
* See ISO/CD 24102-3 Clause 8.2
*/
altstep a_mgtMNSapPortDefault() runs on ItsMgt {
[] mgtMNSapPort.receive(mw_mgtMNSapCommandInd(mw_mnCommandConfirm_any)) { // Receive any MF-COMMAND.confirm message
log("*** a_mgtMNSapPortDefault: INFO: MN-SAP service primitive MF-COMMAND.confirm received in default ***");
repeat;
}
[] mgtMNSapPort.receive(mw_mgtMNSapRequestConfirmInd(mw_mnRequestConfirm_any)) { // Receive any MF-REQUEST.confirm message
log("*** a_mgtMNSapPortDefault: INFO: MN-SAP service primitive MF-REQUEST.confirm received in default ***");
repeat;
}
[] mgtMNSapPort.receive(mw_mgtMNSapRequestReqInd(mw_mnRequestRequest_any)) { // Receive any MF-REQUEST.requesy message
log("*** a_mgtMNSapPortDefault: INFO: MN-SAP service primitive MF-REQUEST.request received in default ***");
repeat;
}
[] mgtMNSapPort.receive { // Receive unknown message
log("*** a_mgtMNSapPortDefault: ERROR: event received on MgtMNSapPort port in default ***");
f_selfOrClientSyncAndVerdict("error", e_error);
}
} // End of altstep a_mgtMNSapPortDefault
/**
* @desc Wait for MN_COMMAND/FWTupdate message
* @verdict Unchanged
* @see ISO/WD 24102-4 - Clause 7.2.2
*/
altstep a_mgtSapAwaitFWTupdate() runs on ItsMgt {
var MgtMNSapCommandReqInd v_fWTupdate;
[] mgtMNSapPort.receive(mw_mgtMNSapCommandReqInd(mw_fWTUpdateCommandReq)) -> value v_fWTupdate {
// TODO Check if vc_noFNTPfwtEntry is used
//vc_noFNTPfwtEntry := v_fWTupdate.msgIn.command_param.mnCmd.fWTupdate.update.fntp.delete.fntp.reference;
log("*** a_mgtSapAwaitFWTupdate: INFO: MN-SAP FWTupdate service primitive received: vc_noFNTPfwtEntry=" & int2str(vc_noFNTPfwtEntry) & " ***");
}
} // End of altstep a_mgtSapAwaitFWTupdate
/**
* @desc Wait for a notification of creation of an entry in a forwarding table.
* @see ISO/WD 24102-4 Clause E.2.2 FWTsetNot
* @verdict Unchanged
*/
altstep a_mgtAwaitFWTsetNot() runs on ItsMgt {
[] mgtMNSapPort.receive(mw_mgtMNSapRequestReqInd(mdw_fWTSetNotRequestReq)) {
log("*** a_mgtAwaitFWTupdateNot: INFO: MN-SAP FWTupdateNot service primitive received ***");
}
} // End of altstep a_mgtAwaitFWTupdateNot
// /**
// * @desc Wait for a notification of an update of an entry in a forwarding table.
// * @see ISO/WD 24102-4 Clause E.2.3 FWTupdateNot
// * @verdict Unchanged
// */
// altstep a_mgtAwaitFWTupdateNot() runs on ItsMgt {
//
// [] mgtMNSapPort.receive(mw_mgtMNSapRequestReqInd(mdw_fWTupdateNotRequestReq)) {
// log("*** a_mgtAwaitFWTupdateNot: INFO: MN-SAP FWTupdateNot service primitive received ***");
// }
// } // End of altstep a_mgtAwaitFWTupdateNot
//
/**
* @desc Wait for a notification of deletion of an entry in a forwarding table.
* @see ISO/WD 24102-4 Clause E.2.4 FWTdeleteNot
* @verdict Unchanged
*/
// FIXME To be removed - Moved on NF-SAP
// altstep a_mgtAwaitFWTdeleteNot() runs on ItsMgt {
//
// [] mgtMNSapPort.receive(mw_mgtMNSapRequestReqInd(mdw_fWTdeleteNotRequestReq)) {
// log("*** a_mgtAwaitFWTdeleteNot: INFO: MN-SAP FWDdelateNot service primitive received ***");
// }
// } // End of altstep a_mgtAwaitFWTdeleteNot
// /**
// * @desc Wait for REQUEST.confirm/CTXrxNot MF-REQUEST.confirm
// * @param p_commandRef Unique cyclic reference number of command. Same value as in related MN-REQUEST.request
// * @verdict Unchanged
// */
// altstep a_mgtAwaitCTXrxNotReqConf(in CommandRef p_commandRef) runs on ItsMgt {
//
// [] mgtMNSapPort.receive(mw_mgtMNSapRequestConfirmInd(mdw_cTXrxNotRequestConf(p_commandRef))) {
// tc_ac.stop;
// log("*** a_mgtAwaitCTXrxNotReqConf: INFO: MN-SAP service primitive received ***");
// }
// } // End of altstep a_mgtAwaitCTXrxNotReqConf
//
} // End of group mnSap
} // End of group mgtAltsteps
group iiscAltsteps {
// /**
// * @desc Trap for not processed IICP message
// * @verdict Unchanged
// */
// altstep a_iiscAwaitFWTupdateNot(
// in template (value) ITS_scuId p_sourceITS_scuId,
// in template (value) ITS_scuId p_destinationITS_scuId,
// in template (value) PduCounter p_pduCounter
// ) runs on ItsMgt {
// [] iiscPort.receive(//mw_iiscResp(mdw_fWTupdateNotRequestReq)) {
// mw_iiscResp(
// mw_iiscMnRequestReq(
// p_sourceITS_scuId,
// p_destinationITS_scuId,
// p_pduCounter,
// mdw_fWTupdateNotRequestReq))) {
// log("*** a_iiscAwaitFWTupdateNot: INFO: IISC FWTupdateNot service primitive received ***");
// repeat;
// }
// } // End of function a_iiscAwaitFWTupdateNot
/**
* @desc Inter-ITS-SCU communications MN-rreq (see ISO/CD 24102-5) with payload MN-Request "SAMrxNot" (see ISO/CD 24102-3 & ISO/CD 24102-5)
* @param p_sourceITS-scuId ITS-SCU-ID of the source ITS-SCU which produces the request
* @param p_destinationITS-scuId ITS-SCU-ID of the destination ITS-SCU which shall evaluate the request
* @param p_pduCounter Even number generated fro a cyclic counter at the ITS-SCU
* @param p_mn_rreq The MN-REQUEST.request/SAMrxNot to be forwarded
* @verdict Unchanged
*/
// altstep a_iiscAwaitSAMrxNotRequestReq(
// in template (value) ITS_scuId p_sourceITS_scuId,
// in template (value) ITS_scuId p_destinationITS_scuId,
// in template (value) PduCounter p_pduCounter,
// in template (value) MN_Request_request p_mn_rreq // FIXME Replace MN_Request_request by SAMrxNot template
// ) runs on ItsMgt {
// [] iiscPort.receive(
// mw_iiscResp(
// mw_iiscMnRequestReq(
// p_sourceITS_scuId,
// p_destinationITS_scuId,
// p_pduCounter,
// p_mn_rreq))) { // Receive MN-REQUEST.request/SAMrxNot message
// log("*** a_iiscAwaitSAMrxNotRequestReq: INFO: Remote command service primitive received in default ***");
// repeat;
// }
// } // End of altstep a_iiscAwaitSAMrxNotRequestReq
/**
* @desc Inter-ITS-SCU communications MN-rreq (see ISO/WD 24102-4) with payload MN-Request "CTXrxNot" (see ISO/CD 24102-3 & ISO/CD 24102-5)
* @param p_sourceITS-scuId ITS-SCU-ID of the source ITS-SCU which produces the request
* @param p_destinationITS-scuId ITS-SCU-ID of the destination ITS-SCU which shall evaluate the request
* @param p_pduCounter Even number generated fro a cyclic counter at the ITS-SCU
* @param p_mn_rcmd The MN-REQUEST.request/SAMrxNot to be forwarded
* @verdict Unchanged
*/
// altstep a_iiscAwaitCTXrxNotRequestReq(
// in template (value) ITS_scuId p_sourceITS_scuId,
// in template (value) ITS_scuId p_destinationITS_scuId,
// in template (value) PduCounter p_pduCounter,
// in template (value) MN_Request_request p_mn_rreq // FIXME Replace MN_Request_request by CTXrxNot template
// ) runs on ItsMgt {
// [] iiscPort.receive(mw_iiscResp(mw_iiscMnRequestReq(
// p_sourceITS_scuId,
// p_destinationITS_scuId,
// p_pduCounter,
// p_mn_rreq))) { // Receive MN-REQUEST.request/CTXrxNot message
// log("*** a_iiscAwaitCTXrxNotRequestReq: INFO: Remote command service primitive received in default ***");
// repeat;
// }
// } // End of altstep a_iiscAwaitCTXrxNotRequestReq
/**
* @desc Trap for not processed IICP message.
* @verdict Set to fail on unknown message
*/
altstep a_iiscDefault() runs on ItsMgt {
[] iiscPort.receive(mw_iiscReq(mw_iiscRequest_any)) { // Receive any IIC-Request message
log("*** a_iiscDefault: INFO: Remote IIC-Request command service primitive received in default ***");
repeat;
}
[] iiscPort.receive(mw_iiscResp(mw_iiscResponse_any)) { // Receive any IIC-Response message
log("*** a_iiscDefault: INFO: Remote IIC-Response command service primitive received in default ***");
repeat;
}
[] iiscPort.receive { // Receive unknown message
log("*** a_iiscDefault: ERROR: event received on IISC port in default ***");
f_selfOrClientSyncAndVerdict("error", e_error);
}
} // End of altstep a_iiscDefault
} // End of group iiscAltsteps
group preambule {
// /**
// * @desc TODO
// *
// * See ISO/CD 29281-2 Clause 7.8.1
// */
// function f_fntpForwardingTableRegisterEntry() runs on ItsMgt {
// var PduCounter v_pduCounter;
// var CommandRef v_commandRef;
//
// // Get a pdu counter value
// v_pduCounter := f_getNextPduCounter();
// v_commandRef := f_getNextCommandRef();
//
// // Send FWSet MN-COMMAND
// iiscPort.send(m_iiscReq(
// m_remoteMnCommandRequest(
// PX_SRC_ITS_SCU_ID,
// PX_DST_ITS_SCU_ID,
// v_pduCounter,
// m_mnCommandRequest(
// v_commandRef,
// m_mnFWTSet(
// PX_HOST_CIID,
// PX_HOST_SCU_ID,
// PX_REMOTE_PORT,
// PX_HOST_SCU_ID,
// PX_USER_PRIORITY)))));
// tc_ac.start;
// alt {
// [] iiscPort.receive(mw_iiscResp(
// mw_mnCommandConfirm(
// PX_DST_ITS_SCU_ID,
// PX_SRC_ITS_SCU_ID,
// v_pduCounter + 1, // ISO/WD 24102-4 - Clause 6.2.1
// mw_mnCommandConfirmAny // FIXME Use a more restrictive template
// ))) {
// tc_ac.stop;
// }
// [] tc_ac.timeout {
// log("*** f_fntpForwardingTableRegisterEntry: INCONC: Pre-conditions: Failed to initialize FNTP Forwarding Table ***");
// f_selfOrClientSyncAndVerdictPreamble("error", e_timeout);
// }
// } // End of 'alt' statement
//
// } // End of function f_fntpForwardingTableRegisterEntry
} // End of group preambule
group testerFunctions {
/**
* @desc Increments the pdu counter and returns the new value
* @return The new pdu counter value
*
* See ISO/WD 24102-4 - Clause 6.2.1
*/
function f_getNextPduCounter() runs on ItsMgt return PduCounter {
vc_pduCounter := (vc_pduCounter + 2) mod (c_uInt8Max - 1); // ISO/WD 24102-4 - Clause 6.2.1: modulus 254
return vc_pduCounter;
} // End of function f_getNextPduCounter
/**
* @desc Increments the commandRef value and returns it
* @return The new commandRef value
*/
function f_getNextCommandRef() runs on ItsMgt return CommandRef {
vc_commandRef := (vc_commandRef + 1) mod (c_uInt8Max + 1);
return vc_commandRef;
} // End of function f_getNextCommandRef
} // End of group testerFunctions
group iutFunctions {
function f_getIutSourceITS_scuId() return ITS_scuId {
return PX_SRC_ITS_SCU_ID;
}
function f_getIutDestITS_scuId() return ITS_scuId {
return PX_DST_ITS_SCU_ID;
}
} // End of group iutFunctions
} // End of module LibItsMgt_Functions