# File lib/cidr.rb, line 1451
    def range(lower, upper=nil, options=nil)
        known_args = [:Bitstep, :Objectify, :Short]
        objectify = false
        short = false
        bitstep = 1

        # validate indexes
        raise ArgumentError, "Integer expected for argument 'lower' " +
                             "but #{lower.class} provided." if (!lower.kind_of?(Integer))

        raise ArgumentError, "Integer expected for argument 'upper' " +
                             "but #{upper.class} provided." if (upper && !upper.kind_of?(Integer))

        upper = @hostmask if (upper.nil?)
        indexes = [lower,upper]
        indexes.sort!
        if ( (indexes[0] < 0) || (indexes[0] > self.size) )
            raise BoundaryError, "Index #{indexes[0]} is out of bounds for this CIDR."
        end

        if (indexes[1] >= self.size)
            raise BoundaryError, "Index #{indexes[1]} is out of bounds for this CIDR."
        end

        # validate options
        if (options)
            raise ArgumentError, "Hash expected for argument 'options' but #{options.class} provided." if (!options.kind_of?(Hash) )
            NetAddr.validate_args(options.keys,known_args)

            if( options.has_key?(:Short) && options[:Short] == true )
                short = true
            end

            if( options.has_key?(:Objectify) && options[:Objectify] == true )
                objectify = true
            end

            if( options.has_key?(:Bitstep) )
                bitstep = options[:Bitstep]
            end
        end

        # make range
        start_ip = @network + indexes[0]
        end_ip = @network + indexes[1]
        my_ip = start_ip
        list = []
        until (my_ip > end_ip)
            if (!objectify)
                ip = NetAddr.ip_int_to_str(my_ip, @version)
                ip = NetAddr.shorten(ip) if (short && @version == 6)
            else
                ip = NetAddr.cidr_build(@version,my_ip)
            end

            list.push(ip)
            my_ip += bitstep
        end

        return(list)
    end