LibItsGeoNetworking_TypesAndValues.ttcn 40.9 KB
Newer Older
 *    @author     ETSI / STF405
 *  @version     $URL$
 *                $Id$
 *    @desc        Module containing types and values for GeoNetworking Protocol
 *
 */
module LibItsGeoNetworking_TypesAndValues {
    //LibCommon
    import from LibCommon_BasicTypesAndValues all;
    import from LibCommon_DataStrings all;

berge's avatar
berge committed
    import from LibItsBtp_TypesAndValues {type BtpPacket;}
    import from LibItsIpv6OverGeoNetworking_TypesAndValues {type Ipv6Packet;}
        
    group geoConfigurationValues {
        
        const charstring c_compIut := "IUT";
        const charstring c_compNodeA := "NodeA";
        const charstring c_compNodeB := "NodeB";
        const charstring c_compNodeC := "NodeC";
        const charstring c_compNodeD := "NodeD";
        
berge's avatar
berge committed
        const charstring c_area1 := "AREA1";
        const charstring c_area2 := "AREA2";
        const integer c_latitudeFactorNodeA := 3;
        const integer c_latitudeFactorNodeB := 2;
        const integer c_latitudeFactorNodeC := -1;
        const integer c_latitudeFactorNodeD := 1;
        const integer c_longitudeFactorNodeA := 0;
        const integer c_longitudeFactorNodeB := 0;
        const integer c_longitudeFactorNodeC := 0;
        const integer c_longitudeFactorNodeD := 0;
berge's avatar
berge committed
                        
    } // end geoConfigurationValues

    group geoSyncMessages {
        
        const charstring c_msgSent := "Message sent";
        
    } // end geoSyncMessages
    
berge's avatar
berge committed
    group geoTestingConstants {
        
berge's avatar
berge committed
        const UInt6 c_defaultLifetime := 10; // in seconds
berge's avatar
berge committed
        
    } // end geoTestingConstants
    
    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
         */
berge's avatar
berge committed
        type record Area {
            Int32  geoAreaPosLatitude,
            Int32  geoAreaPosLongitude,
berge's avatar
berge committed
            UInt16 distanceA,
            UInt16 distanceB,
            UInt16 angle    
berge's avatar
berge committed
        }
berge's avatar
berge committed
                
        /**
         * @desc    Compact definition of GeoBroadcastArea
         * @member  geoBroadcastSubType Type of GeoBroadcastArea (=shape)
         * @member  geoBroadcastArea    Parameters of the geometric area  
         */
        type record GeoBroadcastArea {
berge's avatar
berge committed
            HeaderSubTypeGeoBroadcast geoBroadcastSubType,
            Area geoBroadcastArea
        }
berge's avatar
berge committed
        
