Skip to content
GitLab
Projects
Groups
Topics
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
TTCN-3 Libraries
LibIts
Compare revisions
a9d34302019d60f227ffc340f92a9a65c806bc02...aa5c210a36c8d7aa155f4cc972c49db08f9b7f0f
Commits (2)
Add constraint on Version to force TITAN to encode COER one byte
· 86687be8
Yann Garcia
authored
Dec 04, 2018
86687be8
Update GeoNetworking version number (ETSI EN 302 636-4-1 (2017-08))
· aa5c210a
Yann Garcia
authored
Dec 04, 2018
aa5c210a
Hide whitespace changes
Inline
Side-by-side
asn1/Security/TS102921/EtsiTs102941BaseTypes.asn
View file @
aa5c210a
...
...
@@ -47,7 +47,7 @@ PublicKeys ::= SEQUENCE {
encryptionKey PublicEncryptionKey OPTIONAL
}
Version ::= INTEGER {v1(1)}
Version ::= INTEGER {v1(1)}
(1..255)
EtsiTs103097Data-Encrypted-Unicast {ToBeEncryptedDataContent} ::= EtsiTs103097Data-Encrypted {ToBeEncryptedDataContent}
(WITH COMPONENTS {...,
...
...
ttcn/GeoNetworking/LibItsGeoNetworking_TypesAndValues.ttcn
View file @
aa5c210a
/**
* @author ETSI / STF405 / STF449 / STF484 / STF517
* @version $URL$
* $Id$
* @desc Module containing types and values for GeoNetworking Protocol
* @copyright ETSI Copyright Notification
* No part may be reproduced except as authorized by written permission.
* The copyright and the foregoing restriction extend to reproduction in all media.
* All rights reserved.
*
*/
module
LibItsGeoNetworking_TypesAndValues
{
// LibCommon
import
from
LibCommon_BasicTypesAndValues
all
;
import
from
LibCommon_DataStrings
all
;
// LibIts
import
from
EtsiTs103097Module
language
"ASN.1:1997"
all
;
group
geoConfigurationValues
{
const
charstring
c_compIut
:=
"IUT"
;
const
charstring
c_compMTC
:=
"MTC"
;
const
charstring
c_compNodeA
:=
"NodeA"
;
const
charstring
c_compNodeB
:=
"NodeB"
;
const
charstring
c_compNodeC
:=
"NodeC"
;
const
charstring
c_compNodeD
:=
"NodeD"
;
const
charstring
c_compNodeE
:=
"NodeE"
;
const
charstring
c_compNodeF
:=
"NodeF"
;
const
charstring
c_area1
:=
"AREA1"
;
const
charstring
c_area2
:=
"AREA2"
;
const
integer
c_latitudeFactorNodeA
:=
10
;
const
integer
c_latitudeFactorNodeB
:=
2
;
const
integer
c_latitudeFactorNodeC
:=
-
6
;
const
integer
c_latitudeFactorNodeD
:=
1
;
const
integer
c_latitudeFactorNodeE
:=
-
1
;
const
integer
c_latitudeFactorNodeF
:=
2
;
const
integer
c_longitudeFactorNodeA
:=
0
;
const
integer
c_longitudeFactorNodeB
:=
0
;
const
integer
c_longitudeFactorNodeC
:=
0
;
const
integer
c_longitudeFactorNodeD
:=
0
;
const
integer
c_longitudeFactorNodeE
:=
0
;
const
integer
c_longitudeFactorNodeF
:=
-
3
;
}
// end geoConfigurationValues
group
geoSyncMessages
{
const
charstring
c_msgSent
:=
"Message sent"
;
}
// end geoSyncMessages
group
geoTestingConstants
{
const
UInt6
c_defaultLifetime
:=
10
;
// in seconds
const
UInt16
c_lifetime
:=
1000
*
c_defaultLifetime
;
// in seconds
}
// end geoTestingConstants
group
units
{
const
float
c_squareKm
:=
1000000.0
;
}
// end units
group
geoConfigurationTypes
{
/**
* @desc Entry of position table
* @member key Reference key of the entry
* @member position Position vector stored in the entry
*/
type
record
PositionEntry
{
charstring
key
,
LongPosVector
position
}
/**
* @desc Table containing node positions
*/
type
record
of
PositionEntry
PositionTable
;
/**
* @desc Parameters of a geometric area
* @member geoAreaPosLatitude Latitude of area's center
* @member geoAreaPosLongitude Longitude of area's center
* @member distanceA Distance A
* @member distanceB Distance B
* @member angle Angle
*/
type
record
Area
{
Int32
geoAreaPosLatitude
,
Int32
geoAreaPosLongitude
,
UInt16
distanceA
,
UInt16
distanceB
,
UInt16
angle
}
/**
* @desc Compact definition of GeoBroadcastArea
* @member geoBroadcastSubType Type of GeoBroadcastArea (=shape)
* @member geoBroadcastArea Parameters of the geometric area
*/
type
record
GeoBroadcastArea
{
HeaderSubTypeGeoBroadcast
geoBroadcastSubType
,
Area
geoBroadcastArea
}
/**
* @desc Compact definition of GeoAnycastArea
* @member geoAnycastSubType Type of GeoAnycastArea (=shape)
* @member geoAnycastArea Parameters of the geometric area
*/
type
record
GeoAnycastArea
{
HeaderSubTypeGeoAnycast
geoAnycastSubType
,
Area
geoAnycastArea
}
/**
* @desc Compact definition of a GeoArea (either GeoBroadcastArea or GeoAnycastArea)
* @member shape Shape of the GeoArea
* @member area Parameters of the geometric area
*/
type
record
GeoArea
{
GeoShape
shape
,
Area
area
}
/**
* @desc Geometric shapes used to define GeoAreas
*/
type
enumerated
GeoShape
{
e_geoCircle
(
0
),
e_geoRect
(
1
),
e_geoElip
(
2
),
e_reserved
}
/**
* @desc Entry of GeoArea table
* @member key Reference key of the entry
* @member geoArea GeoArea stored in the entry
*/
type
record
GeoAreaEntry
{
charstring
key
,
GeoArea
geoArea
}
/**
* @desc Table containing geoArea definitions
*/
type
record
of
GeoAreaEntry
GeoAreaTable
;
}
// end geoConfigurationTypes
group
geoNwValues
{
group
geoNwHeaderConstants
{
const
UInt4
c_geoNwProtocolVersion
:=
0
;
const
UInt8
c_hopLimit1
:=
1
;
const
UInt8
c_defaultHopLimit
:=
10
;
}
// end geoNwHeaderConstants
}
// end geoNwValues
group
geoNetworkingPdus
{
/**
* @desc GeoNetworking Packet
*
* @see ETSI EN 302 636-4-1 chapter 8.2, 8.3, 8.4
*
* @member basicHeader
* @member gnPacket
*/
type
record
GeoNetworkingPdu
{
BasicHeader
basicHeader
,
GeoNetworkingPacket
gnPacket
}
type
record
GeoNetworkingPacket
{
GnNonSecuredPacket
packet
,
EtsiTs103097Data
securedMsg
optional
}
with
{
encode
(
securedMsg
)
"LibItsSecurity"
}
type
octetstring
GnRawPayload
;
type
record
GnNonSecuredPacket
{
CommonHeader
commonHeader
,
ExtendedHeader
extendedHeader
optional
,
GnRawPayload
payload
optional
}
}
// end group geoNetworkingPdus
group
geoNetworkingHeader
{
group
geoNetworkingBasicHeader
{
/**
* @desc Basic Header
*
* <pre>
* 0 1 2 3
* 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* | V | NH | Reserved | LT | RHL |
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* </pre>
*
* @see ETSI EN 302 636-4-1 chapter 8.6.1
*
* @member version
* @member nextHeader
* @member reserved
* @member lifeTime
* @member routerHopLimit
*/
type
record
BasicHeader
{
UInt4
version
,
BasicNextHeader
nextHeader
,
UInt8
reserved
,
Lifetime
lifeTime
,
UInt8
routerHopLimit
}
with
{
variant
"FIELDORDER(msb)"
}
type
enumerated
BasicNextHeader
{
e_any
(
0
),
e_commonHeader
(
1
),
e_securedPacket
(
2
),
e_reserved
}
with
{
variant
"FIELDLENGTH(4)"
//variant "4 bit"
}
/**
* @desc Indicates the maximum tolerable time a packet can be buffered until it reaches its destination.
* @member multiplier
* @member ltBase
*/
type
record
Lifetime
{
UInt6
multiplier
,
LtBase
ltBase
}
with
{
variant
"FIELDORDER(msb)"
}
/**
* @desc The base for the calculation of the lifetime.
*/
type
enumerated
LtBase
{
e_50ms
(
0
),
e_1s
(
1
),
e_10s
(
2
),
e_100s
(
3
)
}
with
{
variant
"FIELDLENGTH(2)"
//variant "2 bit"
}
}
// end group geoNetworkingBasicHeader
group
geoNetworkingCommonHeader
{
/**
* @desc Common header for GeoNetworking
*
* <pre>
* 0 1 2 3
* 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* | NH | R | HT | HST | TC | Flags |
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* | PL | MHL | Reserved |
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* </pre>
*
* @see ETSI EN 302 636-4-1 chapter 8.7.2
*
* @member nextHeader
* @member reserved
* @member headerTST Header type + Header Sub Type
* @member trafficClass
* @member flags
* @member plLength
* @member maxHopLimit
* @member reserved2
*/
type
record
CommonHeader
{
NextHeader
nextHeader
,
UInt4
reserved
,
HeaderTST
headerTST
,
TrafficClass
trafficClass
,
Bit8
flags
,
UInt16
plLength
,
// The Codec shall set the length of the paylaod if present
UInt8
maxHopLimit
,
UInt8
reserved2
}
with
{
variant
"FIELDORDER(msb)"
}
/**
* @desc Identifies the type of header immediately following the Common Header (4Bits).
*/
type
enumerated
NextHeader
{
e_any
(
0
),
e_btpA
(
1
),
e_btpB
(
2
),
e_ipv6
(
3
),
e_reserved
}
with
{
variant
"FIELDLENGTH(4)"
//variant "4 bit"
}
/**
* @desc TrafficClass
*
* <pre>
* 0 1 2 3 4 5 6 7
* +---+---+---+---+---+---+---+---+
* |SCF|Ch.| TC ID |
* | |Off| |
* +---+---+---+---+---+---+---+---+
* </pre>
*
* @see ETSI EN 302 636-4-1 chapter 8.7.5
*
* @member scf
* @member channelOffload
* @member tcId
*/
type
record
TrafficClass
{
SCF
scf
,
ChannelOffload
channelOffload
,
TcId
tcId
}
with
{
variant
"FIELDORDER(msb)"
}
type
enumerated
SCF
{
e_scfDisabled
(
0
),
e_scfEnable
(
1
)
}
with
{
variant
"FIELDLENGTH(1)"
//variant "1 bit"
}
type
enumerated
ChannelOffload
{
e_choffDisabled
(
0
),
e_choffEnable
(
1
)
}
with
{
variant
"FIELDLENGTH(1)"
//variant "1 bit"
}
type
UInt6
TcId
;
}
// end group geoNetworkingCommonHeader
group
geoNetworkingExtendedHeaders
{
/**
* @desc GeoNetworking ExtendedHeader
*
* @see ETSI EN 302 636-4-1 chapter 8.3
*
* @member commonHeader
* @member gnExtHeader
*/
type
union
ExtendedHeader
{
GeoUnicastHeader
geoUnicastHeader
,
TSBHeader
tsbHeader
,
SHBHeader
shbHeader
,
GeoBroadcastHeader
geoBroadcastHeader
,
GeoAnycastHeader
geoAnycastHeader
,
BeaconHeader
beaconHeader
,
LSRequestHeader
lsRequestHeader
,
LSReplyHeader
lsReplyHeader
,
AnyHeader
saHeader
,
// FIXME Cannot find description, AnyHeader was used as default
AnyHeader
saEosHeader
,
// FIXME Cannot find description, AnyHeader was used as default
AnyHeader
anyHeader
}
with
{
variant
""
}
/**
* @desc The unspecified ANY header.
*
* @member seqNumber
* @member reserved
*/
type
record
AnyHeader
{
UInt16
seqNumber
,
UInt16
reserved
}
with
{
variant
"FIELDORDER(msb)"
}
/**
* @desc The BEACON packet header.
*
* @see ETSI EN 302 636-4-1 chapter 8.8.6
*
* @member commonHeader
*/
type
record
BeaconHeader
{
LongPosVector
srcPosVector
}
with
{
variant
"FIELDORDER(msb)"
}
/**
* @desc The GEOANYCAST packet header.
*
* @see ETSI EN 302 636-4-1 chapter 8.8.5
*
* @member seqNumber
* @member reserved
* @member srcPosVector
* @member geoAreaPosLatitude
* @member geoAreaPosLongitude
* @member distanceA
* @member distanceB
* @member angle
* @member reserved
*/
type
record
GeoAnycastHeader
{
UInt16
seqNumber
,
UInt16
reserved
,
LongPosVector
srcPosVector
,
Int32
geoAreaPosLatitude
,
Int32
geoAreaPosLongitude
,
UInt16
distanceA
,
UInt16
distanceB
,
UInt16
angle
,
UInt16
reserved2
}
with
{
variant
"FIELDORDER(msb)"
}
/**
* @desc The GEOBROADCAST packet header.
*
* @see ETSI EN 302 636-4-1 chapter 8.8.5
*
* @member seqNumber
* @member reserved
* @member srcPosVector
* @member geoAreaPosLatitude
* @member geoAreaPosLongitude
* @member distanceA
* @member distanceB
* @member angle
* @member reserved
*/
type
GeoAnycastHeader
GeoBroadcastHeader
;
/**
* @desc The GEOUNICAST packet header.
*
* @see ETSI EN 302 636-4-1 chapter 8.8.2
*
* @member seqNumber
* @member reserved
* @member srcPosVector
* @member dstPosVector
*/
type
record
GeoUnicastHeader
{
UInt16
seqNumber
,
UInt16
reserved
,
LongPosVector
srcPosVector
,
ShortPosVector
dstPosVector
}
with
{
variant
"FIELDORDER(msb)"
}
/**
* @desc The Location Service (LS) Reply packet header.
*
* @see ETSI EN 302 636-4-1 chapter 8.8.8
*
* @member seqNumber
* @member reserved
* @member srcPosVector
* @member dstPosVector
*/
type
record
LSReplyHeader
{
UInt16
seqNumber
,
UInt16
reserved
,
LongPosVector
srcPosVector
,
ShortPosVector
dstPosVector
}
with
{
variant
"FIELDORDER(msb)"
}
/**
* @desc The Location Service (LS) Request packet header.
*
* @see ETSI EN 302 636-4-1 chapter 8.8.7
*
* @member seqNumber
* @member reserved
* @member srcPosVector
* @member gnAddress
*/
type
record
LSRequestHeader
{
UInt16
seqNumber
,
UInt16
reserved
,
LongPosVector
srcPosVector
,
GN_Address
gnAddress
}
with
{
variant
"FIELDORDER(msb)"
}
/**
* The Single Hop Broadcast (SHB) packet header.
*
* @see ETSI EN 302 636-4-1 chapter 8.8.4
*
* @member srcPosVector
* @member reserved
*/
type
record
SHBHeader
{
LongPosVector
srcPosVector
,
UInt32
reserved
}
with
{
variant
"FIELDORDER(msb)"
}
/**
* @desc The Topologically-Scoped Broadcast (TSB) packet header.
*
* @see ETSI EN 302 636-4-1 chapter 8.8.3
*
* @member seqNumber
* @member reserved
* @member srcPosVector
*/
type
record
TSBHeader
{
UInt16
seqNumber
,
UInt16
reserved
,
LongPosVector
srcPosVector
}
with
{
variant
"FIELDORDER(msb)"
}
group
geoNetworkingHeadersSubtypes
{
/**
* @desc Identifies the header type and the header subtype for ANY.
* @member headerType
* @member reserved
*/
type
record
AnyHeaderType
{
HeaderType
headerType
(
e_any
),
UInt4
headerSubType
}
with
{
variant
"FIELDORDER(msb)"
}
/**
* @desc Identifies the header type and the header subtype for BEACON.
* @member headerType
* @member reserved
*/
type
record
BeaconHeaderType
{
HeaderType
headerType
(
e_beacon
),
UInt4
headerSubType
}
with
{
variant
"FIELDORDER(msb)"
}
/**
* @desc Identifies the header type and the header subtype for GEOANYCAST.
* @member headerType
* @member reserved
*/
type
record
GeoAnycastHeaderType
{
HeaderType
headerType
(
e_geoAnycast
),
HeaderSubTypeGeoAnycast
headerSubType
}
with
{
variant
"FIELDORDER(msb)"
}
/**
* @desc Identifies the header type and the header subtype for GEOBROADCAST.
* @member headerType
* @member reserved
*/
type
record
GeoBroadcastHeaderType
{
HeaderType
headerType
(
e_geoBroadcast
),
HeaderSubTypeGeoBroadcast
headerSubType
}
with
{
variant
"FIELDORDER(msb)"
}
/**
* @desc Identifies the header type and the header subtype for GEOUNICAST.
* @member headerType
* @member reserved
*/
type
record
GeoUnicastHeaderType
{
HeaderType
headerType
(
e_geoUnicast
),
UInt4
headerSubType
}
with
{
variant
"FIELDORDER(msb)"
}
/**
* @desc Identifies the header type and the header subtype for Location Service LS.
* @member headerType
* @member reserved
*/
type
record
LsHeaderType
{
HeaderType
headerType
(
e_locationService
),
HeaderSubTypeLs
headerSubType
}
with
{
variant
"FIELDORDER(msb)"
}
/**
* @desc Identifies the header type and the header subtype for Service Announcement SA.
* @member headerType
* @member reserved
*/
type
record
SaHeaderType
{
HeaderType
headerType
(
e_serviceAnnouncement
),
HeaderSubTypeSa
headerSubType
}
with
{
variant
"FIELDORDER(msb)"
}
/**
* @desc Identifies the header type and the header subtype for Topologically-Scoped Broadcast TSB.
* @member headerType
* @member headerSubType
*/
type
record
TsbHeaderType
{
HeaderType
headerType
(
e_topologicallyScopedBroadcast
),
HeaderSubTypeTSB
headerSubType
}
with
{
variant
"FIELDORDER(msb)"
}
/**
* @desc Identifies the header subtype for GEOANYCAST.
*/
type
enumerated
HeaderSubTypeGeoAnycast
{
e_geoAnycastCircle
(
0
),
e_geoAnycastRect
(
1
),
e_geoAnycastElip
(
2
),
e_reserved
}
with
{
variant
"FIELDLENGTH(4)"
//variant "4 bit"
}
/**
* @desc Identifies the header subtype for GEOBROADCAST.
*/
type
enumerated
HeaderSubTypeGeoBroadcast
{
e_geoBroadcastCircle
(
0
),
e_geoBroadcastRect
(
1
),
e_geoBroadcastElip
(
2
),
e_reserved
}
with
{
variant
"FIELDLENGTH(4)"
//variant "4 bit"
}
/**
* @desc Identifies the header subtype for Topologically-scoped broadcast TSB.
*/
type
enumerated
HeaderSubTypeTSB
{
e_singleHop
(
0
),
e_multiHop
(
1
),
e_reserved
}
with
{
variant
"FIELDLENGTH(4)"
//variant "4 bit"
}
/**
* @desc Identifies the header subtype for Location Service LS.
*/
type
enumerated
HeaderSubTypeLs
{
e_lsRequest
(
0
),
e_lsReply
(
1
),
e_reserved
}
with
{
variant
"FIELDLENGTH(4)"
//variant "4 bit"
}
/**
* @desc Identifies the header subtype for Service Announcement SA.
*/
type
enumerated
HeaderSubTypeSa
{
e_sa
(
0
),
e_saEos
(
1
),
e_reserved
}
with
{
variant
"FIELDLENGTH(4)"
//variant "4 bit"
}
/**
* @desc Identifies the header type and the header subtype.
* @member anyHdr
* @member beaconHdr
* @member geoUnicastHdr
* @member geoAnycastHdr
* @member geoBroadcastHdr
* @member tsbHdr
* @member lsHdr
* @member saHdr
* @member reserved
*/
type
union
HeaderTST
{
AnyHeaderType
anyHdr
,
BeaconHeaderType
beaconHdr
,
GeoUnicastHeaderType
geoUnicastHdr
,
GeoAnycastHeaderType
geoAnycastHdr
,
GeoBroadcastHeaderType
geoBroadcastHdr
,
TsbHeaderType
tsbHdr
,
LsHeaderType
lsHdr
,
SaHeaderType
saHdr
,
UInt8
reserved
}
with
{
variant
"FIELDORDER(msb)"
}
/**
* @desc Identifies the type of the GeoAdhoc header type (4Bits).
*/
type
enumerated
HeaderType
{
e_any
(
0
),
e_beacon
(
1
),
e_geoUnicast
(
2
),
e_geoAnycast
(
3
),
e_geoBroadcast
(
4
),
e_topologicallyScopedBroadcast
(
5
),
e_locationService
(
6
),
e_serviceAnnouncement
(
7
),
e_reserved
}
with
{
variant
"FIELDLENGTH(4)"
//variant "4 bit"
}
/**
* @desc Long Position Vector
*
* <pre>
* 0 1 2 3
* 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* | GN_ADDR |
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* | TST |
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* | Lat |
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* | Long |
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* |P| S | H |
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* </pre>
*
* @see ETSI EN 302 636-4-1 chapter 8.5.2
*
* @member gnAddr
* @member timestamp_
* @member latitude
* @member longitude
* @member pai Position Accuracy Indicator
* @member speed
* @member heading
*/
type
record
LongPosVector
{
GN_Address
gnAddr
,
UInt32
timestamp_
,
Int32
latitude
,
Int32
longitude
,
Bit1
pai
,
Int15
speed
,
UInt16
heading
}
with
{
variant
"FIELDORDER(msb)"
}
/**
* @desc Short Position Vector
*
* <pre>
* 0 1 2 3
* 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* | GN_ADDR |
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* | TST |
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* | Lat |
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* | Long |
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* </pre>
*
* @see ETSI EN 302 636-4-1 chapter 8.5.3
*
* @member gnAddr
* @member timestamp
* @member latitude
* @member longitude
*/
type
record
ShortPosVector
{
GN_Address
gnAddr
,
UInt32
timestamp_
,
Int32
latitude
,
Int32
longitude
}
with
{
variant
"FIELDORDER(msb)"
}
group
geoNetworkingAddress
{
/**
* @desc GeoNetworking address
*
* <pre>
* 0 1 2 3
* 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* |M| S_T | S_CC | M_ID |
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* | M_ID |
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* </pre>
*
* @see ETSI EN 302 636-4-1 chapter 6.2
*
* @member typeOfAddress
* @member stationType
* @member mid
*/
type
record
GN_Address
{
TypeOfAddress
typeOfAddress
,
StationType
stationType
,
UInt10
stationCountryCode
,
Oct6
mid
}
with
{
variant
"FIELDORDER(msb)"
}
group
geoNetworkingAddressSubtypes
{
/**
* @desc Identifies the ITS station (5Bits).
*/
type
enumerated
StationType
{
e_unknown
(
0
),
e_pedestrian
(
1
),
e_cyclist
(
2
),
e_moped
(
3
),
e_motorcycle
(
4
),
e_passengerCar
(
5
),
e_bus
(
6
),
e_lightTruck
(
7
),
e_heavyTruck
(
8
),
e_trailer
(
9
),
e_specialVehicle
(
10
),
e_tram
(
11
),
e_roadSideUnit
(
15
)
}
with
{
variant
"FIELDLENGTH(5)"
//variant "5 bit"
}
/**
* @desc Distinguish between manually configured
* network address and the initial GeoNetwork address (1Bit).
*/
type
enumerated
TypeOfAddress
{
e_manual
(
1
),
e_initial
(
0
)
}
with
{
variant
"FIELDLENGTH(1)"
//variant "1 bit"
}
}
// end group geoNetworkingAddressSubtypes
}
// end group geoNetworkingAddress
}
// end group geoNetworkingHeadersSubtypes
}
// end group geoNetworkingExtendedHeaders
}
// end group geoNetworkingHeader
group
geoNwPicsTypes
{
/**
* @desc The GeoUnicast forwarding algorithm.
*/
type
enumerated
GeoUnicastForwardingAlgorithm
{
e_unspecified
(
0
),
e_greedy
(
1
),
e_cbf
(
2
)
}
/**
* @desc The GeoBroadcast forwarding algorithm.
*/
type
enumerated
GeoBroadcastForwardingAlgorithm
{
e_unspecified
(
0
),
e_simple
(
1
),
e_cbf
(
2
),
e_advanced
(
3
)
}
/**
* @desc GN address configuration method.
*/
type
enumerated
GnAddressConfigurationMethod
{
e_auto
(
0
),
e_managed
(
1
),
e_anonymous
(
2
)
}
}
// end geoNwPicsTypes
group
utPrimitives
{
/**
* @desc Upper Tester message to initialize IUT
* @member hashedId8 In case of secured mode set, hashedId8 indicate which certificate the IUT shall use
*/
type
record
UtGnInitialize
{
Oct8
hashedId8
}
with
{
variant
"FIELDORDER(msb)"
}
/**
* @desc Upper Tester results message of the GeoNetworking IUT
* @member utGnInitialize -
* @member utGnTriggerResult -
* @member utAutoInteropTriggerResult -
* @member utGnChangePositionResult -
*/
type
union
UtGnResults
{
boolean
utGnInitializeResult
,
boolean
utGnTriggerResult
,
boolean
utAutoInteropTriggerResult
,
// FIXME Remove UtAutoInteropTrigger from GN component, create an AutoInterop component
boolean
utGnChangePositionResult
}
with
{
variant
""
}
// End of type UtGnResults
/**
* @desc AutoInterop UpperTester trigger
* @member utRadioOnOff Set to true to power on the radio (on-link mode), false to power off the radio (off-link).
*/
type
union
UtAutoInteropTrigger
{
boolean
utRadioOnOff
}
with
{
variant
""
}
// End of type UtAutoInteropTrigger
/**
* @desc Upper Tester message to change the position of IUT. Values a relatives
*/
type
record
UtGnChangePosition
{
Int32
latitude
,
Int32
longitude
,
Int32
elevation
}
with
{
variant
"FIELDORDER(msb)"
}
/**
* @desc UT primitives for GeoNetworking
* @member geoUnicast -
* @member geoBroadcast -
* @member geoAnycast -
* @member shb -
* @member tsb -
* @member changePosition -
* @member checkPacket -
*/
type
union
UtGnTrigger
{
GenerateGeoUnicastMessage
geoUnicast
,
GenerateGeoBroadcastMessage
geoBroadcast
,
GenerateGeoAnycastMessage
geoAnycast
,
GenerateSHBMessage
shb
,
GenerateTSBMessage
tsb
}
with
{
variant
""
}
/**
* @desc UT primitive for IUT to send a GeoUnicast packet
* @member gnAddress Destination of the packet
* @member lifetime Lifetime of the packet
* @member trafficClass Traffic class of the packet
* @member payload GnRawPayload of the packet
*/
type
record
GenerateGeoUnicastMessage
{
GN_Address
gnAddress
,
UInt16
lifetime
,
TrafficClass
trafficClass
,
GnRawPayload
payload
}
with
{
variant
"FIELDORDER(msb)"
}
/**
* @desc UT primitive for IUT to send a GeoBroadcast packet
* @member shape Shape of the area
* @member lifetime Lifetime of the packet
* @member trafficClass Traffic class of the packet
* @member area Destination GeoArea
* @member payload GnRawPayload of the packet
*/
type
record
GenerateGeoBroadcastMessage
{
GeoShape
shape
,
UInt16
lifetime
,
TrafficClass
trafficClass
,
UInt24
reserved
,
Area
area
,
GnRawPayload
payload
}
with
{
variant
"FIELDORDER(msb)"
}
/**
* @desc UT primitive for IUT to send a Geoanycast packet
*/
type
GenerateGeoBroadcastMessage
GenerateGeoAnycastMessage
;
/**
* @desc UT primitive for IUT to send a SHB packet
* @member trafficClass Traffic class of the packet
* @member payload GnRawPayload of the packet
*/
type
record
GenerateSHBMessage
{
TrafficClass
trafficClass
,
GnRawPayload
payload
}
with
{
variant
"FIELDORDER(msb)"
}
/**
* @desc UT primitive for IUT to send a SHB packet
* @member nbHops Number of Hops
* @member lifetime Lifetime of the packet
* @member trafficClass Traffic class of the packet
* @member payload GnRawPayload of the packet
*/
type
record
GenerateTSBMessage
{
UInt8
nbHops
,
UInt16
lifetime
,
TrafficClass
trafficClass
,
GnRawPayload
payload
}
with
{
variant
"FIELDORDER(msb)"
}
/**
* @desc Upper Tester message to check Upper Layer message transmission on GN IUT
*/
type
record
UtGnEventInd
{
// GeoNetworkingPdu gnPdu
GnRawPayload
rawPayload
}
with
{
variant
"FIELDORDER(msb)"
}
/**
* @desc List of Upper Tester messages to check Upper Layer message transmission on GN IUT
*/
type
record
of
UtGnEventInd
UtGnEventIndList
;
}
// end utPrimitives
with
{
encode
"UpperTester"
;
variant
""
}
group
acPrimitives
{
/**
* @desc TA primitives for GeoNetworking
* @member startBeaconing -
* @member stopBeaconing -
* @member startPassBeaconing -
* @member stopPassBeaconing -
* @member startBeaconingMultipleNeighbour -
* @member stopBeaconingMultipleNeighbour -
* @member getLongPosVector -
*/
type
union
AcGnPrimitive
{
AcStartBeaconing
startBeaconing
,
AcStopBeaconing
stopBeaconing
,
AcStartPassBeaconing
startPassBeaconing
,
AcStopPassBeaconing
stopPassBeaconing
,
AcStartBeaconingMultipleNeighbour
startBeaconingMultipleNeighbour
,
AcStopBeaconingMultipleNeighbour
stopBeaconingMultipleNeighbour
,
AcGetLongPosVector
getLongPosVector
}
with
{
variant
""
}
/**
* @desc Primitive for receiveing response from TA
* @member getLongPosVector
*/
type
union
AcGnResponse
{
LongPosVector
getLongPosVector
,
AcGnResponseFailure
failure
}
with
{
variant
""
encode
(
getLongPosVector
)
"LibItsGeoNetworking"
}
type
record
AcGnResponseFailure
{
boolean
failure
}
/**
* @desc Primitive for TA to start sending beacons for the test component
* @member beaconHeader Beacon template
*/
type
record
AcStartBeaconing
{
GeoNetworkingPdu
beaconPacket
}
with
{
encode
(
beaconPacket
)
"LibItsGeoNetworking"
}
/**
* @desc Primitive for TA to stop sending beacons for the test component
*/
type
record
AcStopBeaconing
{
}
/**
* @desc Primitive for TA to start enqueueing received beacons
* @member beaconHeader Filter
*/
type
record
AcStartPassBeaconing
{
BeaconHeader
beaconHeader
}
with
{
encode
(
beaconHeader
)
"LibItsGeoNetworking"
};
/**
* @desc Primitive for TA to stop enqueueing received beacons
*/
type
record
AcStopPassBeaconing
{
}
/**
* @desc Primitive for TA to start sending beacons for multiple neighbours
* @member beaconHeader Beacon template
* @member numberOfNeighbour Number of neighbours to simulate
*/
type
record
AcStartBeaconingMultipleNeighbour
{
GeoNetworkingPdu
beaconPacket
,
integer
numberOfNeighbour
}
with
{
encode
(
beaconPacket
)
"LibItsGeoNetworking"
};
/**
* @desc Primitive for TA to stop sending beacons for multiple neighbours
*/
type
record
AcStopBeaconingMultipleNeighbour
{
}
/**
* @desc Primitive for retrieving the position vector corresponding to a specific GN address
* @member gnAddress GN address to be searched
*/
type
record
AcGetLongPosVector
{
GN_Address
gnAddress
}
with
{
encode
(
gnAddress
)
"LibItsGeoNetworking"
};
}
// end acPrimitives
with
{
variant
""
encode
"AdapterControl"
}
}
with
{
variant
""
encode
"LibItsGeoNetworking"
}
/**
* @author ETSI / STF405 / STF449 / STF484 / STF517
* @version $URL$
* $Id$
* @desc Module containing types and values for GeoNetworking Protocol
* @copyright ETSI Copyright Notification
* No part may be reproduced except as authorized by written permission.
* The copyright and the foregoing restriction extend to reproduction in all media.
* All rights reserved.
*
*/
module
LibItsGeoNetworking_TypesAndValues
{
// LibCommon
import
from
LibCommon_BasicTypesAndValues
all
;
import
from
LibCommon_DataStrings
all
;
// LibIts
import
from
EtsiTs103097Module
language
"ASN.1:1997"
all
;
group
geoConfigurationValues
{
const
charstring
c_compIut
:=
"IUT"
;
const
charstring
c_compMTC
:=
"MTC"
;
const
charstring
c_compNodeA
:=
"NodeA"
;
const
charstring
c_compNodeB
:=
"NodeB"
;
const
charstring
c_compNodeC
:=
"NodeC"
;
const
charstring
c_compNodeD
:=
"NodeD"
;
const
charstring
c_compNodeE
:=
"NodeE"
;
const
charstring
c_compNodeF
:=
"NodeF"
;
const
charstring
c_area1
:=
"AREA1"
;
const
charstring
c_area2
:=
"AREA2"
;
const
integer
c_latitudeFactorNodeA
:=
10
;
const
integer
c_latitudeFactorNodeB
:=
2
;
const
integer
c_latitudeFactorNodeC
:=
-
6
;
const
integer
c_latitudeFactorNodeD
:=
1
;
const
integer
c_latitudeFactorNodeE
:=
-
1
;
const
integer
c_latitudeFactorNodeF
:=
2
;
const
integer
c_longitudeFactorNodeA
:=
0
;
const
integer
c_longitudeFactorNodeB
:=
0
;
const
integer
c_longitudeFactorNodeC
:=
0
;
const
integer
c_longitudeFactorNodeD
:=
0
;
const
integer
c_longitudeFactorNodeE
:=
0
;
const
integer
c_longitudeFactorNodeF
:=
-
3
;
}
// end geoConfigurationValues
group
geoSyncMessages
{
const
charstring
c_msgSent
:=
"Message sent"
;
}
// end geoSyncMessages
group
geoTestingConstants
{
const
UInt6
c_defaultLifetime
:=
10
;
// in seconds
const
UInt16
c_lifetime
:=
1000
*
c_defaultLifetime
;
// in seconds
}
// end geoTestingConstants
group
units
{
const
float
c_squareKm
:=
1000000.0
;
}
// end units
group
geoConfigurationTypes
{
/**
* @desc Entry of position table
* @member key Reference key of the entry
* @member position Position vector stored in the entry
*/
type
record
PositionEntry
{
charstring
key
,
LongPosVector
position
}
/**
* @desc Table containing node positions
*/
type
record
of
PositionEntry
PositionTable
;
/**
* @desc Parameters of a geometric area
* @member geoAreaPosLatitude Latitude of area's center
* @member geoAreaPosLongitude Longitude of area's center
* @member distanceA Distance A
* @member distanceB Distance B
* @member angle Angle
*/
type
record
Area
{
Int32
geoAreaPosLatitude
,
Int32
geoAreaPosLongitude
,
UInt16
distanceA
,
UInt16
distanceB
,
UInt16
angle
}
/**
* @desc Compact definition of GeoBroadcastArea
* @member geoBroadcastSubType Type of GeoBroadcastArea (=shape)
* @member geoBroadcastArea Parameters of the geometric area
*/
type
record
GeoBroadcastArea
{
HeaderSubTypeGeoBroadcast
geoBroadcastSubType
,
Area
geoBroadcastArea
}
/**
* @desc Compact definition of GeoAnycastArea
* @member geoAnycastSubType Type of GeoAnycastArea (=shape)
* @member geoAnycastArea Parameters of the geometric area
*/
type
record
GeoAnycastArea
{
HeaderSubTypeGeoAnycast
geoAnycastSubType
,
Area
geoAnycastArea
}
/**
* @desc Compact definition of a GeoArea (either GeoBroadcastArea or GeoAnycastArea)
* @member shape Shape of the GeoArea
* @member area Parameters of the geometric area
*/
type
record
GeoArea
{
GeoShape
shape
,
Area
area
}
/**
* @desc Geometric shapes used to define GeoAreas
*/
type
enumerated
GeoShape
{
e_geoCircle
(
0
),
e_geoRect
(
1
),
e_geoElip
(
2
),
e_reserved
}
/**
* @desc Entry of GeoArea table
* @member key Reference key of the entry
* @member geoArea GeoArea stored in the entry
*/
type
record
GeoAreaEntry
{
charstring
key
,
GeoArea
geoArea
}
/**
* @desc Table containing geoArea definitions
*/
type
record
of
GeoAreaEntry
GeoAreaTable
;
}
// end geoConfigurationTypes
group
geoNwValues
{
group
geoNwHeaderConstants
{
const
UInt4
c_geoNwProtocolVersion
:=
0
;
const
UInt8
c_hopLimit1
:=
1
;
const
UInt8
c_defaultHopLimit
:=
10
;
}
// end geoNwHeaderConstants
}
// end geoNwValues
group
geoNetworkingPdus
{
/**
* @desc GeoNetworking Packet
*
* @see ETSI EN 302 636-4-1 chapter 8.2, 8.3, 8.4
*
* @member basicHeader
* @member gnPacket
*/
type
record
GeoNetworkingPdu
{
BasicHeader
basicHeader
,
GeoNetworkingPacket
gnPacket
}
type
record
GeoNetworkingPacket
{
GnNonSecuredPacket
packet
,
EtsiTs103097Data
securedMsg
optional
}
with
{
encode
(
securedMsg
)
"LibItsSecurity"
}
type
octetstring
GnRawPayload
;
type
record
GnNonSecuredPacket
{
CommonHeader
commonHeader
,
ExtendedHeader
extendedHeader
optional
,
GnRawPayload
payload
optional
}
}
// end group geoNetworkingPdus
group
geoNetworkingHeader
{
group
geoNetworkingBasicHeader
{
/**
* @desc Basic Header
*
* <pre>
* 0 1 2 3
* 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* | V | NH | Reserved | LT | RHL |
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* </pre>
*
* @see ETSI EN 302 636-4-1 chapter 8.6.1
*
* @member version
* @member nextHeader
* @member reserved
* @member lifeTime
* @member routerHopLimit
*/
type
record
BasicHeader
{
UInt4
version
,
BasicNextHeader
nextHeader
,
UInt8
reserved
,
Lifetime
lifeTime
,
UInt8
routerHopLimit
}
with
{
variant
"FIELDORDER(msb)"
}
type
enumerated
BasicNextHeader
{
e_any
(
0
),
e_commonHeader
(
1
),
e_securedPacket
(
2
),
e_reserved
}
with
{
variant
"FIELDLENGTH(4)"
//variant "4 bit"
}
/**
* @desc Indicates the maximum tolerable time a packet can be buffered until it reaches its destination.
* @member multiplier
* @member ltBase
*/
type
record
Lifetime
{
UInt6
multiplier
,
LtBase
ltBase
}
with
{
variant
"FIELDORDER(msb)"
}
/**
* @desc The base for the calculation of the lifetime.
*/
type
enumerated
LtBase
{
e_50ms
(
0
),
e_1s
(
1
),
e_10s
(
2
),
e_100s
(
3
)
}
with
{
variant
"FIELDLENGTH(2)"
//variant "2 bit"
}
}
// end group geoNetworkingBasicHeader
group
geoNetworkingCommonHeader
{
/**
* @desc Common header for GeoNetworking
*
* <pre>
* 0 1 2 3
* 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* | NH | R | HT | HST | TC | Flags |
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* | PL | MHL | Reserved |
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* </pre>
*
* @see ETSI EN 302 636-4-1 chapter 8.7.2
*
* @member nextHeader
* @member reserved
* @member headerTST Header type + Header Sub Type
* @member trafficClass
* @member flags
* @member plLength
* @member maxHopLimit
* @member reserved2
*/
type
record
CommonHeader
{
NextHeader
nextHeader
,
UInt4
reserved
,
HeaderTST
headerTST
,
TrafficClass
trafficClass
,
Bit8
flags
,
UInt16
plLength
,
// The Codec shall set the length of the paylaod if present
UInt8
maxHopLimit
,
UInt8
reserved2
}
with
{
variant
"FIELDORDER(msb)"
}
/**
* @desc Identifies the type of header immediately following the Common Header (4Bits).
*/
type
enumerated
NextHeader
{
e_any
(
0
),
e_btpA
(
1
),
e_btpB
(
2
),
e_ipv6
(
3
),
e_reserved
}
with
{
variant
"FIELDLENGTH(4)"
//variant "4 bit"
}
/**
* @desc TrafficClass
*
* <pre>
* 0 1 2 3 4 5 6 7
* +---+---+---+---+---+---+---+---+
* |SCF|Ch.| TC ID |
* | |Off| |
* +---+---+---+---+---+---+---+---+
* </pre>
*
* @see ETSI EN 302 636-4-1 chapter 8.7.5
*
* @member scf
* @member channelOffload
* @member tcId
*/
type
record
TrafficClass
{
SCF
scf
,
ChannelOffload
channelOffload
,
TcId
tcId
}
with
{
variant
"FIELDORDER(msb)"
}
type
enumerated
SCF
{
e_scfDisabled
(
0
),
e_scfEnable
(
1
)
}
with
{
variant
"FIELDLENGTH(1)"
//variant "1 bit"
}
type
enumerated
ChannelOffload
{
e_choffDisabled
(
0
),
e_choffEnable
(
1
)
}
with
{
variant
"FIELDLENGTH(1)"
//variant "1 bit"
}
type
UInt6
TcId
;
}
// end group geoNetworkingCommonHeader
group
geoNetworkingExtendedHeaders
{
/**
* @desc GeoNetworking ExtendedHeader
*
* @see ETSI EN 302 636-4-1 chapter 8.3
*
* @member commonHeader
* @member gnExtHeader
*/
type
union
ExtendedHeader
{
GeoUnicastHeader
geoUnicastHeader
,
TSBHeader
tsbHeader
,
SHBHeader
shbHeader
,
GeoBroadcastHeader
geoBroadcastHeader
,
GeoAnycastHeader
geoAnycastHeader
,
BeaconHeader
beaconHeader
,
LSRequestHeader
lsRequestHeader
,
LSReplyHeader
lsReplyHeader
,
AnyHeader
saHeader
,
// FIXME Cannot find description, AnyHeader was used as default
AnyHeader
saEosHeader
,
// FIXME Cannot find description, AnyHeader was used as default
AnyHeader
anyHeader
}
with
{
variant
""
}
/**
* @desc The unspecified ANY header.
*
* @member seqNumber
* @member reserved
*/
type
record
AnyHeader
{
UInt16
seqNumber
,
UInt16
reserved
}
with
{
variant
"FIELDORDER(msb)"
}
/**
* @desc The BEACON packet header.
*
* @see ETSI EN 302 636-4-1 chapter 8.8.6
*
* @member commonHeader
*/
type
record
BeaconHeader
{
LongPosVector
srcPosVector
}
with
{
variant
"FIELDORDER(msb)"
}
/**
* @desc The GEOANYCAST packet header.
*
* @see ETSI EN 302 636-4-1 chapter 8.8.5
*
* @member seqNumber
* @member reserved
* @member srcPosVector
* @member geoAreaPosLatitude
* @member geoAreaPosLongitude
* @member distanceA
* @member distanceB
* @member angle
* @member reserved
*/
type
record
GeoAnycastHeader
{
UInt16
seqNumber
,
UInt16
reserved
,
LongPosVector
srcPosVector
,
Int32
geoAreaPosLatitude
,
Int32
geoAreaPosLongitude
,
UInt16
distanceA
,
UInt16
distanceB
,
UInt16
angle
,
UInt16
reserved2
}
with
{
variant
"FIELDORDER(msb)"
}
/**
* @desc The GEOBROADCAST packet header.
*
* @see ETSI EN 302 636-4-1 chapter 8.8.5
*
* @member seqNumber
* @member reserved
* @member srcPosVector
* @member geoAreaPosLatitude
* @member geoAreaPosLongitude
* @member distanceA
* @member distanceB
* @member angle
* @member reserved
*/
type
GeoAnycastHeader
GeoBroadcastHeader
;
/**
* @desc The GEOUNICAST packet header.
*
* @see ETSI EN 302 636-4-1 chapter 8.8.2
*
* @member seqNumber
* @member reserved
* @member srcPosVector
* @member dstPosVector
*/
type
record
GeoUnicastHeader
{
UInt16
seqNumber
,
UInt16
reserved
,
LongPosVector
srcPosVector
,
ShortPosVector
dstPosVector
}
with
{
variant
"FIELDORDER(msb)"
}
/**
* @desc The Location Service (LS) Reply packet header.
*
* @see ETSI EN 302 636-4-1 chapter 8.8.8
*
* @member seqNumber
* @member reserved
* @member srcPosVector
* @member dstPosVector
*/
type
record
LSReplyHeader
{
UInt16
seqNumber
,
UInt16
reserved
,
LongPosVector
srcPosVector
,
ShortPosVector
dstPosVector
}
with
{
variant
"FIELDORDER(msb)"
}
/**
* @desc The Location Service (LS) Request packet header.
*
* @see ETSI EN 302 636-4-1 chapter 8.8.7
*
* @member seqNumber
* @member reserved
* @member srcPosVector
* @member gnAddress
*/
type
record
LSRequestHeader
{
UInt16
seqNumber
,
UInt16
reserved
,
LongPosVector
srcPosVector
,
GN_Address
gnAddress
}
with
{
variant
"FIELDORDER(msb)"
}
/**
* The Single Hop Broadcast (SHB) packet header.
*
* @see ETSI EN 302 636-4-1 chapter 8.8.4
*
* @member srcPosVector
* @member reserved
*/
type
record
SHBHeader
{
LongPosVector
srcPosVector
,
UInt32
reserved
}
with
{
variant
"FIELDORDER(msb)"
}
/**
* @desc The Topologically-Scoped Broadcast (TSB) packet header.
*
* @see ETSI EN 302 636-4-1 chapter 8.8.3
*
* @member seqNumber
* @member reserved
* @member srcPosVector
*/
type
record
TSBHeader
{
UInt16
seqNumber
,
UInt16
reserved
,
LongPosVector
srcPosVector
}
with
{
variant
"FIELDORDER(msb)"
}
group
geoNetworkingHeadersSubtypes
{
/**
* @desc Identifies the header type and the header subtype for ANY.
* @member headerType
* @member reserved
*/
type
record
AnyHeaderType
{
HeaderType
headerType
(
e_any
),
UInt4
headerSubType
}
with
{
variant
"FIELDORDER(msb)"
}
/**
* @desc Identifies the header type and the header subtype for BEACON.
* @member headerType
* @member reserved
*/
type
record
BeaconHeaderType
{
HeaderType
headerType
(
e_beacon
),
UInt4
headerSubType
}
with
{
variant
"FIELDORDER(msb)"
}
/**
* @desc Identifies the header type and the header subtype for GEOANYCAST.
* @member headerType
* @member reserved
*/
type
record
GeoAnycastHeaderType
{
HeaderType
headerType
(
e_geoAnycast
),
HeaderSubTypeGeoAnycast
headerSubType
}
with
{
variant
"FIELDORDER(msb)"
}
/**
* @desc Identifies the header type and the header subtype for GEOBROADCAST.
* @member headerType
* @member reserved
*/
type
record
GeoBroadcastHeaderType
{
HeaderType
headerType
(
e_geoBroadcast
),
HeaderSubTypeGeoBroadcast
headerSubType
}
with
{
variant
"FIELDORDER(msb)"
}
/**
* @desc Identifies the header type and the header subtype for GEOUNICAST.
* @member headerType
* @member reserved
*/
type
record
GeoUnicastHeaderType
{
HeaderType
headerType
(
e_geoUnicast
),
UInt4
headerSubType
}
with
{
variant
"FIELDORDER(msb)"
}
/**
* @desc Identifies the header type and the header subtype for Location Service LS.
* @member headerType
* @member reserved
*/
type
record
LsHeaderType
{
HeaderType
headerType
(
e_locationService
),
HeaderSubTypeLs
headerSubType
}
with
{
variant
"FIELDORDER(msb)"
}
/**
* @desc Identifies the header type and the header subtype for Service Announcement SA.
* @member headerType
* @member reserved
*/
type
record
SaHeaderType
{
HeaderType
headerType
(
e_serviceAnnouncement
),
HeaderSubTypeSa
headerSubType
}
with
{
variant
"FIELDORDER(msb)"
}
/**
* @desc Identifies the header type and the header subtype for Topologically-Scoped Broadcast TSB.
* @member headerType
* @member headerSubType
*/
type
record
TsbHeaderType
{
HeaderType
headerType
(
e_topologicallyScopedBroadcast
),
HeaderSubTypeTSB
headerSubType
}
with
{
variant
"FIELDORDER(msb)"
}
/**
* @desc Identifies the header subtype for GEOANYCAST.
*/
type
enumerated
HeaderSubTypeGeoAnycast
{
e_geoAnycastCircle
(
0
),
e_geoAnycastRect
(
1
),
e_geoAnycastElip
(
2
),
e_reserved
}
with
{
variant
"FIELDLENGTH(4)"
//variant "4 bit"
}
/**
* @desc Identifies the header subtype for GEOBROADCAST.
*/
type
enumerated
HeaderSubTypeGeoBroadcast
{
e_geoBroadcastCircle
(
0
),
e_geoBroadcastRect
(
1
),
e_geoBroadcastElip
(
2
),
e_reserved
}
with
{
variant
"FIELDLENGTH(4)"
//variant "4 bit"
}
/**
* @desc Identifies the header subtype for Topologically-scoped broadcast TSB.
*/
type
enumerated
HeaderSubTypeTSB
{
e_singleHop
(
0
),
e_multiHop
(
1
),
e_reserved
}
with
{
variant
"FIELDLENGTH(4)"
//variant "4 bit"
}
/**
* @desc Identifies the header subtype for Location Service LS.
*/
type
enumerated
HeaderSubTypeLs
{
e_lsRequest
(
0
),
e_lsReply
(
1
),
e_reserved
}
with
{
variant
"FIELDLENGTH(4)"
//variant "4 bit"
}
/**
* @desc Identifies the header subtype for Service Announcement SA.
*/
type
enumerated
HeaderSubTypeSa
{
e_sa
(
0
),
e_saEos
(
1
),
e_reserved
}
with
{
variant
"FIELDLENGTH(4)"
//variant "4 bit"
}
/**
* @desc Identifies the header type and the header subtype.
* @member anyHdr
* @member beaconHdr
* @member geoUnicastHdr
* @member geoAnycastHdr
* @member geoBroadcastHdr
* @member tsbHdr
* @member lsHdr
* @member saHdr
* @member reserved
*/
type
union
HeaderTST
{
AnyHeaderType
anyHdr
,
BeaconHeaderType
beaconHdr
,
GeoUnicastHeaderType
geoUnicastHdr
,
GeoAnycastHeaderType
geoAnycastHdr
,
GeoBroadcastHeaderType
geoBroadcastHdr
,
TsbHeaderType
tsbHdr
,
LsHeaderType
lsHdr
,
SaHeaderType
saHdr
,
UInt8
reserved
}
with
{
variant
"FIELDORDER(msb)"
}
/**
* @desc Identifies the type of the GeoAdhoc header type (4Bits).
*/
type
enumerated
HeaderType
{
e_any
(
0
),
e_beacon
(
1
),
e_geoUnicast
(
2
),
e_geoAnycast
(
3
),
e_geoBroadcast
(
4
),
e_topologicallyScopedBroadcast
(
5
),
e_locationService
(
6
),
e_serviceAnnouncement
(
7
),
e_reserved
}
with
{
variant
"FIELDLENGTH(4)"
//variant "4 bit"
}
/**
* @desc Long Position Vector
*
* <pre>
* 0 1 2 3
* 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* | GN_ADDR |
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* | TST |
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* | Lat |
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* | Long |
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* |P| S | H |
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* </pre>
*
* @see ETSI EN 302 636-4-1 chapter 8.5.2
*
* @member gnAddr
* @member timestamp_
* @member latitude
* @member longitude
* @member pai Position Accuracy Indicator
* @member speed
* @member heading
*/
type
record
LongPosVector
{
GN_Address
gnAddr
,
UInt32
timestamp_
,
Int32
latitude
,
Int32
longitude
,
Bit1
pai
,
Int15
speed
,
UInt16
heading
}
with
{
variant
"FIELDORDER(msb)"
}
/**
* @desc Short Position Vector
*
* <pre>
* 0 1 2 3
* 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* | GN_ADDR |
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* | TST |
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* | Lat |
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* | Long |
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* </pre>
*
* @see ETSI EN 302 636-4-1 chapter 8.5.3
*
* @member gnAddr
* @member timestamp
* @member latitude
* @member longitude
*/
type
record
ShortPosVector
{
GN_Address
gnAddr
,
UInt32
timestamp_
,
Int32
latitude
,
Int32
longitude
}
with
{
variant
"FIELDORDER(msb)"
}
group
geoNetworkingAddress
{
/**
* @desc GeoNetworking address
*
* <pre>
* 0 1 2 3
* 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* |M| S_T | S_CC | M_ID |
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* | M_ID |
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* </pre>
*
* @see ETSI EN 302 636-4-1 chapter 6.2
*
* @member typeOfAddress
* @member stationType
* @member mid
*/
type
record
GN_Address
{
TypeOfAddress
typeOfAddress
,
StationType
stationType
,
UInt10
stationCountryCode
,
Oct6
mid
}
with
{
variant
"FIELDORDER(msb)"
}
group
geoNetworkingAddressSubtypes
{
/**
* @desc Identifies the ITS station (5Bits).
*/
type
enumerated
StationType
{
e_unknown
(
0
),
e_pedestrian
(
1
),
e_cyclist
(
2
),
e_moped
(
3
),
e_motorcycle
(
4
),
e_passengerCar
(
5
),
e_bus
(
6
),
e_lightTruck
(
7
),
e_heavyTruck
(
8
),
e_trailer
(
9
),
e_specialVehicle
(
10
),
e_tram
(
11
),
e_roadSideUnit
(
15
)
}
with
{
variant
"FIELDLENGTH(5)"
//variant "5 bit"
}
/**
* @desc Distinguish between manually configured
* network address and the initial GeoNetwork address (1Bit).
*/
type
enumerated
TypeOfAddress
{
e_manual
(
1
),
e_initial
(
0
)
}
with
{
variant
"FIELDLENGTH(1)"
//variant "1 bit"
}
}
// end group geoNetworkingAddressSubtypes
}
// end group geoNetworkingAddress
}
// end group geoNetworkingHeadersSubtypes
}
// end group geoNetworkingExtendedHeaders
}
// end group geoNetworkingHeader
group
geoNwPicsTypes
{
/**
* @desc The GeoUnicast forwarding algorithm.
*/
type
enumerated
GeoUnicastForwardingAlgorithm
{
e_unspecified
(
0
),
e_greedy
(
1
),
e_cbf
(
2
)
}
/**
* @desc The GeoBroadcast forwarding algorithm.
*/
type
enumerated
GeoBroadcastForwardingAlgorithm
{
e_unspecified
(
0
),
e_simple
(
1
),
e_cbf
(
2
),
e_advanced
(
3
)
}
/**
* @desc GN address configuration method.
*/
type
enumerated
GnAddressConfigurationMethod
{
e_auto
(
0
),
e_managed
(
1
),
e_anonymous
(
2
)
}
}
// end geoNwPicsTypes
group
utPrimitives
{
/**
* @desc Upper Tester message to initialize IUT
* @member hashedId8 In case of secured mode set, hashedId8 indicate which certificate the IUT shall use
*/
type
record
UtGnInitialize
{
Oct8
hashedId8
}
with
{
variant
"FIELDORDER(msb)"
}
/**
* @desc Upper Tester results message of the GeoNetworking IUT
* @member utGnInitialize -
* @member utGnTriggerResult -
* @member utAutoInteropTriggerResult -
* @member utGnChangePositionResult -
*/
type
union
UtGnResults
{
boolean
utGnInitializeResult
,
boolean
utGnTriggerResult
,
boolean
utAutoInteropTriggerResult
,
// FIXME Remove UtAutoInteropTrigger from GN component, create an AutoInterop component
boolean
utGnChangePositionResult
}
with
{
variant
""
}
// End of type UtGnResults
/**
* @desc AutoInterop UpperTester trigger
* @member utRadioOnOff Set to true to power on the radio (on-link mode), false to power off the radio (off-link).
*/
type
union
UtAutoInteropTrigger
{
boolean
utRadioOnOff
}
with
{
variant
""
}
// End of type UtAutoInteropTrigger
/**
* @desc Upper Tester message to change the position of IUT. Values a relatives
*/
type
record
UtGnChangePosition
{
Int32
latitude
,
Int32
longitude
,
Int32
elevation
}
with
{
variant
"FIELDORDER(msb)"
}
/**
* @desc UT primitives for GeoNetworking
* @member geoUnicast -
* @member geoBroadcast -
* @member geoAnycast -
* @member shb -
* @member tsb -
* @member changePosition -
* @member checkPacket -
*/
type
union
UtGnTrigger
{
GenerateGeoUnicastMessage
geoUnicast
,
GenerateGeoBroadcastMessage
geoBroadcast
,
GenerateGeoAnycastMessage
geoAnycast
,
GenerateSHBMessage
shb
,
GenerateTSBMessage
tsb
}
with
{
variant
""
}
/**
* @desc UT primitive for IUT to send a GeoUnicast packet
* @member gnAddress Destination of the packet
* @member lifetime Lifetime of the packet
* @member trafficClass Traffic class of the packet
* @member payload GnRawPayload of the packet
*/
type
record
GenerateGeoUnicastMessage
{
GN_Address
gnAddress
,
UInt16
lifetime
,
TrafficClass
trafficClass
,
GnRawPayload
payload
}
with
{
variant
"FIELDORDER(msb)"
}
/**
* @desc UT primitive for IUT to send a GeoBroadcast packet
* @member shape Shape of the area
* @member lifetime Lifetime of the packet
* @member trafficClass Traffic class of the packet
* @member area Destination GeoArea
* @member payload GnRawPayload of the packet
*/
type
record
GenerateGeoBroadcastMessage
{
GeoShape
shape
,
UInt16
lifetime
,
TrafficClass
trafficClass
,
UInt24
reserved
,
Area
area
,
GnRawPayload
payload
}
with
{
variant
"FIELDORDER(msb)"
}
/**
* @desc UT primitive for IUT to send a Geoanycast packet
*/
type
GenerateGeoBroadcastMessage
GenerateGeoAnycastMessage
;
/**
* @desc UT primitive for IUT to send a SHB packet
* @member trafficClass Traffic class of the packet
* @member payload GnRawPayload of the packet
*/
type
record
GenerateSHBMessage
{
TrafficClass
trafficClass
,
GnRawPayload
payload
}
with
{
variant
"FIELDORDER(msb)"
}
/**
* @desc UT primitive for IUT to send a SHB packet
* @member nbHops Number of Hops
* @member lifetime Lifetime of the packet
* @member trafficClass Traffic class of the packet
* @member payload GnRawPayload of the packet
*/
type
record
GenerateTSBMessage
{
UInt8
nbHops
,
UInt16
lifetime
,
TrafficClass
trafficClass
,
GnRawPayload
payload
}
with
{
variant
"FIELDORDER(msb)"
}
/**
* @desc Upper Tester message to check Upper Layer message transmission on GN IUT
*/
type
record
UtGnEventInd
{
// GeoNetworkingPdu gnPdu
GnRawPayload
rawPayload
}
with
{
variant
"FIELDORDER(msb)"
}
/**
* @desc List of Upper Tester messages to check Upper Layer message transmission on GN IUT
*/
type
record
of
UtGnEventInd
UtGnEventIndList
;
}
// end utPrimitives
with
{
encode
"UpperTester"
;
variant
""
}
group
acPrimitives
{
/**
* @desc TA primitives for GeoNetworking
* @member startBeaconing -
* @member stopBeaconing -
* @member startPassBeaconing -
* @member stopPassBeaconing -
* @member startBeaconingMultipleNeighbour -
* @member stopBeaconingMultipleNeighbour -
* @member getLongPosVector -
*/
type
union
AcGnPrimitive
{
AcStartBeaconing
startBeaconing
,
AcStopBeaconing
stopBeaconing
,
AcStartPassBeaconing
startPassBeaconing
,
AcStopPassBeaconing
stopPassBeaconing
,
AcStartBeaconingMultipleNeighbour
startBeaconingMultipleNeighbour
,
AcStopBeaconingMultipleNeighbour
stopBeaconingMultipleNeighbour
,
AcGetLongPosVector
getLongPosVector
}
with
{
variant
""
}
/**
* @desc Primitive for receiveing response from TA
* @member getLongPosVector
*/
type
union
AcGnResponse
{
LongPosVector
getLongPosVector
,
AcGnResponseFailure
failure
}
with
{
variant
""
encode
(
getLongPosVector
)
"LibItsGeoNetworking"
}
type
record
AcGnResponseFailure
{
boolean
failure
}
/**
* @desc Primitive for TA to start sending beacons for the test component
* @member beaconHeader Beacon template
*/
type
record
AcStartBeaconing
{
GeoNetworkingPdu
beaconPacket
}
with
{
encode
(
beaconPacket
)
"LibItsGeoNetworking"
}
/**
* @desc Primitive for TA to stop sending beacons for the test component
*/
type
record
AcStopBeaconing
{
}
/**
* @desc Primitive for TA to start enqueueing received beacons
* @member beaconHeader Filter
*/
type
record
AcStartPassBeaconing
{
BeaconHeader
beaconHeader
}
with
{
encode
(
beaconHeader
)
"LibItsGeoNetworking"
};
/**
* @desc Primitive for TA to stop enqueueing received beacons
*/
type
record
AcStopPassBeaconing
{
}
/**
* @desc Primitive for TA to start sending beacons for multiple neighbours
* @member beaconHeader Beacon template
* @member numberOfNeighbour Number of neighbours to simulate
*/
type
record
AcStartBeaconingMultipleNeighbour
{
GeoNetworkingPdu
beaconPacket
,
integer
numberOfNeighbour
}
with
{
encode
(
beaconPacket
)
"LibItsGeoNetworking"
};
/**
* @desc Primitive for TA to stop sending beacons for multiple neighbours
*/
type
record
AcStopBeaconingMultipleNeighbour
{
}
/**
* @desc Primitive for retrieving the position vector corresponding to a specific GN address
* @member gnAddress GN address to be searched
*/
type
record
AcGetLongPosVector
{
GN_Address
gnAddress
}
with
{
encode
(
gnAddress
)
"LibItsGeoNetworking"
};
}
// end acPrimitives
with
{
variant
""
encode
"AdapterControl"
}
}
with
{
variant
""
encode
"LibItsGeoNetworking"
}