/** * @author ETSI / STF405 * @version $URL$ * $Id$ * @desc Module containing types and values for GeoNetworking Protocol * */ module LibItsGeoNetworking_TypesAndValues { import from LibCommon_BasicTypesAndValues all; import from LibCommon_DataStrings all; group geoNwValues { group geoNwHeaderConstants { const UInt4 c_geoNwProtocolVersion := 0; const UInt8 c_defaultHopLimit := 10; } // end geoNwHeaderConstants // TODO add in Libcommon const UInt24 c_uInt24Zero := 0; } // end geoNwValues group geoNetworkingPdus { /** * @desc GeoNetworking Packet * * @see Draft ETSI TS 102 636-4-1 V0.0.6 (2010-06) chapter 7.2 * * @member gnHeader * @member gnSecHeader * @member gnPayload */ type record GeoNetworkingPacket { Header header, SecHeader secHeader optional, Payload payload optional } } // end group geoNetworkingPdus group geoNetworkingHeader { /** * @desc GeoNetworking Header * * @see Draft ETSI TS 102 636-4-1 V0.0.6 (2010-06) chapter 7.3 * * @member commonHeader * @member gnExtHeader */ type union Header { GeoUnicastHeader geoUnicastHeader, TSBHeader tsbHeader, SHBHeader shbHeader, GeoBroadcastHeader geoBroadcastHeader, GeoAnycastHeader geoAnycastHeader, BeaconHeader beaconHeader, LSRequestHeader lsRequestHeader, LSReplyHeader lsReplyHeader, AnyHeader anyHeader // TODO SA header definition missing // SAHeader saHeader } group geoNetworkingHeaders { /** * @desc The unspecified ANY header. * * @member commonHeader * @member seqNumber * @member lifetime * @member reserved */ type record AnyHeader { CommonHeader commonHeader, UInt16 seqNumber, Lifetime lifetime, UInt8 reserved } /** * @desc The BEACON packet header. * * @see Draft ETSI TS 102 636-4-1 V0.0.6 (2010-06) chapter 7.6.6 * * @member commonHeader */ type record BeaconHeader { CommonHeader commonHeader } /** * @desc The GEOANYCAST packet header. * * @see Draft ETSI TS 102 636-4-1 V0.0.6 (2010-06) chapter 7.6.5 * * @member commonHeader * @member seqNumber * @member lifetime * @member reserved * @member srcPosVector * @member geoAreaPosLatitude * @member geoAreaPosLongitude * @member distanceA * @member distanceB * @member angle * @member reserved */ type record GeoAnycastHeader { CommonHeader commonHeader, UInt16 seqNumber, Lifetime lifetime, UInt8 reserved, LongPosVector srcPosVector, UInt32 geoAreaPosLatitude, UInt32 geoAreaPosLongitude, UInt16 distanceA, UInt16 distanceB, UInt8 angle, UInt24 reserved2 } /** * @desc The GEOBROADCAST packet header. * * @see Draft ETSI TS 102 636-4-1 V0.0.6 (2010-06) chapter 7.6.5 * * @member commonHeader * @member seqNumber * @member lifetime * @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 Draft ETSI TS 102 636-4-1 V0.0.6 (2010-06) chapter 7.6.2 * * @member commonHeader * @member seqNumber * @member lifetime * @member reserved * @member srcPosVector * @member dstPosVector */ type record GeoUnicastHeader { CommonHeader commonHeader, UInt16 seqNumber, Lifetime lifetime, UInt8 reserved, LongPosVector srcPosVector, ShortPosVector dstPosVector } /** * @desc The Location Service (LS) Reply packet header. * * @see Draft ETSI TS 102 636-4-1 V0.0.6 (2010-06) chapter 7.6.8 * * @member commonHeader * @member seqNumber * @member lifetime * @member reserved * @member srcPosVector * * @remark Added DEPV: http://t-ort.etsi.org/view.php?id=5674 */ type record LSReplyHeader { CommonHeader commonHeader, UInt16 seqNumber, Lifetime lifetime, UInt8 reserved, LongPosVector srcPosVector, LongPosVector dstPosVector } /** * @desc The Location Service (LS) Request packet header. * * @see Draft ETSI TS 102 636-4-1 V0.0.6 (2010-06) chapter 7.6.7 * * @member commonHeader * @member seqNumber * @member lifetime * @member reserved * @member srcPosVector * @member gnAddress */ type record LSRequestHeader { CommonHeader commonHeader, UInt16 seqNumber, Lifetime lifetime, UInt8 reserved, LongPosVector srcPosVector, GN_Address gnAddress } /** * @desc TODO clarify the values for header type and header subtype * The Single Hop Broadcast (SHB) packet header. * * @see Draft ETSI TS 102 636-4-1 V0.0.6 (2010-06) chapter 7.6.4 * * @member commonHeader */ type record SHBHeader { CommonHeader commonHeader } /** * @desc The Topologically-Scoped Broadcast (TSB) packet header. * * @see Draft ETSI TS 102 636-4-1 V0.0.6 (2010-06) chapter 7.6.3 * * @member commonHeader * @member seqNumber * @member lifetime * @member reserved * @member srcPosVector */ type record TSBHeader { CommonHeader commonHeader, UInt16 seqNumber, Lifetime lifetime, UInt8 reserved, LongPosVector srcPosVector } 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 reserved } /** * @desc Identifies the header type and the header subtype for BEACON. * @member headerType * @member reserved */ type record BeaconHeaderType { HeaderType headerType(e_beacon), UInt4 reserved } /** * @desc Common header for GeoNetworking * *
                 *  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
                 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                 * |Version|  NH   |  HT   |  HST  |   Reserved    |     Flags     |
                 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                 * |              PL               |      TC       |      HL       |
                 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                 * |                             SE PV                             |
                 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                 * 
* * @see Draft ETSI TS 102 636-4-1 V0.0.6 (2010-06) chapter 7.4.2 * * @member version * @member nextHeader * @member headerType * @member headerSubType * @member reserved * @member flags * @member plLength * @member trafficClass * @member hopLimit * @member longPosVec */ type record CommonHeader { UInt4 version, NextHeader nextHeader, HeaderTST headerTST, UInt8 reserved, Flags flags, UInt16 plLength, TrafficClass trafficClass, UInt8 hopLimit, LongPosVector longPosVec } /** * @desc Identifies the header type and the header subtype for GEOANYCAST. * @member headerType * @member reserved */ type record GeoAnycastHeaderType { HeaderType headerType(e_geoAnycast), HeaderSubTypeGeoAnycast headerSubType } /** * @desc Identifies the header type and the header subtype for GEOBROADCAST. * @member headerType * @member reserved */ type record GeoBroadcastHeaderType { HeaderType headerType(e_geoBroadcast), HeaderSubTypeGeoBroadcast headerSubType } /** * @desc Identifies the header type and the header subtype for GEOUNICAST. * @member headerType * @member reserved */ type record GeoUnicastHeaderType { HeaderType headerType(e_geoUnicast), UInt4 reserved } /** * @desc Identifies the header subtype for GEOANYCAST. */ type enumerated HeaderSubTypeGeoAnycast { e_geoAnycastCircle(0), e_geoAnycastRect(1), e_geoAnycastElip(2), e_reserved } /** * @desc Identifies the header subtype for GEOBROADCAST. */ type enumerated HeaderSubTypeGeoBroadcast { e_geoBroadcastCircle(0), e_geoBroadcastRect(1), e_geoBroadcastElip(2), e_reserved } /** * @desc Identifies the header subtype for Location Service LS. */ type enumerated HeaderSubTypeLs { e_lsRequest(0), e_lsReply(1), e_reserved } /** * @desc Identifies the header subtype for Service Announcement SA. */ type enumerated HeaderSubTypeSa { e_sa(0), e_saEos(1), e_reserved } /** * @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 } /** * @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 } /** * @desc Long Position Vector * *
                 *  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                             |
                 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                 * |                           GN_ADDR                             |
                 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                 * |                             TST                               |
                 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                 * |                             Lat                               |
                 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                 * |                             Long                              |
                 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                 * |               S               |               H               |
                 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                 * |              Alt              | TAcc  |PosAcc |SAcc |HAcc |AA |
                 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                 * 
* * @see Draft ETSI TS 102 636-4-1 V0.0.6 (2010-06) chapter 7.4.2 * * @member gnAddr * @member timestamp * @member latitute * @member longitude * @member speed * @member heading * @member altitude * @member timeAccuracy * @member posAccuracy * @member speedAccuracy * @member headingAccuracy * @member altitudeAccuracy */ type record LongPosVector { GN_Address gnAddr, UInt32 timestamp, UInt32 latitute, UInt32 longitude, UInt16 speed, UInt16 heading, UInt16 altitude, UInt4 timeAccuracy, UInt4 posAccuracy, UInt3 speedAccuracy, UInt3 headingAccuracy, UInt2 altitudeAccuracy } /** * @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 } /** * @desc Identifies the type of header immediately following the GeoNetworking header (4Bits). */ type enumerated NextHeader { e_any(0), e_btp(1), e_ipv6(2), e_reserved } /** * @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 } /** * @desc Short Position Vector * *
                 *  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                             |
                 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                 * |                           GN_ADDR                             |
                 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                 * |                             TST                               |
                 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                 * |                             Lat                               |
                 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                 * |                             Long                              |
                 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                 * 
* * @see Draft ETSI TS 102 636-4-1 V0.0.6 (2010-06) chapter 7.4.3 * * @member gnAddr * @member timestamp * @member latitute * @member longitude */ type record ShortPosVector { GN_Address gnAddr, UInt32 timestamp, UInt32 latitute, UInt32 longitude } /** * @desc Identifies the header type and the header subtype for Topologically-Scoped Broadcast TSB. * @member headerType * @member reserved */ type record TsbHeaderType { HeaderType headerType(e_topologicallyScopedBroadcast), UInt4 reserved } group geoNetworkingAddress { /** * @desc GeoNetworking address * *
                     *  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| R |         S_CC          |     S_LAC     | M_ID  |
                     * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                     * |                              M_ID                             |
                     * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                     * 
* * @see Draft ETSI TS 102 636-4-1 V0.0.6 (2010-06) chapter 5.2 * * @member typeOfAddress * @member stationType * @member stationSubType * @member reserved * @member stationCountryCode * @member slac * @member mid */ type record GN_Address { TypeOfAddress typeOfAddress, StationType stationType, StationSubType stationSubType, UInt2 reserved, UInt12 stationCountryCode, UInt8 slac, UInt36 mid } group geoNetworkingAddressSubtypes { /** * @desc Distinguishes the ITS station type. * @member reserved * @member stationType * @member reserved2 */ type record Flags { UInt6 reserved, StationTypeIdentifier stationType, UInt1 reserved2 } /** * @desc Latency expresses the relative packet delivery latency in a geographical area (2Bits). */ type enumerated Latency { e_veryLow(0), e_low(1), e_medium(2), e_high(3) } /** * @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 } /** * @desc The base for the calculation of the lifetime. */ type enumerated LtBase { e_50ms(0), e_1s(1), e_10s(2), e_100s(3) } /** * @desc Reliability means the relative probability of correctly receiving a packet in a geographical area (2Bits). */ type enumerated Reliability { e_veryHigh(0), e_high(1), e_medium(2), e_low(3) } /** * @desc Identifies a roadside station (4Bits). * @member id, constant 1 * @member rsKind */ type record RoadsideStation { StationTypeIdentifier stationType(e_roadsideStation), RsKind rsKind } /** * @desc Identifies a roadside station (3Bits). */ type enumerated RsKind { e_trafficLight(0), e_ordinary(1), e_reserved } /** * @desc Distinguishes between public and private ITS stations (1Bits). */ type enumerated StationSubType { e_public(0), e_private(1) } /** * @desc Identifies the ITS station (4Bits). * @member vehicleStation, if first bit is 0 * @member roadsideStation, if first bit is 1 */ type union StationType { VehicleStation vehicleStation, RoadsideStation roadsideStation } /** * @desc Identifies the type of station (1Bit). */ type enumerated StationTypeIdentifier { e_vehicleStation(0), e_roadsideStation(1) } /** * @desc Identifies the traffic class bye relevance, reliability and latency. * @member reserved * @member relevance * @member reliability * @member latency */ type record TrafficClass { UInt1 reserved(0), UInt3 relevance, Reliability reliability, Latency latency } /** * @desc Distinguish between manually configured * network address and the initial GeoNetwork address (1Bit). */ type enumerated TypeOfAddress { e_manual(1), e_initial(0) } /** * @desc Identifies a vehicle station (4Bits). * @member id, constant 0 * @member vsKind */ type record VehicleStation { StationTypeIdentifier stationType(e_vehicleStation), VsKind vsKind } /** * @desc Identifies a vehicle station (3Bits). */ type enumerated VsKind { e_bike(0), e_motorbike(1), e_car(2), e_truck(3), e_bus(4), e_reserved } } // end group geoNetworkingAddressSubtypes } // end group geoNetworkingAddress } // end group geoNetworkingHeadersSubtypes } // end group geoNetworkingHeaders } // end group geoNetworkingHeader group geoNetworkingSecurityHeader { /** * @desc TODO add specific type when definition is available * The specification of the GeoNetworking security header is outside the scope of current standard. */ type anytype SecHeader; } //end group geoNetworkingSecurityHeader group geoNetworkingPayload { /** * @desc TODO change it to concrete union value */ type octetstring Payload; } //end group geoNetworkingPayload group geoNwPicsTypes { type enumerated GeoUnicastForwardingAlgorithm { e_unspecified(0), e_greedy(1) } type enumerated GeoBroadcastForwardingAlgorithm { e_unspecified(0), e_simple(1) } } // end geoNwPicsTypes } with { encode "LibItsGeoNetworking_TypesAndValues" }