Loading ttcn3/EtsiLibrary/LibIpv6/LibCommonRfcs/LibIpv6_CommonRfcs_Functions.ttcn +34 −18 Original line number Diff line number Diff line Loading @@ -20,56 +20,72 @@ group calcPrefixFns { /* function createIpAddresses(Prefix p_prefix, Oct6to15 p_macAddr) function createIpAddresses( in Oct6to15 p_macAddr, in Oct16 /*Prefix*/ p_prefix,//Type changed so that NbrDsc moduel does not need to be imported in UInt8 p_prefixLen, out Ipv6Address p_lla, out Ipv6Address p_gla, out Ipv6Address p_solNodeMca, out Oct6to15 p_macSolNodeMca ) runs on LibIpv6Node return FncRetCode { var UInt8 i; const UInt8 c_uniIdLen := 64; var Bit128 v_prefixBits := oct2bit(p_prefix); var Bit64 v_prefixReadyBits := oct2bit('0000000000000000'O); var Oct8 v_prefixReady := int2oct(0,8); var Oct8 v_interfaceIdReady := int2oct(0,8); var Oct3 v_leftPartMac := int2oct(0,3); var Oct3 v_rightPartMac := int2oct(0,3); var Bit24 v_leftPartBits := int2bit(0,24); var Bit24 v_leftPartBitMask := int2bit(131072,24); var Ipv6Address v_gla := int2oct(0,16); var Bit24 v_leftPartBitMask := oct2bit('020000'O); // var Ipv6Address v_gla := int2oct(0,16); if (lengthof(p_prefix) > 8) { if (p_prefixLen > 64) { log("Error"); return e_error; } else { //Fill v_prefixReady with existing Prefix for (i:=0; i<lengthof(p_prefix); i:=i+1) { v_prefixReady[i] := p_prefix[i]; for (i:=0; i<p_prefixLen; i:=i+1) { v_prefixReadyBits[i] := v_prefixBits[i]; } //Complete v_prefixReady with Zero Bytes for (i:=lengthof(p_prefix); i<8; i:=i+1) { v_prefixReady[i] := '00'O; for (i:=p_prefixLen; i<64; i:=i+1) { v_prefixReadyBits[i] := int2bit(0,1); } v_prefixReady := bit2oct(v_prefixReadyBits); } //get leftPart for (i:=0; i<lengthof(p_macAddr)-3; i:=i+1) { v_leftPartMac[i] := p_macAddr[i]; } //get leftPart //get rightPart for (i:=3; i<lengthof(p_macAddr); i:=i+1) { v_rightPartMac[i-3] := p_macAddr[i]; } //flipBit universalBit of leftPart v_leftPartBits := oct2int(v_leftPartMac); v_leftPartBits := oct2bit(v_leftPartMac); v_leftPartBits := v_leftPartBits xor4b v_leftPartBitMask; v_leftPartMac := bit2oct(v_leftPartBits); //build InterfaceId v_interfaceIdReady := v_leftPartMac & 'FFFE'O & v_rightPartMac; //MAC_MCA //LLA p_lla := 'FE80000000000000'O & v_interfaceIdReady; //GLA v_gla := v_prefixReady & v_interfaceIdReady; //LLA p_gla := v_prefixReady & v_interfaceIdReady; //SOL_NODE_MCA p_solNodeMca := 'FF0200000000000000000001FF'O & v_rightPartMac; //MAC_MCA p_macSolNodeMca := '3333FF'O & v_rightPartMac; return e_success; }//end function createIpAddresses } */ /* * @desc Creates a prefix using p_address and p_prefixLength. The p_prefixLength * MSB bits remain unchanged, the others are set to zero. Loading Loading
ttcn3/EtsiLibrary/LibIpv6/LibCommonRfcs/LibIpv6_CommonRfcs_Functions.ttcn +34 −18 Original line number Diff line number Diff line Loading @@ -20,56 +20,72 @@ group calcPrefixFns { /* function createIpAddresses(Prefix p_prefix, Oct6to15 p_macAddr) function createIpAddresses( in Oct6to15 p_macAddr, in Oct16 /*Prefix*/ p_prefix,//Type changed so that NbrDsc moduel does not need to be imported in UInt8 p_prefixLen, out Ipv6Address p_lla, out Ipv6Address p_gla, out Ipv6Address p_solNodeMca, out Oct6to15 p_macSolNodeMca ) runs on LibIpv6Node return FncRetCode { var UInt8 i; const UInt8 c_uniIdLen := 64; var Bit128 v_prefixBits := oct2bit(p_prefix); var Bit64 v_prefixReadyBits := oct2bit('0000000000000000'O); var Oct8 v_prefixReady := int2oct(0,8); var Oct8 v_interfaceIdReady := int2oct(0,8); var Oct3 v_leftPartMac := int2oct(0,3); var Oct3 v_rightPartMac := int2oct(0,3); var Bit24 v_leftPartBits := int2bit(0,24); var Bit24 v_leftPartBitMask := int2bit(131072,24); var Ipv6Address v_gla := int2oct(0,16); var Bit24 v_leftPartBitMask := oct2bit('020000'O); // var Ipv6Address v_gla := int2oct(0,16); if (lengthof(p_prefix) > 8) { if (p_prefixLen > 64) { log("Error"); return e_error; } else { //Fill v_prefixReady with existing Prefix for (i:=0; i<lengthof(p_prefix); i:=i+1) { v_prefixReady[i] := p_prefix[i]; for (i:=0; i<p_prefixLen; i:=i+1) { v_prefixReadyBits[i] := v_prefixBits[i]; } //Complete v_prefixReady with Zero Bytes for (i:=lengthof(p_prefix); i<8; i:=i+1) { v_prefixReady[i] := '00'O; for (i:=p_prefixLen; i<64; i:=i+1) { v_prefixReadyBits[i] := int2bit(0,1); } v_prefixReady := bit2oct(v_prefixReadyBits); } //get leftPart for (i:=0; i<lengthof(p_macAddr)-3; i:=i+1) { v_leftPartMac[i] := p_macAddr[i]; } //get leftPart //get rightPart for (i:=3; i<lengthof(p_macAddr); i:=i+1) { v_rightPartMac[i-3] := p_macAddr[i]; } //flipBit universalBit of leftPart v_leftPartBits := oct2int(v_leftPartMac); v_leftPartBits := oct2bit(v_leftPartMac); v_leftPartBits := v_leftPartBits xor4b v_leftPartBitMask; v_leftPartMac := bit2oct(v_leftPartBits); //build InterfaceId v_interfaceIdReady := v_leftPartMac & 'FFFE'O & v_rightPartMac; //MAC_MCA //LLA p_lla := 'FE80000000000000'O & v_interfaceIdReady; //GLA v_gla := v_prefixReady & v_interfaceIdReady; //LLA p_gla := v_prefixReady & v_interfaceIdReady; //SOL_NODE_MCA p_solNodeMca := 'FF0200000000000000000001FF'O & v_rightPartMac; //MAC_MCA p_macSolNodeMca := '3333FF'O & v_rightPartMac; return e_success; }//end function createIpAddresses } */ /* * @desc Creates a prefix using p_address and p_prefixLength. The p_prefixLength * MSB bits remain unchanged, the others are set to zero. Loading