        /**
         * @desc    Compact definition of GeoAnycastArea
         * @member  geoAnycastSubType   Type of GeoAnycastArea (=shape)
         * @member  geoAnycastArea      Parameters of the geometric area
         */
        type record GeoAnycastArea {
berge's avatar
berge committed
            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
        
berge's avatar
berge committed
    } // end geoNwValues
    group geoNetworkingPdus {

        /**
         * @desc GeoNetworking Packet
         * 
         * @see ETSI TS 102 636-4-1 chapter 8.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 ETSI TS 102 636-4-1 chapter 8.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
        }
    
        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 ETSI TS 102 636-4-1 chapter 8.6.6
             *
             * @member commonHeader
             */
            type record BeaconHeader {
                CommonHeader    commonHeader
            }
            
            /**
             * @desc The GEOANYCAST packet header.
             * @see ETSI TS 102 636-4-1 chapter 8.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,
                Int32           geoAreaPosLatitude,
                Int32           geoAreaPosLongitude,
                UInt16          distanceA,
                UInt16          distanceB,
                UInt16          angle,
             * @desc The GEOBROADCAST packet header.
             * @see ETSI TS 102 636-4-1 chapter 8.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 ETSI TS 102 636-4-1 chapter 8.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 ETSI TS 102 636-4-1 chapter 8.6.8
             *
             * @member commonHeader
             * @member seqNumber
             * @member lifetime
             * @member reserved
             * @member srcPosVector
             */
            type record LSReplyHeader {
                CommonHeader    commonHeader,
                UInt16          seqNumber,
                Lifetime        lifetime,
                UInt8           reserved,
                LongPosVector   srcPosVector,
                ShortPosVector  dstPosVector
            
            /**
             * @desc The Location Service (LS) Request packet header.
             *
             * @see ETSI TS 102 636-4-1 chapter 8.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
            }
            
            /**
             * The Single Hop Broadcast (SHB) packet header.
             * @see ETSI TS 102 636-4-1 chapter 8.6.4
             *
             * @member commonHeader
             */
            type record SHBHeader {
                CommonHeader    commonHeader
            }
            
            /**
             * @desc The Topologically-Scoped Broadcast (TSB) packet header.
             *
             * @see ETSI TS 102 636-4-1 chapter 8.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),
fischer's avatar
fischer committed
                    UInt4       headerSubType 
                 * @desc Identifies the header type and the header subtype for BEACON.
                 * @member headerType
                 * @member reserved
                type record BeaconHeaderType {
                    HeaderType  headerType(e_beacon),
fischer's avatar
fischer committed
                    UInt4       headerSubType
                /**
                 * @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
                 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                 * |Version|  NH   |  HT   |  HST  |   Reserved    |     Flags     |
                 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                 * |              PL               |      TC       |      HL       |
                 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                 * |                             SE PV                             |
                 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                 * </pre>
                 *
                 * @see ETSI TS 102 636-4-1 chapter 8.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,
                    UInt16          plLength, // The Codec shall set the length of the paylaod if present
                    TrafficClass    trafficClass,
                    UInt8           hopLimit,
                    LongPosVector   senderPosVector
                } with { encode(plLength) "MarkForUpdate" };
                 * @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),
fischer's avatar
fischer committed
                    UInt4       headerSubType
                 * @desc Identifies the header subtype for GEOANYCAST.
                type enumerated HeaderSubTypeGeoAnycast {
                    e_geoAnycastCircle(0),
                    e_geoAnycastRect(1),
                    e_geoAnycastElip(2),
                    e_reserved
                } with {
                    variant "4 bits"
                 * @desc Identifies the header subtype for GEOBROADCAST.
                type enumerated HeaderSubTypeGeoBroadcast {
                    e_geoBroadcastCircle(0),
                    e_geoBroadcastRect(1),
                    e_geoBroadcastElip(2),
                    e_reserved
                } with {
                    variant "4 bits"
tepelmann's avatar
tepelmann committed
                /**
                 * @desc Identifies the header subtype for Topologically-scoped broadcast TSB.
                 */
                type enumerated HeaderSubTypeTSB {
                    e_singleHop(0),
                    e_multiHop(1),
                    e_reserved
                } with {
                    variant "4 bits"
                 * @desc Identifies the header subtype for Location Service LS.
                type enumerated HeaderSubTypeLs {
                    e_lsRequest(0),
                    e_lsReply(1),
                    e_reserved
                } with {
                    variant "4 bits"
                 * @desc Identifies the header subtype for Service Announcement SA.
                type enumerated HeaderSubTypeSa {
                    e_sa(0),
                    e_saEos(1),
                    e_reserved
                } with {
                    variant "4 bits"
                 * @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
garciay's avatar
garciay committed
                } with {
                    variant "4 bits"
                 * @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                             |
                 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                 * |                           GN_ADDR                             |
                 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                 * |                             TST                               |
                 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                 * |                             Lat                               |
                 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                 * |                             Long                              |
                 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                 * |               S               |               H               |
                 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                 * |              Alt              | TAcc  |PosAcc |SAcc |HAcc |AA |
                 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                 * </pre>
                 *
                 * @see ETSI TS 102 636-4-1 chapter 8.4.2
                 * 
                 * @member gnAddr
                 * @member timestamp
                 * @member latitude
                 * @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,
                    Int32       latitude,
                    Int32       longitude,
                    Int16       speed,
                    UInt16      heading,
                    UInt4       timeAccuracy,
                    UInt4       posAccuracy,
                    UInt3       speedAccuracy,
                    UInt3       headingAccuracy,
                    UInt2       altitudeAccuracy
                
                type record AcGnResponseFailure {
                    boolean     failure
                }
                 * @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_btpA(1),
                    e_btpB(2),
                    e_ipv6(3),
                    e_reserved
garciay's avatar
garciay committed
                } with {
                    variant "4 bits"
                 * @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
                 * 
                 * <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                             |
                 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                 * |                           GN_ADDR                             |
                 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                 * |                             TST                               |
                 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                 * |                             Lat                               |
                 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                 * |                             Long                              |
                 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                 * </pre>
                 *
                 * @see ETSI TS 102 636-4-1 chapter 8.4.3
                 * 
                 * @member gnAddr
                 * @member timestamp
                 * @member latitude
                 * @member longitude
                type record ShortPosVector {
                    GN_Address  gnAddr,
                    UInt32      timestamp,
                    Int32       latitude,
                    Int32       longitude
                 * @desc Identifies the header type and the header subtype for Topologically-Scoped Broadcast TSB.
                 * @member headerType
tepelmann's avatar
tepelmann committed
                 * @member headerSubType
                type record TsbHeaderType {
tepelmann's avatar
tepelmann committed
                    HeaderType       headerType(e_topologicallyScopedBroadcast),
                    HeaderSubTypeTSB headerSubType
                }
                
                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| R |         S_CC          |          M_ID         |
                     * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                     * |                              M_ID                             |
                     * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                     * </pre>
                     *
                     * @see ETSI TS 102 636-4-1 chapter 6.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,
fischer's avatar
fischer committed
                        UInt10          stationCountryCode,
                    }
                    
                    group geoNetworkingAddressSubtypes {
                        
                        /**
                         * @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)
garciay's avatar
garciay committed
                        } with {
                            variant "2 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
                         * @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 "2 bit"
                        
                        /**
                         * @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)
garciay's avatar
garciay committed
                        } with {
                            variant "2 bit"
                        /**
                         * @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
garciay's avatar
garciay committed
                        } with {
                            variant "3 bits"
                        }
                        
                        /**
                         * @desc Distinguishes between public and private ITS stations (1Bits).
                         */
                        type enumerated StationSubType {
                            e_public(0),
                            e_private(1)
garciay's avatar
garciay committed
                        } with {
                            variant "1 bit"
                        /**
                         * @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)
garciay's avatar
garciay committed
                        } with {
                            variant "1 bit"
                        }
                        
                        /**
                         * @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)
garciay's avatar
garciay committed
                        } with {
                            variant "1 bit"
                         * @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
garciay's avatar
garciay committed
                        } with {
                            variant "3 bits"
                    } // end group geoNetworkingAddressSubtypes
                
                } // end group geoNetworkingAddress
                
            } // end group geoNetworkingHeadersSubtypes
        
        } // end group geoNetworkingHeaders
    
    } // end group geoNetworkingHeader
    
    group geoNetworkingSecurityHeader {
        
        /**
tepelmann's avatar
tepelmann committed
         * @desc The security header
         * @remark 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 {
        
tepelmann's avatar
tepelmann committed
        /**
         * @desc The payload of the GN packet
         * @member decodedPayload The decoded payload
         * @member rawPayload Raw payload as it is received
tepelmann's avatar
tepelmann committed
         */
        type record Payload {
            DecodedPayload decodedPayload optional,
            octetstring rawPayload
        }

        /**
         * @desc The decoded payload of the GN packet
         * @member ipv6Packet The IPv6 packet
         * @member btpPacket BTP packet
         */        
        type union DecodedPayload {
            BtpPacket btpPacket	
        } with { 
            encode (ipv6Packet) "LibItsIpv6OverGeoNetworking_TypesAndValuesCodec"; 
            encode (btpPacket) "LibItsBtp_TypesAndValuesCodec" 
        
    } //end group geoNetworkingPayload
tepelmann's avatar
tepelmann committed
         /**
          * @desc The GeoUnicast forwarding algorithm.
          */
         type enumerated GeoUnicastForwardingAlgorithm {
             e_unspecified(0),
             e_greedy(1),
             e_cbf(2)
tepelmann's avatar
tepelmann committed
         /**
          * @desc The GeoBroadcast forwarding algorithm.
          */
         type enumerated GeoBroadcastForwardingAlgorithm {
             e_unspecified(0),
             e_simple(1),
berge's avatar
berge committed
             e_advanced(2)
        
    } // end geoNwPicsTypes
    group utPrimitives {
reinaortega's avatar
reinaortega committed

        group utCommonPrimitives {
        	
		    /**
		     * @desc Upper Tester message to initialize IUT 
		     */
		    type union UtInitialize {
		        UtGNInitialize utGNInitialize
		    }

	        /**
	         * @desc Upper Tester message describing an action/event 
	         */
	        type union UtEvent {
	            UtGNEvent utGnEvent
	        }
	        		    
		    /**
		     * @desc Upper Tester message to trigger an action on IUT 
		     */
		    type record UtTrigger {
		        UtEvent utEvent
		    }
		    
		    /**
		     * @desc Upper Tester message to check event/status on IUT 
		     */    
		    type record UtCheck {
		        UtEvent utEvent
		    }
		    
		    /**
		     * @desc Upper Tester response message  
		     */    
		    type boolean UtResult;
		    
		}
		with {
		    encode "LibItsCommon_TypesAndValues"
		}
        /**
         * @desc    Upper tester primitive to initialise IUT
         */
        type record UtGNInitialize {
        }
        
        /**
         * @desc    UT primitives for GeoNetworking
         * @member  geoUnicast      -
         * @member  geoBroadcast    -
         * @member  geoAnycast      -
         * @member  shb             -
         * @member  tsb             -
         * @member  changePosition  -
         * @member  checkPacket     -
         */
        type union UtGNEvent {
            GenerateGeoUnicastMessage geoUnicast,
            GenerateGeoBroadcastMessage geoBroadcast,
            GenerateGeoAnycastMessage geoAnycast,
            GenerateSHBMessage shb,