Commit 96d46fb3 authored by tepelmann's avatar tepelmann
Browse files

Implemented group TP/GEONW/PON/LOS/BV - 09 and 10 content is missing.

parent 3d32c7bf
Loading
Loading
Loading
Loading
+238 −26
Original line number Original line Diff line number Diff line
@@ -9,6 +9,7 @@ module LibItsGeoNetworking_Functions {
    
    
    // Libcommon
    // Libcommon
    import from LibCommon_BasicTypesAndValues all;
    import from LibCommon_BasicTypesAndValues all;
    import from LibCommon_VerdictControl {type FncRetCode;}
    
    
    // LibIts
    // LibIts
    import from LibIts_TestSystem all;
    import from LibIts_TestSystem all;
@@ -82,24 +83,25 @@ module LibItsGeoNetworking_Functions {
             */
             */
        	altstep a_receiveGeoUnicast(
        	altstep a_receiveGeoUnicast(
        	   	in template (present) LongPosVector p_senderLongPosVec,
        	   	in template (present) LongPosVector p_senderLongPosVec,
    	    	in template (present) ShortPosVector p_destinationLongPosVec,
    	    	in template (present) ShortPosVector p_destinationShortPosVec,
    			in template (present) StationTypeIdentifier p_stationType,
    			in template (present) StationTypeIdentifier p_stationType,
    	    	in template (present) UInt16 p_seqNumber
    	    	in template (present) UInt16 p_seqNumber
        	) runs on ItsNt {
        	) runs on ItsNt {
        	    
        	    
        	    [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoUnicastHeader(
        	    [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(mw_geoUnicastHeader(
        	    	p_senderLongPosVec,
        	    	p_senderLongPosVec,
    	    		p_destinationLongPosVec,
    	    		p_destinationShortPosVec,
    				p_stationType,
    				p_stationType,
    	    		p_seqNumber)))) {}
    	    		p_seqNumber)))) {
    	    		}
        	}     
        	}     
        	
        	
        	/**
        	/**
             * @desc Receive GeoUnicast packet for specific destination
             * @desc Receive GeoUnicast packet for specific destination
             */
             */
        	altstep a_receiveGeoUnicastWithDestination(in template (present) ShortPosVector p_destinationLongPosVec) runs on ItsNt {
        	altstep a_receiveGeoUnicastWithDestination(in template (present) ShortPosVector p_destinationShortPosVec) runs on ItsNt {
        	    
        	    
        	    [] a_receiveGeoUnicast(?, p_destinationLongPosVec, ?, ?) {}
        	    [] a_receiveGeoUnicast(?, p_destinationShortPosVec, ?, ?) {}
        	}     
        	}     
            
            
            /**
            /**
@@ -120,22 +122,33 @@ module LibItsGeoNetworking_Functions {
            altstep a_receiveLsRequest(
            altstep a_receiveLsRequest(
                in template (present) StationTypeIdentifier p_stationType,
                in template (present) StationTypeIdentifier p_stationType,
                in template (present) UInt16 p_seqNumber,
                in template (present) UInt16 p_seqNumber,
            	in template (present) GN_Address p_gnAddress
                in template (present) GN_Address p_gnAddress,
                out template (value) LongPosVector p_reqSrcPosVector
            ) runs on ItsNt {
            ) runs on ItsNt {
                var GeoNetworkingInd v_msg;
                
                
                [] geoNetworkingPort.receive(mw_geoNwInd(mw_geoNwPdu(
                [] geoNetworkingPort.receive(
                    mw_geoNwInd(
                        mw_geoNwPdu(
                            mw_lsRequestHeader(
                            mw_lsRequestHeader(
                                p_stationType,
                                p_stationType,
                                p_seqNumber,
                                p_seqNumber,
            			p_gnAddress)))) {}
                                p_gnAddress
                            )
                        )
                    )
                ) -> value v_msg {
                    p_reqSrcPosVector := v_msg.msgIn.header.lsRequestHeader.srcPosVector;
                }
            }
            }
            
            
            /**
            /**
             * @desc Receive any Location Service Request
             * @desc Receive any Location Service Request
             */
             */
            altstep a_receiveAnyLsRequest() runs on ItsNt {
            altstep a_receiveAnyLsRequest() runs on ItsNt {
                var LongPosVector v_reqSrcPosVector;
                
                
                [] a_receiveLsRequest(?, ?, ?) {}
                [] a_receiveLsRequest(?, ?, ?, v_reqSrcPosVector) {}
            }
            }
            
            
            /**
            /**
@@ -147,19 +160,19 @@ module LibItsGeoNetworking_Functions {
            	in template (value) GN_Address p_gnAddress,
            	in template (value) GN_Address p_gnAddress,
            	in template (value)	LongPosVector p_repSrcPosVector,
            	in template (value)	LongPosVector p_repSrcPosVector,
            	in template (value)	LongPosVector p_repSenderPosVector,
            	in template (value)	LongPosVector p_repSenderPosVector,
            	in template (value) StationTypeIdentifier p_repStationType,
            	in template (value) StationTypeIdentifier p_repStationType
            	in template (value)	UInt16 p_repSeqNumber
            ) runs on ItsNt {
            ) runs on ItsNt {
                var LongPosVector v_repDstPosVector;
                
                
                [] a_receiveLsRequest(p_reqStationType, p_reqSeqNumber, p_gnAddress) {
                [] a_receiveLsRequest(p_reqStationType, p_reqSeqNumber, p_gnAddress, v_repDstPosVector) {
                    geoNetworkingPort.send(m_geoNwReq(m_geoNwPdu(
                    f_sendGeoNetMessage(m_geoNwReq(m_geoNwPdu(
                    	m_lsRequestHeader(
                    	m_lsReplyHeader(
                      p_repSrcPosVector,
                      p_repSrcPosVector,
                    	v_repDstPosVector,
                    	p_repSenderPosVector,
                    	p_repSenderPosVector,
            			p_repStationType,
            			p_repStationType,
            			p_repSeqNumber,
            			vc_localSeqNumber   
                    	p_gnAddress      
                    )))); 
                    )))) 
                }
                }
            }
            }
          
          
@@ -190,6 +203,72 @@ module LibItsGeoNetworking_Functions {
            setverdict(pass);
            setverdict(pass);
        }
        }
        
        
        function f_handleLocationService(
          in template (present) StationTypeIdentifier p_reqStationType,
          in template (present) UInt16 p_reqSeqNumber,
          in template (value) GN_Address p_gnAddress,
          in template (value) LongPosVector p_repSrcPosVector,
          in template (value) LongPosVector p_repSenderPosVector,
          in template (value) StationTypeIdentifier p_repStationType
        ) runs on ItsNt {
            
            tc_ac.start;
            alt {
                [] a_receiveLsRequestAndReply(p_reqStationType, p_reqSeqNumber, p_gnAddress, 
                p_repSrcPosVector, p_repSenderPosVector, p_repStationType) {
                    tc_ac.stop;
                }
            }
            
        }
        
        function f_processLocationService(
          in template (value) LongPosVector p_reqSrcPosVector,
          in template (value) StationTypeIdentifier p_reqStationType,
          in template (value) UInt16 p_reqSeqNumber,
          in template (value) GN_Address p_gnAddress,
          out template (value) LongPosVector p_repSrcPosVector
        ) runs on ItsNt return FncRetCode {
            var FncRetCode v_ret := e_error;
            var GeoNetworkingInd v_msg;
            
            f_sendGeoNetMessage(
                m_geoNwReq(
                    m_geoNwPdu(
                        m_lsRequestHeader(
                            p_reqSrcPosVector,
                            p_reqSrcPosVector,
                            p_reqStationType,
                            p_reqSeqNumber,
                            p_gnAddress
                        )
                    )
                )
            );
            
            tc_ac.start;
            alt {
                [] geoNetworkingPort.receive(
                        mw_geoNwInd(
                            mw_geoNwPdu(
                                mw_lsReplyHeader(
                                    p_reqStationType, 
                                    p_reqSeqNumber,
                                    ?,
                                    p_reqSrcPosVector
                                )
                            )
                        )
                    ) -> value v_msg { 
                    tc_ac.stop;
                    p_repSrcPosVector := v_msg.msgIn.header.lsRequestHeader.srcPosVector;
                    v_ret := e_success;
                }
            }
            
            return v_ret;
        }
        
    } // end preambles
    } // end preambles
    
    
    group postambles {
    group postambles {
@@ -214,28 +293,152 @@ module LibItsGeoNetworking_Functions {
        
        
        function f_taStartBeaconing(in template (value) Header p_beaconHeader) {
        function f_taStartBeaconing(in template (value) Header p_beaconHeader) {
            
            
            //TODO
            
        }
        }
        
        
        function f_taStopBeaconing() {
        function f_taStopBeaconing() {
            
            
            //TODO
            
        }
        }
        
        
    } // end testAdapter
    } // end testAdapter
    
    
    group commonFunctions {
        
        /**
         * @desc Gets the value of the lifetime in seconds.
         * @return 
         */
        function f_getLifetimeValue(in Lifetime p_lifetime) runs on ItsNt return float {
            var float v_lifetime := 0.0;
          
            select (p_lifetime.ltBase) {
                case (e_50ms) {
                    v_lifetime := int2float(p_lifetime.multiplier) * 0.5;
                }
                case (e_1s) {
                    v_lifetime := int2float(p_lifetime.multiplier) * 1.0;
                }
                case (e_10s) {
                    v_lifetime := int2float(p_lifetime.multiplier) * 10.0;
                }
                case (e_100s) {
                    v_lifetime := int2float(p_lifetime.multiplier) * 100.0;
                }
            }
          
            return v_lifetime;
        }
      
    } // end commonFunctions
    
    group testerFunctions {
    group testerFunctions {
     	
     	
      function f_sendGeoNetMessage(in GeoNetworkingReq p_geoNetReq) runs on ItsNt {
          geoNetworkingPort.send(p_geoNetReq);
          if (not (ischosen(p_geoNetReq.msgOut.header.shbHeader) or ischosen(p_geoNetReq.msgOut.header.beaconHeader))) {
              f_setLocalSequenceNumber();
          }
      }
      
     	function f_getTesterLongPosVector() return LongPosVector {
     	function f_getTesterLongPosVector() return LongPosVector {
            var LongPosVector v_longPosVector;
            var LongPosVector v_longPosVector;
            
            
            //TODO
            
            return v_longPosVector; 
            return v_longPosVector; 
        }
        }
        
        
     	function f_getTesterGnAddress() return GN_Address {
     	function f_getTesterGnAddress() return GN_Address {
     	 	var GN_Address v_gnAddress;
     	 	var GN_Address v_gnAddress;
            
            
            //TODO
     	 	
			return v_gnAddress;
			return v_gnAddress;
     	}
     	}
      
      
        /**
         * @desc Sets the value of the sequence number for the next event.
         * @return 
         */
        function f_setLocalSequenceNumber() runs on ItsNt {
            vc_localSeqNumber := (vc_localSeqNumber + 1) mod c_uInt16Max; //TODO check if c_uInt16Max should be replaced by module parameter
        }
        
    } // end testerFunctions
    
    group iutFunctions {
        
        function f_getIutGnAddress() return GN_Address {
            var GN_Address v_gnAddress;
              
            //TODO
          
            return v_gnAddress;
        }
        
        /**
         * @desc Gets the LS retransmission timer.
         * @return 
         */
        function f_getLSRetransmitTimer() return float {
            var float v_itsGnLocationServiceRetransmitTimer := 1.0;
            
            //TODO get the value from PIXIT or MIB
            
            return v_itsGnLocationServiceRetransmitTimer;
        }
        
        /**
         * @desc Gets the LS maximum retransmission number.
         * @return 
         */
        function f_getLSMaxRetrans() return integer {
            var integer v_itsGnLocationServiceMaxRetrans := 10;
            
            //TODO get the value from PIXIT or MIB
            
            return v_itsGnLocationServiceMaxRetrans;
        }
        
        /**
         * @desc Gets the upper limit of the maximum lifetime.
         * @return 
         */
        function f_getMaxPacketLifeTime() return float {
            var float v_itsGnMaxPacketLifetime := 600.0;
            
            //TODO get the value from PIXIT or MIB
            
            return v_itsGnMaxPacketLifetime;
        }
        
        /**
         * @desc Gets delta for timers.
         * @return 
         */
        function f_getDeltaTimer() return float {
            var float v_deltaTimer := 0.1;
            
            //TODO get the value from PIXIT
            
            return v_deltaTimer;
        }
        
    } // end iutFunctions
    
    group neighborFunctions {
      
      function f_getNeighborLongPosVector() return LongPosVector {
            var LongPosVector v_longPosVector;
            
            //TODO
            
            return v_longPosVector; 
        }
        
    } // end testerFunctions
    } // end testerFunctions
    
    
    group posVectorFunctions {
    group posVectorFunctions {
@@ -243,12 +446,21 @@ module LibItsGeoNetworking_Functions {
        function f_longPosVector2ShortPosVector(in LongPosVector p_longPosVector) return ShortPosVector {
        function f_longPosVector2ShortPosVector(in LongPosVector p_longPosVector) return ShortPosVector {
            var ShortPosVector v_shortPosVector;
            var ShortPosVector v_shortPosVector;
            
            
            v_shortPosVector := {
                gnAddr := p_longPosVector.gnAddr, 
                timestamp := p_longPosVector.timestamp, 
                latitute := p_longPosVector.latitute, 
                longitude := p_longPosVector.longitude
            };
            
            return v_shortPosVector; 
            return v_shortPosVector; 
        }
        }
        
        
        function f_getIutShortPosVector() return ShortPosVector {
        function f_getIutShortPosVector() return ShortPosVector {
            var ShortPosVector v_shortPosVector;
            var ShortPosVector v_shortPosVector;
            
            
            //TODO
            
            return v_shortPosVector; 
            return v_shortPosVector; 
        }
        }
        
        
+69 −3
Original line number Original line Diff line number Diff line
@@ -147,7 +147,7 @@ module LibItsGeoNetworking_Templates {
    	    
    	    
    	    template Header mw_geoUnicastHeader(
    	    template Header mw_geoUnicastHeader(
    	    	in template (present) LongPosVector p_senderLongPosVec,
    	    	in template (present) LongPosVector p_senderLongPosVec,
    	    	in template (present) ShortPosVector p_destinationLongPosVec,
    	    	in template (present) ShortPosVector p_destinationShortPosVec,
    			in template (present) StationTypeIdentifier p_stationType,
    			in template (present) StationTypeIdentifier p_stationType,
    	    	in template (present) UInt16 p_seqNumber
    	    	in template (present) UInt16 p_seqNumber
    	    ) := {
    	    ) := {
@@ -161,13 +161,13 @@ module LibItsGeoNetworking_Templates {
                    lifetime := ?,
                    lifetime := ?,
                    reserved := ?,
                    reserved := ?,
               		srcPosVector := ?,
               		srcPosVector := ?,
                	dstPosVector := p_destinationLongPosVec
                	dstPosVector := p_destinationShortPosVec
                }
                }
    	    }    
    	    }    
    	    
    	    
    	    template Header mw_geoUnicastHeaderWithHopLimit(
    	    template Header mw_geoUnicastHeaderWithHopLimit(
    	    	in template (present) LongPosVector p_senderLongPosVec,
    	    	in template (present) LongPosVector p_senderLongPosVec,
    	    	in template (present) ShortPosVector p_destinationLongPosVec,
    	    	in template (present) ShortPosVector p_destinationShortPosVec,
    			in template (present) StationTypeIdentifier p_stationType,
    			in template (present) StationTypeIdentifier p_stationType,
    	    	in template (present) UInt16 p_seqNumber,
    	    	in template (present) UInt16 p_seqNumber,
    	    	in template (present) UInt8 p_hopLimit
    	    	in template (present) UInt8 p_hopLimit
@@ -348,6 +348,72 @@ module LibItsGeoNetworking_Templates {
                }
                }
            }       
            }       
            
            
        } // end lsRequestHeaderTemplates 
                    
        group lsReplyHeaderTemplates {
            
            template (value) Header m_lsReplyHeader(
              in template (value) LongPosVector p_sourceLongPosVec,
              in template (value) LongPosVector p_destinationLongPosVec,
              in template (value) LongPosVector p_senderLongPosVec,
              in template (value) StationTypeIdentifier p_stationType,
              in template (value) UInt16 p_seqNumber
            ) := {
                lsReplyHeader := {
                  commonHeader := m_commonHeader(
                      e_btp,
                      m_lsRequestHeaderType,
                      m_trafficClass,
                      c_defaultHopLimit,
                      p_senderLongPosVec,
                      p_stationType
                  ),    
                  seqNumber := p_seqNumber,
                  lifetime := m_lifetime,
                  reserved := c_uInt8Zero,
                  srcPosVector := p_sourceLongPosVec,
                  dstPosVector := p_destinationLongPosVec
                }
            }
            
            template Header mw_lsReplyHeaderAny(
              in template (present) StationTypeIdentifier p_stationType,
              in template (present) UInt16 p_seqNumber
            ) := {
                lsReplyHeader := {
                  commonHeader := mw_commonHeader(
                      e_any,
                      m_lsReplyHeaderType,
                      p_stationType
                  ),    
                  seqNumber := p_seqNumber,
                  lifetime := ?,
                  reserved := ?,
                  srcPosVector := ?,
                  dstPosVector := ?
                }
            }
            
            template Header mw_lsReplyHeader(
                template (present) StationTypeIdentifier p_stationType,
                template (present) UInt16 p_seqNumber, 
                template (present) LongPosVector p_sourceLongPosVec, 
                template (present) LongPosVector p_destinationLongPosVec)
            modifies mw_lsReplyHeaderAny := {
                lsReplyHeader := {
                    srcPosVector := p_sourceLongPosVec,
                    dstPosVector := p_destinationLongPosVec
                }
            }

            
            template (value) HeaderTST m_lsReplyHeaderType := {
                lsHdr := {
                  headerType := e_locationService,
                  headerSubType := e_lsReply
                }
            }      
            
        } // end lsRequestHeaderTemplates 
        } // end lsRequestHeaderTemplates 
                    
                    
		group beaconHeaderTemplates {
		group beaconHeaderTemplates {
+6 −1
Original line number Original line Diff line number Diff line
@@ -12,8 +12,10 @@ module LibIts_Interface {
    import from CAM_PDU_Descriptions language "ASN.1:1997" all;
    import from CAM_PDU_Descriptions language "ASN.1:1997" all;
    import from DENM_PDU_Descriptions language "ASN.1:1997" all;
    import from DENM_PDU_Descriptions language "ASN.1:1997" all;
    
    
    import from LibCommon_BasicTypesAndValues all;
        
    // LibCommon
    // LibCommon
    import from LibCommon_Time {modulepar all};
    import from LibCommon_Time {modulepar all;}
    
    
	group adapterInterface {
	group adapterInterface {
	        
	        
@@ -118,6 +120,9 @@ module LibIts_Interface {
            timer tc_wait := PX_TWAIT;
            timer tc_wait := PX_TWAIT;
            timer tc_ac := PX_TAC;
            timer tc_ac := PX_TAC;
            
            
            //variables
            var UInt16 vc_localSeqNumber := 0;
            
        } // end ItsNt
        } // end ItsNt
        
        
    } // end interfaceComponents
    } // end interfaceComponents