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;
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 Request IUT to send a GeoUnicast message to a specific destination
* @param p_destinationGnAddr Destination of the GeoUnicast message
*/
template UtGNEvent m_generateGeoUnicastMessage(GN_Address p_destinationGnAddr) := {
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
* @see m_generateGeoUnicastMessage
*/
template UtGNEvent m_generateGeoUnicastMessageWithLifetime(
GN_Address p_destinationGnAddr,
integer p_lifetime
) modifies m_generateGeoUnicastMessage := {
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
* @see m_generateGeoUnicastMessage
*/
template UtGNEvent m_generateGeoUnicastMessageWithPayload(
GN_Address p_destinationGnAddr,
Payload p_payload
) modifies m_generateGeoUnicastMessage := {
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 UtGNEvent m_generateGeoBroadcastMessage(
) := {
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
* @see m_generateGeoBroadcastMessage
*/
template UtGNEvent m_generateGeoBroadcastMessageWithPayload(
Payload p_payload
) modifies m_generateGeoBroadcastMessage := {
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 UtGNEvent m_generateGeoAnycastMessage(
) := {
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
* @see m_generateGeoAnycastMessage
*/
template UtGNEvent m_generateGeoAnycastMessageWithPayload(
Payload p_payload
) modifies m_generateGeoAnycastMessage := {
geoAnycast := {
payload := p_payload
}
}
/**
* @desc Request IUT to send a SHB message
*/
template UtGNEvent m_generateSHBMessage := {
shb := {
payload := omit
}
}
/**
* @desc Request IUT to send a SHB message with a payload
* @param p_payload Payload of the SHB message
* @see m_generateSHBMessage
*/
template UtGNEvent m_generateSHBMessageWithPayload(
Payload p_payload
) modifies m_generateSHBMessage := {
shb := {
payload := p_payload
}
}
/**
* @desc Request IUT to send a TSB message
*/
template UtGNEvent m_generateTSBMessage := {
tsb := {
payload := omit
}
}
} // end utPrimitives
/**
* @desc Testsystem will start beaconing for the given neighbor
* @param p_beaconHeader The neighbor information
template (value) AcGNEvent 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 AcGNEvent m_startPassBeaconing(
template (value) BeaconHeader p_beaconHeader
) := {
startPassBeaconing := {
beaconHeader := p_beaconHeader
}
}
/**
* @desc Testsystem will stop passing beacon information to the TTCN-3
*/
tepelmann
committed
template AcGNEvent m_stopPassBeaconing := {
stopPassBeaconing := {
}
}
} // end taPrimitives
} // 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,
payload := omit
}
/**
* @desc Send template for GeoNetworking PDU with payload
* @param p_header Header value of GeoNetworking message
* @param p_payload Payload
* @see m_geoNwPdu
*/
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
* @see mw_geoNwPdu
*/
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
* @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_headerTST 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) NextHeader p_nextHeader,
in template (value) HeaderTST p_headerTST,
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_headerTST 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_headerTST
version := c_geoNwProtocolVersion,
nextHeader := p_nextHeader,
headerTST := p_headerTST,
plLength := ?,
trafficClass := ?,
hopLimit := ?,
senderPosVector := p_senderLongPosVec
/**
* @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,
version := c_geoNwProtocolVersion,
nextHeader := e_any, // 0
headerTST := {
beaconHdr := {
headerType := e_beacon, // 0
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_headerTST Header's type and sub-type
* @param p_hopLimit Maximum number of hops
* @see mw_commonHeader
*/
template CommonHeader mw_commonHeaderWithHopLimit (
in template (present) LongPosVector p_senderLongPosVec,
in template (present) NextHeader p_nextHeader,
in template (present) HeaderTST p_headerTST,
in template (present) UInt8 p_hopLimit
) modifies mw_commonHeader := {
hopLimit := p_hopLimit
}
/**
* @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_headerTST 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_headerTST,
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 := ?
}
group geoUnicastHeaderTemplates {
/**
* @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
* @see m_geoUnicastHeader
*/
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
* @see mw_geoUnicastHeader
*/
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 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_hopLimit Maximum number of hops
* @see mw_geoUnicastHeader
*/
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_senderLongPosVec Long position vector of sender
* @param p_destinationShortPosVec Long position vector of destination
* @param p_stationType Station type of sender
* @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_stationType Station type of sender
* @param p_seqNumber Sequence number of GeoBroadcast packet
* @param p_broadcastArea Destination GeoArea
* @param p_hopLimit Maximum number of hops
* @see m_geoBroadcastHeader
*/
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
* @param p_broadcastArea Destination GeoArea
* @see mw_geoBroadcastHeader
*/
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
* @param p_hopLimit Maximum number of hops
* @see mw_geoBroadcastHeaderWithArea
*/
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
* @param p_headerSubType Packet's subtype
* @see mw_geoBroadcastHeaderType
*/
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
* @param p_hopLimit Maximum number of hops
* @see m_geoAnycastHeader
*/
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