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;
import from LibItsGeoNetworking_TestSystem all;
import from LibItsGeoNetworking_TypesAndValues all;
import from LibItsGeoNetworking_Pixits all;
import from LibItsIpv6OverGeoNetworking_TypesAndValues all;
import from LibItsIpv6OverGeoNetworking_Templates all;
import from LibItsBtp_Templates all;
import from LibItsExternal_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_linkLayerBroadcast(
template (value) GeoNetworkingPacket p_geoNwMsg
msgOut := p_geoNwMsg,
macDestinationAddress := c_llBroadcast
}
/**
* @desc Send template for GeoNetworking packet (GeonetworkingPort Primitive)
* @param p_geoNwMsg GeoNetworking packet to be sent
* @param p_llDestinationAdress Link-layer destination address
*/
template (value) GeoNetworkingReq m_geoNwReq_withLinkLayerDestination(
template (value) GeoNetworkingPacket p_geoNwMsg,
template (value) MacAddress p_llDestinationAdress
macDestinationAddress := p_llDestinationAdress
/**
* @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 Receive template for GeoNetworking packet (GeonetworkingPort Primitive)
* @param p_geoNwMsg GeoNetworking packet to be received
* @param p_llDestinationAdress Link-layer destination address
*/
template GeoNetworkingInd mw_geoNwInd_withLinkLayerDestination(
template (present) GeoNetworkingPacket p_geoNwMsg,
template (present) MacAddress p_llDestinationAdress
) modifies mw_geoNwInd := {
macDestinationAddress := p_llDestinationAdress
}
/**
* @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
* @param p_payload Payload of the GeoUnicast message
template UtEvent m_generateGeoUnicastMessageWithPayload(
GN_Address p_destinationGnAddr,
) modifies m_generateGeoUnicastMessage := {
payload := { decodedPayload := omit, rawPayload := p_payload} // do not use f_adaptPayload_m here
reinaortega
committed
/**
* @desc Request IUT to send a GeoUnicast message to a specific destination with specific lifetime with specific payload
* @param p_destinationGnAddr Destination of the GeoUnicast message
* @param p_lifetime Lifetime of the GeoUnicast message
* @param p_payload Payload of the GeoUnicast message
* @see m_generateGeoUnicastMessage
*/
template UtEvent m_generateGeoUnicastMessageWithLifetimeWithPayload(
GN_Address p_destinationGnAddr,
integer p_lifetime,
octetstring p_payload
) modifies m_generateGeoUnicastMessageWithLifetime := {
utGnEvent := {
geoUnicast := {
payload := { decodedPayload := omit, rawPayload := p_payload} // do not use f_adaptPayload_m here
reinaortega
committed
}
}
}
/**
* @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,
}
}
}
/**
* @desc Request IUT to send a GeoBroadcast message to a specific area
* @param p_area Destination area of the message
* @param p_lifetime Packet's lifetime
*/
template UtEvent m_generateGeoBroadcastMessageWithLifetime(
GeoArea p_area,
integer p_lifetime
) modifies m_generateGeoBroadcastMessage := {
utGnEvent := {
geoBroadcast := {
lifetime := p_lifetime
/**
* @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(
) modifies m_generateGeoBroadcastMessage := {
payload := { decodedPayload := omit, rawPayload := p_payload} // do not use f_adaptPayload_m here
/**
* @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,
/**
* @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(
) modifies m_generateGeoAnycastMessage := {
payload := { decodedPayload := omit, rawPayload := p_payload} // do not use f_adaptPayload_m here
/**
* @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(
payload := { decodedPayload := omit, rawPayload := p_payload} // do not use f_adaptPayload_m here
/**
* @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 (includes a default payload)
* @param p_header Header value of GeoNetworking message
*/
template (value) GeoNetworkingPacket m_geoNwPdu(
in template (value) Header p_header
) := {
header := p_header,
secHeader := omit,
berge
committed
payload := f_adaptPayload_m(char2oct("DEFAULT_PAYLOAD"))
}
/**
* @desc Send template for GeoNetworking PDU with no payload
* @param p_header Header value of GeoNetworking message
*/
template (value) GeoNetworkingPacket m_geoNwPduNoPayload(
in template (value) Header p_header
) modifies m_geoNwPdu := {
payload := omit
/**
* @desc Send template for GeoNetworking PDU with octetstring payload
* @param p_header Header value of GeoNetworking message
* @param p_payload Octetstring payload
* @see m_geoNwPdu
*/
template (value) GeoNetworkingPacket m_geoNwPduWithOctetstringPayload(
in template (value) Header p_header,
in template (value) octetstring p_payload
) modifies m_geoNwPdu := {
payload := f_adaptPayload_m(valueof(p_payload))
}
/**
* @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,
/**
* @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 octetstring payload
* @param p_header Header value of GeoNetworking message
template GeoNetworkingPacket mw_geoNwPduWithOctetstringPayload(
/**
* @desc Receive template for GeoNetworking PDU with payload
* @param p_header Header value of GeoNetworking message
* @param p_payload Payload
* @see mw_geoNwPdu
*/
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,
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 := ?,
relevance := ?,
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
) := {
gnAddr := p_gnAddress,
timestamp := ?,
latitude := ?,
longitude := ?,
speed := ?,
heading := ?,
altitude := ?,
timeAccuracy := ?,
posAccuracy := ?,
speedAccuracy := ?,
headingAccuracy := ?,
altitudeAccuracy := ?
* @desc Receive template for long position vector with strict position check
* @param p_longPosVector The base long position vector
*/
template LongPosVector mw_longPosVectorPosition(
in template (value) LongPosVector p_longPosVector
gnAddr := p_longPosVector.gnAddr,
timestamp := ?,
latitude := p_longPosVector.latitude,
longitude := p_longPosVector.longitude,
speed := p_longPosVector.speed,
heading := p_longPosVector.heading,
altitude := p_longPosVector.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_withDelta(
in template (value) LongPosVector p_longPosVector
) modifies mw_longPosVectorPosition := {
latitude := (valueof(p_longPosVector.latitude)-PX_POS_DELTA .. valueof(p_longPosVector.latitude)+PX_POS_DELTA),
longitude := (valueof(p_longPosVector.longitude)-PX_POS_DELTA .. valueof(p_longPosVector.longitude)+PX_POS_DELTA),
speed := (valueof(p_longPosVector.speed)-PX_POS_DELTA .. valueof(p_longPosVector.speed)+PX_POS_DELTA),
altitude := (valueof(p_longPosVector.altitude)-PX_POS_DELTA .. valueof(p_longPosVector.altitude)+PX_POS_DELTA)
* @desc Receive template for short position vector with strict position check
* @param p_shortPosVector The base short position vector
*/
template ShortPosVector mw_shortPosVectorPosition(
in template (value) ShortPosVector p_shortPosVector
) := {
gnAddr := p_shortPosVector.gnAddr,
timestamp := ?,
latitude := p_shortPosVector.latitude,
longitude := p_shortPosVector.longitude
}
/**
* @desc Receive template for short position vector with position check with delta
* @param p_shortPosVector The base short position vector
*/
template ShortPosVector mw_shortPosVectorPosition_withDelta(
in template (value) ShortPosVector p_shortPosVector
) modifies mw_shortPosVectorPosition := {
latitude := (valueof(p_shortPosVector.latitude)-PX_POS_DELTA..valueof(p_shortPosVector.latitude)+PX_POS_DELTA),
longitude := (valueof(p_shortPosVector.longitude)-PX_POS_DELTA..valueof(p_shortPosVector.longitude)+PX_POS_DELTA)
/**
* @desc Receive template for short position vector without position check
* @param p_shortPosVector The base short position vector
*/
template ShortPosVector mw_shortPosVectorPosition_anyPos(
in template (value) ShortPosVector p_shortPosVector
) modifies mw_shortPosVectorPosition := {
latitude := ?,
longitude := ?
}
} // 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(
m_geoUnicastHeaderType,
m_trafficClass,
c_defaultHopLimit,
),
seqNumber := p_seqNumber,
lifetime := m_defaultLifetime,
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 Send template for GeoUnicast header with Lifetime
* @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_lifetime Packet's lifetime
* @see m_geoUnicastHeader
*/
template (value) Header m_geoUnicastHeaderWithLifetime(
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) Lifetime p_lifetime
) modifies m_geoUnicastHeader := {
geoUnicastHeader := {
lifetime := p_lifetime
}
}
/**
* @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 := ?,
* @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,
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(
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(
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 := {