Commits (2)
......@@ -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 {...,
......
/**
* @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"
}