Loading IPSec/EtsiLibrary/LibIpv6/LibCommonRfcs/LibIpv6_Interface_Templates.ttcn +11 −1 Original line number Diff line number Diff line Loading @@ -553,7 +553,8 @@ group generalIpv6MessageTemplates{ * */ template Ipv6Packet mw_generalIpv6 ( UInt8 p_nextHeader, //UInt8 p_nextHeader, modified by PK template UInt8 p_nextHeader, template Ipv6Address p_src, template Ipv6Address p_dst) := { ipv6Hdr := mw_ipHdr_nextHdr_srcDst(p_nextHeader, p_src, p_dst), Loading Loading @@ -722,6 +723,15 @@ group rfc3775Mipv6_ExtHdrTemplates { } } //Added by PK template MipMessage mw_coti := { careOfTestInit := { reserved := c_uInt16Zero, careOfInitCookie := ?, mipOptions := * } } template MipMessage mw_cot := { careOfTest := { careOfNonceIndex := ?, Loading IPSec/EtsiLibrary/LibIpv6/LibMobility/LibIpv6_Rfc3775Mipv6_Functions.ttcn +161 −2 Original line number Diff line number Diff line Loading @@ -595,6 +595,164 @@ module LibIpv6_Rfc3775Mipv6_Functions { return v_ret; }//end function f_sendRtAdvAndReceiveBindUpOffHome // Added by PK, almost the same as f_sendRtAdvAndReceiveBindUpOffHome /* * @desc Sends RtAdvertisements and waits for Binding Update while the MN is away from home * @param p_paramsRt All IPv6 parameters of Test Node * @param p_paramsIut All IPv6 parameters of Node Under Test * @param p_nrOfRtAdv Nr of RTadv to be sent by the Test Node */ function f_sendRtAdvAndReplyToBindUpOffHome( template Ipv6NodeParams p_paramsRt, template Ipv6NodeParams p_paramsIut, UInt8 p_nrOfRtAdv) runs on Ipv6Node return FncRetCode { //Variables var FncRetCode v_ret := e_error; var UInt8 v_count := 0; var Ipv6Packet v_ipv6Packet; var UInt16 v_seqNr := 0; var UInt16 v_lifetime := 0; var Ipv6Address v_mnCareOfAddr := c_16ZeroBytes; var Ipv6Address v_mnHomeAddr := c_16ZeroBytes; // Send an RtAdv message to have the MN create an address f_sendRtAdvWithPrefix_lifeTime ( p_paramsRt.lla, c_allNodesMca, p_paramsRt.prefixLength, p_paramsRt.gla, c_infinitePrefixLifetime, c_infinitePrefixLifetime ); tc_loop.start; alt { //1st alternative: m_optPad2 + Coa [] ipPort.receive ( mw_generalIpv6_extHdr_dst ( c_dstHdr, p_paramsRt.haGlas[0], m_extHdrList_2Elem ( m_extHdr_dstOptHeader ( c_mipHdr, c_optLen2, m_dstOptList_2Elem ( m_dstOpt_padN(m_optPad4), mw_dstOpt_homeAddr)), mw_extHdr_mipHeader ( c_noNextHdr, c_bindingUpdate, mw_bindingUpdate ( c_aFlag1, c_hFlag1, c_lFlag0, c_kFlag0, m_mipOptList_2Elem ( m_mipOpt_padN(m_optPad2), m_mipOpt_altCoa(mw_altCoA))))))) -> value v_ipv6Packet { //Get SeqNr v_seqNr := v_ipv6Packet.extHdrList[1].mipHeader.mipMessage.bindingUpdate.sequenceNumber; //Get Lifetime v_lifetime := v_ipv6Packet.extHdrList[1].mipHeader.mipMessage.bindingUpdate.lifeTime; //Get CareOfAddress v_mnCareOfAddr := v_ipv6Packet.extHdrList[1].mipHeader.mipMessage.bindingUpdate.mipOptions[1].mipOptAltCoA.alternateCoA; //GetHomeAddress v_mnHomeAddr := v_ipv6Packet.extHdrList[0].destinationOptionHeader.destOptionList[1].homeAddressOption.homeAddress; v_ret := e_success; v_ret := f_sendGeneralIpv6 ( m_generalIpv6_extHdr ( c_routeHdr, p_paramsRt.haGlas[0], v_mnCareOfAddr, m_extHdrList_2Elem ( m_extHdr_routingHeader ( c_mipHdr, c_routeHdrLen2, c_routeHdrType2, c_routeHdrSegmentsLeft1, m_routingHeaderData_homeAddress(v_mnHomeAddr)), m_extHdr_mipHeader ( c_noNextHdr, c_bindingAck, m_bindingAck( v_seqNr, v_lifetime, m_mipOptList_1Elem ( m_mipOpt_padN(m_optPad4))))))); } //2nd alternative: m_optPad4 [] ipPort.receive ( mw_generalIpv6_extHdr_dst ( c_dstHdr, p_paramsRt.haGlas[0], m_extHdrList_2Elem ( m_extHdr_dstOptHeader ( c_mipHdr, c_optLen2, m_dstOptList_2Elem( m_dstOpt_padN(m_optPad4), mw_dstOpt_homeAddr)), mw_extHdr_mipHeader ( c_noNextHdr, c_bindingUpdate, mw_bindingUpdate( c_aFlag1, c_hFlag1, c_lFlag0, c_kFlag0, m_mipOptList_1Elem( m_mipOpt_padN(m_optPad4))))))) -> value v_ipv6Packet { //Get SeqNr v_seqNr := v_ipv6Packet.extHdrList[1].mipHeader.mipMessage.bindingUpdate.sequenceNumber; //Get Lifetime v_lifetime := v_ipv6Packet.extHdrList[1].mipHeader.mipMessage.bindingUpdate.lifeTime; //Get CareOfAddress v_mnCareOfAddr := v_ipv6Packet.ipv6Hdr.sourceAddress; //GetHomeAddress v_mnHomeAddr := v_ipv6Packet.extHdrList[0].destinationOptionHeader.destOptionList[1].homeAddressOption.homeAddress; v_ret := e_success; v_ret := f_sendGeneralIpv6 ( m_generalIpv6_extHdr ( c_routeHdr, p_paramsRt.haGlas[0], v_mnCareOfAddr, m_extHdrList_2Elem ( m_extHdr_routingHeader ( c_mipHdr, c_routeHdrLen2, c_routeHdrType2, c_routeHdrSegmentsLeft1, m_routingHeaderData_homeAddress(v_mnHomeAddr)), m_extHdr_mipHeader ( c_noNextHdr, c_bindingAck, m_bindingAck( v_seqNr, v_lifetime, m_mipOptList_1Elem ( m_mipOpt_padN(m_optPad4))))))); } [] tc_loop.timeout { f_sendRtAdvWithPrefix_lifeTime ( p_paramsRt.lla, c_allNodesMca, p_paramsRt.prefixLength, p_paramsRt.gla, c_infinitePrefixLifetime, c_infinitePrefixLifetime ); v_count := v_count + 1; if (v_count <= p_nrOfRtAdv) { tc_loop.start; repeat; } } } return v_ret; } // end function f_sendRtAdvAndReplyToBindUpOffHome /* * @desc Test Node is Att Home and sends RtAdvertisements and waits for Binding Update * @param p_paramsRt All IPv6 parameters of Test Node Loading Loading @@ -768,7 +926,7 @@ module LibIpv6_Rfc3775Mipv6_Functions { v_ret := f_sendGeneralIpv6(m_generalIpv6_extHdr ( c_tunneledIpHdr, p_mnCoa, p_mnCoa, //TODO, it should be the home address p_haGlaNut, m_extHdrList_2Elem( m_extHdr_tunneledHeader(c_mipHdr, p_mnHoa, p_cnGla), Loading Loading @@ -1694,7 +1852,8 @@ module LibIpv6_Rfc3775Mipv6_Functions { //Get Lifetime v_lifetime := v_ipv6Packet.extHdrList[1].mipHeader.mipMessage.bindingUpdate.lifeTime; //Get CareOfAddress v_mnCareOfAddr1 := v_ipv6Packet.ipv6Hdr.sourceAddress; //mnCareOfAddr1 := v_ipv6Packet.ipv6Hdr.sourceAddress; v_mnCareOfAddr1 := v_ipv6Packet.extHdrList[1].mipHeader.mipMessage.bindingUpdate.mipOptions[1].mipOptAltCoA.alternateCoA; //TODO SMU read v_mnCareOfAddr from MipOptions //GetHomeAddress v_mnHomeAddr := v_ipv6Packet.extHdrList[0].destinationOptionHeader.destOptionList[1].homeAddressOption.homeAddress; Loading Loading
IPSec/EtsiLibrary/LibIpv6/LibCommonRfcs/LibIpv6_Interface_Templates.ttcn +11 −1 Original line number Diff line number Diff line Loading @@ -553,7 +553,8 @@ group generalIpv6MessageTemplates{ * */ template Ipv6Packet mw_generalIpv6 ( UInt8 p_nextHeader, //UInt8 p_nextHeader, modified by PK template UInt8 p_nextHeader, template Ipv6Address p_src, template Ipv6Address p_dst) := { ipv6Hdr := mw_ipHdr_nextHdr_srcDst(p_nextHeader, p_src, p_dst), Loading Loading @@ -722,6 +723,15 @@ group rfc3775Mipv6_ExtHdrTemplates { } } //Added by PK template MipMessage mw_coti := { careOfTestInit := { reserved := c_uInt16Zero, careOfInitCookie := ?, mipOptions := * } } template MipMessage mw_cot := { careOfTest := { careOfNonceIndex := ?, Loading
IPSec/EtsiLibrary/LibIpv6/LibMobility/LibIpv6_Rfc3775Mipv6_Functions.ttcn +161 −2 Original line number Diff line number Diff line Loading @@ -595,6 +595,164 @@ module LibIpv6_Rfc3775Mipv6_Functions { return v_ret; }//end function f_sendRtAdvAndReceiveBindUpOffHome // Added by PK, almost the same as f_sendRtAdvAndReceiveBindUpOffHome /* * @desc Sends RtAdvertisements and waits for Binding Update while the MN is away from home * @param p_paramsRt All IPv6 parameters of Test Node * @param p_paramsIut All IPv6 parameters of Node Under Test * @param p_nrOfRtAdv Nr of RTadv to be sent by the Test Node */ function f_sendRtAdvAndReplyToBindUpOffHome( template Ipv6NodeParams p_paramsRt, template Ipv6NodeParams p_paramsIut, UInt8 p_nrOfRtAdv) runs on Ipv6Node return FncRetCode { //Variables var FncRetCode v_ret := e_error; var UInt8 v_count := 0; var Ipv6Packet v_ipv6Packet; var UInt16 v_seqNr := 0; var UInt16 v_lifetime := 0; var Ipv6Address v_mnCareOfAddr := c_16ZeroBytes; var Ipv6Address v_mnHomeAddr := c_16ZeroBytes; // Send an RtAdv message to have the MN create an address f_sendRtAdvWithPrefix_lifeTime ( p_paramsRt.lla, c_allNodesMca, p_paramsRt.prefixLength, p_paramsRt.gla, c_infinitePrefixLifetime, c_infinitePrefixLifetime ); tc_loop.start; alt { //1st alternative: m_optPad2 + Coa [] ipPort.receive ( mw_generalIpv6_extHdr_dst ( c_dstHdr, p_paramsRt.haGlas[0], m_extHdrList_2Elem ( m_extHdr_dstOptHeader ( c_mipHdr, c_optLen2, m_dstOptList_2Elem ( m_dstOpt_padN(m_optPad4), mw_dstOpt_homeAddr)), mw_extHdr_mipHeader ( c_noNextHdr, c_bindingUpdate, mw_bindingUpdate ( c_aFlag1, c_hFlag1, c_lFlag0, c_kFlag0, m_mipOptList_2Elem ( m_mipOpt_padN(m_optPad2), m_mipOpt_altCoa(mw_altCoA))))))) -> value v_ipv6Packet { //Get SeqNr v_seqNr := v_ipv6Packet.extHdrList[1].mipHeader.mipMessage.bindingUpdate.sequenceNumber; //Get Lifetime v_lifetime := v_ipv6Packet.extHdrList[1].mipHeader.mipMessage.bindingUpdate.lifeTime; //Get CareOfAddress v_mnCareOfAddr := v_ipv6Packet.extHdrList[1].mipHeader.mipMessage.bindingUpdate.mipOptions[1].mipOptAltCoA.alternateCoA; //GetHomeAddress v_mnHomeAddr := v_ipv6Packet.extHdrList[0].destinationOptionHeader.destOptionList[1].homeAddressOption.homeAddress; v_ret := e_success; v_ret := f_sendGeneralIpv6 ( m_generalIpv6_extHdr ( c_routeHdr, p_paramsRt.haGlas[0], v_mnCareOfAddr, m_extHdrList_2Elem ( m_extHdr_routingHeader ( c_mipHdr, c_routeHdrLen2, c_routeHdrType2, c_routeHdrSegmentsLeft1, m_routingHeaderData_homeAddress(v_mnHomeAddr)), m_extHdr_mipHeader ( c_noNextHdr, c_bindingAck, m_bindingAck( v_seqNr, v_lifetime, m_mipOptList_1Elem ( m_mipOpt_padN(m_optPad4))))))); } //2nd alternative: m_optPad4 [] ipPort.receive ( mw_generalIpv6_extHdr_dst ( c_dstHdr, p_paramsRt.haGlas[0], m_extHdrList_2Elem ( m_extHdr_dstOptHeader ( c_mipHdr, c_optLen2, m_dstOptList_2Elem( m_dstOpt_padN(m_optPad4), mw_dstOpt_homeAddr)), mw_extHdr_mipHeader ( c_noNextHdr, c_bindingUpdate, mw_bindingUpdate( c_aFlag1, c_hFlag1, c_lFlag0, c_kFlag0, m_mipOptList_1Elem( m_mipOpt_padN(m_optPad4))))))) -> value v_ipv6Packet { //Get SeqNr v_seqNr := v_ipv6Packet.extHdrList[1].mipHeader.mipMessage.bindingUpdate.sequenceNumber; //Get Lifetime v_lifetime := v_ipv6Packet.extHdrList[1].mipHeader.mipMessage.bindingUpdate.lifeTime; //Get CareOfAddress v_mnCareOfAddr := v_ipv6Packet.ipv6Hdr.sourceAddress; //GetHomeAddress v_mnHomeAddr := v_ipv6Packet.extHdrList[0].destinationOptionHeader.destOptionList[1].homeAddressOption.homeAddress; v_ret := e_success; v_ret := f_sendGeneralIpv6 ( m_generalIpv6_extHdr ( c_routeHdr, p_paramsRt.haGlas[0], v_mnCareOfAddr, m_extHdrList_2Elem ( m_extHdr_routingHeader ( c_mipHdr, c_routeHdrLen2, c_routeHdrType2, c_routeHdrSegmentsLeft1, m_routingHeaderData_homeAddress(v_mnHomeAddr)), m_extHdr_mipHeader ( c_noNextHdr, c_bindingAck, m_bindingAck( v_seqNr, v_lifetime, m_mipOptList_1Elem ( m_mipOpt_padN(m_optPad4))))))); } [] tc_loop.timeout { f_sendRtAdvWithPrefix_lifeTime ( p_paramsRt.lla, c_allNodesMca, p_paramsRt.prefixLength, p_paramsRt.gla, c_infinitePrefixLifetime, c_infinitePrefixLifetime ); v_count := v_count + 1; if (v_count <= p_nrOfRtAdv) { tc_loop.start; repeat; } } } return v_ret; } // end function f_sendRtAdvAndReplyToBindUpOffHome /* * @desc Test Node is Att Home and sends RtAdvertisements and waits for Binding Update * @param p_paramsRt All IPv6 parameters of Test Node Loading Loading @@ -768,7 +926,7 @@ module LibIpv6_Rfc3775Mipv6_Functions { v_ret := f_sendGeneralIpv6(m_generalIpv6_extHdr ( c_tunneledIpHdr, p_mnCoa, p_mnCoa, //TODO, it should be the home address p_haGlaNut, m_extHdrList_2Elem( m_extHdr_tunneledHeader(c_mipHdr, p_mnHoa, p_cnGla), Loading Loading @@ -1694,7 +1852,8 @@ module LibIpv6_Rfc3775Mipv6_Functions { //Get Lifetime v_lifetime := v_ipv6Packet.extHdrList[1].mipHeader.mipMessage.bindingUpdate.lifeTime; //Get CareOfAddress v_mnCareOfAddr1 := v_ipv6Packet.ipv6Hdr.sourceAddress; //mnCareOfAddr1 := v_ipv6Packet.ipv6Hdr.sourceAddress; v_mnCareOfAddr1 := v_ipv6Packet.extHdrList[1].mipHeader.mipMessage.bindingUpdate.mipOptions[1].mipOptAltCoA.alternateCoA; //TODO SMU read v_mnCareOfAddr from MipOptions //GetHomeAddress v_mnHomeAddr := v_ipv6Packet.extHdrList[0].destinationOptionHeader.destOptionList[1].homeAddressOption.homeAddress; Loading