Loading ttcn3/EtsiLibrary/LibIpv6/LibMobility/LibIpv6_Rfc3775Mipv6_Functions.ttcn +423 −184 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ module LibIpv6_Rfc3775Mipv6_Functions { import from LibIpv6_Rfc2461NeighborDiscovery_TypesAndValues all; import from LibIpv6_Rfc2461NeighborDiscovery_Functions all; import from LibIpv6_Rfc2463Icmpv6_Functions all; import from LibIpv6_Rfc2463Icmpv6_TypesAndValues all; import from LibIpv6_MultiRfcs_TypesAndValues all; import from LibIpv6_MultiRfcs_Templates all; import from LibIpv6_MultiRfcs_Functions all; Loading @@ -38,43 +39,7 @@ module LibIpv6_Rfc3775Mipv6_Functions { group dhaadFns { /* * @desc This sends a MIPv6 HaAddrDreq for a test component * acting as any IPv6 node to the NUT. * Prior it modifies IPv6 packet payload ength and ICMPv6 * checksum to their correct values * @remark The template passed in must NOT contain any matching expressions! * @param p_haAddrDreq Ipv6 packet template with neighborhood advertisement to be sent * @return execution status */ function f_sendHaAddrDreq(in template HomeAgentAddressDiscoveryRequest p_haAddrDreq) runs on LibIpv6Node return FncRetCode { var Ipv6Packet v_ipPkt; var ExtensionHeader v_extHdr; v_ipPkt.homeAgentAddressDiscoveryRequest := valueof(p_haAddrDreq); //set Extension Header if (ispresent(v_ipPkt.homeAgentAddressDiscoveryRequest.extHdrList)) { if(f_setExtensionHeaders( v_ipPkt.homeAgentAddressDiscoveryRequest.extHdrList, v_ipPkt.homeAgentAddressDiscoveryRequest.ipv6Hdr.sourceAddress, v_ipPkt.homeAgentAddressDiscoveryRequest.ipv6Hdr.destinationAddress, v_ipPkt) != e_success) { log(" **** f_sendHaAddrDreq: Error when calculating length of extension headers ****"); return e_error; } } //calc payloadLen v_ipPkt.homeAgentAddressDiscoveryRequest.ipv6Hdr.payloadLength := fx_payloadLength (v_ipPkt); //set checksum to zero v_ipPkt.homeAgentAddressDiscoveryRequest.checksum := c_2ZeroBytes; //calc checksum v_ipPkt.homeAgentAddressDiscoveryRequest.checksum := fx_icmpv6Checksum(v_ipPkt); //send ipPort.send(v_ipPkt.homeAgentAddressDiscoveryRequest); return e_success; } // end f_sendHaAddrDreq /* Loading Loading @@ -123,7 +88,7 @@ module LibIpv6_Rfc3775Mipv6_Functions { * @param p_haGlasNut Home Agent Addresses of node under test */ function f_sendHaAddrDreqAndWaitForReply( in template Ipv6Address p_mnCoaTn, in Ipv6Address p_haAcaNut, in template Ipv6Address p_haAcaNut, out Ipv6AddressList p_haGlasNut) runs on Ipv6Node return FncRetCode { Loading Loading @@ -168,9 +133,83 @@ module LibIpv6_Rfc3775Mipv6_Functions { * @param p_mnHoaTn Mobile Node Home Address of test node * @param p_haGlaNut Home Agent Address of node under test */ function f_registerMnToHa( in template Ipv6Address p_mnCoaTn, function f_receiveBindingUpdateAndReply( //in template Ipv6Address p_mnCoaTn, // in template Ipv6Address p_mnHoaTn, // in template Ipv6Address p_haGlaNut, // in UInt16 p_timeUnits ) runs on Ipv6Node return FncRetCode { var FncRetCode v_ret := e_error; /* tc_wait.start; alt { [] ipPort.receive(mw_generalIpv6_srcDst(c_dstHdr, p_mnCoaTn, p_haGlaNut, m_extHdrList_2Elem( m_extHdr_dstOptHeader( c_mipHdr, c_optLen2, m_dstOptList_2Elem( m_dstOpt_padN(m_optPad4), m_dstOpt_homeAddr(p_mnHoaTn))), mw_extHdr_mipHeader (c_noNextHdr, c_bindingUpdate, mw_bindingUpdate(c_aFlag1, c_hFlag1, c_lFlag0, c_kFlag0, p_timeUnits, m_mipOptList_2Elem( m_mipOpt_padN(m_optPad2), m_mipOpt_altCoa(m_mipOptAltCoA(p_mnCoaTn)))))))) { v_seqNr := tc_wait.stop; v_ret := e_success ; } [] tc_wait.timeout{ v_ret := e_timeout; log("**** f_registerMnToHa: ERROR: tc_ac.timeout **** "); } } // end alt if ( v_ret == e_success ) { v_ret := f_sendGeneralIpv6(m_generalIpv6_srcDst(c_dstHdr, p_mnCoaTn, p_haGlaNut, m_extHdrList_2Elem( m_extHdr_dstOptHeader( c_mipHdr, c_optLen2, m_dstOptList_2Elem( m_dstOpt_padN(m_optPad4), m_dstOpt_homeAddr(p_mnHoaTn))), m_extHdr_mipHeader (c_noNextHdr, c_bindingUpdate, m_bindingUpdate(c_defSeqNo, c_aFlag1, c_hFlag1, c_lFlag0, c_kFlag0, p_timeUnits, m_mipOptList_2Elem( m_mipOpt_padN(m_optPad2), m_mipOpt_altCoa(m_mipOptAltCoA(p_mnCoaTn)))))))); }//end if */ return v_ret; }//end f_receiveBindingUpdateAndReply /* * @desc primaryCareOfAddressRegistration * @param p_mnCoaTn Mobile Node Care Of Address of test node * @param p_mnHoaTn Mobile Node Home Address of test node * @param p_haGlaNut Home Agent Address of node under test */ function f_sendBindUpAndWaitForBindAck( in template Ipv6Address p_mnCoaTn, in template Ipv6Address p_mnHoaTn, in template Ipv6Address p_haGlaNut) in template Ipv6Address p_haGlaNut, in UInt16 p_timeUnits) runs on Ipv6Node return FncRetCode { var FncRetCode v_ret; Loading @@ -191,9 +230,10 @@ module LibIpv6_Rfc3775Mipv6_Functions { c_hFlag1, c_lFlag0, c_kFlag0, c_100TimeUnits, m_mipOptList_1Elem( m_mipOpt_padN(m_optPad4))))))); p_timeUnits, m_mipOptList_2Elem( m_mipOpt_padN(m_optPad2), m_mipOpt_altCoa(m_mipOptAltCoA(p_mnCoaTn)))))))); if ( v_ret != e_success ) {return v_ret;} tc_ac.start; alt { Loading @@ -212,16 +252,6 @@ module LibIpv6_Rfc3775Mipv6_Functions { tc_ac.stop; v_ret := e_success ; } [] ipPort.receive(mw_generalIpv6_srcDst( c_mipHdr, p_haGlaNut, p_mnCoaTn, m_extHdrList_1Elem( mw_extHdr_mipHeader ( c_noNextHdr, c_bindingError, mw_bindingError)))) { tc_ac.stop; v_ret := e_error ; } [] tc_ac.timeout{ v_ret := e_timeout; log("**** f_registerMnToHa: ERROR: tc_ac.timeout **** "); Loading @@ -230,70 +260,82 @@ module LibIpv6_Rfc3775Mipv6_Functions { return v_ret; }//end f_registerMnToHa }//end f_sendBindUpAndWaitForBindAck /* * @desc Mobile Node returns Home procedure * @desc primaryCareOfAddressRegistration * @param p_mnCoaTn Mobile Node Care Of Address of test node * @param p_mnHoaTn Mobile Node Home Address of test node * @param p_mnLlaTn Mobile Node Link Local Address of test node * @param p_macUcaTn Mobile Node Mac Address of test node * @param p_haLlaNut Link Local Address of Node Under Test * @param p_haGlaNut Home Agent Address of node under test */ function f_mnReturnsHome( in template Ipv6Address p_mnHoaTn, in template Ipv6Address p_mnLlaTn, in template Oct6to15 p_macUcaTn, in template Ipv6Address p_haGlaNut) function f_sendBindUpAndCheckForDiscard( in template Ipv6Address p_notRoutableCoaTn, in template Ipv6Address p_mnHoaTn, in template Ipv6Address p_haGlaNut, in UInt16 p_timeUnits) runs on Ipv6Node return FncRetCode { var FncRetCode v_ret; v_ret := f_sendGeneralIpv6(m_generalIpv6_srcDst(c_mipHdr, p_mnHoaTn, v_ret := f_sendGeneralIpv6(m_generalIpv6_srcDst(c_dstHdr, p_notRoutableCoaTn, p_haGlaNut, m_extHdrList_1Elem( m_extHdr_mipHeader ( c_noNextHdr, m_extHdrList_2Elem( m_extHdr_dstOptHeader( c_mipHdr, c_optLen2, m_dstOptList_2Elem( m_dstOpt_padN(m_optPad4), m_dstOpt_homeAddr(p_mnHoaTn))), m_extHdr_mipHeader (c_noNextHdr, c_bindingUpdate, m_bindingUpdate( c_defSeqNo + 1, m_bindingUpdate(c_defSeqNo, c_aFlag1, c_hFlag1, c_lFlag0, c_kFlag0, c_zeroTimeUnits, m_mipOptList_1Elem( m_mipOpt_padN(m_optPad4))))))); p_timeUnits, m_mipOptList_2Elem( m_mipOpt_padN(m_optPad2), m_mipOpt_altCoa(m_mipOptAltCoA(p_notRoutableCoaTn)))))))); if ( v_ret != e_success ) {return v_ret;} tc_ac.start; alt { [] ipPort.receive(mw_generalIpv6_srcDst( c_routeHdr, p_haGlaNut, p_notRoutableCoaTn, m_extHdrList_2Elem( mw_extHdr_routingHeader( c_mipHdr, c_routeHdrLen2, c_routeHdrType2, c_routeHdrSegmentsLeft1, m_routingHeaderData_homeAddress(p_mnHoaTn)), mw_extHdr_mipHeader ( c_noNextHdr, c_bindingAck, mw_bindingAck(c_defSeqNo))))) { tc_ac.stop; v_ret := e_error ; log("**** f_sendBindUpAndCheckForDiscartion: ERROR: IUT did not discard message **** "); } [] ipPort.receive(mw_generalIpv6_srcDst( c_mipHdr, p_haGlaNut, p_mnHoaTn, p_notRoutableCoaTn, m_extHdrList_1Elem( mw_extHdr_mipHeader ( c_noNextHdr, c_bindingAck, mw_bindingAck(c_defSeqNo + 1))))) { c_bindingError, mw_bindingError)))) { tc_ac.stop; v_ret := e_success ; v_ret := e_error ; log("**** f_sendBindUpAndCheckForDiscartion: ERROR: IUT did not discard message **** "); } [] tc_ac.timeout{ return e_timeout; log("**** f_mnReturnsHome: ERROR: tc_ac.timeout **** "); v_ret := e_success; } } // end alt v_ret := f_sendNbrAdv (m_nbrAdv_noExtHdr( p_mnLlaTn, c_allNodesMca, c_rFlag0, c_sFlag0, c_oFlag1, p_mnHoaTn, m_nbrAdvOpt_tllaOpt(p_macUcaTn))) ; return v_ret; }//end f_mnReturnsHome }//end f_sendBindUpAndCheckForDiscartion }//end group bindingFns Loading @@ -313,7 +355,7 @@ module LibIpv6_Rfc3775Mipv6_Functions { return FncRetCode { var FncRetCode v_ret; tc_ac.start; tc_wait.start; alt { [] ipPort.receive(mw_generalIpv6_srcDst( c_mipHdr, p_mnHoa, Loading @@ -321,10 +363,10 @@ module LibIpv6_Rfc3775Mipv6_Functions { m_extHdrList_1Elem( mw_extHdr_mipHeader ( c_noNextHdr, c_homeTestInit, mw_hoti)))) { tc_ac.stop; tc_wait.stop; v_ret := e_success ; } [] tc_ac.timeout{ [] tc_wait.timeout{ v_ret := e_timeout; log("**** f_waitForHomeTestInitAndReply: ERROR: tc_ac.timeout **** "); return v_ret; Loading Loading @@ -392,13 +434,153 @@ module LibIpv6_Rfc3775Mipv6_Functions { }//end f_sendHomeTestInitAndWaitForReply }//end group homeTestFns group mobilePrefixFns{ /* * @desc DHAADReply messages is sent, and DHAADResp is expected * @param p_mnCoaTn Mobile Node Care Of Address of test node * @param p_haAcaNut Home Agent Anycast Address of test nodev * @param p_haGlasNut Home Agent Addresses of node under test */ function f_sendMipPrefixSolAndWaitForReply( in template Ipv6Address p_mnCoaTn, in template Ipv6Address p_haGla, in template Ipv6Address p_mnHoaTn) runs on Ipv6Node return FncRetCode { var FncRetCode v_ret; v_ret := f_sendMipPrefixSol(m_mipPrefixSol( c_dstHdr, p_mnCoaTn, p_haGla, m_extHdrList_1Elem( m_extHdr_dstOptHeader( c_icmpHdr, c_optLen2, m_dstOptList_2Elem( m_dstOpt_padN(m_optPad4), m_dstOpt_homeAddr(p_mnHoaTn)))), c_defId)); if ( v_ret != e_success ) {return v_ret;} tc_ac.start; alt { [] ipPort.receive(mw_mipPrefixAdv_extHdr( c_routeHdr, p_haGla, p_mnCoaTn, m_extHdrList_1Elem( mw_extHdr_routingHeader( c_icmpHdr, c_routeHdrLen2, c_routeHdrType2, c_routeHdrSegmentsLeft1, m_routingHeaderData_homeAddress(p_mnHoaTn))))) { tc_ac.stop; v_ret := e_success ; } [] tc_ac.timeout{ v_ret := e_timeout; log("**** f_sendMipPrefixSolAndWaitForReply: ERROR: tc_ac.timeout **** "); } } // end alt return v_ret; }//end f_sendMipPrefixSolAndWaitForReply /* * @desc DHAADReply messages is sent, and DHAADResp is expected * @param p_mnCoaTn Mobile Node Care Of Address of test node * @param p_haAcaNut Home Agent Anycast Address of test nodev * @param p_haGlasNut Home Agent Addresses of node under test */ function f_sendMipPrefixSolAndWaitForBindingError( in template Ipv6Address p_mnCoaTn, in template Ipv6Address p_haGla, in template Ipv6Address p_mnHoaTn) runs on Ipv6Node return FncRetCode { var FncRetCode v_ret; v_ret := f_sendMipPrefixSol(m_mipPrefixSol( c_dstHdr, p_mnCoaTn, p_haGla, m_extHdrList_1Elem( m_extHdr_dstOptHeader( c_icmpHdr, c_optLen2, m_dstOptList_2Elem( m_dstOpt_padN(m_optPad4), m_dstOpt_homeAddr(p_mnHoaTn)))), c_defId)); if ( v_ret != e_success ) {return v_ret;} tc_ac.start; alt { [] ipPort.receive(mw_generalIpv6_srcDst( c_mipHdr, p_haGla, p_mnCoaTn, m_extHdrList_1Elem( mw_extHdr_mipHeader ( c_noNextHdr, c_bindingError, mw_bindingError)))) { tc_ac.stop; v_ret := e_success ; } [] tc_ac.timeout{ v_ret := e_timeout; log("**** f_sendMipPrefixSolAndWaitForBindingError: ERROR: tc_ac.timeout **** "); } } // end alt return v_ret; }//end f_sendMipPrefixSolAndWaitForBindingError }//end group mobilePrefixFns group sendFns{ /* * @desc This sends a MIPv6 HaAddrDreq for a test component * acting as any IPv6 node to the NUT. * Prior it modifies IPv6 packet payload ength and ICMPv6 * checksum to their correct values * @remark The template passed in must NOT contain any matching expressions! * @param p_haAddrDreq Ipv6 packet template with neighborhood advertisement to be sent * @return execution status */ function f_sendHaAddrDreq(in template HomeAgentAddressDiscoveryRequest p_haAddrDreq) runs on LibIpv6Node return FncRetCode { var Ipv6Packet v_ipPkt; var ExtensionHeader v_extHdr; v_ipPkt.homeAgentAddressDiscoveryRequest := valueof(p_haAddrDreq); //set Extension Header if (ispresent(v_ipPkt.homeAgentAddressDiscoveryRequest.extHdrList)) { if(f_setExtensionHeaders( v_ipPkt.homeAgentAddressDiscoveryRequest.extHdrList, v_ipPkt.homeAgentAddressDiscoveryRequest.ipv6Hdr.sourceAddress, v_ipPkt.homeAgentAddressDiscoveryRequest.ipv6Hdr.destinationAddress, v_ipPkt) != e_success) { log(" **** f_sendHaAddrDreq: Error when calculating length of extension headers ****"); return e_error; } } //calc payloadLen v_ipPkt.homeAgentAddressDiscoveryRequest.ipv6Hdr.payloadLength := fx_payloadLength (v_ipPkt); //set checksum to zero v_ipPkt.homeAgentAddressDiscoveryRequest.checksum := c_2ZeroBytes; //calc checksum v_ipPkt.homeAgentAddressDiscoveryRequest.checksum := fx_icmpv6Checksum(v_ipPkt); //send ipPort.send(v_ipPkt.homeAgentAddressDiscoveryRequest); return e_success; } // end f_sendHaAddrDreq /* * @desc This sends a MIPv6 HaAddrDreq for a test component * acting as any IPv6 node to the NUT. Loading Loading @@ -437,7 +619,6 @@ module LibIpv6_Rfc3775Mipv6_Functions { } // end f_sendMipPrefixSol /* * @desc This sends a MIPv6 HaAddrDreq for a test component * acting as any IPv6 node to the NUT. Loading Loading @@ -476,70 +657,128 @@ module LibIpv6_Rfc3775Mipv6_Functions { } // end f_sendMipPrefixSol }//end group sendFns group preambles { /* * @desc DHAADReply messages is sent, and DHAADResp is expected * @desc NUll to Prefix Discovered * @param p_mnCoaTn Mobile Node Care Of Address of test node * @param p_haAcaNut Home Agent Anycast Address of test nodev * @param p_haGlasNut Home Agent Addresses of node under test */ function f_sendMipPrefixSolAndWaitForReply( in template Ipv6Address p_mnCoaTn, in template Ipv6Address p_haGla, in template Ipv6Address p_mnHoaTn) function f_mn_ha_null2MipPrefixDiscovery( in template Ipv6Address p_mnCoaTn, in template Ipv6Address p_mnHoaTn, in template Ipv6Address p_haAca) runs on Ipv6Node return FncRetCode { var FncRetCode v_ret; //Variables var FncRetCode v_ret := e_success; var Ipv6AddressList v_haGlasNut; v_ret := f_sendMipPrefixSol(m_mipPrefixSol( c_dstHdr, p_mnCoaTn, p_haGla, m_extHdrList_1Elem( m_extHdr_dstOptHeader( c_icmpHdr, c_optLen2, m_dstOptList_2Elem( m_dstOpt_padN(m_optPad4), m_dstOpt_homeAddr(p_mnHoaTn)))), c_defId)); if ( v_ret != e_success ) {return v_ret;} tc_ac.start; alt { [] ipPort.receive(mw_mipPrefixAdv_extHdr( c_routeHdr, p_haGla, p_mnCoaTn, m_extHdrList_1Elem( mw_extHdr_routingHeader( c_icmpHdr, c_routeHdrLen2, c_routeHdrType2, c_routeHdrSegmentsLeft1, m_routingHeaderData_homeAddress(p_mnHoaTn))))) { tc_ac.stop; v_ret := e_success ; v_ret := f_sendHaAddrDreqAndWaitForReply( p_mnCoaTn, p_haAca, v_haGlasNut); if (v_ret == e_success) { //TODO align param Order with other fns v_ret := f_sendBindUpAndWaitForBindAck( p_mnCoaTn, p_mnHoaTn, v_haGlasNut[0], c_100TimeUnits); } [] ipPort.receive(mw_generalIpv6_srcDst( c_mipHdr, p_haGla, p_mnCoaTn, m_extHdrList_1Elem( mw_extHdr_mipHeader ( c_noNextHdr, c_bindingError, mw_bindingError)))) { tc_ac.stop; v_ret := e_error ; if (v_ret == e_success) { tc_ac.start(10.0); tc_ac.timeout; v_ret := f_sendMipPrefixSolAndWaitForReply( p_mnCoaTn, v_haGlasNut[0], p_mnHoaTn); } [] tc_ac.timeout{ v_ret := e_timeout; log("**** f_sendMipPrefixSolAndWaitForReply: ERROR: tc_ac.timeout **** "); return v_ret; }//end function f_mn_ha_null2MipPrefixDiscovery function f_mn_ha_null2ReturnRoutability( in template Ipv6Address p_mnCoaTn, in template Ipv6Address p_mnHoaTn, in template Ipv6Address p_glaCnTn, in template Ipv6Address p_haAca, out Ipv6AddressList p_haGlasNut) runs on Ipv6Node return FncRetCode { //Variables var FncRetCode v_ret := e_success; var Ipv6AddressList v_haGlasNut := {c_16ZeroBytes}; v_ret := f_sendHaAddrDreqAndWaitForReply( p_mnCoaTn, p_haAca, v_haGlasNut); if(v_ret == e_success) { f_sendBindUpAndWaitForBindAck( p_mnCoaTn, p_mnHoaTn, v_haGlasNut[0], c_100TimeUnits); } } // end alt if(v_ret == e_success) { v_ret := f_sendHomeTestInitAndWaitForReply( p_mnCoaTn, p_mnHoaTn, p_glaCnTn, v_haGlasNut[0]); } p_haGlasNut := v_haGlasNut; return v_ret ; }//end function f_haNull2ReturnRoutability }//end f_sendMipPrefixSolAndWaitForReply function f_mn_ha_null2ReverseTunneling( in template Ipv6Address p_mnCoaTn, in template Ipv6Address p_mnHoaTn, in template Ipv6Address p_glaCnTn, in template Ipv6Address p_haAca) runs on Ipv6Node return FncRetCode { //Variables var FncRetCode v_ret := e_success; var Ipv6AddressList v_haGlasNut := {c_16ZeroBytes}; var EchoReply v_echoRep; }//end group mobilePrefixFns v_ret := f_mn_ha_null2ReturnRoutability( p_mnCoaTn, p_mnHoaTn, p_glaCnTn, p_haAca, v_haGlasNut); if(v_ret == e_success) { v_ret := f_echoProc_tunneled( p_mnCoaTn, //p_glaA v_haGlasNut[0], //p_glaB p_mnHoaTn, //p_glaC p_glaCnTn, //p_glaD c_defId, c_defSeqNo, v_echoRep); } return v_ret ; }//end function f_mn_ha_null2ReverseTunneling function f_cn_ha_null2ReverseTunneling( in template Ipv6Address p_glaCnTn, in template Ipv6Address p_mnHoaTn) runs on Ipv6Node return FncRetCode { //Variables var FncRetCode v_ret := e_success; v_ret := f_waitForHomeTestInitAndReply( p_glaCnTn, p_mnHoaTn); if(v_ret == e_success) { v_ret := f_replyToEchoRequest( p_glaCnTn, p_mnHoaTn, c_defId, c_defSeqNo); } return v_ret; }//end function f_cn_ha_null2ReverseTunneling }//end group preambles Loading ttcn3/EtsiLibrary/LibIpv6/LibMobility/LibIpv6_Rfc3775Mipv6_Templates.ttcn +0 −14 Original line number Diff line number Diff line Loading @@ -36,20 +36,6 @@ identifier := p_identifier, reserved := c_uInt16Zero } //todo exthdr param template HomeAgentAddressDiscoveryRequest m_dhaadReq_mipHdr ( template Ipv6Address p_src, template Ipv6Address p_dst, UInt8 p_mobilityHeaderType, template MipMessage p_mipMessage, UInt16 p_ident) := { ipv6Hdr := m_ipHdr_nextHdr_srcDst(c_mipHdr, p_src, p_dst), extHdrList := {m_extHdr_mipHeader(c_icmpHdr, p_mobilityHeaderType, p_mipMessage )}, icmpType := c_mipIcmpHomeAgentAddressDiscoveryRequest, icmpCode := c_icmpCode0, checksum := c_2ZeroBytes, identifier := p_ident, reserved := c_uInt16Zero } template HomeAgentAddressDiscoveryRequest mw_dhaadReq ( template Ipv6Address p_src, template Ipv6Address p_dst) := { Loading ttcn3/EtsiLibrary/LibIpv6/LibMultiRfcs/LibIpv6_MultiRfcs_Templates.ttcn +43 −5 Original line number Diff line number Diff line Loading @@ -41,6 +41,12 @@ module LibIpv6_MultiRfcs_Templates { group paddingTemplates { template OptPadN m_optPad2 := { optType := 1, optLen := 0, padding := omit } template OptPadN m_optPad4 := { optType := 1, optLen := 2, Loading Loading @@ -146,6 +152,24 @@ module LibIpv6_MultiRfcs_Templates { } } template MipMessage mw_bindingUpdate( UInt1 p_aFlag, UInt1 p_hFlag, UInt1 p_lFlag, UInt1 p_kFlag, UInt16 p_lifeTime, template MipOptionList p_mipOptions) := { bindingUpdate := { sequenceNumber := ?, aFlag := p_aFlag, hFlag := p_hFlag, lFlag := p_lFlag, kFlag := p_kFlag, reserved := c_uInt12Zero, lifeTime := p_lifeTime, mipOptions := p_mipOptions } } template MipMessage mw_bindingAck(UInt16 p_seqNr) := { bindingAck := { status := c_mipCodeBindingUpdateAccepted, Loading Loading @@ -208,17 +232,31 @@ module LibIpv6_MultiRfcs_Templates { group mobilityOptTemplates { /* * @desc This message is 4 Octets long * @param p_dstOpt First element in the Destination option list */ template MipOption m_mipOpt_padN(template OptPadN p_optPadN) := { optPadN := p_optPadN template MipOptionList m_mipOptList_1Elem ( template MipOption p_mipOpt ) := { p_mipOpt } /* * @param p_dstOpt First element in the Destination option list */ template MipOptionList m_mipOptList_1Elem ( template MipOption p_mipOpt ) := { p_mipOpt template MipOptionList m_mipOptList_2Elem ( template MipOption p_mipOpt1, template MipOption p_mipOpt2 ) := { p_mipOpt1, p_mipOpt2 } template MipOption m_mipOpt_altCoa(template MipOptAltCoA p_mipOptAltCoA) := { mipOptAltCoA := p_mipOptAltCoA } template MipOption m_mipOpt_padN(template OptPadN p_optPadN) := { optPadN := p_optPadN } template MipOptAltCoA m_mipOptAltCoA(in template Ipv6Address p_addr) := { mipOptType :=3, mipOptLen := 16, alternateCoA := p_addr } }//end group mobilityOptTemplates Loading Loading
ttcn3/EtsiLibrary/LibIpv6/LibMobility/LibIpv6_Rfc3775Mipv6_Functions.ttcn +423 −184 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ module LibIpv6_Rfc3775Mipv6_Functions { import from LibIpv6_Rfc2461NeighborDiscovery_TypesAndValues all; import from LibIpv6_Rfc2461NeighborDiscovery_Functions all; import from LibIpv6_Rfc2463Icmpv6_Functions all; import from LibIpv6_Rfc2463Icmpv6_TypesAndValues all; import from LibIpv6_MultiRfcs_TypesAndValues all; import from LibIpv6_MultiRfcs_Templates all; import from LibIpv6_MultiRfcs_Functions all; Loading @@ -38,43 +39,7 @@ module LibIpv6_Rfc3775Mipv6_Functions { group dhaadFns { /* * @desc This sends a MIPv6 HaAddrDreq for a test component * acting as any IPv6 node to the NUT. * Prior it modifies IPv6 packet payload ength and ICMPv6 * checksum to their correct values * @remark The template passed in must NOT contain any matching expressions! * @param p_haAddrDreq Ipv6 packet template with neighborhood advertisement to be sent * @return execution status */ function f_sendHaAddrDreq(in template HomeAgentAddressDiscoveryRequest p_haAddrDreq) runs on LibIpv6Node return FncRetCode { var Ipv6Packet v_ipPkt; var ExtensionHeader v_extHdr; v_ipPkt.homeAgentAddressDiscoveryRequest := valueof(p_haAddrDreq); //set Extension Header if (ispresent(v_ipPkt.homeAgentAddressDiscoveryRequest.extHdrList)) { if(f_setExtensionHeaders( v_ipPkt.homeAgentAddressDiscoveryRequest.extHdrList, v_ipPkt.homeAgentAddressDiscoveryRequest.ipv6Hdr.sourceAddress, v_ipPkt.homeAgentAddressDiscoveryRequest.ipv6Hdr.destinationAddress, v_ipPkt) != e_success) { log(" **** f_sendHaAddrDreq: Error when calculating length of extension headers ****"); return e_error; } } //calc payloadLen v_ipPkt.homeAgentAddressDiscoveryRequest.ipv6Hdr.payloadLength := fx_payloadLength (v_ipPkt); //set checksum to zero v_ipPkt.homeAgentAddressDiscoveryRequest.checksum := c_2ZeroBytes; //calc checksum v_ipPkt.homeAgentAddressDiscoveryRequest.checksum := fx_icmpv6Checksum(v_ipPkt); //send ipPort.send(v_ipPkt.homeAgentAddressDiscoveryRequest); return e_success; } // end f_sendHaAddrDreq /* Loading Loading @@ -123,7 +88,7 @@ module LibIpv6_Rfc3775Mipv6_Functions { * @param p_haGlasNut Home Agent Addresses of node under test */ function f_sendHaAddrDreqAndWaitForReply( in template Ipv6Address p_mnCoaTn, in Ipv6Address p_haAcaNut, in template Ipv6Address p_haAcaNut, out Ipv6AddressList p_haGlasNut) runs on Ipv6Node return FncRetCode { Loading Loading @@ -168,9 +133,83 @@ module LibIpv6_Rfc3775Mipv6_Functions { * @param p_mnHoaTn Mobile Node Home Address of test node * @param p_haGlaNut Home Agent Address of node under test */ function f_registerMnToHa( in template Ipv6Address p_mnCoaTn, function f_receiveBindingUpdateAndReply( //in template Ipv6Address p_mnCoaTn, // in template Ipv6Address p_mnHoaTn, // in template Ipv6Address p_haGlaNut, // in UInt16 p_timeUnits ) runs on Ipv6Node return FncRetCode { var FncRetCode v_ret := e_error; /* tc_wait.start; alt { [] ipPort.receive(mw_generalIpv6_srcDst(c_dstHdr, p_mnCoaTn, p_haGlaNut, m_extHdrList_2Elem( m_extHdr_dstOptHeader( c_mipHdr, c_optLen2, m_dstOptList_2Elem( m_dstOpt_padN(m_optPad4), m_dstOpt_homeAddr(p_mnHoaTn))), mw_extHdr_mipHeader (c_noNextHdr, c_bindingUpdate, mw_bindingUpdate(c_aFlag1, c_hFlag1, c_lFlag0, c_kFlag0, p_timeUnits, m_mipOptList_2Elem( m_mipOpt_padN(m_optPad2), m_mipOpt_altCoa(m_mipOptAltCoA(p_mnCoaTn)))))))) { v_seqNr := tc_wait.stop; v_ret := e_success ; } [] tc_wait.timeout{ v_ret := e_timeout; log("**** f_registerMnToHa: ERROR: tc_ac.timeout **** "); } } // end alt if ( v_ret == e_success ) { v_ret := f_sendGeneralIpv6(m_generalIpv6_srcDst(c_dstHdr, p_mnCoaTn, p_haGlaNut, m_extHdrList_2Elem( m_extHdr_dstOptHeader( c_mipHdr, c_optLen2, m_dstOptList_2Elem( m_dstOpt_padN(m_optPad4), m_dstOpt_homeAddr(p_mnHoaTn))), m_extHdr_mipHeader (c_noNextHdr, c_bindingUpdate, m_bindingUpdate(c_defSeqNo, c_aFlag1, c_hFlag1, c_lFlag0, c_kFlag0, p_timeUnits, m_mipOptList_2Elem( m_mipOpt_padN(m_optPad2), m_mipOpt_altCoa(m_mipOptAltCoA(p_mnCoaTn)))))))); }//end if */ return v_ret; }//end f_receiveBindingUpdateAndReply /* * @desc primaryCareOfAddressRegistration * @param p_mnCoaTn Mobile Node Care Of Address of test node * @param p_mnHoaTn Mobile Node Home Address of test node * @param p_haGlaNut Home Agent Address of node under test */ function f_sendBindUpAndWaitForBindAck( in template Ipv6Address p_mnCoaTn, in template Ipv6Address p_mnHoaTn, in template Ipv6Address p_haGlaNut) in template Ipv6Address p_haGlaNut, in UInt16 p_timeUnits) runs on Ipv6Node return FncRetCode { var FncRetCode v_ret; Loading @@ -191,9 +230,10 @@ module LibIpv6_Rfc3775Mipv6_Functions { c_hFlag1, c_lFlag0, c_kFlag0, c_100TimeUnits, m_mipOptList_1Elem( m_mipOpt_padN(m_optPad4))))))); p_timeUnits, m_mipOptList_2Elem( m_mipOpt_padN(m_optPad2), m_mipOpt_altCoa(m_mipOptAltCoA(p_mnCoaTn)))))))); if ( v_ret != e_success ) {return v_ret;} tc_ac.start; alt { Loading @@ -212,16 +252,6 @@ module LibIpv6_Rfc3775Mipv6_Functions { tc_ac.stop; v_ret := e_success ; } [] ipPort.receive(mw_generalIpv6_srcDst( c_mipHdr, p_haGlaNut, p_mnCoaTn, m_extHdrList_1Elem( mw_extHdr_mipHeader ( c_noNextHdr, c_bindingError, mw_bindingError)))) { tc_ac.stop; v_ret := e_error ; } [] tc_ac.timeout{ v_ret := e_timeout; log("**** f_registerMnToHa: ERROR: tc_ac.timeout **** "); Loading @@ -230,70 +260,82 @@ module LibIpv6_Rfc3775Mipv6_Functions { return v_ret; }//end f_registerMnToHa }//end f_sendBindUpAndWaitForBindAck /* * @desc Mobile Node returns Home procedure * @desc primaryCareOfAddressRegistration * @param p_mnCoaTn Mobile Node Care Of Address of test node * @param p_mnHoaTn Mobile Node Home Address of test node * @param p_mnLlaTn Mobile Node Link Local Address of test node * @param p_macUcaTn Mobile Node Mac Address of test node * @param p_haLlaNut Link Local Address of Node Under Test * @param p_haGlaNut Home Agent Address of node under test */ function f_mnReturnsHome( in template Ipv6Address p_mnHoaTn, in template Ipv6Address p_mnLlaTn, in template Oct6to15 p_macUcaTn, in template Ipv6Address p_haGlaNut) function f_sendBindUpAndCheckForDiscard( in template Ipv6Address p_notRoutableCoaTn, in template Ipv6Address p_mnHoaTn, in template Ipv6Address p_haGlaNut, in UInt16 p_timeUnits) runs on Ipv6Node return FncRetCode { var FncRetCode v_ret; v_ret := f_sendGeneralIpv6(m_generalIpv6_srcDst(c_mipHdr, p_mnHoaTn, v_ret := f_sendGeneralIpv6(m_generalIpv6_srcDst(c_dstHdr, p_notRoutableCoaTn, p_haGlaNut, m_extHdrList_1Elem( m_extHdr_mipHeader ( c_noNextHdr, m_extHdrList_2Elem( m_extHdr_dstOptHeader( c_mipHdr, c_optLen2, m_dstOptList_2Elem( m_dstOpt_padN(m_optPad4), m_dstOpt_homeAddr(p_mnHoaTn))), m_extHdr_mipHeader (c_noNextHdr, c_bindingUpdate, m_bindingUpdate( c_defSeqNo + 1, m_bindingUpdate(c_defSeqNo, c_aFlag1, c_hFlag1, c_lFlag0, c_kFlag0, c_zeroTimeUnits, m_mipOptList_1Elem( m_mipOpt_padN(m_optPad4))))))); p_timeUnits, m_mipOptList_2Elem( m_mipOpt_padN(m_optPad2), m_mipOpt_altCoa(m_mipOptAltCoA(p_notRoutableCoaTn)))))))); if ( v_ret != e_success ) {return v_ret;} tc_ac.start; alt { [] ipPort.receive(mw_generalIpv6_srcDst( c_routeHdr, p_haGlaNut, p_notRoutableCoaTn, m_extHdrList_2Elem( mw_extHdr_routingHeader( c_mipHdr, c_routeHdrLen2, c_routeHdrType2, c_routeHdrSegmentsLeft1, m_routingHeaderData_homeAddress(p_mnHoaTn)), mw_extHdr_mipHeader ( c_noNextHdr, c_bindingAck, mw_bindingAck(c_defSeqNo))))) { tc_ac.stop; v_ret := e_error ; log("**** f_sendBindUpAndCheckForDiscartion: ERROR: IUT did not discard message **** "); } [] ipPort.receive(mw_generalIpv6_srcDst( c_mipHdr, p_haGlaNut, p_mnHoaTn, p_notRoutableCoaTn, m_extHdrList_1Elem( mw_extHdr_mipHeader ( c_noNextHdr, c_bindingAck, mw_bindingAck(c_defSeqNo + 1))))) { c_bindingError, mw_bindingError)))) { tc_ac.stop; v_ret := e_success ; v_ret := e_error ; log("**** f_sendBindUpAndCheckForDiscartion: ERROR: IUT did not discard message **** "); } [] tc_ac.timeout{ return e_timeout; log("**** f_mnReturnsHome: ERROR: tc_ac.timeout **** "); v_ret := e_success; } } // end alt v_ret := f_sendNbrAdv (m_nbrAdv_noExtHdr( p_mnLlaTn, c_allNodesMca, c_rFlag0, c_sFlag0, c_oFlag1, p_mnHoaTn, m_nbrAdvOpt_tllaOpt(p_macUcaTn))) ; return v_ret; }//end f_mnReturnsHome }//end f_sendBindUpAndCheckForDiscartion }//end group bindingFns Loading @@ -313,7 +355,7 @@ module LibIpv6_Rfc3775Mipv6_Functions { return FncRetCode { var FncRetCode v_ret; tc_ac.start; tc_wait.start; alt { [] ipPort.receive(mw_generalIpv6_srcDst( c_mipHdr, p_mnHoa, Loading @@ -321,10 +363,10 @@ module LibIpv6_Rfc3775Mipv6_Functions { m_extHdrList_1Elem( mw_extHdr_mipHeader ( c_noNextHdr, c_homeTestInit, mw_hoti)))) { tc_ac.stop; tc_wait.stop; v_ret := e_success ; } [] tc_ac.timeout{ [] tc_wait.timeout{ v_ret := e_timeout; log("**** f_waitForHomeTestInitAndReply: ERROR: tc_ac.timeout **** "); return v_ret; Loading Loading @@ -392,13 +434,153 @@ module LibIpv6_Rfc3775Mipv6_Functions { }//end f_sendHomeTestInitAndWaitForReply }//end group homeTestFns group mobilePrefixFns{ /* * @desc DHAADReply messages is sent, and DHAADResp is expected * @param p_mnCoaTn Mobile Node Care Of Address of test node * @param p_haAcaNut Home Agent Anycast Address of test nodev * @param p_haGlasNut Home Agent Addresses of node under test */ function f_sendMipPrefixSolAndWaitForReply( in template Ipv6Address p_mnCoaTn, in template Ipv6Address p_haGla, in template Ipv6Address p_mnHoaTn) runs on Ipv6Node return FncRetCode { var FncRetCode v_ret; v_ret := f_sendMipPrefixSol(m_mipPrefixSol( c_dstHdr, p_mnCoaTn, p_haGla, m_extHdrList_1Elem( m_extHdr_dstOptHeader( c_icmpHdr, c_optLen2, m_dstOptList_2Elem( m_dstOpt_padN(m_optPad4), m_dstOpt_homeAddr(p_mnHoaTn)))), c_defId)); if ( v_ret != e_success ) {return v_ret;} tc_ac.start; alt { [] ipPort.receive(mw_mipPrefixAdv_extHdr( c_routeHdr, p_haGla, p_mnCoaTn, m_extHdrList_1Elem( mw_extHdr_routingHeader( c_icmpHdr, c_routeHdrLen2, c_routeHdrType2, c_routeHdrSegmentsLeft1, m_routingHeaderData_homeAddress(p_mnHoaTn))))) { tc_ac.stop; v_ret := e_success ; } [] tc_ac.timeout{ v_ret := e_timeout; log("**** f_sendMipPrefixSolAndWaitForReply: ERROR: tc_ac.timeout **** "); } } // end alt return v_ret; }//end f_sendMipPrefixSolAndWaitForReply /* * @desc DHAADReply messages is sent, and DHAADResp is expected * @param p_mnCoaTn Mobile Node Care Of Address of test node * @param p_haAcaNut Home Agent Anycast Address of test nodev * @param p_haGlasNut Home Agent Addresses of node under test */ function f_sendMipPrefixSolAndWaitForBindingError( in template Ipv6Address p_mnCoaTn, in template Ipv6Address p_haGla, in template Ipv6Address p_mnHoaTn) runs on Ipv6Node return FncRetCode { var FncRetCode v_ret; v_ret := f_sendMipPrefixSol(m_mipPrefixSol( c_dstHdr, p_mnCoaTn, p_haGla, m_extHdrList_1Elem( m_extHdr_dstOptHeader( c_icmpHdr, c_optLen2, m_dstOptList_2Elem( m_dstOpt_padN(m_optPad4), m_dstOpt_homeAddr(p_mnHoaTn)))), c_defId)); if ( v_ret != e_success ) {return v_ret;} tc_ac.start; alt { [] ipPort.receive(mw_generalIpv6_srcDst( c_mipHdr, p_haGla, p_mnCoaTn, m_extHdrList_1Elem( mw_extHdr_mipHeader ( c_noNextHdr, c_bindingError, mw_bindingError)))) { tc_ac.stop; v_ret := e_success ; } [] tc_ac.timeout{ v_ret := e_timeout; log("**** f_sendMipPrefixSolAndWaitForBindingError: ERROR: tc_ac.timeout **** "); } } // end alt return v_ret; }//end f_sendMipPrefixSolAndWaitForBindingError }//end group mobilePrefixFns group sendFns{ /* * @desc This sends a MIPv6 HaAddrDreq for a test component * acting as any IPv6 node to the NUT. * Prior it modifies IPv6 packet payload ength and ICMPv6 * checksum to their correct values * @remark The template passed in must NOT contain any matching expressions! * @param p_haAddrDreq Ipv6 packet template with neighborhood advertisement to be sent * @return execution status */ function f_sendHaAddrDreq(in template HomeAgentAddressDiscoveryRequest p_haAddrDreq) runs on LibIpv6Node return FncRetCode { var Ipv6Packet v_ipPkt; var ExtensionHeader v_extHdr; v_ipPkt.homeAgentAddressDiscoveryRequest := valueof(p_haAddrDreq); //set Extension Header if (ispresent(v_ipPkt.homeAgentAddressDiscoveryRequest.extHdrList)) { if(f_setExtensionHeaders( v_ipPkt.homeAgentAddressDiscoveryRequest.extHdrList, v_ipPkt.homeAgentAddressDiscoveryRequest.ipv6Hdr.sourceAddress, v_ipPkt.homeAgentAddressDiscoveryRequest.ipv6Hdr.destinationAddress, v_ipPkt) != e_success) { log(" **** f_sendHaAddrDreq: Error when calculating length of extension headers ****"); return e_error; } } //calc payloadLen v_ipPkt.homeAgentAddressDiscoveryRequest.ipv6Hdr.payloadLength := fx_payloadLength (v_ipPkt); //set checksum to zero v_ipPkt.homeAgentAddressDiscoveryRequest.checksum := c_2ZeroBytes; //calc checksum v_ipPkt.homeAgentAddressDiscoveryRequest.checksum := fx_icmpv6Checksum(v_ipPkt); //send ipPort.send(v_ipPkt.homeAgentAddressDiscoveryRequest); return e_success; } // end f_sendHaAddrDreq /* * @desc This sends a MIPv6 HaAddrDreq for a test component * acting as any IPv6 node to the NUT. Loading Loading @@ -437,7 +619,6 @@ module LibIpv6_Rfc3775Mipv6_Functions { } // end f_sendMipPrefixSol /* * @desc This sends a MIPv6 HaAddrDreq for a test component * acting as any IPv6 node to the NUT. Loading Loading @@ -476,70 +657,128 @@ module LibIpv6_Rfc3775Mipv6_Functions { } // end f_sendMipPrefixSol }//end group sendFns group preambles { /* * @desc DHAADReply messages is sent, and DHAADResp is expected * @desc NUll to Prefix Discovered * @param p_mnCoaTn Mobile Node Care Of Address of test node * @param p_haAcaNut Home Agent Anycast Address of test nodev * @param p_haGlasNut Home Agent Addresses of node under test */ function f_sendMipPrefixSolAndWaitForReply( in template Ipv6Address p_mnCoaTn, in template Ipv6Address p_haGla, in template Ipv6Address p_mnHoaTn) function f_mn_ha_null2MipPrefixDiscovery( in template Ipv6Address p_mnCoaTn, in template Ipv6Address p_mnHoaTn, in template Ipv6Address p_haAca) runs on Ipv6Node return FncRetCode { var FncRetCode v_ret; //Variables var FncRetCode v_ret := e_success; var Ipv6AddressList v_haGlasNut; v_ret := f_sendMipPrefixSol(m_mipPrefixSol( c_dstHdr, p_mnCoaTn, p_haGla, m_extHdrList_1Elem( m_extHdr_dstOptHeader( c_icmpHdr, c_optLen2, m_dstOptList_2Elem( m_dstOpt_padN(m_optPad4), m_dstOpt_homeAddr(p_mnHoaTn)))), c_defId)); if ( v_ret != e_success ) {return v_ret;} tc_ac.start; alt { [] ipPort.receive(mw_mipPrefixAdv_extHdr( c_routeHdr, p_haGla, p_mnCoaTn, m_extHdrList_1Elem( mw_extHdr_routingHeader( c_icmpHdr, c_routeHdrLen2, c_routeHdrType2, c_routeHdrSegmentsLeft1, m_routingHeaderData_homeAddress(p_mnHoaTn))))) { tc_ac.stop; v_ret := e_success ; v_ret := f_sendHaAddrDreqAndWaitForReply( p_mnCoaTn, p_haAca, v_haGlasNut); if (v_ret == e_success) { //TODO align param Order with other fns v_ret := f_sendBindUpAndWaitForBindAck( p_mnCoaTn, p_mnHoaTn, v_haGlasNut[0], c_100TimeUnits); } [] ipPort.receive(mw_generalIpv6_srcDst( c_mipHdr, p_haGla, p_mnCoaTn, m_extHdrList_1Elem( mw_extHdr_mipHeader ( c_noNextHdr, c_bindingError, mw_bindingError)))) { tc_ac.stop; v_ret := e_error ; if (v_ret == e_success) { tc_ac.start(10.0); tc_ac.timeout; v_ret := f_sendMipPrefixSolAndWaitForReply( p_mnCoaTn, v_haGlasNut[0], p_mnHoaTn); } [] tc_ac.timeout{ v_ret := e_timeout; log("**** f_sendMipPrefixSolAndWaitForReply: ERROR: tc_ac.timeout **** "); return v_ret; }//end function f_mn_ha_null2MipPrefixDiscovery function f_mn_ha_null2ReturnRoutability( in template Ipv6Address p_mnCoaTn, in template Ipv6Address p_mnHoaTn, in template Ipv6Address p_glaCnTn, in template Ipv6Address p_haAca, out Ipv6AddressList p_haGlasNut) runs on Ipv6Node return FncRetCode { //Variables var FncRetCode v_ret := e_success; var Ipv6AddressList v_haGlasNut := {c_16ZeroBytes}; v_ret := f_sendHaAddrDreqAndWaitForReply( p_mnCoaTn, p_haAca, v_haGlasNut); if(v_ret == e_success) { f_sendBindUpAndWaitForBindAck( p_mnCoaTn, p_mnHoaTn, v_haGlasNut[0], c_100TimeUnits); } } // end alt if(v_ret == e_success) { v_ret := f_sendHomeTestInitAndWaitForReply( p_mnCoaTn, p_mnHoaTn, p_glaCnTn, v_haGlasNut[0]); } p_haGlasNut := v_haGlasNut; return v_ret ; }//end function f_haNull2ReturnRoutability }//end f_sendMipPrefixSolAndWaitForReply function f_mn_ha_null2ReverseTunneling( in template Ipv6Address p_mnCoaTn, in template Ipv6Address p_mnHoaTn, in template Ipv6Address p_glaCnTn, in template Ipv6Address p_haAca) runs on Ipv6Node return FncRetCode { //Variables var FncRetCode v_ret := e_success; var Ipv6AddressList v_haGlasNut := {c_16ZeroBytes}; var EchoReply v_echoRep; }//end group mobilePrefixFns v_ret := f_mn_ha_null2ReturnRoutability( p_mnCoaTn, p_mnHoaTn, p_glaCnTn, p_haAca, v_haGlasNut); if(v_ret == e_success) { v_ret := f_echoProc_tunneled( p_mnCoaTn, //p_glaA v_haGlasNut[0], //p_glaB p_mnHoaTn, //p_glaC p_glaCnTn, //p_glaD c_defId, c_defSeqNo, v_echoRep); } return v_ret ; }//end function f_mn_ha_null2ReverseTunneling function f_cn_ha_null2ReverseTunneling( in template Ipv6Address p_glaCnTn, in template Ipv6Address p_mnHoaTn) runs on Ipv6Node return FncRetCode { //Variables var FncRetCode v_ret := e_success; v_ret := f_waitForHomeTestInitAndReply( p_glaCnTn, p_mnHoaTn); if(v_ret == e_success) { v_ret := f_replyToEchoRequest( p_glaCnTn, p_mnHoaTn, c_defId, c_defSeqNo); } return v_ret; }//end function f_cn_ha_null2ReverseTunneling }//end group preambles Loading
ttcn3/EtsiLibrary/LibIpv6/LibMobility/LibIpv6_Rfc3775Mipv6_Templates.ttcn +0 −14 Original line number Diff line number Diff line Loading @@ -36,20 +36,6 @@ identifier := p_identifier, reserved := c_uInt16Zero } //todo exthdr param template HomeAgentAddressDiscoveryRequest m_dhaadReq_mipHdr ( template Ipv6Address p_src, template Ipv6Address p_dst, UInt8 p_mobilityHeaderType, template MipMessage p_mipMessage, UInt16 p_ident) := { ipv6Hdr := m_ipHdr_nextHdr_srcDst(c_mipHdr, p_src, p_dst), extHdrList := {m_extHdr_mipHeader(c_icmpHdr, p_mobilityHeaderType, p_mipMessage )}, icmpType := c_mipIcmpHomeAgentAddressDiscoveryRequest, icmpCode := c_icmpCode0, checksum := c_2ZeroBytes, identifier := p_ident, reserved := c_uInt16Zero } template HomeAgentAddressDiscoveryRequest mw_dhaadReq ( template Ipv6Address p_src, template Ipv6Address p_dst) := { Loading
ttcn3/EtsiLibrary/LibIpv6/LibMultiRfcs/LibIpv6_MultiRfcs_Templates.ttcn +43 −5 Original line number Diff line number Diff line Loading @@ -41,6 +41,12 @@ module LibIpv6_MultiRfcs_Templates { group paddingTemplates { template OptPadN m_optPad2 := { optType := 1, optLen := 0, padding := omit } template OptPadN m_optPad4 := { optType := 1, optLen := 2, Loading Loading @@ -146,6 +152,24 @@ module LibIpv6_MultiRfcs_Templates { } } template MipMessage mw_bindingUpdate( UInt1 p_aFlag, UInt1 p_hFlag, UInt1 p_lFlag, UInt1 p_kFlag, UInt16 p_lifeTime, template MipOptionList p_mipOptions) := { bindingUpdate := { sequenceNumber := ?, aFlag := p_aFlag, hFlag := p_hFlag, lFlag := p_lFlag, kFlag := p_kFlag, reserved := c_uInt12Zero, lifeTime := p_lifeTime, mipOptions := p_mipOptions } } template MipMessage mw_bindingAck(UInt16 p_seqNr) := { bindingAck := { status := c_mipCodeBindingUpdateAccepted, Loading Loading @@ -208,17 +232,31 @@ module LibIpv6_MultiRfcs_Templates { group mobilityOptTemplates { /* * @desc This message is 4 Octets long * @param p_dstOpt First element in the Destination option list */ template MipOption m_mipOpt_padN(template OptPadN p_optPadN) := { optPadN := p_optPadN template MipOptionList m_mipOptList_1Elem ( template MipOption p_mipOpt ) := { p_mipOpt } /* * @param p_dstOpt First element in the Destination option list */ template MipOptionList m_mipOptList_1Elem ( template MipOption p_mipOpt ) := { p_mipOpt template MipOptionList m_mipOptList_2Elem ( template MipOption p_mipOpt1, template MipOption p_mipOpt2 ) := { p_mipOpt1, p_mipOpt2 } template MipOption m_mipOpt_altCoa(template MipOptAltCoA p_mipOptAltCoA) := { mipOptAltCoA := p_mipOptAltCoA } template MipOption m_mipOpt_padN(template OptPadN p_optPadN) := { optPadN := p_optPadN } template MipOptAltCoA m_mipOptAltCoA(in template Ipv6Address p_addr) := { mipOptType :=3, mipOptLen := 16, alternateCoA := p_addr } }//end group mobilityOptTemplates Loading