Loading IPSec/EtsiLibrary/LibIpv6/LibCommonRfcs/LibIpv6_ExternalFunctions.ttcn +11 −5 Original line number Diff line number Diff line Loading @@ -101,12 +101,10 @@ out PlaintextData p_plaintextData) return FncRetCode; /* @desc Apply indicated Integrity algorithm to the message. /* @desc Apply indicated Integrity algorithm to the message. Message is an octetstring. * If e_sha1_96 is chosen, then the key input shall be ignored. * * @param p_crypto Cryptographic function used to compute MAC * @param p_integrityAlgo Cryptographic function used to compute MAC * @param p_key Key used to compute the MAC * @param p_message Octetstring message * @return Message HMAC Loading @@ -114,7 +112,15 @@ external function fx_integrity( IntegrityAlgo p_integrityAlgo, in octetstring p_key, in octetstring p_message) return octetstring; //TODO comment /* @desc Apply indicated Integrity algorithm to the message. Message can only be an EspHeader. * If e_sha1_96 is chosen, then the key input shall be ignored. * * @param p_integrityAlgo Cryptographic function used to compute MAC * @param p_key Key used to compute the MAC * @param p_espHeader EspHeader * @param p_integrityResult Result of Integrity function * @return Message HMAC */ external function fx_integrityEspHdr( in IntegrityAlgo p_integrityAlgo, in octetstring p_key, in EspHeader p_espHeader, Loading IPSec/EtsiLibrary/LibIpv6/LibCommonRfcs/LibIpv6_Interface_Functions.ttcn +4 −4 Original line number Diff line number Diff line Loading @@ -141,10 +141,10 @@ group rfc3775Mipv6_ExtHdrFunctions { //else if (ischosen(p_mipHeader.mipMessage.homeTest)) {//CNSimu sends this message //} //else if (ischosen(p_mipHeader.mipMessage.careOfTestInit) and (PX_TEST_IPSEC == true)) { //TODO //SMU TODO //} //else if (ischosen(p_mipHeader.mipMessage.careOfTest) and (PX_TEST_IPSEC == true)) { //TODO //SMU TODO //} if (ischosen(p_mipHeader.mipMessage.bindingUpdate)) {//Authorization data is only needed for BU sent to CN=IUT var UInt8 v_position := 0; Loading Loading @@ -192,7 +192,7 @@ group rfc3775Mipv6_ExtHdrFunctions { } } // else if (ischosen(p_mipHeader.mipMessage.bindingAck) and (PX_TEST_IPSEC == true)) { //TODO //SMU TODO //} //calc mipHeaderLen p_mipHeader.headerLen := fx_mipHeaderLength(p_mipHeader); Loading Loading @@ -340,7 +340,7 @@ group rfc4303Esp_ExtHdrFunctions { } // Encrypted payload is assigend for integrity calculation. // Afterwards plaintext will be assigned v_espHdr.espPayloadData.encryptedData := v_encryptResult.encryptedData; v_espHdr.espPayloadData.ciphertextData := v_encryptResult.ciphertextData; if (ispresent(v_encryptResult.tfcPadding)) { v_espHdr.tfcPadding := v_encryptResult.tfcPadding; } Loading IPSec/EtsiLibrary/LibIpv6/LibCommonRfcs/LibIpv6_Interface_Templates.ttcn +10 −10 Original line number Diff line number Diff line Loading @@ -781,20 +781,20 @@ group rfc3775Mipv6_ExtHdrTemplates { } template MipBindingAuthorizationData m_bindingAuthData(octetstring p_authenticator) := { mipOptType := 5, mipOptType := c_mipBindingAuthorizationData, mipOptLen := lengthof(p_authenticator), authenticator := p_authenticator } template MipBindingAuthorizationData m_bindingAuthData_dummy := { mipOptType := 5, mipOptType := c_mipBindingAuthorizationData , mipOptLen := 0, authenticator := omit//value is set in f_setExtensionHeader } template MipOptNonceIndices m_mipOptNonceIndices_dummy := { mipOptType := 4, mipOptLen := 4, mipOptType := c_mipOptNonceIndices, mipOptLen := c_mipOptNonceIndicesLen, homeNonceIndex := c_uInt16Zero,//value is set in f_setExtensionHeader careOfNonceIndex := c_uInt16Zero//value is set in f_setExtensionHeader } Loading @@ -802,21 +802,21 @@ group rfc3775Mipv6_ExtHdrTemplates { template MipOptNonceIndices m_mipOptNonceIndices( UInt16 p_homeNonceIndex, UInt16 p_careOfNonceIndex) := { mipOptType := 4, mipOptLen := 4, mipOptType := c_mipOptNonceIndices, mipOptLen := c_mipOptNonceIndicesLen, homeNonceIndex := p_homeNonceIndex, careOfNonceIndex := p_careOfNonceIndex } template MipOptAltCoA m_altCoA(in template Ipv6Address p_addr) := { mipOptType :=3, mipOptLen := 16, mipOptType :=c_mipOptAltCoA, mipOptLen := c_mipOptAltCoALen, alternateCoA := p_addr } template MipOptAltCoA mw_altCoA := { mipOptType :=3, mipOptLen := 16, mipOptType :=c_mipOptAltCoA, mipOptLen := c_mipOptAltCoALen, alternateCoA := ? } Loading IPSec/EtsiLibrary/LibIpv6/LibCommonRfcs/LibIpv6_Interface_TypesAndValues.ttcn +36 −23 Original line number Diff line number Diff line Loading @@ -89,7 +89,7 @@ group ipv6Packet { Ipv6Payload ipv6Payload optional } with { encode "TODO"; encode "TODO DTE"; } //Alias Loading Loading @@ -119,7 +119,7 @@ group ipv6Packet { //Udp type Ipv6Packet UdpPacket; //General IPv6 packet // type octetstring Ipv6Packet;//TODO check this // type octetstring Ipv6Packet;//TODO SMU+DTE check this /* Loading Loading @@ -609,8 +609,8 @@ group rfc3775Mipv6_ExtHdrTypesAndValues { * @desc Derived from RFC3775 Section 6.2.4 */ type record MipOptBindingRefreshAdvice { UInt8 mipOptType (2), UInt8 mipOptLen (2), UInt8 mipOptType (c_mipOptBindingRefreshAdvice), UInt8 mipOptLen (c_mipOptBindingRefreshAdviceLen), UInt16 refreshInterval } with { Loading @@ -621,8 +621,8 @@ group rfc3775Mipv6_ExtHdrTypesAndValues { * @desc Derived from RFC3775 Section 6.2.5 */ type record MipOptAltCoA { UInt8 mipOptType (3), UInt8 mipOptLen (16), UInt8 mipOptType (c_mipOptAltCoA), UInt8 mipOptLen (c_mipOptAltCoALen), Oct16 alternateCoA } with { Loading @@ -633,8 +633,8 @@ group rfc3775Mipv6_ExtHdrTypesAndValues { * @desc Derived from RFC3775 Section 6.2.6 */ type record MipOptNonceIndices { UInt8 mipOptType (4), UInt8 mipOptLen (4), UInt8 mipOptType (c_mipOptNonceIndices), UInt8 mipOptLen (c_mipOptNonceIndicesLen), UInt16 homeNonceIndex, UInt16 careOfNonceIndex } Loading @@ -647,7 +647,7 @@ group rfc3775Mipv6_ExtHdrTypesAndValues { * authenticator value depends on the used author procedure. */ type record MipBindingAuthorizationData { UInt8 mipOptType (5), UInt8 mipOptType (c_mipBindingAuthorizationData), UInt8 mipOptLen, octetstring authenticator optional//so that it can be omiited when creating mobility data } Loading @@ -661,6 +661,20 @@ group rfc3775Mipv6_ExtHdrTypesAndValues { group mipConstants { group mipOptionsConstants { //Type const UInt8 c_mipOptBindingRefreshAdvice := 2; const UInt8 c_mipOptAltCoA := 3; const UInt8 c_mipOptNonceIndices := 4; const UInt8 c_mipBindingAuthorizationData := 5; //Length const UInt8 c_mipOptBindingRefreshAdviceLen := 2; const UInt8 c_mipOptAltCoALen := 16; const UInt8 c_mipOptNonceIndicesLen := 4; }//end group mipOptionsConstants const UInt8 c_maxMipOptions:=10; group mipMessageValues { Loading @@ -679,7 +693,6 @@ group rfc3775Mipv6_ExtHdrTypesAndValues { const UInt8 c_bindingUpdate := 5; const UInt8 c_bindingAck := 6; const UInt8 c_bindingError := 7; //todo add alias headertype } Loading Loading @@ -745,13 +758,13 @@ group rfc4303Esp_ExtHdrTypesAndValues { octetstring icv optional// depends on integrity-algo } with { encode "TODO"; encode "DTE TODO"; } //Transport mode : no IPv6Header and no tfcPadding //Tunnel mode : IPv6Header and maybe tfcPadding (use payloadLength to calc total length) type union EspPayloadData { octetstring encryptedData, octetstring ciphertextData, PlaintextData plaintextData } Loading @@ -777,7 +790,7 @@ group cryptoTypes { Ipv6Payload ipv6Payload optional } with { encode "TODO"; encode "DTE TODO"; } type enumerated EncryptionAlgo { Loading @@ -789,7 +802,7 @@ group cryptoTypes { } with { //encode "use=com.testingtech.ttcn.tci.*;"; encode "TODO"; encode " DTE TODO"; } type enumerated IntegrityAlgo { Loading @@ -802,7 +815,7 @@ group cryptoTypes { } with { //encode "use=com.testingtech.ttcn.tci.*;"; encode "TODO"; encode "DTE TODO"; } type enumerated CombinedModeAlgo { Loading @@ -810,7 +823,7 @@ group cryptoTypes { } with { //encode "use=com.testingtech.ttcn.tci.*;"; encode "TODO"; encode "DTE TODO"; } type enumerated IpSecProtocolMode { Loading @@ -819,7 +832,7 @@ group cryptoTypes { } with { //encode "use=com.testingtech.ttcn.tci.*;"; encode "TODO"; encode "DTE TODO"; } type enumerated IpSecProtocol{ Loading @@ -827,6 +840,10 @@ group cryptoTypes { e_ah (1) } //Security Association Database type record length (1 .. c_maxNrDa) of Sa Sad; const UInt8 c_maxNrDa := 8; //Security Association type record Sa { UInt32 securityParametersIndex, Loading @@ -843,19 +860,15 @@ group cryptoTypes { } with { //encode "use=com.testingtech.ttcn.tci.*;"; encode "TODO"; encode "DTE TODO"; } //Security Association Database type record length (1 .. c_maxNrDa) of Sa Sad; const UInt8 c_maxNrDa := 8; /* @desc Result of fx_encrypt * */ type record EncryptResult { octetstring iv optional, octetstring encryptedData optional, octetstring ciphertextData optional, octetstring tfcPadding optional } Loading IPSec/EtsiLibrary/LibIpv6/LibMobility/LibIpv6_Rfc3775Mipv6_Functions.ttcn +38 −40 Original line number Diff line number Diff line Loading @@ -278,6 +278,7 @@ module LibIpv6_Rfc3775Mipv6_Functions { tc_ac.start; alt { //the test adapter process consists of decrypt and integrity check //TODO SMU replace vc_sad[0] with vc_sad[vc_sad.secParamsIndex] [] ipPort.receive(mw_generalIpv6_extHdr_noData( c_routeHdr, p_haGlaNut, Loading Loading @@ -369,7 +370,7 @@ module LibIpv6_Rfc3775Mipv6_Functions { } var EncryptResult v_encryptResult := fx_encryptModularIpPacket( e_transportMode,//TODO check if Pixit or vc_sad[0].ipSecProtocolMode, e_transportMode, vc_sad[0].espEncryptionAlgo, vc_sad[0].espEncryptionKey, v_modularIpv6Packet); Loading @@ -381,9 +382,9 @@ module LibIpv6_Rfc3775Mipv6_Functions { securityParametersIndex := vc_sad[0].securityParametersIndex, sequenceNumber := vc_sad[0].sequenceNumber, // Payload iv := v_encryptResult.iv,//TODO check omit iv := v_encryptResult.iv, espPayloadData := v_encryptResult.espPayloadData, tfcPadding := v_encryptResult.tfcPadding,//TODO check omit tfcPadding := v_encryptResult.tfcPadding, // Trailer padding := omit, padLength := c_uInt8Zero, Loading @@ -391,8 +392,6 @@ module LibIpv6_Rfc3775Mipv6_Functions { icv := omit } //TODO: use function to determine if padding is needed (RFC4303/clause2.4). After or before icv calculation? var ExtensionHeader v_extHdr_espHeader := {espHeader_snd := v_espHeader_snd}; v_espHeader_snd.icv := fx_integrityExtHdr( Loading @@ -400,7 +399,6 @@ module LibIpv6_Rfc3775Mipv6_Functions { vc_sad[0].espIntegrityKey, v_extHdr_espHeader); //TODO, put the above in 1 function f_createEspHdr v_ret := f_sendGeneralIpv6(m_generalIpv6_extHdr(c_dstHdr, p_mnCoaTn, Loading Loading @@ -428,11 +426,11 @@ module LibIpv6_Rfc3775Mipv6_Functions { mw_extHdr_espHeader))) -> value v_ipv6Packet { //TODO check Integrity var DecryptedEspHeaderData v_decryptedEspHeaderData := fx_decryptEspPayload( 1,//IvLength TODO make hashmap to map length to algo, 2,//IcvLength, e_transportMode,//TODO check if Pixit or vc_sad[0].ipSecProtocolMode, 1, 2, e_transportMode, vc_sad[0].espEncryptionAlgo, vc_sad[0].espEncryptionKey, v_ipv6Packet.extHdrList[1].espHeader_rcv.espHeaderData ); Loading Loading @@ -524,7 +522,7 @@ module LibIpv6_Rfc3775Mipv6_Functions { m_mipOptList_4Elem( m_mipOpt_padN(m_optPad2), m_mipOpt_altCoa(m_altCoA(p_mnCoaTn)), m_mipOpt_nonceIndices(m_mipOptNonceIndices_dummy), //TODO validate byte boundary. padding should not be needed here m_mipOpt_nonceIndices(m_mipOptNonceIndices_dummy), //TODO SMU+AB validate byte boundary. padding should not be needed here m_mipOpt_bindingAuth(m_bindingAuthData_dummy))))))); if ( v_ret != e_success ) {return v_ret;} tc_ac.start; Loading @@ -541,7 +539,7 @@ module LibIpv6_Rfc3775Mipv6_Functions { mw_extHdr_mipHeader ( c_noNextHdr, c_bindingAck, mw_bindingAck(p_seqNr))))) { //TODO check on authenticator //TODO SMU check on authenticator tc_ac.stop; v_ret := e_success ; } Loading Loading @@ -587,7 +585,7 @@ module LibIpv6_Rfc3775Mipv6_Functions { repeat; } } // TODO wait for TT compiler fix // TODO DTE wait for TT compiler fix // [] a_receiveBindingUpdateAndReply(p_paramsRt.haGlas[0]); // [] tc_ac.timeout {//Guard timer // v_ret:= e_timeout; Loading Loading @@ -628,7 +626,7 @@ module LibIpv6_Rfc3775Mipv6_Functions { repeat; } } // TODO add when TT compiler fix // TODO DTE add when TT compiler fix // [] a_receiveBindingUpdateAndReply(p_paramsRt.haGlas[0]); // [] tc_ac.timeout {//Guard timer // v_ret:= e_timeout; Loading @@ -647,10 +645,10 @@ module LibIpv6_Rfc3775Mipv6_Functions { /* * @desc Test Node waits for Home Test Init and replies with Home Test * @param p_glaCn Global Address of CN (test node 2) * @param p_cnGla Global Address of CN (test node 2) * @param p_mnHoa Mobile Node Home Address of test node 1 */ function f_cn_ha_waitForHomeTestInitAndReply( in template Ipv6Address p_glaCn, function f_cn_ha_waitForHomeTestInitAndReply( in template Ipv6Address p_cnGla, in template Ipv6Address p_mnHoa) runs on Ipv6Node return FncRetCode { Loading @@ -661,7 +659,7 @@ module LibIpv6_Rfc3775Mipv6_Functions { alt { [] ipPort.receive(mw_generalIpv6_extHdr_noData( c_mipHdr, p_mnHoa, p_glaCn, p_cnGla, m_extHdrList_1Elem( mw_extHdr_mipHeader ( c_noNextHdr, c_homeTestInit, mw_hoti)))) -> value v_ipv6Packet { Loading @@ -681,7 +679,7 @@ module LibIpv6_Rfc3775Mipv6_Functions { } // end alt v_ret := f_sendGeneralIpv6(m_generalIpv6_extHdr (c_mipHdr, p_glaCn, p_cnGla, p_mnHoa, m_extHdrList_1Elem( m_extHdr_mipHeader ( c_noNextHdr, c_homeTest, Loading @@ -696,10 +694,10 @@ module LibIpv6_Rfc3775Mipv6_Functions { /* * @desc Test Node waits for Home Test Init and replies with Home Test * in Drive and Sniff mode * @param p_glaCn Global Address of CN (test node 2) * @param p_cnGla Global Address of CN (test node 2) * @param p_mnHoa Mobile Node Home Address of test node 1 */ function f_waitForHomeTestInitAndReply_DS( in template Ipv6Address p_glaCn, function f_waitForHomeTestInitAndReply_DS( in template Ipv6Address p_cnGla, in template Ipv6Address p_mnHoa) runs on Ipv6Node return FncRetCode { Loading @@ -709,7 +707,7 @@ module LibIpv6_Rfc3775Mipv6_Functions { alt { [] ipPort.receive(mw_generalIpv6_extHdr_noData( c_mipHdr, p_mnHoa, p_glaCn, p_cnGla, m_extHdrList_1Elem( mw_extHdr_mipHeader ( c_noNextHdr, c_homeTestInit, mw_hoti)))) { Loading @@ -724,7 +722,7 @@ module LibIpv6_Rfc3775Mipv6_Functions { } // end alt // v_ret := f_sendGeneralIpv6(m_generalIpv6_srcDst (c_mipHdr, // p_glaCn, // p_cnGla, // p_mnHoa, // m_extHdrList_1Elem( m_extHdr_mipHeader ( c_noNextHdr, // c_homeTest, Loading @@ -733,7 +731,7 @@ module LibIpv6_Rfc3775Mipv6_Functions { alt { [] ipPort.receive(mw_generalIpv6_extHdr_noData( c_mipHdr, p_glaCn, p_cnGla, p_mnHoa, m_extHdrList_1Elem( mw_extHdr_mipHeader ( c_noNextHdr, c_homeTest, Loading @@ -756,12 +754,12 @@ module LibIpv6_Rfc3775Mipv6_Functions { * @desc Test Node sends Home Test Init and waits for Home Test * @param p_mnCoa Mobile Node Care of Address of test node 1 * @param p_mnHoa Mobile Node Home Address of test node 1 * @param p_glaCn Global Address of CN (test node 2) * @param p_cnGla Global Address of CN (test node 2) * @param p_haGlaNut Home Agent Address of IUT */ function f_mn_ha_sendHomeTestInitAndWaitForReply( in template Ipv6Address p_mnCoa, in template Ipv6Address p_mnHoa, in template Ipv6Address p_glaCn, in template Ipv6Address p_cnGla, in template Ipv6Address p_haGlaNut) runs on Ipv6Node return FncRetCode { Loading @@ -773,7 +771,7 @@ module LibIpv6_Rfc3775Mipv6_Functions { p_mnCoa, p_haGlaNut, m_extHdrList_2Elem( m_extHdr_tunneledHeader(c_mipHdr, p_mnHoa, p_glaCn), m_extHdr_tunneledHeader(c_mipHdr, p_mnHoa, p_cnGla), m_extHdr_mipHeader (c_noNextHdr, c_homeTestInit, m_hoti(vc_mipSec.mnSimuParams.homeInitCookie))))); Loading @@ -785,7 +783,7 @@ module LibIpv6_Rfc3775Mipv6_Functions { p_haGlaNut, p_mnCoa, m_extHdrList_2Elem( mw_extHdr_tunneledHeader(c_mipHdr, p_glaCn, p_mnHoa), mw_extHdr_tunneledHeader(c_mipHdr, p_cnGla, p_mnHoa), mw_extHdr_mipHeader ( c_noNextHdr, c_homeTest, mw_hot)))) -> value v_ipv6Packet { Loading Loading @@ -813,11 +811,11 @@ module LibIpv6_Rfc3775Mipv6_Functions { /* * @desc Test Node sends Home Test Init and waits for Home Test * @param p_mnHoa Mobile Node Home Address of test node 1 * @param p_glaCn Global Address of CN (test node 2) * @param p_cnGla Global Address of CN (test node 2) */ function f_ha_cn_sendHomeTestInitAndWaitForReply( in template Ipv6Address p_mnHoa, in template Ipv6Address p_glaCn) in template Ipv6Address p_cnGla) runs on Ipv6Node return FncRetCode { var FncRetCode v_ret; Loading @@ -826,7 +824,7 @@ module LibIpv6_Rfc3775Mipv6_Functions { v_ret := f_sendGeneralIpv6(m_generalIpv6_extHdr ( c_mipHdr, p_mnHoa, p_glaCn, p_cnGla, m_extHdrList_1Elem( m_extHdr_mipHeader (c_noNextHdr, c_homeTestInit, Loading @@ -836,7 +834,7 @@ module LibIpv6_Rfc3775Mipv6_Functions { alt { [] ipPort.receive(mw_generalIpv6_extHdr_noData( c_mipHdr, p_glaCn, p_cnGla, p_mnHoa, m_extHdrList_1Elem( mw_extHdr_mipHeader ( c_noNextHdr, Loading Loading @@ -872,11 +870,11 @@ module LibIpv6_Rfc3775Mipv6_Functions { /* * @desc Test Node sends CareOfTestInit and waits for CareOfTest * @param p_mnHoa Mobile Node Home Address of test node 1 * @param p_glaCn Global Address of CN (test node 2) * @param p_cnGla Global Address of CN (test node 2) */ function f_mn_cn_sendCareOfTestInitAndWaitForReply( in template Ipv6Address p_mnCoa, in template Ipv6Address p_glaCn) in template Ipv6Address p_cnGla) runs on Ipv6Node return FncRetCode { var FncRetCode v_ret; Loading @@ -885,7 +883,7 @@ module LibIpv6_Rfc3775Mipv6_Functions { v_ret := f_sendGeneralIpv6(m_generalIpv6_extHdr ( c_mipHdr, p_mnCoa, p_glaCn, p_cnGla, m_extHdrList_1Elem( m_extHdr_mipHeader (c_noNextHdr, c_careOfTestInit, Loading @@ -895,7 +893,7 @@ module LibIpv6_Rfc3775Mipv6_Functions { alt { [] ipPort.receive(mw_generalIpv6_extHdr_noData( c_mipHdr, p_glaCn, p_cnGla, p_mnCoa, m_extHdrList_1Elem( mw_extHdr_mipHeader ( c_noNextHdr, Loading Loading @@ -928,7 +926,7 @@ module LibIpv6_Rfc3775Mipv6_Functions { group mipSecurityFns { function f_createKbm(out Oct20 p_kbm) //TODO should be creatMnSimuKbm function f_createKbm(out Oct20 p_kbm) //TODO SMU should be creatMnSimuKbm runs on LibIpv6Node return FncRetCode { Loading @@ -942,7 +940,7 @@ module LibIpv6_Rfc3775Mipv6_Functions { c_1ZeroByte, bit2oct(vc_mipSec.mnSimuParams.receivedHomeKeygenToken) & bit2oct(vc_mipSec.mnSimuParams.receivedCareOfKeygenToken) ) ; //TODO check if truncate to 20 octet is needed //TODO SMU+ DTE check if truncate to 20 octet is needed return e_success; }//end function f_createKbm Loading Loading @@ -1585,7 +1583,7 @@ module LibIpv6_Rfc3775Mipv6_Functions { v_lifetime := v_ipv6Packet.extHdrList[0].mipHeader.mipMessage.bindingUpdate.lifeTime; //Get HomeAddress v_mnHomeAddr := v_ipv6Packet.ipv6Hdr.sourceAddress; //TODO read v_mnCareOfAddr from MipOptions //TODO SMU read v_mnCareOfAddr from MipOptions v_ret := e_success ; v_ret := f_sendGeneralIpv6(m_generalIpv6_extHdr( c_mipHdr, p_paramsTn.haGlas[0],//p_haGlaTn, Loading Loading @@ -1697,7 +1695,7 @@ module LibIpv6_Rfc3775Mipv6_Functions { v_lifetime := v_ipv6Packet.extHdrList[1].mipHeader.mipMessage.bindingUpdate.lifeTime; //Get CareOfAddress v_mnCareOfAddr1 := v_ipv6Packet.ipv6Hdr.sourceAddress; //TODO read v_mnCareOfAddr from MipOptions //TODO SMU read v_mnCareOfAddr from MipOptions //GetHomeAddress v_mnHomeAddr := v_ipv6Packet.extHdrList[0].destinationOptionHeader.destOptionList[1].homeAddressOption.homeAddress; v_ret := e_success ; Loading Loading
IPSec/EtsiLibrary/LibIpv6/LibCommonRfcs/LibIpv6_ExternalFunctions.ttcn +11 −5 Original line number Diff line number Diff line Loading @@ -101,12 +101,10 @@ out PlaintextData p_plaintextData) return FncRetCode; /* @desc Apply indicated Integrity algorithm to the message. /* @desc Apply indicated Integrity algorithm to the message. Message is an octetstring. * If e_sha1_96 is chosen, then the key input shall be ignored. * * @param p_crypto Cryptographic function used to compute MAC * @param p_integrityAlgo Cryptographic function used to compute MAC * @param p_key Key used to compute the MAC * @param p_message Octetstring message * @return Message HMAC Loading @@ -114,7 +112,15 @@ external function fx_integrity( IntegrityAlgo p_integrityAlgo, in octetstring p_key, in octetstring p_message) return octetstring; //TODO comment /* @desc Apply indicated Integrity algorithm to the message. Message can only be an EspHeader. * If e_sha1_96 is chosen, then the key input shall be ignored. * * @param p_integrityAlgo Cryptographic function used to compute MAC * @param p_key Key used to compute the MAC * @param p_espHeader EspHeader * @param p_integrityResult Result of Integrity function * @return Message HMAC */ external function fx_integrityEspHdr( in IntegrityAlgo p_integrityAlgo, in octetstring p_key, in EspHeader p_espHeader, Loading
IPSec/EtsiLibrary/LibIpv6/LibCommonRfcs/LibIpv6_Interface_Functions.ttcn +4 −4 Original line number Diff line number Diff line Loading @@ -141,10 +141,10 @@ group rfc3775Mipv6_ExtHdrFunctions { //else if (ischosen(p_mipHeader.mipMessage.homeTest)) {//CNSimu sends this message //} //else if (ischosen(p_mipHeader.mipMessage.careOfTestInit) and (PX_TEST_IPSEC == true)) { //TODO //SMU TODO //} //else if (ischosen(p_mipHeader.mipMessage.careOfTest) and (PX_TEST_IPSEC == true)) { //TODO //SMU TODO //} if (ischosen(p_mipHeader.mipMessage.bindingUpdate)) {//Authorization data is only needed for BU sent to CN=IUT var UInt8 v_position := 0; Loading Loading @@ -192,7 +192,7 @@ group rfc3775Mipv6_ExtHdrFunctions { } } // else if (ischosen(p_mipHeader.mipMessage.bindingAck) and (PX_TEST_IPSEC == true)) { //TODO //SMU TODO //} //calc mipHeaderLen p_mipHeader.headerLen := fx_mipHeaderLength(p_mipHeader); Loading Loading @@ -340,7 +340,7 @@ group rfc4303Esp_ExtHdrFunctions { } // Encrypted payload is assigend for integrity calculation. // Afterwards plaintext will be assigned v_espHdr.espPayloadData.encryptedData := v_encryptResult.encryptedData; v_espHdr.espPayloadData.ciphertextData := v_encryptResult.ciphertextData; if (ispresent(v_encryptResult.tfcPadding)) { v_espHdr.tfcPadding := v_encryptResult.tfcPadding; } Loading
IPSec/EtsiLibrary/LibIpv6/LibCommonRfcs/LibIpv6_Interface_Templates.ttcn +10 −10 Original line number Diff line number Diff line Loading @@ -781,20 +781,20 @@ group rfc3775Mipv6_ExtHdrTemplates { } template MipBindingAuthorizationData m_bindingAuthData(octetstring p_authenticator) := { mipOptType := 5, mipOptType := c_mipBindingAuthorizationData, mipOptLen := lengthof(p_authenticator), authenticator := p_authenticator } template MipBindingAuthorizationData m_bindingAuthData_dummy := { mipOptType := 5, mipOptType := c_mipBindingAuthorizationData , mipOptLen := 0, authenticator := omit//value is set in f_setExtensionHeader } template MipOptNonceIndices m_mipOptNonceIndices_dummy := { mipOptType := 4, mipOptLen := 4, mipOptType := c_mipOptNonceIndices, mipOptLen := c_mipOptNonceIndicesLen, homeNonceIndex := c_uInt16Zero,//value is set in f_setExtensionHeader careOfNonceIndex := c_uInt16Zero//value is set in f_setExtensionHeader } Loading @@ -802,21 +802,21 @@ group rfc3775Mipv6_ExtHdrTemplates { template MipOptNonceIndices m_mipOptNonceIndices( UInt16 p_homeNonceIndex, UInt16 p_careOfNonceIndex) := { mipOptType := 4, mipOptLen := 4, mipOptType := c_mipOptNonceIndices, mipOptLen := c_mipOptNonceIndicesLen, homeNonceIndex := p_homeNonceIndex, careOfNonceIndex := p_careOfNonceIndex } template MipOptAltCoA m_altCoA(in template Ipv6Address p_addr) := { mipOptType :=3, mipOptLen := 16, mipOptType :=c_mipOptAltCoA, mipOptLen := c_mipOptAltCoALen, alternateCoA := p_addr } template MipOptAltCoA mw_altCoA := { mipOptType :=3, mipOptLen := 16, mipOptType :=c_mipOptAltCoA, mipOptLen := c_mipOptAltCoALen, alternateCoA := ? } Loading
IPSec/EtsiLibrary/LibIpv6/LibCommonRfcs/LibIpv6_Interface_TypesAndValues.ttcn +36 −23 Original line number Diff line number Diff line Loading @@ -89,7 +89,7 @@ group ipv6Packet { Ipv6Payload ipv6Payload optional } with { encode "TODO"; encode "TODO DTE"; } //Alias Loading Loading @@ -119,7 +119,7 @@ group ipv6Packet { //Udp type Ipv6Packet UdpPacket; //General IPv6 packet // type octetstring Ipv6Packet;//TODO check this // type octetstring Ipv6Packet;//TODO SMU+DTE check this /* Loading Loading @@ -609,8 +609,8 @@ group rfc3775Mipv6_ExtHdrTypesAndValues { * @desc Derived from RFC3775 Section 6.2.4 */ type record MipOptBindingRefreshAdvice { UInt8 mipOptType (2), UInt8 mipOptLen (2), UInt8 mipOptType (c_mipOptBindingRefreshAdvice), UInt8 mipOptLen (c_mipOptBindingRefreshAdviceLen), UInt16 refreshInterval } with { Loading @@ -621,8 +621,8 @@ group rfc3775Mipv6_ExtHdrTypesAndValues { * @desc Derived from RFC3775 Section 6.2.5 */ type record MipOptAltCoA { UInt8 mipOptType (3), UInt8 mipOptLen (16), UInt8 mipOptType (c_mipOptAltCoA), UInt8 mipOptLen (c_mipOptAltCoALen), Oct16 alternateCoA } with { Loading @@ -633,8 +633,8 @@ group rfc3775Mipv6_ExtHdrTypesAndValues { * @desc Derived from RFC3775 Section 6.2.6 */ type record MipOptNonceIndices { UInt8 mipOptType (4), UInt8 mipOptLen (4), UInt8 mipOptType (c_mipOptNonceIndices), UInt8 mipOptLen (c_mipOptNonceIndicesLen), UInt16 homeNonceIndex, UInt16 careOfNonceIndex } Loading @@ -647,7 +647,7 @@ group rfc3775Mipv6_ExtHdrTypesAndValues { * authenticator value depends on the used author procedure. */ type record MipBindingAuthorizationData { UInt8 mipOptType (5), UInt8 mipOptType (c_mipBindingAuthorizationData), UInt8 mipOptLen, octetstring authenticator optional//so that it can be omiited when creating mobility data } Loading @@ -661,6 +661,20 @@ group rfc3775Mipv6_ExtHdrTypesAndValues { group mipConstants { group mipOptionsConstants { //Type const UInt8 c_mipOptBindingRefreshAdvice := 2; const UInt8 c_mipOptAltCoA := 3; const UInt8 c_mipOptNonceIndices := 4; const UInt8 c_mipBindingAuthorizationData := 5; //Length const UInt8 c_mipOptBindingRefreshAdviceLen := 2; const UInt8 c_mipOptAltCoALen := 16; const UInt8 c_mipOptNonceIndicesLen := 4; }//end group mipOptionsConstants const UInt8 c_maxMipOptions:=10; group mipMessageValues { Loading @@ -679,7 +693,6 @@ group rfc3775Mipv6_ExtHdrTypesAndValues { const UInt8 c_bindingUpdate := 5; const UInt8 c_bindingAck := 6; const UInt8 c_bindingError := 7; //todo add alias headertype } Loading Loading @@ -745,13 +758,13 @@ group rfc4303Esp_ExtHdrTypesAndValues { octetstring icv optional// depends on integrity-algo } with { encode "TODO"; encode "DTE TODO"; } //Transport mode : no IPv6Header and no tfcPadding //Tunnel mode : IPv6Header and maybe tfcPadding (use payloadLength to calc total length) type union EspPayloadData { octetstring encryptedData, octetstring ciphertextData, PlaintextData plaintextData } Loading @@ -777,7 +790,7 @@ group cryptoTypes { Ipv6Payload ipv6Payload optional } with { encode "TODO"; encode "DTE TODO"; } type enumerated EncryptionAlgo { Loading @@ -789,7 +802,7 @@ group cryptoTypes { } with { //encode "use=com.testingtech.ttcn.tci.*;"; encode "TODO"; encode " DTE TODO"; } type enumerated IntegrityAlgo { Loading @@ -802,7 +815,7 @@ group cryptoTypes { } with { //encode "use=com.testingtech.ttcn.tci.*;"; encode "TODO"; encode "DTE TODO"; } type enumerated CombinedModeAlgo { Loading @@ -810,7 +823,7 @@ group cryptoTypes { } with { //encode "use=com.testingtech.ttcn.tci.*;"; encode "TODO"; encode "DTE TODO"; } type enumerated IpSecProtocolMode { Loading @@ -819,7 +832,7 @@ group cryptoTypes { } with { //encode "use=com.testingtech.ttcn.tci.*;"; encode "TODO"; encode "DTE TODO"; } type enumerated IpSecProtocol{ Loading @@ -827,6 +840,10 @@ group cryptoTypes { e_ah (1) } //Security Association Database type record length (1 .. c_maxNrDa) of Sa Sad; const UInt8 c_maxNrDa := 8; //Security Association type record Sa { UInt32 securityParametersIndex, Loading @@ -843,19 +860,15 @@ group cryptoTypes { } with { //encode "use=com.testingtech.ttcn.tci.*;"; encode "TODO"; encode "DTE TODO"; } //Security Association Database type record length (1 .. c_maxNrDa) of Sa Sad; const UInt8 c_maxNrDa := 8; /* @desc Result of fx_encrypt * */ type record EncryptResult { octetstring iv optional, octetstring encryptedData optional, octetstring ciphertextData optional, octetstring tfcPadding optional } Loading
IPSec/EtsiLibrary/LibIpv6/LibMobility/LibIpv6_Rfc3775Mipv6_Functions.ttcn +38 −40 Original line number Diff line number Diff line Loading @@ -278,6 +278,7 @@ module LibIpv6_Rfc3775Mipv6_Functions { tc_ac.start; alt { //the test adapter process consists of decrypt and integrity check //TODO SMU replace vc_sad[0] with vc_sad[vc_sad.secParamsIndex] [] ipPort.receive(mw_generalIpv6_extHdr_noData( c_routeHdr, p_haGlaNut, Loading Loading @@ -369,7 +370,7 @@ module LibIpv6_Rfc3775Mipv6_Functions { } var EncryptResult v_encryptResult := fx_encryptModularIpPacket( e_transportMode,//TODO check if Pixit or vc_sad[0].ipSecProtocolMode, e_transportMode, vc_sad[0].espEncryptionAlgo, vc_sad[0].espEncryptionKey, v_modularIpv6Packet); Loading @@ -381,9 +382,9 @@ module LibIpv6_Rfc3775Mipv6_Functions { securityParametersIndex := vc_sad[0].securityParametersIndex, sequenceNumber := vc_sad[0].sequenceNumber, // Payload iv := v_encryptResult.iv,//TODO check omit iv := v_encryptResult.iv, espPayloadData := v_encryptResult.espPayloadData, tfcPadding := v_encryptResult.tfcPadding,//TODO check omit tfcPadding := v_encryptResult.tfcPadding, // Trailer padding := omit, padLength := c_uInt8Zero, Loading @@ -391,8 +392,6 @@ module LibIpv6_Rfc3775Mipv6_Functions { icv := omit } //TODO: use function to determine if padding is needed (RFC4303/clause2.4). After or before icv calculation? var ExtensionHeader v_extHdr_espHeader := {espHeader_snd := v_espHeader_snd}; v_espHeader_snd.icv := fx_integrityExtHdr( Loading @@ -400,7 +399,6 @@ module LibIpv6_Rfc3775Mipv6_Functions { vc_sad[0].espIntegrityKey, v_extHdr_espHeader); //TODO, put the above in 1 function f_createEspHdr v_ret := f_sendGeneralIpv6(m_generalIpv6_extHdr(c_dstHdr, p_mnCoaTn, Loading Loading @@ -428,11 +426,11 @@ module LibIpv6_Rfc3775Mipv6_Functions { mw_extHdr_espHeader))) -> value v_ipv6Packet { //TODO check Integrity var DecryptedEspHeaderData v_decryptedEspHeaderData := fx_decryptEspPayload( 1,//IvLength TODO make hashmap to map length to algo, 2,//IcvLength, e_transportMode,//TODO check if Pixit or vc_sad[0].ipSecProtocolMode, 1, 2, e_transportMode, vc_sad[0].espEncryptionAlgo, vc_sad[0].espEncryptionKey, v_ipv6Packet.extHdrList[1].espHeader_rcv.espHeaderData ); Loading Loading @@ -524,7 +522,7 @@ module LibIpv6_Rfc3775Mipv6_Functions { m_mipOptList_4Elem( m_mipOpt_padN(m_optPad2), m_mipOpt_altCoa(m_altCoA(p_mnCoaTn)), m_mipOpt_nonceIndices(m_mipOptNonceIndices_dummy), //TODO validate byte boundary. padding should not be needed here m_mipOpt_nonceIndices(m_mipOptNonceIndices_dummy), //TODO SMU+AB validate byte boundary. padding should not be needed here m_mipOpt_bindingAuth(m_bindingAuthData_dummy))))))); if ( v_ret != e_success ) {return v_ret;} tc_ac.start; Loading @@ -541,7 +539,7 @@ module LibIpv6_Rfc3775Mipv6_Functions { mw_extHdr_mipHeader ( c_noNextHdr, c_bindingAck, mw_bindingAck(p_seqNr))))) { //TODO check on authenticator //TODO SMU check on authenticator tc_ac.stop; v_ret := e_success ; } Loading Loading @@ -587,7 +585,7 @@ module LibIpv6_Rfc3775Mipv6_Functions { repeat; } } // TODO wait for TT compiler fix // TODO DTE wait for TT compiler fix // [] a_receiveBindingUpdateAndReply(p_paramsRt.haGlas[0]); // [] tc_ac.timeout {//Guard timer // v_ret:= e_timeout; Loading Loading @@ -628,7 +626,7 @@ module LibIpv6_Rfc3775Mipv6_Functions { repeat; } } // TODO add when TT compiler fix // TODO DTE add when TT compiler fix // [] a_receiveBindingUpdateAndReply(p_paramsRt.haGlas[0]); // [] tc_ac.timeout {//Guard timer // v_ret:= e_timeout; Loading @@ -647,10 +645,10 @@ module LibIpv6_Rfc3775Mipv6_Functions { /* * @desc Test Node waits for Home Test Init and replies with Home Test * @param p_glaCn Global Address of CN (test node 2) * @param p_cnGla Global Address of CN (test node 2) * @param p_mnHoa Mobile Node Home Address of test node 1 */ function f_cn_ha_waitForHomeTestInitAndReply( in template Ipv6Address p_glaCn, function f_cn_ha_waitForHomeTestInitAndReply( in template Ipv6Address p_cnGla, in template Ipv6Address p_mnHoa) runs on Ipv6Node return FncRetCode { Loading @@ -661,7 +659,7 @@ module LibIpv6_Rfc3775Mipv6_Functions { alt { [] ipPort.receive(mw_generalIpv6_extHdr_noData( c_mipHdr, p_mnHoa, p_glaCn, p_cnGla, m_extHdrList_1Elem( mw_extHdr_mipHeader ( c_noNextHdr, c_homeTestInit, mw_hoti)))) -> value v_ipv6Packet { Loading @@ -681,7 +679,7 @@ module LibIpv6_Rfc3775Mipv6_Functions { } // end alt v_ret := f_sendGeneralIpv6(m_generalIpv6_extHdr (c_mipHdr, p_glaCn, p_cnGla, p_mnHoa, m_extHdrList_1Elem( m_extHdr_mipHeader ( c_noNextHdr, c_homeTest, Loading @@ -696,10 +694,10 @@ module LibIpv6_Rfc3775Mipv6_Functions { /* * @desc Test Node waits for Home Test Init and replies with Home Test * in Drive and Sniff mode * @param p_glaCn Global Address of CN (test node 2) * @param p_cnGla Global Address of CN (test node 2) * @param p_mnHoa Mobile Node Home Address of test node 1 */ function f_waitForHomeTestInitAndReply_DS( in template Ipv6Address p_glaCn, function f_waitForHomeTestInitAndReply_DS( in template Ipv6Address p_cnGla, in template Ipv6Address p_mnHoa) runs on Ipv6Node return FncRetCode { Loading @@ -709,7 +707,7 @@ module LibIpv6_Rfc3775Mipv6_Functions { alt { [] ipPort.receive(mw_generalIpv6_extHdr_noData( c_mipHdr, p_mnHoa, p_glaCn, p_cnGla, m_extHdrList_1Elem( mw_extHdr_mipHeader ( c_noNextHdr, c_homeTestInit, mw_hoti)))) { Loading @@ -724,7 +722,7 @@ module LibIpv6_Rfc3775Mipv6_Functions { } // end alt // v_ret := f_sendGeneralIpv6(m_generalIpv6_srcDst (c_mipHdr, // p_glaCn, // p_cnGla, // p_mnHoa, // m_extHdrList_1Elem( m_extHdr_mipHeader ( c_noNextHdr, // c_homeTest, Loading @@ -733,7 +731,7 @@ module LibIpv6_Rfc3775Mipv6_Functions { alt { [] ipPort.receive(mw_generalIpv6_extHdr_noData( c_mipHdr, p_glaCn, p_cnGla, p_mnHoa, m_extHdrList_1Elem( mw_extHdr_mipHeader ( c_noNextHdr, c_homeTest, Loading @@ -756,12 +754,12 @@ module LibIpv6_Rfc3775Mipv6_Functions { * @desc Test Node sends Home Test Init and waits for Home Test * @param p_mnCoa Mobile Node Care of Address of test node 1 * @param p_mnHoa Mobile Node Home Address of test node 1 * @param p_glaCn Global Address of CN (test node 2) * @param p_cnGla Global Address of CN (test node 2) * @param p_haGlaNut Home Agent Address of IUT */ function f_mn_ha_sendHomeTestInitAndWaitForReply( in template Ipv6Address p_mnCoa, in template Ipv6Address p_mnHoa, in template Ipv6Address p_glaCn, in template Ipv6Address p_cnGla, in template Ipv6Address p_haGlaNut) runs on Ipv6Node return FncRetCode { Loading @@ -773,7 +771,7 @@ module LibIpv6_Rfc3775Mipv6_Functions { p_mnCoa, p_haGlaNut, m_extHdrList_2Elem( m_extHdr_tunneledHeader(c_mipHdr, p_mnHoa, p_glaCn), m_extHdr_tunneledHeader(c_mipHdr, p_mnHoa, p_cnGla), m_extHdr_mipHeader (c_noNextHdr, c_homeTestInit, m_hoti(vc_mipSec.mnSimuParams.homeInitCookie))))); Loading @@ -785,7 +783,7 @@ module LibIpv6_Rfc3775Mipv6_Functions { p_haGlaNut, p_mnCoa, m_extHdrList_2Elem( mw_extHdr_tunneledHeader(c_mipHdr, p_glaCn, p_mnHoa), mw_extHdr_tunneledHeader(c_mipHdr, p_cnGla, p_mnHoa), mw_extHdr_mipHeader ( c_noNextHdr, c_homeTest, mw_hot)))) -> value v_ipv6Packet { Loading Loading @@ -813,11 +811,11 @@ module LibIpv6_Rfc3775Mipv6_Functions { /* * @desc Test Node sends Home Test Init and waits for Home Test * @param p_mnHoa Mobile Node Home Address of test node 1 * @param p_glaCn Global Address of CN (test node 2) * @param p_cnGla Global Address of CN (test node 2) */ function f_ha_cn_sendHomeTestInitAndWaitForReply( in template Ipv6Address p_mnHoa, in template Ipv6Address p_glaCn) in template Ipv6Address p_cnGla) runs on Ipv6Node return FncRetCode { var FncRetCode v_ret; Loading @@ -826,7 +824,7 @@ module LibIpv6_Rfc3775Mipv6_Functions { v_ret := f_sendGeneralIpv6(m_generalIpv6_extHdr ( c_mipHdr, p_mnHoa, p_glaCn, p_cnGla, m_extHdrList_1Elem( m_extHdr_mipHeader (c_noNextHdr, c_homeTestInit, Loading @@ -836,7 +834,7 @@ module LibIpv6_Rfc3775Mipv6_Functions { alt { [] ipPort.receive(mw_generalIpv6_extHdr_noData( c_mipHdr, p_glaCn, p_cnGla, p_mnHoa, m_extHdrList_1Elem( mw_extHdr_mipHeader ( c_noNextHdr, Loading Loading @@ -872,11 +870,11 @@ module LibIpv6_Rfc3775Mipv6_Functions { /* * @desc Test Node sends CareOfTestInit and waits for CareOfTest * @param p_mnHoa Mobile Node Home Address of test node 1 * @param p_glaCn Global Address of CN (test node 2) * @param p_cnGla Global Address of CN (test node 2) */ function f_mn_cn_sendCareOfTestInitAndWaitForReply( in template Ipv6Address p_mnCoa, in template Ipv6Address p_glaCn) in template Ipv6Address p_cnGla) runs on Ipv6Node return FncRetCode { var FncRetCode v_ret; Loading @@ -885,7 +883,7 @@ module LibIpv6_Rfc3775Mipv6_Functions { v_ret := f_sendGeneralIpv6(m_generalIpv6_extHdr ( c_mipHdr, p_mnCoa, p_glaCn, p_cnGla, m_extHdrList_1Elem( m_extHdr_mipHeader (c_noNextHdr, c_careOfTestInit, Loading @@ -895,7 +893,7 @@ module LibIpv6_Rfc3775Mipv6_Functions { alt { [] ipPort.receive(mw_generalIpv6_extHdr_noData( c_mipHdr, p_glaCn, p_cnGla, p_mnCoa, m_extHdrList_1Elem( mw_extHdr_mipHeader ( c_noNextHdr, Loading Loading @@ -928,7 +926,7 @@ module LibIpv6_Rfc3775Mipv6_Functions { group mipSecurityFns { function f_createKbm(out Oct20 p_kbm) //TODO should be creatMnSimuKbm function f_createKbm(out Oct20 p_kbm) //TODO SMU should be creatMnSimuKbm runs on LibIpv6Node return FncRetCode { Loading @@ -942,7 +940,7 @@ module LibIpv6_Rfc3775Mipv6_Functions { c_1ZeroByte, bit2oct(vc_mipSec.mnSimuParams.receivedHomeKeygenToken) & bit2oct(vc_mipSec.mnSimuParams.receivedCareOfKeygenToken) ) ; //TODO check if truncate to 20 octet is needed //TODO SMU+ DTE check if truncate to 20 octet is needed return e_success; }//end function f_createKbm Loading Loading @@ -1585,7 +1583,7 @@ module LibIpv6_Rfc3775Mipv6_Functions { v_lifetime := v_ipv6Packet.extHdrList[0].mipHeader.mipMessage.bindingUpdate.lifeTime; //Get HomeAddress v_mnHomeAddr := v_ipv6Packet.ipv6Hdr.sourceAddress; //TODO read v_mnCareOfAddr from MipOptions //TODO SMU read v_mnCareOfAddr from MipOptions v_ret := e_success ; v_ret := f_sendGeneralIpv6(m_generalIpv6_extHdr( c_mipHdr, p_paramsTn.haGlas[0],//p_haGlaTn, Loading Loading @@ -1697,7 +1695,7 @@ module LibIpv6_Rfc3775Mipv6_Functions { v_lifetime := v_ipv6Packet.extHdrList[1].mipHeader.mipMessage.bindingUpdate.lifeTime; //Get CareOfAddress v_mnCareOfAddr1 := v_ipv6Packet.ipv6Hdr.sourceAddress; //TODO read v_mnCareOfAddr from MipOptions //TODO SMU read v_mnCareOfAddr from MipOptions //GetHomeAddress v_mnHomeAddr := v_ipv6Packet.extHdrList[0].destinationOptionHeader.destOptionList[1].homeAddressOption.homeAddress; v_ret := e_success ; Loading