def range(lower, upper=nil, options=nil)
known_args = [:Bitstep, :Objectify, :Short]
objectify = false
short = false
bitstep = 1
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
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
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