"src/SOL002/git@forge.etsi.org:nfv/SOL002-SOL003.git" did not exist on "d776406c40efb0a7fff197759e59a4be120e2019"
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 LibItsIpv6OverGeoNetworking_TypesAndValues {type MacAddress}
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,
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
) modifies m_geoNwReq := {
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,
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
) := {
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 LongPosVector p_longPosVector
) modifies mw_longPosVectorPosition := {
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),
altitude := (p_longPosVector.altitude-PX_POS_DELTA .. 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 ShortPosVector p_shortPosVector
) modifies mw_shortPosVectorPosition := {
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,
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(
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 := {
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(