Commit 26a8420e authored by berge's avatar berge
Browse files

Resolved anycast-related fixmes

parent f25c0147
Loading
Loading
Loading
Loading
+27 −1
Original line number Diff line number Diff line
@@ -366,6 +366,32 @@ module LibItsIpv6OverGeoNetworking_Functions {
                        
        } // end f_computeGlobalAddress

        function f_computeHomeAgentAnycastAddress(
            in Oct16 p_prefix, 
            in UInt8 p_prefixLen
        ) return Ipv6Address {
            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_haAnycast := 'FDFFFFFFFFFFFFFE'O;

            if (p_prefixLen != 64) {
                log("**** f_computeHomeAgentAnycastAddress: Wrong prefixLen ****");
                return '00000000000000000000000000000000'O;
            }
            else {
                //Fill v_prefixReady with existing Prefix
                for (i:=0; i<p_prefixLen; i:=i+1) {
                    v_prefixReadyBits[i] := v_prefixBits[i];
                }
                v_prefixReady := bit2oct(v_prefixReadyBits);
                return v_prefixReady & v_haAnycast;         
            }
            
        } // end f_computeHomeAgentAnycastAddress

        /**
         * @desc    Derives the traffic class from the IPv6 TrafficClass field
         * @param   p_trafficClass The traffic class value in the IPv6 packet