Newer
Older
* @author ETSI / STF405
* @version $URL$
* $Id$
* @desc GeoNetworking Templates
module LibItsGeoNetworking_Templates {
// Libcommon
import from LibCommon_BasicTypesAndValues all;
import from LibCommon_DataStrings all;
// LibIts
import from LibIts_Interface all;
import from LibItsGeoNetworking_TypesAndValues all;
import from LibItsGeoNetworking_Pixits all;
import from LibItsCommon_TypesAndValues all;
group geoNwPrimitivesTemplates {
/**
* @desc Send template for GeoNetworking packet (GeonetworkingPort Primitive)
* @param p_geoNwMsg GeoNetworking packet to be sent
*/
template (value) GeoNetworkingReq m_geoNwReq(
template (value) GeoNetworkingPacket p_geoNwMsg
) := {
msgOut := p_geoNwMsg
}
/**
* @desc Receive template for GeoNetworking packet (GeonetworkingPort Primitive)
* @param p_geoNwMsg GeoNetworking packet to be received
*/
template GeoNetworkingInd mw_geoNwInd(
template (present) GeoNetworkingPacket p_geoNwMsg
) := {
msgIn := p_geoNwMsg
}
/**
* @desc Initializes the GN IUT.
*/
template (value) UtInitialize m_gnInitialize := {
utGNInitialize := {
}
}
/**
* @desc Request IUT to send a GeoUnicast message to a specific destination
* @param p_destinationGnAddr Destination of the GeoUnicast message
template UtEvent m_generateGeoUnicastMessage(GN_Address p_destinationGnAddr) := {
utGnEvent := {
geoUnicast := {
gnAddress := p_destinationGnAddr,
lifetime := omit,
payload := omit
}
/**
* @desc Request IUT to send a GeoUnicast message to a specific destination with specific lifetime
* @param p_destinationGnAddr Destination of the GeoUnicast message
* @param p_lifetime Lifetime of the GeoUnicast message
template UtEvent m_generateGeoUnicastMessageWithLifetime(
GN_Address p_destinationGnAddr,
integer p_lifetime
) modifies m_generateGeoUnicastMessage := {
utGnEvent := {
geoUnicast := {
lifetime := p_lifetime
}
/**
* @desc Request IUT to send a GeoUnicast message to a specific destination with a payload
* @param p_destinationGnAddr Destination of the GeoUnicast message
template UtEvent m_generateGeoUnicastMessageWithPayload(
GN_Address p_destinationGnAddr,
Payload p_payload
) modifies m_generateGeoUnicastMessage := {
utGnEvent := {
geoUnicast := {
payload := p_payload
}
/**
* @desc Request IUT to send a GeoBroadcast message to a specific area
* @param p_area Destination area of the message
template UtEvent m_generateGeoBroadcastMessage(
utGnEvent := {
geoBroadcast := {
area := p_area,
payload := omit
}
/**
* @desc Request IUT to send a GeoBroadcast message to a specific area with a payload
* @param p_area Destination area of the message
* @param p_payload Payload of the GeoBroadcast message
template UtEvent m_generateGeoBroadcastMessageWithPayload(
Payload p_payload
) modifies m_generateGeoBroadcastMessage := {
utGnEvent := {
geoBroadcast := {
payload := p_payload
}
/**
* @desc Request IUT to send a GeoAnycast message to a specific area
* @param p_area Destination area of the message
template UtEvent m_generateGeoAnycastMessage(
utGnEvent := {
geoAnycast := {
area := p_area,
payload := omit
}
/**
* @desc Request IUT to send a GeoAnycast message to a specific area with a payload
* @param p_area Destination area of the message
* @param p_payload Payload of the GeoAnycast message
template UtEvent m_generateGeoAnycastMessageWithPayload(
Payload p_payload
) modifies m_generateGeoAnycastMessage := {
utGnEvent := {
geoAnycast := {
payload := p_payload
}
/**
* @desc Request IUT to send a SHB message
template UtEvent m_generateShbMessage := {
utGnEvent := {
shb := {
payload := omit
}
/**
* @desc Request IUT to send a SHB message with a payload
template UtEvent m_generateShbMessageWithPayload(
utGnEvent := {
shb := {
payload := p_payload
}
/**
* @desc Request IUT to send a TSB message
template UtEvent m_generateTsbMessage := {
utGnEvent := {
tsb := {
payload := omit
}
}
}
/**
* @desc Request IUT to change its position
*/
template (value) UtEvent m_changePosition := {
utGnEvent := {
changePosition := {}
}
}
/**
* @desc Checks the receive of a packet
* @param p_packet The GN packet to check
*/
template (value) UtEvent m_checkPacket(template (value) GeoNetworkingPacket p_packet) := {
utGnEvent := {
checkPacket := p_packet
}
}
} // end utPrimitives
/**
* @desc Testsystem will start beaconing for the given neighbor
* @param p_beaconHeader The neighbor information
template (value) AcGnPrimitive m_startBeaconing(
template (value) BeaconHeader p_beaconHeader
) := {
startBeaconing := {
beaconHeader := p_beaconHeader
}
}
/**
* @desc Testsystem will stop beaconing for the given neighbor
* @param p_compName The neighbor
stopBeaconing:= {
}
}
/**
* @desc Testsystem will pass received to the TTCN-3
* @param p_beaconHeader The neighbor information
*/
template (value) BeaconHeader p_beaconHeader
) := {
startPassBeaconing := {
beaconHeader := p_beaconHeader
}
}
/**
* @desc Testsystem will stop passing beacon information to the TTCN-3
*/
template AcGnPrimitive m_stopPassBeaconing := {
stopPassBeaconing := {
}
}
* @desc Testsystem will start beaconing for multiple neighbors
* @param p_beaconHeader The neighbor information
* @param p_numberOfNeighbour The number of ITS stations for which TS will send beacons
template (value) AcGnPrimitive m_startBeaconingMultipleNeighbour(
template (value) BeaconHeader p_beaconHeader,
integer p_numberOfNeighbour
) := {
startBeaconingMultipleNeighbour := {
beaconHeader := p_beaconHeader,
numberOfNeighbour := p_numberOfNeighbour
}
}
/**
* @desc Testsystem will stop beaconing for multiple neighbors
* @param p_compName The neighbor
*/
template AcGnPrimitive m_stopBeaconingMultipleNeighbour := {
stopBeaconingMultipleNeighbour:= {
}
}
/**
* @desc Testsystem will reply the LongPosVector including the requested GN address
* found in received beacon information to the TTCN-3
* @param p_gnAddress The GN address included in the LongPosVector
template AcGnPrimitive m_getLongPosVector(GN_Address p_gnAddress) := {
getLongPosVector := {
gnAddress := p_gnAddress
}
}
/**
* @desc Receive template adapter control result for long position vector with specific GN_Address
* @param p_gnAddress GN_Address to be contained in the long position vector
*/
template AcGnResponse mw_getLongPosVectorAny(template (present) GN_Address p_gnAddress) := {
getLongPosVector := mw_longPosVectorAny(p_gnAddress)
}
} // geoNwPrimitivesTemplates
group geoNwPduTemplates {
/**
* @desc Send template for GeoNetworking PDU
* @param p_header Header value of GeoNetworking message
*/
template (value) GeoNetworkingPacket m_geoNwPdu(
in template (value) Header p_header
) := {
header := p_header,
secHeader := omit,
/**
* @desc Send template for GeoNetworking PDU with payload
* @param p_header Header value of GeoNetworking message
*/
template (value) GeoNetworkingPacket m_geoNwPduWithPayload(
in template (value) Header p_header,
in template (value) Payload p_payload
) modifies m_geoNwPdu := {
payload := p_payload
}
/**
* @desc Receive template for GeoNetworking PDU
* @param p_header Header value of GeoNetworking message
*/
template GeoNetworkingPacket mw_geoNwPdu(
in template (present) Header p_header
) := {
header := p_header,
secHeader := *,
/**
* @desc Receive template for GeoNetworking PDU with any payload
* @param p_header Header value of GeoNetworking message
*/
template GeoNetworkingPacket mw_geoNwPduAnyPayload(
in template (present) Header p_header
) modifies mw_geoNwPdu := {
/**
* @desc Receive template for GeoNetworking PDU with payload
* @param p_header Header value of GeoNetworking message
*/
template GeoNetworkingPacket mw_geoNwPduWithPayload(
in template (present) Header p_header,
in template (present) Payload p_payload
) modifies mw_geoNwPdu := {
payload := p_payload
}
} // end geoNwPduTemplates
group geoNwHeadersTemplates {
group geoNwCommonHeaderTemplates {
/**
* @desc Send template for Common header
* @param p_nextHeader Id of next header
* @param p_headerTypeSubType Header's type and sub-type
* @param p_trafficClass Packet's traffic class
* @param p_hopLimit Maximum number of hops
* @param p_senderPosVec Long position vector of sender
* @remark plLength field is set to 0 and has to be computed by codec
template (value) CommonHeader m_commonHeader (
in template (value) HeaderTST p_headerTypeSubType,
in template (value) TrafficClass p_trafficClass,
in template (value) UInt8 p_hopLimit,
in template (value) LongPosVector p_senderPosVec
nextHeader := p_nextHeader,
plLength := 0, // will be computed by Codec
trafficClass := p_trafficClass,
hopLimit := p_hopLimit,
/**
* @desc Receive template for Common header
* @param p_senderLongPosVec Long position vector of sender
* @param p_nextHeader Id of next header
* @param p_headerTypeSubType Header's type and sub-type
template CommonHeader mw_commonHeader (
in template (present) LongPosVector p_senderLongPosVec,
in template (present) NextHeader p_nextHeader,
in template (present) HeaderTST p_headerTypeSubType
version := c_geoNwProtocolVersion,
nextHeader := p_nextHeader,
plLength := ?,
trafficClass := ?,
hopLimit := ?,
senderPosVector := p_senderLongPosVec
* @desc Receive template for Beacon common header
* @param p_trafficClass Packet's traffic class
* @param p_hopLimit Maximum number of hops
* @param p_senderLongPosVec Long position vector of sender
in template (present) TrafficClass p_trafficClass,
in template (present) UInt8 p_hopLimit,
nextHeader := e_any,
headerType := e_beacon,
headerSubType := 0
}
},
reserved := c_uInt8Zero,
plLength := 0,
trafficClass := p_trafficClass,
hopLimit := p_hopLimit,
senderPosVector := p_senderLongPosVec
}
/**
* @desc Receive template for Common header with specific Hop limit
* @param p_senderLongPosVec Long position vector of sender
* @param p_nextHeader Id of next header
* @param p_headerTypeSubType Header's type and sub-type
template CommonHeader mw_commonHeaderWithHopLimit (
in template (present) LongPosVector p_senderLongPosVec,
in template (present) HeaderTST p_headerTypeSubType,
) modifies mw_commonHeader := {
hopLimit := p_hopLimit
}
* @desc Receive template for Common header with specific Traffic Class
* @param p_senderLongPosVec Long position vector of sender
* @param p_nextHeader Id of next header
* @param p_headerTypeSubType Header's type and sub-type
* @param p_trafficClass Packet's traffic class
template CommonHeader mw_commonHeaderWithTrafficClass (
in template (present) LongPosVector p_senderLongPosVec,
in template (present) NextHeader p_nextHeader,
in template (present) HeaderTST p_headerTypeSubType,
in template (present) TrafficClass p_trafficClass
) modifies mw_commonHeader := {
trafficClass := p_trafficClass
}
/**
* @desc Default send template for traffic class
template (value) TrafficClass m_trafficClass := {
reserved := c_uInt1Zero,
relevance := c_uInt3Zero,
reliability := e_veryHigh,
latency := e_veryLow
}
/**
* @desc Receive template for traffic class
* @param p_reliability Reliability
* @param p_latency Latency
in template (present) Reliability p_reliability,
in template (present) Latency p_latency
) := {
reserved := c_uInt1Zero,
relevance := c_uInt3Zero,
reliability := p_reliability,
latency := p_latency
}
/**
* @desc Receive template for any GN_Address
template GN_Address mw_gnAddressAny := {
typeOfAddress := ?,
stationType := ?,
stationSubType := ?,
stationCountryCode := ?,
mid := ?
}
/**
* @desc Receive template for GN_Address
* @param p_stationType Station's type
* @param p_stationSubType Station's sub-type
* @param p_stationCountryCode Station's country code
template GN_Address mw_gnAddress(
in template (present) StationType p_stationType,
in template (present) StationSubType p_stationSubType,
in template (present) UInt10 p_stationCountryCode
) := {
typeOfAddress := ?,
stationType := p_stationType,
stationSubType := p_stationSubType,
stationCountryCode := p_stationCountryCode,
mid := ?
}
/**
* @desc Receive template for long position vector with specific GN_Address
* @param p_gnAddress GN_Address to be contained in the long position vector
in template (present) GN_Address p_gnAddress
) := {
longitude := ?,
speed := ?,
heading := ?,
altitude := ?,
timeAccuracy := ?,
posAccuracy := ?,
speedAccuracy := ?,
headingAccuracy := ?,
altitudeAccuracy := ?
}
/**
* @desc Receive template for long position vector with position check with delta
* @param p_longPosVector The base long position vector
*/
template LongPosVector mw_longPosVectorPosition(
) := {
gnAddr := p_longPosVector.gnAddr,
timestamp := ?,
latitude := (p_longPosVector.latitude-PX_POS_DELTA .. p_longPosVector.latitude+PX_POS_DELTA),
longitude := (p_longPosVector.longitude-PX_POS_DELTA .. p_longPosVector.longitude+PX_POS_DELTA),
speed := (p_longPosVector.speed-PX_POS_DELTA .. p_longPosVector.speed+PX_POS_DELTA),
heading := p_longPosVector.heading,
altitude := (p_longPosVector.altitude-PX_POS_DELTA .. p_longPosVector.altitude+PX_POS_DELTA),
timeAccuracy := ?,
posAccuracy := ?,
speedAccuracy := ?,
headingAccuracy := ?,
altitudeAccuracy := ?
}
/**
* @desc Receive template for short position vector with position check with delta
* @param p_shortPosVector The base short position vector
*/
template ShortPosVector mw_shortPosVectorPosition(
) := {
gnAddr := p_shortPosVector.gnAddr,
timestamp := ?,
latitude := (p_shortPosVector.latitude-PX_POS_DELTA..p_shortPosVector.latitude+PX_POS_DELTA),
longitude := (p_shortPosVector.longitude-PX_POS_DELTA..p_shortPosVector.longitude+PX_POS_DELTA)
}
} // end geoNwCommonHeaderTemplates
/**
* @desc Send template for GeoUnicast header
* @param p_sourceLongPosVec Long position vector of source
* @param p_destinationLongPosVec Long position vector of destination
* @param p_senderLongPosVec Long position vector of sender
* @param p_seqNumber Sequence number of GeoUnicast packet
*/
template (value) Header m_geoUnicastHeader(
in template (value) LongPosVector p_sourceLongPosVec,
in template (value) ShortPosVector p_destinationLongPosVec,
in template (value) LongPosVector p_senderLongPosVec,
in template (value) UInt16 p_seqNumber
) := {
geoUnicastHeader := {
commonHeader := m_commonHeader(
e_ipv6,
m_geoUnicastHeaderType,
m_trafficClass,
c_defaultHopLimit,
),
seqNumber := p_seqNumber,
lifetime := m_defaultLifetime,
srcPosVector := p_sourceLongPosVec,
dstPosVector := p_destinationLongPosVec
tepelmann
committed
* @desc Send template for GeoUnicast header with Hop limit
* @param p_sourceLongPosVec Long position vector of source
* @param p_destinationLongPosVec Long position vector of destination
* @param p_senderLongPosVec Long position vector of sender
* @param p_seqNumber Sequence number of GeoUnicast packet
* @param p_hopLimit Maximum number of hops
template (value) Header m_geoUnicastHeaderWithHopLimit(
in template (value) LongPosVector p_sourceLongPosVec,
in template (value) ShortPosVector p_destinationLongPosVec,
in template (value) LongPosVector p_senderLongPosVec,
in template (value) UInt16 p_seqNumber,
in template (value) UInt8 p_hopLimit
) modifies m_geoUnicastHeader := {
tepelmann
committed
geoUnicastHeader := {
commonHeader := {
hopLimit := p_hopLimit
}
}
/**
* @desc Receive template for GeoUnicast header
* @param p_senderLongPosVec Long position vector of sender
* @param p_destinationShortPosVec Long position vector of destination
* @param p_seqNumber Sequence number of GeoUnicast packet
*/
template Header mw_geoUnicastHeader(
in template (present) LongPosVector p_senderLongPosVec,
in template (present) ShortPosVector p_destinationShortPosVec,
in template (present) UInt16 p_seqNumber
) := {
geoUnicastHeader := {
commonHeader := mw_commonHeader(
),
seqNumber := p_seqNumber,
lifetime := ?,
srcPosVector := ?,
dstPosVector := p_destinationShortPosVec
* @desc Receive template for GeoUnicast header with source long position vector
* @param p_senderLongPosVec Long position vector of sender
* @param p_destinationShortPosVec Long position vector of destination
* @param p_seqNumber Sequence number of GeoUnicast packet
* @param p_srcLongPosVec Long position vector of source
*/
template Header mw_geoUnicastHeaderWithSourcePv(
in template (present) LongPosVector p_senderLongPosVec,
in template (present) ShortPosVector p_destinationShortPosVec,
in template (present) UInt16 p_seqNumber,
in template (present) LongPosVector p_srcLongPosVec
) modifies mw_geoUnicastHeader := {
geoUnicastHeader := {
srcPosVector := p_srcLongPosVec
}
}
* @desc Receive template for GeoUnicast header with specific hop limit
* @param p_senderLongPosVec Long position vector of sender
* @param p_destinationShortPosVec Long position vector of destination
* @param p_seqNumber Sequence number of GeoUnicast packet
*/
template Header mw_geoUnicastHeaderWithHopLimit(
in template (present) LongPosVector p_senderLongPosVec,
in template (present) ShortPosVector p_destinationShortPosVec,
in template (present) UInt16 p_seqNumber,
in template (present) UInt8 p_hopLimit
) modifies mw_geoUnicastHeader := {
/**
* @desc Receive template for GeoUnicast header with common header and lifetime
* @param p_sourceLongPosVec Long position vector of source
* @param p_destinationLongPosVec Long position vector of destination
* @param p_seqNumber Sequence number of GeoUnicast packet
* @param p_commonHeader Common header
* @param p_lifetime lifetime of the packet
*/
template Header mw_geoUnicastHeaderWithCommonHeaderWithLifetime(
in template (present) LongPosVector p_sourceLongPosVec,
in template (present) ShortPosVector p_destinationLongPosVec,
in template (present) UInt16 p_seqNumber,
in template (present) CommonHeader p_commonHeader,
in template (present) Lifetime p_lifetime
) := {
geoUnicastHeader := {
commonHeader := p_commonHeader,
seqNumber := p_seqNumber,
lifetime := p_lifetime,
reserved := c_uInt8Zero,
srcPosVector := p_sourceLongPosVec,
dstPosVector := p_destinationLongPosVec
}
}
/**
* @desc Send template for GeoUnicast header type
*/
template (value) HeaderTST m_geoUnicastHeaderType := {
/**
* @desc Receive template for GeoUnicast header type
template HeaderTST mw_geoUnicastHeaderType := {
geoUnicastHdr := {
group geoBroadcastHeaderTemplates {
/**
* @desc Send template for GeoBroadcast header
* @param p_sourceLongPosVec Long position vector of source
* @param p_senderLongPosVec Long position vector of sender
* @param p_seqNumber Sequence number of GeoBroadcast packet
* @param p_broadcastArea Destination GeoArea
*/
template (value) Header m_geoBroadcastHeader(
in template (value) LongPosVector p_sourceLongPosVec,
in template (value) LongPosVector p_senderLongPosVec,
in template (value) UInt16 p_seqNumber,
in template (value) GeoBroadcastArea p_broadcastArea
) := {
geoBroadcastHeader := {
commonHeader := m_commonHeader(
e_btp,
m_geoBroadcastHeaderType(p_broadcastArea.geoBroadcastSubType),
m_trafficClass,
c_defaultHopLimit,
),
seqNumber := p_seqNumber,
lifetime := m_defaultLifetime,
reserved := c_uInt8Zero,
srcPosVector := p_sourceLongPosVec,
geoAreaPosLatitude := p_broadcastArea.geoBroadcastArea.geoAreaPosLatitude,
geoAreaPosLongitude := p_broadcastArea.geoBroadcastArea.geoAreaPosLongitude,
distanceA := p_broadcastArea.geoBroadcastArea.distanceA,
distanceB := p_broadcastArea.geoBroadcastArea.distanceB,
angle := p_broadcastArea.geoBroadcastArea.angle,
reserved2 := c_uInt24Zero
}
}
* @desc Send template for GeoBroadcast header with hop limit
* @param p_sourceLongPosVec Long position vector of source
* @param p_senderLongPosVec Long position vector of sender
* @param p_seqNumber Sequence number of GeoBroadcast packet
* @param p_broadcastArea Destination GeoArea
template (value) Header m_geoBroadcastHeaderWithHopLimit(
in template (value) LongPosVector p_sourceLongPosVec,
in template (value) LongPosVector p_senderLongPosVec,
in template (value) UInt16 p_seqNumber,
in template (value) GeoBroadcastArea p_broadcastArea,
in template (value) UInt8 p_hopLimit
) modifies m_geoBroadcastHeader := {
geoBroadcastHeader := {
commonHeader := m_commonHeader(
e_btp,
m_geoBroadcastHeaderType(p_broadcastArea.geoBroadcastSubType),
/**
* @desc Receive template for GeoBroadcast header for any GeoArea
* @param p_sourceLongPosVec Long position vector of source
* @param p_senderLongPosVec Long position vector of sender
* @param p_seqNumber Sequence number of GeoBroadcast packet
template Header mw_geoBroadcastHeader(
in template (present) LongPosVector p_sourceLongPosVec,
in template (present) LongPosVector p_senderLongPosVec,
in template (present) UInt16 p_seqNumber
) := {
geoBroadcastHeader := {
commonHeader := mw_commonHeader(
p_senderLongPosVec,
?,
),
seqNumber := p_seqNumber,
lifetime := ?,
reserved := c_uInt8Zero,
geoAreaPosLatitude := ?,
geoAreaPosLongitude := ?,
distanceA := ?,
distanceB := ?,
angle := ?,
reserved2 := c_uInt24Zero
}
}
* @desc Receive template for GeoBroadcast header
* @param p_sourceLongPosVec Long position vector of source
* @param p_senderLongPosVec Long position vector of sender
* @param p_seqNumber Sequence number of GeoBroadcast packet
template Header mw_geoBroadcastHeaderWithArea (
in template (present) LongPosVector p_sourceLongPosVec,
in template (present) LongPosVector p_senderLongPosVec,
in template (present) GeoBroadcastArea p_broadcastArea
) modifies mw_geoBroadcastHeader := {
geoBroadcastHeader := {
commonHeader := mw_commonHeader(
p_senderLongPosVec,
mw_geoBroadcastHeaderTypeWithSubType(p_broadcastArea.geoBroadcastSubType)
geoAreaPosLatitude := p_broadcastArea.geoBroadcastArea.geoAreaPosLatitude,
geoAreaPosLongitude := p_broadcastArea.geoBroadcastArea.geoAreaPosLongitude,
distanceA := p_broadcastArea.geoBroadcastArea.distanceA,
distanceB := p_broadcastArea.geoBroadcastArea.distanceB,
angle := p_broadcastArea.geoBroadcastArea.angle
* @desc Receive template for GeoBroadcast header with Hop limit
* @param p_sourceLongPosVec Long position vector of source
* @param p_senderLongPosVec Long position vector of sender
* @param p_seqNumber Sequence number of GeoBroadcast packet
* @param p_broadcastArea Destination GeoArea
template Header mw_geoBroadcastHeaderWithAreaWithHopLimit(
in template (present) LongPosVector p_sourceLongPosVec,
in template (present) LongPosVector p_senderLongPosVec,
in template (present) UInt16 p_seqNumber,
in template (present) GeoBroadcastArea p_broadcastArea,
in template (present) UInt8 p_hopLimit
) modifies mw_geoBroadcastHeaderWithArea := {
geoBroadcastHeader := {
commonHeader := mw_commonHeaderWithHopLimit(
p_senderLongPosVec,
?,
mw_geoBroadcastHeaderType,
p_hopLimit
)
}
}
/**
* @desc Receive template for GeoBroadcast header with common header and lifetime
* @param p_sourceLongPosVec Long position vector of source
* @param p_seqNumber Sequence number of GeoBroadcast packet
* @param p_broadcastArea Destination GeoArea
* @param p_commonHeader Common header
* @param p_lifetime Lifetime of the GeoBroadcast packet
template Header mw_geoBroadcastHeaderWithAreaWithChWithLt(
in template (present) LongPosVector p_sourceLongPosVec,
in template (present) UInt16 p_seqNumber,
in template (present) GeoBroadcastArea p_broadcastArea,
in template (present) CommonHeader p_commonHeader,
in template (present) Lifetime p_lifetime
) := {
geoBroadcastHeader := {
commonHeader := p_commonHeader,
seqNumber := p_seqNumber,
lifetime := p_lifetime,
reserved := c_uInt8Zero,
srcPosVector := p_sourceLongPosVec,
geoAreaPosLatitude := p_broadcastArea.geoBroadcastArea.geoAreaPosLatitude,
geoAreaPosLongitude := p_broadcastArea.geoBroadcastArea.geoAreaPosLongitude,
distanceA := p_broadcastArea.geoBroadcastArea.distanceA,
distanceB := p_broadcastArea.geoBroadcastArea.distanceB,
angle := p_broadcastArea.geoBroadcastArea.angle,
reserved2 := c_uInt24Zero
}
}
/**
* @desc Send template for GeoBroadcast header type
* @param p_headerSubType Packet's subtype
template (value) HeaderTST m_geoBroadcastHeaderType(
in template (value) HeaderSubTypeGeoBroadcast p_headerSubType
) := {
geoBroadcastHdr := {
headerType := e_geoBroadcast,
headerSubType := p_headerSubType
/**
* @desc Receive template for GeoBroadcast header type
template HeaderTST mw_geoBroadcastHeaderType := {
geoBroadcastHdr := {
headerType := e_geoBroadcast,
headerSubType := ?
/**
* @desc Receive template for GeoBroadcast header type with sub-type
template HeaderTST mw_geoBroadcastHeaderTypeWithSubType(
in template (present) HeaderSubTypeGeoBroadcast p_headerSubType
) modifies mw_geoBroadcastHeaderType := {
geoBroadcastHdr := {
/**
* @desc Default send template for Lifetime field
template (value) Lifetime m_defaultLifetime := {
/**
* @desc Receive template for lifetime 0
template (present) Lifetime mw_lifetime0 := {
multiplier := 0,
ltBase := ?
}
} // end geoBroadcastHeaderTemplates
/**
* @desc Send template for GeoAnycast header
* @param p_sourceLongPosVec Long position vector of source
* @param p_senderLongPosVec Long position vector of sender
* @param p_seqNumber Sequence number of GeoAnycast packet
* @param p_anycastArea Destination GeoArea
template (value) Header m_geoAnycastHeader(
in template (value) LongPosVector p_sourceLongPosVec,
in template (value) LongPosVector p_senderLongPosVec,
in template (value) UInt16 p_seqNumber,
in template (value) GeoAnycastArea p_anycastArea
) := {
geoAnycastHeader := {
commonHeader := m_commonHeader(
e_btp,
m_geoAnycastHeaderType(p_anycastArea.geoAnycastSubType),
m_trafficClass,
c_defaultHopLimit,
lifetime := m_defaultLifetime,
reserved := c_uInt8Zero,
srcPosVector := p_sourceLongPosVec,
geoAreaPosLatitude := p_anycastArea.geoAnycastArea.geoAreaPosLatitude,
geoAreaPosLongitude := p_anycastArea.geoAnycastArea.geoAreaPosLongitude,
distanceA := p_anycastArea.geoAnycastArea.distanceA,
distanceB := p_anycastArea.geoAnycastArea.distanceB,
angle := p_anycastArea.geoAnycastArea.angle,
reserved2 := c_uInt24Zero
}
}
* @desc Send template for GeoAnycast header with hop limit
* @param p_sourceLongPosVec Long position vector of source
* @param p_senderLongPosVec Long position vector of sender
* @param p_seqNumber Sequence number of GeoAnycast packet
* @param p_anycastArea Destination GeoArea
template (value) Header m_geoAnycastHeaderWithHopLimit(
in template (value) LongPosVector p_sourceLongPosVec,
in template (value) LongPosVector p_senderLongPosVec,
in template (value) UInt16 p_seqNumber,
in template (value) GeoAnycastArea p_anycastArea,
in template (value) UInt8 p_hopLimit
) modifies m_geoAnycastHeader := {
geoAnycastHeader := {
commonHeader := m_commonHeader(
e_btp,
m_geoAnycastHeaderType(p_anycastArea.geoAnycastSubType),
m_trafficClass,
p_hopLimit,
/**
* @desc Receive template for GeoAnycast header for any GeoArea
* @param p_sourceLongPosVec Long position vector of source
* @param p_senderLongPosVec Long position vector of sender
* @param p_seqNumber Sequence number of GeoAnycast packet
template Header mw_geoAnycastHeader(
in template (present) LongPosVector p_sourceLongPosVec,
in template (present) LongPosVector p_senderLongPosVec,
in template (present) UInt16 p_seqNumber
) := {
geoAnycastHeader := {
commonHeader := mw_commonHeader(
p_senderLongPosVec,
),
seqNumber := p_seqNumber,
lifetime := ?,
reserved := c_uInt8Zero,
srcPosVector := p_sourceLongPosVec,
geoAreaPosLatitude := ?,
geoAreaPosLongitude := ?,
distanceA := ?,
distanceB := ?,
angle := ?,
reserved2 := c_uInt24Zero
}
}
* @desc Receive template for GeoAnycast header
* @param p_sourceLongPosVec Long position vector of source
* @param p_senderLongPosVec Long position vector of sender
* @param p_seqNumber Sequence number of GeoAnycast packet
* @param p_anycastArea Destination GeoArea
* @see mw_geoAnycastHeader
*/
template Header mw_geoAnycastHeaderWithArea (
in template (present) LongPosVector p_sourceLongPosVec,
in template (present) LongPosVector p_senderLongPosVec,
in template (present) UInt16 p_seqNumber,
in template (present) GeoAnycastArea p_anycastArea
) modifies mw_geoAnycastHeader := {
geoAnycastHeader := {
commonHeader := mw_commonHeader(
p_senderLongPosVec,
mw_geoAnycastHeaderTypeWithSubType(p_anycastArea.geoAnycastSubType)
),
geoAreaPosLatitude := p_anycastArea.geoAnycastArea.geoAreaPosLatitude,
geoAreaPosLongitude := p_anycastArea.geoAnycastArea.geoAreaPosLongitude,
distanceA := p_anycastArea.geoAnycastArea.distanceA,
distanceB := p_anycastArea.geoAnycastArea.distanceB,
angle := p_anycastArea.geoAnycastArea.angle
}
}
* @desc Receive template for GeoAnycast header with Hop limit
* @param p_sourceLongPosVec Long position vector of source
* @param p_senderLongPosVec Long position vector of sender
* @param p_seqNumber Sequence number of GeoAnycast packet
* @param p_anycastArea Destination GeoArea
template Header mw_geoAnycastHeaderWithAreaWithHopLimit(
in template (present) LongPosVector p_sourceLongPosVec,
in template (present) LongPosVector p_senderLongPosVec,
in template (present) UInt16 p_seqNumber,
in template (present) GeoAnycastArea p_anycastArea,
in template (present) UInt8 p_hopLimit
) modifies mw_geoAnycastHeaderWithArea := {
geoAnycastHeader := {
commonHeader := mw_commonHeaderWithHopLimit(
p_senderLongPosVec,
?,
mw_geoAnycastHeaderType,
p_hopLimit
)
}
}
* @desc Receive template for GeoAnycast header with common header and lifetime
* @param p_sourceLongPosVec Long position vector of source
* @param p_seqNumber Sequence number of GeoAnycast packet
* @param p_anycastArea Destination GeoArea
* @param p_commonHeader Common header
* @param p_lifetime Lifetime of the GeoAnycast packet
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
template Header mw_geoAnycastHeaderWithAreaWithChWithLt(
in template (present) LongPosVector p_sourceLongPosVec,
in template (present) UInt16 p_seqNumber,
in template (present) GeoAnycastArea p_anycastArea,
in template (present) CommonHeader p_commonHeader,
in template (present) Lifetime p_lifetime
) := {
geoAnycastHeader := {
commonHeader := p_commonHeader,
seqNumber := p_seqNumber,
lifetime := p_lifetime,
reserved := c_uInt8Zero,
srcPosVector := p_sourceLongPosVec,
geoAreaPosLatitude := p_anycastArea.geoAnycastArea.geoAreaPosLatitude,
geoAreaPosLongitude := p_anycastArea.geoAnycastArea.geoAreaPosLongitude,
distanceA := p_anycastArea.geoAnycastArea.distanceA,
distanceB := p_anycastArea.geoAnycastArea.distanceB,
angle := p_anycastArea.geoAnycastArea.angle,
reserved2 := c_uInt24Zero
}
}
/**
* @desc Send template for GeoBroadcast header type with sub-type
* @param p_headerSubType Packet's subtype
template (value) HeaderTST m_geoAnycastHeaderType(
in template (value) HeaderSubTypeGeoAnycast p_headerSubType
) := {
geoAnycastHdr := {
headerType := e_geoAnycast,
headerSubType := p_headerSubType
}
}
* @desc Receive template for GeoAnycast header type with any sub-type
template HeaderTST mw_geoAnycastHeaderType := {
geoAnycastHdr := {
headerType := e_geoAnycast,
headerSubType := ?
}
}
* @desc Receive template for GeoAnycast header type with sub-type
template HeaderTST mw_geoAnycastHeaderTypeWithSubType(
in template (present) HeaderSubTypeGeoAnycast p_headerSubType
) modifies mw_geoAnycastHeaderType := {
geoAnycastHdr := {
headerSubType := p_headerSubType
}
}
} // end geoAnycastHeaderTemplates
/**
* @desc Send template for LS Request header
* @param p_sourceLongPosVec Long position vector of source
* @param p_senderLongPosVec Long position vector of sender
* @param p_seqNumber Sequence number of LS Request packet
* @param p_gnAddress Searched GN_Address
in template (value) LongPosVector p_sourceLongPosVec,
in template (value) LongPosVector p_senderLongPosVec,
in template (value) UInt16 p_seqNumber,
in template (value) GN_Address p_gnAddress
commonHeader := m_commonHeader(
e_btp,
m_lsRequestHeaderType,
m_trafficClass,
c_defaultHopLimit,
lifetime := m_defaultLifetime,
reserved := c_uInt8Zero,
srcPosVector := p_sourceLongPosVec,
gnAddress := p_gnAddress
/**
* @desc Receive template for LS Request header
* @param p_seqNumber Sequence number of LS Request packet
* @param p_gnAddress Searched GN_Address
in template (present) UInt16 p_seqNumber,
in template (present) GN_Address p_gnAddress
lifetime := ?,
reserved := ?,
srcPosVector := ?,
* @desc Receive template for LS Request header with hop limit
* @param p_seqNumber Sequence number of LS Request packet
* @param p_gnAddress Searched GN_Address
tepelmann
committed
template Header mw_lsRequestHeader_withHopLimit(
in template (present) UInt16 p_seqNumber,
in template (present) GN_Address p_gnAddress,
in template (present) UInt8 p_hopLimit
tepelmann
committed
) modifies mw_lsRequestHeader := {
lsRequestHeader := {
tepelmann
committed
}
}
/**
* @desc Send template for LS Request header type
template (value) HeaderTST m_lsRequestHeaderType := {
lsHdr := {
headerType := e_locationService,
headerSubType := e_lsRequest
/**
* @desc Receive template for LS Request header type
template HeaderTST mw_lsRequestHeaderType := {
lsHdr := {
headerType := e_locationService,
headerSubType := e_lsRequest
} // end lsRequestHeaderTemplates
group lsReplyHeaderTemplates {
/**
* @desc Send template for LS Reply header
* @param p_sourceLongPosVec Long position vector of source
* @param p_destinationLongPosVec Long position vector of destination
* @param p_senderLongPosVec Long position vector of sender
* @param p_seqNumber Sequence number of LS Reply packet
template (value) Header m_lsReplyHeader(
in template (value) LongPosVector p_sourceLongPosVec,
in template (value) ShortPosVector p_destinationLongPosVec,
in template (value) LongPosVector p_senderLongPosVec,
in template (value) UInt16 p_seqNumber
) := {
lsReplyHeader := {
commonHeader := m_commonHeader(
e_btp,
m_lsRequestHeaderType,
m_trafficClass,
c_defaultHopLimit,
),
seqNumber := p_seqNumber,
lifetime := m_defaultLifetime,
reserved := c_uInt8Zero,
srcPosVector := p_sourceLongPosVec,
dstPosVector := p_destinationLongPosVec
}
}
/**
* @desc Receive template for any LS Reply header
* @param p_seqNumber Sequence number of LS Reply packet
template Header mw_lsReplyHeaderAny(
in template (present) UInt16 p_seqNumber
) := {
lsReplyHeader := {
commonHeader := mw_commonHeader(
?,
e_any,
),
seqNumber := p_seqNumber,
lifetime := ?,
reserved := ?,
srcPosVector := ?,
dstPosVector := ?
}
}
/**
* @desc Receive template for LS Reply header
* @param p_seqNumber Sequence number of LS Reply packet
* @param p_sourceLongPosVec Long position vector of source
* @param p_destinationLongPosVec Short position vector of destination
template Header mw_lsReplyHeader(
in template (present) UInt16 p_seqNumber,
in template (present) LongPosVector p_sourceLongPosVec,
in template (present) ShortPosVector p_destinationLongPosVec)
modifies mw_lsReplyHeaderAny := {
lsReplyHeader := {
srcPosVector := p_sourceLongPosVec,
dstPosVector := p_destinationLongPosVec
}
/**
* @desc Send template for LS Reply header type
template (value) HeaderTST m_lsReplyHeaderType := {
lsHdr := {
headerType := e_locationService,
headerSubType := e_lsReply
}
}
/**
* @desc Send template for Beacon header
* @param p_senderLongPosVec Long position vector of sender
*/
template (value) Header m_beaconHeader(
in template (value) LongPosVector p_senderLongPosVec
commonHeader := m_commonHeader(
e_btp,
m_beaconHeaderType,
m_trafficClass,
c_defaultHopLimit,
/**
* @desc Receive template for Beacon header
* @param p_trafficClass Packet's traffic class
* @param p_hopLimit Maximum number of hops
* @param p_senderLongPosVec Long position vector of sender
in template (present) TrafficClass p_trafficClass,
in template (present) UInt8 p_hopLimit,
in template (present) LongPosVector p_senderLongPosVec
p_trafficClass,
p_hopLimit,
p_senderLongPosVec
/**
* @desc Send template for Beacon header type
template (value) HeaderTST m_beaconHeaderType := {
beaconHdr := {
/**
* @desc Receive template for Beacon header type
template HeaderTST mw_beaconHeaderType := {
beaconHdr := {
group shbHeaderTemplates {
* @param p_senderLongPosVec Long position vector of sender
template (value) Header m_shbHeader(
in template (value) LongPosVector p_senderLongPosVec
) := {
shbHeader := {
commonHeader := m_commonHeader(
e_any,
m_shbHeaderType,
m_trafficClass,
c_defaultHopLimit,
)
}
}
/**
* @desc Receive template for SHB header
shbHeader := {
commonHeader := mw_commonHeaderWithHopLimit(
?, // SE PV
?, // NH
m_shbHeaderType, // HT + HST
1 // HL
)
}
}
/**
* @desc Send template for SHB header type
template (value) HeaderTST m_shbHeaderType := {
tsbHdr := {
headerType := e_topologicallyScopedBroadcast,
headerSubType := e_singleHop
}
}
} // end shbHeaderTemplates
/**
* @desc Send template for TSB header
* @param p_senderLongPosVec Long position vector of sender
* @param p_seqNumber Sequence number of TSB packet
* @param p_srcPosVector Long position vector of source
template Header m_tsbHeader(
in template (value) LongPosVector p_senderLongPosVec,
in template (value) UInt16 p_seqNumber,
in template (value) LongPosVector p_srcPosVector
) := {
tsbHeader := {
commonHeader := m_commonHeader(
e_any,
m_shbHeaderType,
m_trafficClass,
c_defaultHopLimit,
lifetime := m_defaultLifetime,
reserved := c_uInt8Zero,
srcPosVector := p_srcPosVector
}
}
* @desc Send template for TSB header with hop limit
* @param p_senderLongPosVec Long position vector of sender
* @param p_srcPosVector Long position vector of source
* @param p_hopLimit Maximum number of hops
template Header m_tsbHeaderWithHopLimit(
in template (value) LongPosVector p_senderLongPosVec,
in template (value) UInt16 p_seqNumber,
in template (value) LongPosVector p_srcPosVector,
in template (value) UInt8 p_hopLimit
) modifies m_tsbHeader := {
tsbHeader := {
commonHeader := {
hopLimit := p_hopLimit
}
}
}
/**
* @desc Receive template for TSB header
* @param p_seqNumber Sequence number of TSB packet
* @param p_sourceLongPosVec Long position vector of source
template Header mw_tsbHeader(
in template (present) UInt16 p_seqNumber,
in template (present) LongPosVector p_sourceLongPosVec
) := {
tsbHeader := {
commonHeader := mw_commonHeader(
),
seqNumber := p_seqNumber,
lifetime := ?,
reserved := ?,
srcPosVector := p_sourceLongPosVec
}
}
/**
* @desc Receive template for TSB header with sender position vector
* @param p_senderLongPosVec Long position vector of sender
* @param p_sourceLongPosVec Long position vector of source
template Header mw_tsbHeaderWithSenderPv(
in template (present) LongPosVector p_senderLongPosVec,
in template (present) UInt16 p_seqNumber,
in template (present) LongPosVector p_sourceLongPosVec
) := {
tsbHeader := {
commonHeader := mw_commonHeader(
),
seqNumber := p_seqNumber,
lifetime := ?,
reserved := ?,
srcPosVector := p_sourceLongPosVec
* @desc Receive template for TSB header with hop limit
* @param p_seqNumber Sequence number of TSB packet
* @param p_sourceLongPosVec Long position vector of source
* @param p_hopLimit Maximum number of hops
template Header mw_tsbHeaderWithHopLimit(
in template (present) UInt16 p_seqNumber,
in template (present) LongPosVector p_sourceLongPosVec,
in template (present) UInt8 p_hopLimit
) modifies mw_tsbHeader := {
tsbHeader := {
commonHeader := {
hopLimit := p_hopLimit
}
}
}
/**
* @desc Send template for TSB header type
template (value) HeaderTST m_tsbHeaderType := {
tsbHdr := {
headerType := e_topologicallyScopedBroadcast,
headerSubType := e_multiHop
}
}
} // end tsbHeaderTemplates
} // end geoNwHeadersTemplates
/**
* @desc Receive template for misc. payload
* @param p_payload Payload
*/
template Payload mw_otherPayload(
in template (present) octetstring p_payload
) := {
otherPayload := p_payload
}
} // end geoPayloadTemplates
/**
* @desc Receive template for GN_Address. Only M_ID field is discriminent
* @param p_gnAddress Expected GN Address
*/
template GN_Address mw_gnAddress(in template (present) GN_Address p_gnAddress) := {
typeOfAddress := ?,
stationType := ?,
stationSubType := ?,
stationCountryCode := ?,
mid := p_gnAddress.mid
}
/**
* @desc Dummy template for GN_Address
template (value) GN_Address m_dummyGnAddr := {
typeOfAddress := e_manual,
stationType := {
vehicleStation := {
stationType := e_vehicleStation,
vsKind := e_car
}
},
stationSubType := e_private,
mid := c_6ZeroBytes
/**
* @desc Dummy template for long position vector
template (value) LongPosVector m_dummyLongPosVector := {
gnAddr := m_dummyGnAddr,
timestamp := c_uInt32Zero,
longitude := c_uInt32Zero,
speed := c_uInt16Zero,
heading := c_uInt16Zero,
altitude := c_uInt16Zero,
timeAccuracy := c_uInt4Zero,
posAccuracy := c_uInt4Zero,
speedAccuracy := c_uInt3Zero,
headingAccuracy := c_uInt3Zero,
altitudeAccuracy := c_uInt2Zero
}
/**
* @desc Dummy template for Area
template (value) Area m_dummyArea := {
geoAreaPosLatitude := c_uInt32Zero,
geoAreaPosLongitude := c_uInt32Zero,
distanceA := c_uInt16Zero,
distanceB := c_uInt16Zero,
/**
* @desc Dummy template for GeoBroadcastArea
template (value) GeoBroadcastArea m_dummyGeoBroadcastArea := {
geoBroadcastSubType := e_geoBroadcastRect,
geoBroadcastArea := m_dummyArea
}
} // end geoDummyTemplates
} // end geoMiscTemplates