LibItsGeoNetworking_TypesAndValues.ttcn 34 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;

    //LibIts
    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 {
        
        const integer c_multipleMessagesCount := 5;
berge's avatar
berge committed
        const UInt6 c_defaultLifetime := 10; // in seconds
berge's avatar
berge committed
        
    } // end geoTestingConstants
    
    group geoConfigurationTypes {
        
        type record PositionEntry {
            charstring key,
            LongPosVector position   
        }
        
        type record of PositionEntry PositionTable;
        
berge's avatar
berge committed
        type record Area {
berge's avatar
berge committed
            UInt32 geoAreaPosLatitude,
            UInt32 geoAreaPosLongitude,
            UInt16 distanceA,
            UInt16 distanceB,
            UInt8 angle    
        }
berge's avatar
berge committed
                
        type record GeoBroadcastArea {
berge's avatar
berge committed
            HeaderSubTypeGeoBroadcast geoBroadcastSubType,
            Area geoBroadcastArea
        }
berge's avatar
berge committed
        
        type record GeoAnycastArea {
berge's avatar
berge committed
            HeaderSubTypeGeoAnycast geoAnycastSubType,
            Area geoAnycastArea   
        }
        
        type record GeoArea {
            GeoShape shape,
            Area area
        }
        
        type enumerated GeoShape {
            e_geoCircle(0),
            e_geoRect(1),
            e_geoElip(2),
            e_reserved
        }
        
        type record GeoAreaEntry {
            charstring key,
            GeoArea geoArea
        }
        
        type record of GeoAreaEntry GeoAreaTable;
berge's avatar
berge committed
                
    } // 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 Draft ETSI TS 102 636-4-1 V0.0.8 (2010-09) 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 Draft ETSI TS 102 636-4-1 V0.0.8 (2010-09) 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 Draft ETSI TS 102 636-4-1 V0.0.8 (2010-09) chapter 8.6.6
             *
             * @member commonHeader
             */
            type record BeaconHeader {
                CommonHeader    commonHeader
            }
            
            /**
             * @desc The GEOANYCAST packet header.
             * @see Draft ETSI TS 102 636-4-1 V0.0.8 (2010-09) 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,
                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.8 (2010-09) 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 Draft ETSI TS 102 636-4-1 V0.0.8 (2010-09) 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 Draft ETSI TS 102 636-4-1 V0.0.8 (2010-09) 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 Draft ETSI TS 102 636-4-1 V0.0.8 (2010-09) 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 Draft ETSI TS 102 636-4-1 V0.0.8 (2010-09) chapter 8.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.8 (2010-09) 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 Draft ETSI TS 102 636-4-1 V0.0.8 (2010-09) 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,
                    TrafficClass    trafficClass,
                    UInt8           hopLimit,
                    LongPosVector   senderPosVector
                 * @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
                 * @desc Identifies the header subtype for GEOBROADCAST.
                type enumerated HeaderSubTypeGeoBroadcast {
                    e_geoBroadcastCircle(0),
                    e_geoBroadcastRect(1),
                    e_geoBroadcastElip(2),
                    e_reserved
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
                }
                
                 * @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
                 * 
                 * <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 Draft ETSI TS 102 636-4-1 V0.0.8 (2010-09) 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,
                    UInt32      latitude,
                    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
                 * 
                 * <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 Draft ETSI TS 102 636-4-1 V0.0.8 (2010-09) chapter 8.4.3
                 * 
                 * @member gnAddr
                 * @member timestamp
                 * @member latitude
                 * @member longitude
                type record ShortPosVector {
                    GN_Address  gnAddr,
                    UInt32      timestamp,
                    UInt32      latitude,
                    UInt32      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 Draft ETSI TS 102 636-4-1 V0.0.8 (2010-09) 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)
                         * @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 {
        
        /**
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 ipv6Packet The IPv6 packet
         * @member otherPayload Any other payload
         */
        type union Payload {
            Ipv6Packet ipv6Packet,
            octetstring otherPayload
        }
        
    } //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)
         }
        
    } // end geoNwPicsTypes
    group utPrimitives {
        
        type record UtGNInitialize {
        }
        
        type union UtGNEvent {
            GenerateGeoUnicastMessage geoUnicast,
            GenerateGeoBroadcastMessage geoBroadcast,
            GenerateGeoAnycastMessage geoAnycast,
            GenerateSHBMessage shb,
            GenerateTSBMessage tsb,
tepelmann's avatar
tepelmann committed
            ChangePosition changePosition,
            GeoNetworkingPacket checkPacket
        }
        
        type record GenerateGeoUnicastMessage {
            GN_Address gnAddress,
            integer lifetime optional,
            Payload payload optional
        }
        
        type record GenerateGeoBroadcastMessage {
            GeoArea area,
            Payload payload optional
        }
        
        type GenerateGeoBroadcastMessage GenerateGeoAnycastMessage;
        
        type record GenerateSHBMessage {
            Payload payload optional
        }
        
        type GenerateSHBMessage GenerateTSBMessage;
        
tepelmann's avatar
tepelmann committed
        type record ChangePosition {
        }
        
    } // end utPrimitives

    group acPrimitives {
berge's avatar
berge committed
        type union AcGnPrimitive {
            AcStartBeaconing startBeaconing,
            AcStopBeaconing stopBeaconing,
            AcStartPassBeaconing startPassBeaconing,
            AcStopPassBeaconing stopPassBeaconing,
            AcStartBeaconingMultipleNeighbour startBeaconingMultipleNeighbour,
            AcStopBeaconingMultipleNeighbour stopBeaconingMultipleNeighbour,
berge's avatar
berge committed
            AcGetLongPosVector getLongPosVector
berge's avatar
berge committed
        type union AcGnResponse {
            LongPosVector getLongPosVector
        }
        
        type record AcStartBeaconing {
            BeaconHeader beaconHeader
        }
        
        type record AcStopBeaconing {
        type record AcStartPassBeaconing {
            BeaconHeader beaconHeader
        }
        
        type record AcStopPassBeaconing {
        }
        
        type record AcStartBeaconingMultipleNeighbour {
            BeaconHeader beaconHeader,
            integer numberOfNeighbour
        }
        
        type record AcStopBeaconingMultipleNeighbour {
        }
        
berge's avatar
berge committed
        type record AcGetLongPosVector {
    } // end acPrimitives
    encode "LibItsGeoNetworking_TypesAndValues"