ipadmin 0.2.0 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README +15 -15
- data/lib/ip_admin.rb +171 -145
- data/tests/cidr_test.rb +23 -23
- data/tests/{functions_test.rb → methods_test.rb} +8 -3
- data/tests/tree_test.rb +3 -3
- metadata +4 -4
data/README
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
|
2
|
-
Copyright (c) 2006 Dustin Spinhirne
|
2
|
+
Copyright (c) 2006 Dustin Spinhirne
|
3
3
|
Licensed under the same terms as Ruby, No Warranty is provided.
|
4
4
|
|
5
5
|
|
6
|
-
Comments are welcome. Please include '
|
6
|
+
Comments are welcome. Please include 'IPAdmin' in the title of
|
7
7
|
any emails.
|
8
8
|
|
9
9
|
Dustin Spinhirne
|
@@ -50,17 +50,17 @@
|
|
50
50
|
puts "cidr6 netmask in bits #{cidr6.bits()}"
|
51
51
|
print "\n"
|
52
52
|
|
53
|
-
# contains
|
53
|
+
# contains?
|
54
54
|
puts "contains"
|
55
|
-
puts "#{cidr4.desc} contains #{cidr4_2.desc}" if ( cidr4.contains(cidr4_2) )
|
56
|
-
puts "#{cidr6.desc} contains #{cidr6_2.desc}" if ( cidr6.contains(cidr6_2) )
|
55
|
+
puts "#{cidr4.desc} contains #{cidr4_2.desc}" if ( cidr4.contains?(cidr4_2) )
|
56
|
+
puts "#{cidr6.desc} contains #{cidr6_2.desc}" if ( cidr6.contains?(cidr6_2) )
|
57
57
|
print "\n"
|
58
58
|
|
59
59
|
# desc
|
60
60
|
puts "desc"
|
61
61
|
puts "cidr4 description #{cidr4.desc()}"
|
62
62
|
puts "cidr6 description #{cidr6.desc()}"
|
63
|
-
puts "cidr6 short-hand description #{cidr6.desc(:Short =>
|
63
|
+
puts "cidr6 short-hand description #{cidr6.desc(:Short => true)}"
|
64
64
|
print "\n"
|
65
65
|
|
66
66
|
# enumerate
|
@@ -69,7 +69,7 @@
|
|
69
69
|
cidr4.enumerate(:Limit => 4, :Bitstep => 32).each {|x| puts " #{x}"}
|
70
70
|
|
71
71
|
puts "first 4 cidr6 addresses (bitstep 32)"
|
72
|
-
cidr6.enumerate(:Limit => 4, :Bitstep => 32, :Objectify =>
|
72
|
+
cidr6.enumerate(:Limit => 4, :Bitstep => 32, :Objectify => true).each {|x| puts " #{x.desc}"}
|
73
73
|
print "\n"
|
74
74
|
|
75
75
|
# hostmask_ext
|
@@ -80,13 +80,13 @@
|
|
80
80
|
# ip
|
81
81
|
puts "ip"
|
82
82
|
puts "cidr4 ip #{cidr4.ip()}"
|
83
|
-
puts "cidr6 short-hand ip #{cidr6.ip(:Short =>
|
83
|
+
puts "cidr6 short-hand ip #{cidr6.ip(:Short => true)}"
|
84
84
|
print "\n"
|
85
85
|
|
86
86
|
# last
|
87
87
|
puts "last"
|
88
88
|
puts "cidr4 last ip #{cidr4.last()}"
|
89
|
-
puts "cidr6 last ip #{cidr6.last(:Short =>
|
89
|
+
puts "cidr6 last ip #{cidr6.last(:Short => true)}"
|
90
90
|
print "\n"
|
91
91
|
|
92
92
|
# netmask
|
@@ -103,25 +103,25 @@
|
|
103
103
|
# network
|
104
104
|
puts "network"
|
105
105
|
puts "cidr4 network address #{cidr4.network()}"
|
106
|
-
puts "cidr6 network address #{cidr6.network(:Short =>
|
106
|
+
puts "cidr6 network address #{cidr6.network(:Short => true)}"
|
107
107
|
print "\n"
|
108
108
|
|
109
109
|
# next_ip
|
110
110
|
puts "next_ip"
|
111
111
|
puts "cidr4 next ip #{cidr4.next_ip()}"
|
112
|
-
puts "cidr6 next ip #{cidr6.next_ip(:Short =>
|
112
|
+
puts "cidr6 next ip #{cidr6.next_ip(:Short => true)}"
|
113
113
|
print "\n"
|
114
114
|
|
115
115
|
# next_subnet
|
116
116
|
puts "next_subnet"
|
117
117
|
puts "cidr4 next subnet #{cidr4.next_subnet()}"
|
118
|
-
puts "cidr6 next subnet #{cidr6.next_subnet(:Short =>
|
118
|
+
puts "cidr6 next subnet #{cidr6.next_subnet(:Short => true)}"
|
119
119
|
print "\n"
|
120
120
|
|
121
121
|
# nth
|
122
122
|
puts "nth"
|
123
123
|
puts "cidr4 1st ip is #{cidr4.nth(:Index => 1)}"
|
124
|
-
puts "cidr6 1st ip is #{(cidr6.nth(:Index => 1, :Objectify =>
|
124
|
+
puts "cidr6 1st ip is #{(cidr6.nth(:Index => 1, :Objectify => true)).base}"
|
125
125
|
print "\n"
|
126
126
|
|
127
127
|
# packed_hostmask
|
@@ -173,8 +173,8 @@
|
|
173
173
|
puts "#{cidr4.desc} subnetted into at least 3 /28 ranges"
|
174
174
|
cidr4.subnet(:Subnet => 28, :MinCount => 3).each {|x| puts " #{x}"}
|
175
175
|
|
176
|
-
puts "#{cidr6.desc(:Short =>
|
177
|
-
cidr6.subnet(:Subnet => 67, :MinCount => 4, :Short =>
|
176
|
+
puts "#{cidr6.desc(:Short => true)} subnetted into at least 4 /67 ranges"
|
177
|
+
cidr6.subnet(:Subnet => 67, :MinCount => 4, :Short => true).each {|x| puts " #{x}"}
|
178
178
|
|
179
179
|
print "\n\n\n"
|
180
180
|
#=====================================#
|
data/lib/ip_admin.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
=begin rdoc
|
2
|
-
Copyright (c) 2006 Dustin Spinhirne <
|
2
|
+
Copyright (c) 2006 Dustin Spinhirne <http://www.spinhirne.com> -
|
3
3
|
Licensed under the same terms as Ruby, No Warranty is provided.
|
4
4
|
=end
|
5
5
|
|
@@ -220,9 +220,9 @@ module_function :create_net_struct
|
|
220
220
|
# - Arguments:
|
221
221
|
# * Hash with the following fields:
|
222
222
|
# - :List -- Array of IPAdmin::CIDR or NetStruct objects
|
223
|
-
# - :NetStruct -- if
|
224
|
-
# - :Objectify -- if
|
225
|
-
# - :Short -- if
|
223
|
+
# - :NetStruct -- if true, return IPAdmin::NetStruct objects (optional)
|
224
|
+
# - :Objectify -- if true, return IPAdmin::CIDR objects (optional)
|
225
|
+
# - :Short -- if true, return IPv6 addresses in short-hand notation (optional)
|
226
226
|
#
|
227
227
|
# - Returns:
|
228
228
|
# * Array of IPAdmin::CIDR or IPAdmin::NetStruct objects
|
@@ -232,8 +232,8 @@ module_function :create_net_struct
|
|
232
232
|
#
|
233
233
|
def merge(options)
|
234
234
|
version = nil
|
235
|
-
short =
|
236
|
-
objectify =
|
235
|
+
short = false
|
236
|
+
objectify = false
|
237
237
|
|
238
238
|
# validate options
|
239
239
|
unless ( options.kind_of?(Hash) )
|
@@ -245,11 +245,11 @@ def merge(options)
|
|
245
245
|
end
|
246
246
|
|
247
247
|
if (options[:Short])
|
248
|
-
short =
|
248
|
+
short = true
|
249
249
|
end
|
250
250
|
|
251
251
|
if (options[:Objectify])
|
252
|
-
objectify =
|
252
|
+
objectify = true
|
253
253
|
end
|
254
254
|
|
255
255
|
list = options[:List]
|
@@ -448,7 +448,7 @@ module_function :merge
|
|
448
448
|
# pack_ipv4_addr()
|
449
449
|
#==============================================================================#
|
450
450
|
|
451
|
-
# Convert IPv4 addresses into
|
451
|
+
# Convert IPv4 addresses into an integer. No attempt at
|
452
452
|
# validation is performed.
|
453
453
|
#
|
454
454
|
# - Arguments:
|
@@ -490,7 +490,7 @@ module_function :pack_ipv4_addr
|
|
490
490
|
# pack_ipv4_netmask()
|
491
491
|
#==============================================================================#
|
492
492
|
|
493
|
-
# Convert IPv4 netmask into
|
493
|
+
# Convert IPv4 netmask into an integer. Only very basic
|
494
494
|
# validation is performed.
|
495
495
|
#
|
496
496
|
# - Arguments:
|
@@ -549,7 +549,7 @@ module_function :pack_ipv4_netmask
|
|
549
549
|
# pack_ipv6_addr()
|
550
550
|
#==============================================================================#
|
551
551
|
|
552
|
-
# Convert IPv6 addresses into
|
552
|
+
# Convert IPv6 addresses into an integer. No attempt at
|
553
553
|
# validation is performed.
|
554
554
|
#
|
555
555
|
# - Arguments:
|
@@ -619,7 +619,7 @@ module_function :pack_ipv6_addr
|
|
619
619
|
# pack_ipv6_netmask()
|
620
620
|
#==============================================================================#
|
621
621
|
|
622
|
-
# Convert IPv6 netmask into
|
622
|
+
# Convert IPv6 netmask into an integer. Only very basic
|
623
623
|
# validation is performed.
|
624
624
|
#
|
625
625
|
# - Arguments:
|
@@ -676,7 +676,8 @@ module_function :pack_ipv6_netmask
|
|
676
676
|
# - :Bitstep -- enumerate in X sized steps (optional)
|
677
677
|
# - :Boundaries -- array of (2) IPAdmin::CIDR objects
|
678
678
|
# - :Limit -- limit returned list to X number of items (optional)
|
679
|
-
# - :Objectify -- return IPAdmin::CIDR objects (optional)
|
679
|
+
# - :Objectify -- if true, return IPAdmin::CIDR objects (optional)
|
680
|
+
# - :Short -- if true, return IPv6 addresses in short-hand notation (optional)
|
680
681
|
#
|
681
682
|
# - Returns:
|
682
683
|
# * Array of IP addresses or IPAdmin::CIDR objects
|
@@ -691,7 +692,9 @@ module_function :pack_ipv6_netmask
|
|
691
692
|
def range(options)
|
692
693
|
list = []
|
693
694
|
bitstep = 1
|
694
|
-
objectify
|
695
|
+
objectify = false
|
696
|
+
short = false
|
697
|
+
limit = nil
|
695
698
|
|
696
699
|
# check options
|
697
700
|
if (options)
|
@@ -711,7 +714,11 @@ def range(options)
|
|
711
714
|
end
|
712
715
|
|
713
716
|
if( options.has_key?(:Objectify) )
|
714
|
-
objectify =
|
717
|
+
objectify = true
|
718
|
+
end
|
719
|
+
|
720
|
+
if( options.has_key?(:Short) )
|
721
|
+
short = true
|
715
722
|
end
|
716
723
|
|
717
724
|
if( options.has_key?(:Limit) )
|
@@ -758,7 +765,10 @@ def range(options)
|
|
758
765
|
|
759
766
|
until (my_ip == boundaries[1])
|
760
767
|
if (!objectify)
|
761
|
-
|
768
|
+
my_ips = IPAdmin.unpack_ipv6_addr(my_ip)
|
769
|
+
my_ips = IPAdmin.shorten(my_ips) if (short)
|
770
|
+
list.push(my_ips)
|
771
|
+
|
762
772
|
else
|
763
773
|
my_ip_s = IPAdmin.unpack_ipv6_addr(my_ip)
|
764
774
|
list.push( IPAdmin::CIDR.new(:CIDR => my_ip_s) )
|
@@ -808,45 +818,58 @@ def shorten(addr)
|
|
808
818
|
|
809
819
|
# make sure this isnt already shorthand
|
810
820
|
if (addr =~ /::/)
|
811
|
-
|
821
|
+
return(addr)
|
812
822
|
end
|
813
823
|
|
814
|
-
# look for most 0 fields
|
815
|
-
|
816
|
-
|
817
|
-
|
818
|
-
fields = addr.split(":")
|
819
|
-
|
824
|
+
# look for most consecutive '0' fields
|
825
|
+
start_field,end_field = nil,nil
|
826
|
+
start_end = []
|
827
|
+
consecutive,longest = 0,0
|
828
|
+
fields = addr.split(":")
|
829
|
+
|
820
830
|
(0..(fields.length-1)).each do |x|
|
821
831
|
fields[x] = fields[x].to_i(16)
|
822
832
|
|
823
833
|
if (fields[x] == 0)
|
824
|
-
if (!
|
825
|
-
|
834
|
+
if (!start_field)
|
835
|
+
start_field = x
|
836
|
+
end_field = x
|
837
|
+
else
|
838
|
+
end_field = x
|
826
839
|
end
|
827
|
-
|
840
|
+
consecutive += 1
|
828
841
|
else
|
829
|
-
if (
|
830
|
-
|
831
|
-
|
832
|
-
|
833
|
-
|
842
|
+
if (start_field)
|
843
|
+
if (consecutive > longest)
|
844
|
+
longest = consecutive
|
845
|
+
start_end = [start_field,end_field]
|
846
|
+
start_field,end_field = nil,nil
|
847
|
+
end
|
848
|
+
consecutive = 0
|
834
849
|
end
|
835
850
|
end
|
836
851
|
|
837
852
|
fields[x] = fields[x].to_s(16)
|
838
853
|
end
|
839
|
-
|
840
|
-
#
|
841
|
-
|
842
|
-
|
843
|
-
|
844
|
-
|
854
|
+
|
855
|
+
# if our longest set of 0's is at the end, then start & end fields
|
856
|
+
# are already set. if not, then make start & end fields the ones we've
|
857
|
+
# stored away in start_end
|
858
|
+
if (consecutive > longest)
|
859
|
+
longest = consecutive
|
860
|
+
else
|
861
|
+
start_field = start_end[0]
|
862
|
+
end_field = start_end[1]
|
845
863
|
end
|
846
864
|
|
847
|
-
|
848
|
-
|
849
|
-
|
865
|
+
if (longest > 1)
|
866
|
+
fields[start_field] = ''
|
867
|
+
start_field += 1
|
868
|
+
fields.slice!(start_field..end_field)
|
869
|
+
end
|
870
|
+
short = fields.join(':')
|
871
|
+
short << ':' if (short =~ /:$/)
|
872
|
+
|
850
873
|
return(short)
|
851
874
|
end
|
852
875
|
module_function :shorten
|
@@ -941,8 +964,8 @@ module_function :sort
|
|
941
964
|
# unpack_ipv4_addr()
|
942
965
|
#==============================================================================#
|
943
966
|
|
944
|
-
# Unack IPv4 address back into a printable string. No attempt at
|
945
|
-
# is performed.
|
967
|
+
# Unack a packed IPv4 address back into a printable string. No attempt at
|
968
|
+
# validation is performed.
|
946
969
|
#
|
947
970
|
# - Arguments:
|
948
971
|
# * Byte-packed IPv4 address
|
@@ -977,7 +1000,7 @@ module_function :unpack_ipv4_addr
|
|
977
1000
|
# unpack_ipv4_netmask()
|
978
1001
|
#==============================================================================#
|
979
1002
|
|
980
|
-
# Unack IPv4 netmask into a integer representing the number of
|
1003
|
+
# Unack a packed IPv4 netmask into a integer representing the number of
|
981
1004
|
# bits in the CIDR mask. No attempt at validation is performed.
|
982
1005
|
#
|
983
1006
|
# - Arguments:
|
@@ -1012,8 +1035,8 @@ module_function :unpack_ipv4_netmask
|
|
1012
1035
|
# unpack_ipv6_addr()
|
1013
1036
|
#==============================================================================#
|
1014
1037
|
|
1015
|
-
# Unack IPv6 address back into a printable string. No attempt at
|
1016
|
-
# is performed.
|
1038
|
+
# Unack a packed IPv6 address back into a printable string. No attempt at
|
1039
|
+
# validation is performed.
|
1017
1040
|
#
|
1018
1041
|
# - Arguments:
|
1019
1042
|
# * Byte-packed IPv6 address
|
@@ -1053,7 +1076,7 @@ module_function :unpack_ipv6_addr
|
|
1053
1076
|
# unpack_ipv6_netmask()
|
1054
1077
|
#==============================================================================#
|
1055
1078
|
|
1056
|
-
# Unack IPv6 netmask into a integer representing the number of
|
1079
|
+
# Unack a packed IPv6 netmask into a integer representing the number of
|
1057
1080
|
# bits in the CIDR mask. No attempt at validation is performed.
|
1058
1081
|
#
|
1059
1082
|
# - Arguments:
|
@@ -1130,7 +1153,7 @@ module_function :unshorten
|
|
1130
1153
|
# * IPv4 address
|
1131
1154
|
#
|
1132
1155
|
# - Returns:
|
1133
|
-
# *
|
1156
|
+
# * packed IP on valid, or exception on error.
|
1134
1157
|
#
|
1135
1158
|
# Example:
|
1136
1159
|
# IPAdmin.validate_ipv4_addr('192.168.1.1')
|
@@ -1189,7 +1212,7 @@ module_function :validate_ipv4_addr
|
|
1189
1212
|
# * IPv4 netmask in cidr or extended notation
|
1190
1213
|
#
|
1191
1214
|
# - Returns:
|
1192
|
-
# *
|
1215
|
+
# * packed netmask on valid, or exception on error.
|
1193
1216
|
#
|
1194
1217
|
# Example:
|
1195
1218
|
# IPAdmin.validate_ipv4_netmask('255.255.255.0')
|
@@ -1276,7 +1299,7 @@ module_function :validate_ipv4_netmask
|
|
1276
1299
|
# * IPv6 address
|
1277
1300
|
#
|
1278
1301
|
# - Returns:
|
1279
|
-
# *
|
1302
|
+
# * packed IP on valid, or exception on error.
|
1280
1303
|
#
|
1281
1304
|
# Example:
|
1282
1305
|
# IPAdmin.validate_ipv6_addr('fec0::')
|
@@ -1352,7 +1375,7 @@ module_function :validate_ipv6_addr
|
|
1352
1375
|
# * IPv6 netmask in cidr notation
|
1353
1376
|
#
|
1354
1377
|
# - Returns:
|
1355
|
-
# *
|
1378
|
+
# * packed netmask on valid, or exception on error.
|
1356
1379
|
#
|
1357
1380
|
# Example:
|
1358
1381
|
# IPAdmin.validate_ipv6_netmask('64')
|
@@ -1602,7 +1625,7 @@ class CIDR
|
|
1602
1625
|
|
1603
1626
|
|
1604
1627
|
#==============================================================================#
|
1605
|
-
# contains()
|
1628
|
+
# contains?()
|
1606
1629
|
#==============================================================================#
|
1607
1630
|
|
1608
1631
|
# Determines if this object contains (is supernet of)
|
@@ -1612,14 +1635,14 @@ class CIDR
|
|
1612
1635
|
# * IPAdmin:CIDR object
|
1613
1636
|
#
|
1614
1637
|
# - Returns:
|
1615
|
-
# *
|
1638
|
+
# * true or false
|
1616
1639
|
#
|
1617
1640
|
# Example:
|
1618
1641
|
# cidr4_2 = IPAdmin::CIDR.new(:CIDR => '192.168.1.0/26')
|
1619
|
-
# contains = cidr4.contains(cidr4_2) -->
|
1642
|
+
# contains? = cidr4.contains(cidr4_2) --> true
|
1620
1643
|
#
|
1621
|
-
def contains(object)
|
1622
|
-
is_contained =
|
1644
|
+
def contains?(object)
|
1645
|
+
is_contained = false
|
1623
1646
|
|
1624
1647
|
if (object.kind_of?(IPAdmin::CIDR))
|
1625
1648
|
network = object.packed_network
|
@@ -1640,11 +1663,11 @@ class CIDR
|
|
1640
1663
|
# else we can tell by or'ing network and @network by @hostmask
|
1641
1664
|
# and comparing the results
|
1642
1665
|
if (network == @network)
|
1643
|
-
is_contained =
|
1666
|
+
is_contained = true if (netmask > @netmask)
|
1644
1667
|
|
1645
1668
|
else
|
1646
1669
|
if ( (network | @hostmask) == (@network | @hostmask) )
|
1647
|
-
is_contained =
|
1670
|
+
is_contained = true
|
1648
1671
|
end
|
1649
1672
|
end
|
1650
1673
|
|
@@ -1664,8 +1687,8 @@ class CIDR
|
|
1664
1687
|
#
|
1665
1688
|
# - Arguments:
|
1666
1689
|
# * Optional hash with the following fields:
|
1667
|
-
# - :IP --
|
1668
|
-
# - :Short -- if
|
1690
|
+
# - :IP -- true, return the ip/netmask passed during initialization (optional)
|
1691
|
+
# - :Short -- if true, return IPv6 addresses in short-hand notation (optional)
|
1669
1692
|
#
|
1670
1693
|
# - Returns:
|
1671
1694
|
# * Description in network/netmask format
|
@@ -1675,8 +1698,8 @@ class CIDR
|
|
1675
1698
|
# puts cidr4.desc(:IP => 1) --> 192.168.1.1/24
|
1676
1699
|
#
|
1677
1700
|
def desc(options=nil)
|
1678
|
-
short =
|
1679
|
-
orig_ip =
|
1701
|
+
short = false
|
1702
|
+
orig_ip = false
|
1680
1703
|
|
1681
1704
|
if (options)
|
1682
1705
|
unless (options.kind_of? Hash)
|
@@ -1684,11 +1707,11 @@ class CIDR
|
|
1684
1707
|
end
|
1685
1708
|
|
1686
1709
|
if (options.has_key?(:Short))
|
1687
|
-
short =
|
1710
|
+
short = true
|
1688
1711
|
end
|
1689
1712
|
|
1690
1713
|
if (options.has_key?(:IP))
|
1691
|
-
orig_ip =
|
1714
|
+
orig_ip = true
|
1692
1715
|
end
|
1693
1716
|
end
|
1694
1717
|
|
@@ -1729,8 +1752,8 @@ class CIDR
|
|
1729
1752
|
# * Optional Hash with the following fields:
|
1730
1753
|
# - :Bitstep -- enumerate in X sized steps (optional)
|
1731
1754
|
# - :Limit -- limit returned list to X number of items (optional)
|
1732
|
-
# - :Objectify -- if
|
1733
|
-
# - :Short -- if
|
1755
|
+
# - :Objectify -- if true, return IPAdmin::CIDR objects (optional)
|
1756
|
+
# - :Short -- if true, return IPv6 addresses in short-hand notation (optional)
|
1734
1757
|
#
|
1735
1758
|
# - Returns:
|
1736
1759
|
# * Array of IP addresses or IPAdmin::CIDR objects
|
@@ -1740,9 +1763,9 @@ class CIDR
|
|
1740
1763
|
#
|
1741
1764
|
def enumerate(options=nil)
|
1742
1765
|
bitstep = 1
|
1743
|
-
objectify =
|
1766
|
+
objectify = false
|
1744
1767
|
limit = nil
|
1745
|
-
short =
|
1768
|
+
short = false
|
1746
1769
|
|
1747
1770
|
if (options)
|
1748
1771
|
if( options.has_key?(:Bitstep) )
|
@@ -1750,7 +1773,7 @@ class CIDR
|
|
1750
1773
|
end
|
1751
1774
|
|
1752
1775
|
if( options.has_key?(:Objectify) )
|
1753
|
-
objectify =
|
1776
|
+
objectify = true
|
1754
1777
|
end
|
1755
1778
|
|
1756
1779
|
if( options.has_key?(:Limit) )
|
@@ -1758,7 +1781,7 @@ class CIDR
|
|
1758
1781
|
end
|
1759
1782
|
|
1760
1783
|
if( options.has_key?(:Short) )
|
1761
|
-
short =
|
1784
|
+
short = true
|
1762
1785
|
end
|
1763
1786
|
end
|
1764
1787
|
|
@@ -1854,8 +1877,8 @@ class CIDR
|
|
1854
1877
|
#
|
1855
1878
|
# - Arguments:
|
1856
1879
|
# * Optional Hash with the following fields:
|
1857
|
-
# - :Objectify -- if
|
1858
|
-
# - :Short -- if
|
1880
|
+
# - :Objectify -- if true, return IPAdmin::CIDR object (optional)
|
1881
|
+
# - :Short -- if true, return IPv6 addresses in short-hand notation (optional)
|
1859
1882
|
#
|
1860
1883
|
# - Returns:
|
1861
1884
|
# * IP address or IPAdmin::CIDR object.
|
@@ -1864,8 +1887,8 @@ class CIDR
|
|
1864
1887
|
# puts cidr4.ip() --> 192.168.1.1
|
1865
1888
|
#
|
1866
1889
|
def ip(options=nil)
|
1867
|
-
objectify =
|
1868
|
-
short =
|
1890
|
+
objectify = false
|
1891
|
+
short = false
|
1869
1892
|
|
1870
1893
|
if (options)
|
1871
1894
|
unless(options.kind_of?(Hash))
|
@@ -1874,11 +1897,11 @@ class CIDR
|
|
1874
1897
|
end
|
1875
1898
|
|
1876
1899
|
if( options.has_key?(:Short) )
|
1877
|
-
short =
|
1900
|
+
short = true
|
1878
1901
|
end
|
1879
1902
|
|
1880
1903
|
if( options.has_key?(:Objectify) )
|
1881
|
-
objectify =
|
1904
|
+
objectify = true
|
1882
1905
|
end
|
1883
1906
|
end
|
1884
1907
|
|
@@ -1911,8 +1934,8 @@ class CIDR
|
|
1911
1934
|
#
|
1912
1935
|
# - Arguments:
|
1913
1936
|
# * Optional Hash with the following fields:
|
1914
|
-
# - :Objectify -- if
|
1915
|
-
# - :Short -- if
|
1937
|
+
# - :Objectify -- if true, return IPAdmin::CIDR object (optional)
|
1938
|
+
# - :Short -- if true, return IPv6 addresses in short-hand notation (optional)
|
1916
1939
|
#
|
1917
1940
|
# - Returns:
|
1918
1941
|
# * IP address or IPAdmin::CIDR object.
|
@@ -1921,8 +1944,8 @@ class CIDR
|
|
1921
1944
|
# puts cidr4.last() --> 192.168.1.255
|
1922
1945
|
#
|
1923
1946
|
def last(options=nil)
|
1924
|
-
objectify =
|
1925
|
-
short =
|
1947
|
+
objectify = false
|
1948
|
+
short = false
|
1926
1949
|
|
1927
1950
|
if (options)
|
1928
1951
|
unless(options.kind_of?(Hash))
|
@@ -1931,11 +1954,11 @@ class CIDR
|
|
1931
1954
|
end
|
1932
1955
|
|
1933
1956
|
if( options.has_key?(:Short) )
|
1934
|
-
short =
|
1957
|
+
short = true
|
1935
1958
|
end
|
1936
1959
|
|
1937
1960
|
if( options.has_key?(:Objectify) )
|
1938
|
-
objectify =
|
1961
|
+
objectify = true
|
1939
1962
|
end
|
1940
1963
|
|
1941
1964
|
end
|
@@ -2031,8 +2054,8 @@ class CIDR
|
|
2031
2054
|
#
|
2032
2055
|
# - Arguments:
|
2033
2056
|
# * Optional Hash with the following fields:
|
2034
|
-
# - :Objectify -- if
|
2035
|
-
# - :Short -- if
|
2057
|
+
# - :Objectify -- if true, return IPAdmin::CIDR object (optional)
|
2058
|
+
# - :Short -- if true, return IPv6 addresses in short-hand notation (optional)
|
2036
2059
|
#
|
2037
2060
|
# - Returns:
|
2038
2061
|
# * IP address or IPAdmin::CIDR object.
|
@@ -2041,8 +2064,8 @@ class CIDR
|
|
2041
2064
|
# puts cidr4.network() --> 192.168.1.0
|
2042
2065
|
#
|
2043
2066
|
def network(options=nil)
|
2044
|
-
objectify =
|
2045
|
-
short =
|
2067
|
+
objectify = false
|
2068
|
+
short = false
|
2046
2069
|
|
2047
2070
|
if (options)
|
2048
2071
|
unless(options.kind_of?(Hash))
|
@@ -2051,11 +2074,11 @@ class CIDR
|
|
2051
2074
|
end
|
2052
2075
|
|
2053
2076
|
if( options.has_key?(:Short) )
|
2054
|
-
short =
|
2077
|
+
short = true
|
2055
2078
|
end
|
2056
2079
|
|
2057
2080
|
if( options.has_key?(:Objectify) )
|
2058
|
-
objectify =
|
2081
|
+
objectify = true
|
2059
2082
|
end
|
2060
2083
|
end
|
2061
2084
|
|
@@ -2091,8 +2114,8 @@ class CIDR
|
|
2091
2114
|
# - Arguments:
|
2092
2115
|
# * Optional Hash with the following fields:
|
2093
2116
|
# - :Bitstep -- step in X sized steps (optional)
|
2094
|
-
# - :Objectify -- if
|
2095
|
-
# - :Short -- if
|
2117
|
+
# - :Objectify -- if true, return IPAdmin::CIDR object (optional)
|
2118
|
+
# - :Short -- if true, return IPv6 addresses in short-hand notation (optional)
|
2096
2119
|
#
|
2097
2120
|
# - Returns:
|
2098
2121
|
# * IP address or IPAdmin::CIDR object.
|
@@ -2102,8 +2125,8 @@ class CIDR
|
|
2102
2125
|
#
|
2103
2126
|
def next_ip(options=nil)
|
2104
2127
|
bitstep = 1
|
2105
|
-
objectify =
|
2106
|
-
short =
|
2128
|
+
objectify = false
|
2129
|
+
short = false
|
2107
2130
|
|
2108
2131
|
if (options)
|
2109
2132
|
unless(options.kind_of?(Hash))
|
@@ -2116,11 +2139,11 @@ class CIDR
|
|
2116
2139
|
end
|
2117
2140
|
|
2118
2141
|
if( options.has_key?(:Short) )
|
2119
|
-
short =
|
2142
|
+
short = true
|
2120
2143
|
end
|
2121
2144
|
|
2122
2145
|
if( options.has_key?(:Objectify) )
|
2123
|
-
objectify =
|
2146
|
+
objectify = true
|
2124
2147
|
end
|
2125
2148
|
end
|
2126
2149
|
|
@@ -2159,8 +2182,8 @@ class CIDR
|
|
2159
2182
|
# - Arguments:
|
2160
2183
|
# * Optional Hash with the following fields:
|
2161
2184
|
# - :Bitstep -- step in X sized steps. (optional)
|
2162
|
-
# - :Objectify -- if
|
2163
|
-
# - :Short -- if
|
2185
|
+
# - :Objectify -- if true, return IPAdmin::CIDR object (optional)
|
2186
|
+
# - :Short -- if true, return IPv6 addresses in short-hand notation (optional)
|
2164
2187
|
#
|
2165
2188
|
# - Returns:
|
2166
2189
|
# * CIDR address or IPAdmin::CIDR object.
|
@@ -2170,8 +2193,8 @@ class CIDR
|
|
2170
2193
|
#
|
2171
2194
|
def next_subnet(options=nil)
|
2172
2195
|
bitstep = 1
|
2173
|
-
objectify =
|
2174
|
-
short =
|
2196
|
+
objectify = false
|
2197
|
+
short = false
|
2175
2198
|
|
2176
2199
|
if (options)
|
2177
2200
|
unless(options.kind_of?(Hash))
|
@@ -2184,11 +2207,11 @@ class CIDR
|
|
2184
2207
|
end
|
2185
2208
|
|
2186
2209
|
if( options.has_key?(:Short) )
|
2187
|
-
short =
|
2210
|
+
short = true
|
2188
2211
|
end
|
2189
2212
|
|
2190
2213
|
if( options.has_key?(:Objectify) )
|
2191
|
-
objectify =
|
2214
|
+
objectify = true
|
2192
2215
|
end
|
2193
2216
|
end
|
2194
2217
|
|
@@ -2228,8 +2251,8 @@ class CIDR
|
|
2228
2251
|
# - Arguments:
|
2229
2252
|
# * Hash with the following fields:
|
2230
2253
|
# - :Index -- index number of the IP address to return
|
2231
|
-
# - :Objectify -- if
|
2232
|
-
# - :Short -- if
|
2254
|
+
# - :Objectify -- if true, return IPAdmin::CIDR objects (optional)
|
2255
|
+
# - :Short -- if true, return IPv6 addresses in short-hand notation (optional)
|
2233
2256
|
#
|
2234
2257
|
# - Returns:
|
2235
2258
|
# * IP address or IPAdmin::CIDR object.
|
@@ -2238,8 +2261,8 @@ class CIDR
|
|
2238
2261
|
# puts cidr4.nth(:Index => 1) --> 192.168.1.1
|
2239
2262
|
#
|
2240
2263
|
def nth(options)
|
2241
|
-
objectify =
|
2242
|
-
short =
|
2264
|
+
objectify = false
|
2265
|
+
short = false
|
2243
2266
|
|
2244
2267
|
unless(options.kind_of?(Hash))
|
2245
2268
|
raise Argumenterror, "Expected Hash, but " +
|
@@ -2252,11 +2275,11 @@ class CIDR
|
|
2252
2275
|
index = options[:Index]
|
2253
2276
|
|
2254
2277
|
if( options.has_key?(:Short) )
|
2255
|
-
short =
|
2278
|
+
short = true
|
2256
2279
|
end
|
2257
2280
|
|
2258
2281
|
if( options.has_key?(:Objectify) )
|
2259
|
-
objectify =
|
2282
|
+
objectify = true
|
2260
2283
|
end
|
2261
2284
|
|
2262
2285
|
my_ip = @network + index
|
@@ -2292,7 +2315,7 @@ class CIDR
|
|
2292
2315
|
# packed_hostmask()
|
2293
2316
|
#==============================================================================#
|
2294
2317
|
|
2295
|
-
# Provide
|
2318
|
+
# Provide an integer representing the packed Hostmask of this object.
|
2296
2319
|
#
|
2297
2320
|
# - Arguments:
|
2298
2321
|
# * none
|
@@ -2316,7 +2339,7 @@ class CIDR
|
|
2316
2339
|
# packed_ip()
|
2317
2340
|
#==============================================================================#
|
2318
2341
|
|
2319
|
-
# Provide
|
2342
|
+
# Provide an integer representing the packed IP of this object.
|
2320
2343
|
#
|
2321
2344
|
# - Arguments:
|
2322
2345
|
# * none
|
@@ -2340,7 +2363,7 @@ class CIDR
|
|
2340
2363
|
# packed_netmask()
|
2341
2364
|
#==============================================================================#
|
2342
2365
|
|
2343
|
-
# Provide
|
2366
|
+
# Provide an integer representing the packed Netmask of this object.
|
2344
2367
|
#
|
2345
2368
|
# - Arguments:
|
2346
2369
|
# * none
|
@@ -2364,7 +2387,7 @@ class CIDR
|
|
2364
2387
|
# packed_network()
|
2365
2388
|
#==============================================================================#
|
2366
2389
|
|
2367
|
-
# Provide
|
2390
|
+
# Provide an integer representing the packed Network address of this object.
|
2368
2391
|
#
|
2369
2392
|
# - Arguments:
|
2370
2393
|
# * none
|
@@ -2395,8 +2418,8 @@ class CIDR
|
|
2395
2418
|
# * Hash with the following fields:
|
2396
2419
|
# - :Bitstep -- enumerate in X sized steps (optional)
|
2397
2420
|
# - :Indexes -- array of (2) index numbers of the addresses to use as boundaries
|
2398
|
-
# - :Objectify -- if
|
2399
|
-
# - :Short -- if
|
2421
|
+
# - :Objectify -- if true, return IPAdmin::CIDR objects (optional)
|
2422
|
+
# - :Short -- if true, return IPv6 addresses in short-hand notation (optional)
|
2400
2423
|
#
|
2401
2424
|
# - Returns:
|
2402
2425
|
# * Array of IP addresses or IPAdmin::CIDR objects
|
@@ -2405,8 +2428,8 @@ class CIDR
|
|
2405
2428
|
# list = cidr4.range(:Indexes => [0,1]) --> ['192.168.1.0','192.168.1.1']
|
2406
2429
|
#
|
2407
2430
|
def range(options)
|
2408
|
-
objectify =
|
2409
|
-
short =
|
2431
|
+
objectify = false
|
2432
|
+
short = false
|
2410
2433
|
bitstep = 1
|
2411
2434
|
|
2412
2435
|
unless(options.kind_of?(Hash))
|
@@ -2432,11 +2455,11 @@ class CIDR
|
|
2432
2455
|
end
|
2433
2456
|
|
2434
2457
|
if( options.has_key?(:Short) )
|
2435
|
-
short =
|
2458
|
+
short = true
|
2436
2459
|
end
|
2437
2460
|
|
2438
2461
|
if( options.has_key?(:Objectify) )
|
2439
|
-
objectify =
|
2462
|
+
objectify = true
|
2440
2463
|
end
|
2441
2464
|
|
2442
2465
|
if( options.has_key?(:Bitstep) )
|
@@ -2475,14 +2498,14 @@ class CIDR
|
|
2475
2498
|
# remainder()
|
2476
2499
|
#==============================================================================#
|
2477
2500
|
|
2478
|
-
# Given a subnet of the current CIDR, provide the
|
2479
|
-
# the
|
2501
|
+
# Given a subnet of the current CIDR, provide the remaining subnets of
|
2502
|
+
# the CIDR.
|
2480
2503
|
#
|
2481
2504
|
# - Arguments:
|
2482
2505
|
# * Optional hash with the following fields:
|
2483
2506
|
# - :Exclude -- IPAdmin::CIDR object to use in calculating the remainder.
|
2484
|
-
# - :Objectify -- if
|
2485
|
-
# - :Short -- if
|
2507
|
+
# - :Objectify -- if true, return IPAdmin::CIDR objects (optional)
|
2508
|
+
# - :Short -- if true, return IPv6 addresses in short-hand notation (optional)
|
2486
2509
|
#
|
2487
2510
|
# - Returns:
|
2488
2511
|
# * Array of CIDR addresses or IPAdmin::CIDR objects
|
@@ -2511,23 +2534,23 @@ class CIDR
|
|
2511
2534
|
end
|
2512
2535
|
|
2513
2536
|
if( options.has_key?(:Short) )
|
2514
|
-
short =
|
2537
|
+
short = true
|
2515
2538
|
end
|
2516
2539
|
|
2517
2540
|
if( options.has_key?(:Objectify) )
|
2518
|
-
objectify =
|
2541
|
+
objectify = true
|
2519
2542
|
end
|
2520
2543
|
|
2521
2544
|
# make sure 'to_exclude' is the same ip version
|
2522
2545
|
unless ( to_exclude.version == @version )
|
2523
|
-
raise "#{to_exclude.desc(:Short =>
|
2524
|
-
"IP version than #{self.desc(:Short =>
|
2546
|
+
raise "#{to_exclude.desc(:Short => true)} is of a different " +
|
2547
|
+
"IP version than #{self.desc(:Short => true)}."
|
2525
2548
|
end
|
2526
2549
|
|
2527
2550
|
# make sure we contain 'to_exclude'
|
2528
|
-
unless ( self.contains(to_exclude) ==
|
2529
|
-
raise "#{to_exclude.desc(:Short =>
|
2530
|
-
"within the bounds of #{self.desc(:Short =>
|
2551
|
+
unless ( self.contains?(to_exclude) == true )
|
2552
|
+
raise "#{to_exclude.desc(:Short => true)} does not fit " +
|
2553
|
+
"within the bounds of #{self.desc(:Short => true)}."
|
2531
2554
|
end
|
2532
2555
|
|
2533
2556
|
# split this cidr in half & see which half 'to_exclude'
|
@@ -2712,8 +2735,8 @@ class CIDR
|
|
2712
2735
|
# * Optional hash with the following fields:
|
2713
2736
|
# - :IPCount -- Minimum number of IP's that new subnets should contain (optional)
|
2714
2737
|
# - :MinCount -- Minimum number of X sized subnets to return (optional)
|
2715
|
-
# - :Objectify -- if
|
2716
|
-
# - :Short -- if
|
2738
|
+
# - :Objectify -- if true, return IPAdmin::CIDR objects (optional)
|
2739
|
+
# - :Short -- if true, return IPv6 addresses in short-hand notation (optional)
|
2717
2740
|
# - :Subnet -- Netmask (in bits) of new subnets (optional)
|
2718
2741
|
#
|
2719
2742
|
# - Returns:
|
@@ -2732,8 +2755,8 @@ class CIDR
|
|
2732
2755
|
my_mask = self.bits
|
2733
2756
|
subnet_bits = my_mask + 1
|
2734
2757
|
min_count = nil
|
2735
|
-
objectify =
|
2736
|
-
short =
|
2758
|
+
objectify = false
|
2759
|
+
short = false
|
2737
2760
|
|
2738
2761
|
if (options)
|
2739
2762
|
unless (options.kind_of? Hash)
|
@@ -2758,11 +2781,11 @@ class CIDR
|
|
2758
2781
|
end
|
2759
2782
|
|
2760
2783
|
if( options.has_key?(:Short) )
|
2761
|
-
short =
|
2784
|
+
short = true
|
2762
2785
|
end
|
2763
2786
|
|
2764
2787
|
if( options.has_key?(:Objectify) )
|
2765
|
-
objectify =
|
2788
|
+
objectify = true
|
2766
2789
|
end
|
2767
2790
|
|
2768
2791
|
end
|
@@ -3126,7 +3149,7 @@ class Tree
|
|
3126
3149
|
# * Two NetStruct objects
|
3127
3150
|
#
|
3128
3151
|
# - Returns:
|
3129
|
-
# *
|
3152
|
+
# * true if struct1 contains or is equal to struct2, or false if not.
|
3130
3153
|
#
|
3131
3154
|
# Example:
|
3132
3155
|
# is_contained = contains(struct1,struct2)
|
@@ -3149,14 +3172,14 @@ class Tree
|
|
3149
3172
|
# if network1 == network2, then we have to go by netmask length
|
3150
3173
|
# else we can tell by or'ing network1 and network2 by hostmask1
|
3151
3174
|
# and comparing the results
|
3152
|
-
is_contained =
|
3175
|
+
is_contained = false
|
3153
3176
|
if (network1 == network2)
|
3154
3177
|
if (netmask2 >= netmask1)
|
3155
|
-
is_contained =
|
3178
|
+
is_contained = true
|
3156
3179
|
end
|
3157
3180
|
else
|
3158
3181
|
if ( (network1 | hostmask1) == (network2 | hostmask1) )
|
3159
|
-
is_contained =
|
3182
|
+
is_contained = true
|
3160
3183
|
end
|
3161
3184
|
end
|
3162
3185
|
|
@@ -3250,7 +3273,7 @@ class Tree
|
|
3250
3273
|
# * IPAdmin::CIDR object
|
3251
3274
|
#
|
3252
3275
|
# - Returns:
|
3253
|
-
# *
|
3276
|
+
# * true or false
|
3254
3277
|
#
|
3255
3278
|
# Example:
|
3256
3279
|
# added = tree.exists?(cidr)
|
@@ -3272,10 +3295,11 @@ class Tree
|
|
3272
3295
|
home_struct,home_branch = find_home(net_struct, @root)
|
3273
3296
|
|
3274
3297
|
# check for match
|
3298
|
+
found = false
|
3275
3299
|
if (home_struct)
|
3276
3300
|
if ( (net_struct.network == home_struct.network) &&
|
3277
3301
|
(net_struct.netmask == home_struct.netmask) )
|
3278
|
-
found =
|
3302
|
+
found = true
|
3279
3303
|
end
|
3280
3304
|
end
|
3281
3305
|
|
@@ -3389,12 +3413,12 @@ class Tree
|
|
3389
3413
|
# - :Limit -- Maximum entries to return (optional)
|
3390
3414
|
# - :Subnet -- Netmask (in bits) of space to find(optional)
|
3391
3415
|
#
|
3392
|
-
# Note:
|
3393
|
-
# :Subnet always takes precedence over :IPCount.
|
3394
|
-
#
|
3395
3416
|
# - Returns:
|
3396
3417
|
# * ordered array of IPAdmin::CIDR objects
|
3397
3418
|
#
|
3419
|
+
# Note:
|
3420
|
+
# :Subnet always takes precedence over :IPCount.
|
3421
|
+
#
|
3398
3422
|
# Example:
|
3399
3423
|
# list = tree.find_space(:Subnet => 27)
|
3400
3424
|
# list = tree.find_space(:IPCount => 33, :Limit => 2)
|
@@ -3482,7 +3506,7 @@ class Tree
|
|
3482
3506
|
# * IPAdmin::CIDR object
|
3483
3507
|
#
|
3484
3508
|
# - Returns:
|
3485
|
-
# *
|
3509
|
+
# * true on success, or false
|
3486
3510
|
#
|
3487
3511
|
# Example:
|
3488
3512
|
# did_prune = tree.prune(ip)
|
@@ -3506,9 +3530,10 @@ class Tree
|
|
3506
3530
|
end
|
3507
3531
|
|
3508
3532
|
# remove if home_struct.object = object
|
3533
|
+
pruned = false
|
3509
3534
|
if (home_struct.object = object)
|
3510
3535
|
home_branch.delete(home_struct)
|
3511
|
-
pruned =
|
3536
|
+
pruned = true
|
3512
3537
|
end
|
3513
3538
|
|
3514
3539
|
return(pruned)
|
@@ -3529,7 +3554,7 @@ class Tree
|
|
3529
3554
|
# * IPAdmin::CIDR object
|
3530
3555
|
#
|
3531
3556
|
# - Returns:
|
3532
|
-
# *
|
3557
|
+
# * true on success, or false
|
3533
3558
|
#
|
3534
3559
|
# Example:
|
3535
3560
|
# did_remove = tree.remove(ip)
|
@@ -3549,6 +3574,7 @@ class Tree
|
|
3549
3574
|
home_struct,home_branch = find_home(net_struct, @root)
|
3550
3575
|
|
3551
3576
|
# remove if home_struct.object = object
|
3577
|
+
removed = false
|
3552
3578
|
if (home_struct.object = object)
|
3553
3579
|
|
3554
3580
|
# if we have children subnets, move them up one level
|
@@ -3566,7 +3592,7 @@ class Tree
|
|
3566
3592
|
end
|
3567
3593
|
|
3568
3594
|
home_branch.delete(home_struct)
|
3569
|
-
removed =
|
3595
|
+
removed = true
|
3570
3596
|
end
|
3571
3597
|
|
3572
3598
|
return(removed)
|
data/tests/cidr_test.rb
CHANGED
@@ -16,7 +16,7 @@ class TestCIDR < Test::Unit::TestCase
|
|
16
16
|
assert_not_nil(IPAdmin::CIDR.new(:CIDR => 'fec0::1/64') )
|
17
17
|
end
|
18
18
|
|
19
|
-
def test_contains
|
19
|
+
def test_contains?
|
20
20
|
|
21
21
|
cidr4 = IPAdmin::CIDR.new(:CIDR => '192.168.1.0/24')
|
22
22
|
cidr4_2 = IPAdmin::CIDR.new(:CIDR => '192.168.1.0/26')
|
@@ -25,10 +25,10 @@ class TestCIDR < Test::Unit::TestCase
|
|
25
25
|
cidr6_2 = IPAdmin::CIDR.new(:CIDR => 'fec0::/96')
|
26
26
|
cidr6_3 = IPAdmin::CIDR.new(:CIDR => 'fe80::/96')
|
27
27
|
|
28
|
-
assert_equal(
|
29
|
-
assert_equal(
|
30
|
-
|
31
|
-
|
28
|
+
assert_equal(true,cidr4.contains?(cidr4_2) )
|
29
|
+
assert_equal(true,cidr6.contains?(cidr6_2) )
|
30
|
+
assert_equal(false,cidr4.contains?(cidr4_3) )
|
31
|
+
assert_equal(false,cidr6.contains?(cidr6_3) )
|
32
32
|
end
|
33
33
|
|
34
34
|
def test_nth
|
@@ -36,12 +36,12 @@ class TestCIDR < Test::Unit::TestCase
|
|
36
36
|
cidr6 = IPAdmin::CIDR.new(:CIDR => 'fec0::/126')
|
37
37
|
|
38
38
|
assert_equal('192.168.1.1',cidr4.nth(:Index => 1) )
|
39
|
-
assert_kind_of(IPAdmin::CIDR,cidr4.nth(:Index => 1, :Objectify =>
|
39
|
+
assert_kind_of(IPAdmin::CIDR,cidr4.nth(:Index => 1, :Objectify => true) )
|
40
40
|
assert_raise(RuntimeError){ cidr4.nth(:Index => 256) }
|
41
41
|
assert_raise(ArgumentError){ cidr4.nth() }
|
42
42
|
|
43
43
|
assert_equal('fec0:0000:0000:0000:0000:0000:0000:0001',cidr6.nth(:Index => 1) )
|
44
|
-
assert_equal('fec0::1',cidr6.nth(:Index => 1, :Short =>
|
44
|
+
assert_equal('fec0::1',cidr6.nth(:Index => 1, :Short => true) )
|
45
45
|
assert_raise(RuntimeError){ cidr6.nth(:Index => 10) }
|
46
46
|
end
|
47
47
|
|
@@ -51,7 +51,7 @@ class TestCIDR < Test::Unit::TestCase
|
|
51
51
|
|
52
52
|
assert_equal(['192.168.1.0'],cidr4.enumerate(:Limit => 1) )
|
53
53
|
assert_equal(['fec0:0000:0000:0000:0000:0000:0000:0000'],cidr6.enumerate(:Limit => 1) )
|
54
|
-
assert_equal(['fec0::'],cidr6.enumerate(:Limit => 1, :Short =>
|
54
|
+
assert_equal(['fec0::'],cidr6.enumerate(:Limit => 1, :Short => true) )
|
55
55
|
|
56
56
|
|
57
57
|
enums4 = cidr4.enumerate(:Limit => 2, :Bitstep => 5)
|
@@ -59,7 +59,7 @@ class TestCIDR < Test::Unit::TestCase
|
|
59
59
|
assert_equal('192.168.1.5', enums4[1] )
|
60
60
|
assert_equal('fec0:0000:0000:0000:0000:0000:0000:0005', enums6[1] )
|
61
61
|
|
62
|
-
enums4 = cidr4.enumerate(:Objectify =>
|
62
|
+
enums4 = cidr4.enumerate(:Objectify => true,:Limit => 1)
|
63
63
|
assert_kind_of(IPAdmin::CIDR, enums4[0] )
|
64
64
|
|
65
65
|
end
|
@@ -73,7 +73,7 @@ class TestCIDR < Test::Unit::TestCase
|
|
73
73
|
assert_equal('192.168.2.0',next4 )
|
74
74
|
assert_equal('fec0:0000:0000:0001:0000:0000:0000:0000',next6 )
|
75
75
|
|
76
|
-
next6 = cidr6.next_ip(:Short =>
|
76
|
+
next6 = cidr6.next_ip(:Short => true)
|
77
77
|
assert_equal('fec0:0:0:1::',next6 )
|
78
78
|
|
79
79
|
next4 = cidr4.next_ip(:Bitstep => 2)
|
@@ -81,8 +81,8 @@ class TestCIDR < Test::Unit::TestCase
|
|
81
81
|
assert_equal('192.168.2.1',next4 )
|
82
82
|
assert_equal('fec0:0000:0000:0001:0000:0000:0000:0001',next6 )
|
83
83
|
|
84
|
-
next4 = cidr4.next_ip(:Objectify =>
|
85
|
-
next6 = cidr6.next_ip(:Objectify =>
|
84
|
+
next4 = cidr4.next_ip(:Objectify => true)
|
85
|
+
next6 = cidr6.next_ip(:Objectify => true)
|
86
86
|
assert_equal('192.168.2.0/32',next4.desc )
|
87
87
|
assert_equal('fec0:0000:0000:0001:0000:0000:0000:0000/128',next6.desc )
|
88
88
|
|
@@ -97,7 +97,7 @@ class TestCIDR < Test::Unit::TestCase
|
|
97
97
|
assert_equal('192.168.2.0/24',next4 )
|
98
98
|
assert_equal('fec0:0000:0000:0001:0000:0000:0000:0000/64',next6 )
|
99
99
|
|
100
|
-
next6 = cidr6.next_subnet(:Short =>
|
100
|
+
next6 = cidr6.next_subnet(:Short => true)
|
101
101
|
assert_equal('fec0:0:0:1::/64',next6 )
|
102
102
|
|
103
103
|
next4 = cidr4.next_subnet(:Bitstep => 2)
|
@@ -105,8 +105,8 @@ class TestCIDR < Test::Unit::TestCase
|
|
105
105
|
assert_equal('192.168.3.0/24',next4 )
|
106
106
|
assert_equal('fec0:0000:0000:0002:0000:0000:0000:0000/64',next6 )
|
107
107
|
|
108
|
-
next4 = cidr4.next_subnet(:Objectify =>
|
109
|
-
next6 = cidr6.next_subnet(:Objectify =>
|
108
|
+
next4 = cidr4.next_subnet(:Objectify => true)
|
109
|
+
next6 = cidr6.next_subnet(:Objectify => true)
|
110
110
|
assert_equal('192.168.2.0/24',next4.desc )
|
111
111
|
assert_equal('fec0:0000:0000:0001:0000:0000:0000:0000/64',next6.desc )
|
112
112
|
|
@@ -117,7 +117,7 @@ class TestCIDR < Test::Unit::TestCase
|
|
117
117
|
cidr6 = IPAdmin::CIDR.new(:CIDR => 'fec0::/64')
|
118
118
|
|
119
119
|
range4 = cidr4.range(:Indexes => [25,0], :Bitstep => 5)
|
120
|
-
range6 = cidr6.range(:Indexes => [25,0], :Bitstep => 5, :Short =>
|
120
|
+
range6 = cidr6.range(:Indexes => [25,0], :Bitstep => 5, :Short => true)
|
121
121
|
|
122
122
|
assert_equal(6,range4.length)
|
123
123
|
assert_equal(6,range6.length)
|
@@ -135,7 +135,7 @@ class TestCIDR < Test::Unit::TestCase
|
|
135
135
|
assert_equal(2,remainder.length)
|
136
136
|
assert_equal('192.168.1.0/26',remainder[0])
|
137
137
|
|
138
|
-
remainder = cidr4.remainder(:Exclude => cidr4_2, :Objectify =>
|
138
|
+
remainder = cidr4.remainder(:Exclude => cidr4_2, :Objectify => true)
|
139
139
|
assert_equal('192.168.1.128/25',remainder[1].desc)
|
140
140
|
end
|
141
141
|
|
@@ -146,7 +146,7 @@ class TestCIDR < Test::Unit::TestCase
|
|
146
146
|
new4 = cidr4.resize(:Subnet => 23)
|
147
147
|
new6 = cidr6.resize(:Subnet => 63)
|
148
148
|
assert_equal('192.168.0.0/23',new4.desc )
|
149
|
-
assert_equal('fec0::/63',new6.desc(:Short =>
|
149
|
+
assert_equal('fec0::/63',new6.desc(:Short => true) )
|
150
150
|
|
151
151
|
cidr4.resize!(:Subnet => 25)
|
152
152
|
cidr6.resize!(:Subnet => 67)
|
@@ -164,7 +164,7 @@ class TestCIDR < Test::Unit::TestCase
|
|
164
164
|
assert_equal('192.168.1.0/24',cidr4.desc() )
|
165
165
|
assert_equal('fec0:0000:0000:0000:0000:0000:0000:0000/64',cidr6.desc() )
|
166
166
|
|
167
|
-
assert_equal('fec0::/64',cidr6.desc(:Short =>
|
167
|
+
assert_equal('fec0::/64',cidr6.desc(:Short => true) )
|
168
168
|
|
169
169
|
assert_equal('0.0.0.255',cidr4.hostmask_ext() )
|
170
170
|
|
@@ -173,11 +173,11 @@ class TestCIDR < Test::Unit::TestCase
|
|
173
173
|
|
174
174
|
assert_equal('192.168.1.1',cidr4.ip() )
|
175
175
|
assert_equal('fec0:0000:0000:0000:0000:0000:0000:0001',cidr6.ip() )
|
176
|
-
assert_equal('fec0::1',cidr6.ip(:Short =>
|
176
|
+
assert_equal('fec0::1',cidr6.ip(:Short => true) )
|
177
177
|
|
178
178
|
assert_equal('192.168.1.255',cidr4.last() )
|
179
179
|
assert_equal('fec0:0000:0000:0000:ffff:ffff:ffff:ffff',cidr6.last() )
|
180
|
-
assert_equal('fec0::ffff:ffff:ffff:ffff',cidr6.last(:Short =>
|
180
|
+
assert_equal('fec0::ffff:ffff:ffff:ffff',cidr6.last(:Short => true) )
|
181
181
|
|
182
182
|
assert_equal('/24',cidr4.netmask() )
|
183
183
|
assert_equal('/64',cidr6.netmask() )
|
@@ -186,7 +186,7 @@ class TestCIDR < Test::Unit::TestCase
|
|
186
186
|
|
187
187
|
assert_equal('192.168.1.0',cidr4.network() )
|
188
188
|
assert_equal('fec0:0000:0000:0000:0000:0000:0000:0000',cidr6.network() )
|
189
|
-
assert_equal('fec0::',cidr6.network(:Short =>
|
189
|
+
assert_equal('fec0::',cidr6.network(:Short => true) )
|
190
190
|
|
191
191
|
assert_equal(256,cidr4.size() )
|
192
192
|
assert_equal(2**64,cidr6.size() )
|
@@ -206,7 +206,7 @@ class TestCIDR < Test::Unit::TestCase
|
|
206
206
|
assert_equal('192.168.1.64/26', subnet4[1])
|
207
207
|
assert_equal('192.168.1.128/25', subnet4[2])
|
208
208
|
|
209
|
-
subnet4 = cidr4.subnet(:Subnet => 28, :MinCount => 3, :Objectify =>
|
209
|
+
subnet4 = cidr4.subnet(:Subnet => 28, :MinCount => 3, :Objectify => true)
|
210
210
|
assert_equal('192.168.1.0/28', subnet4[0].desc)
|
211
211
|
assert_equal('192.168.1.16/28', subnet4[1].desc)
|
212
212
|
assert_equal('192.168.1.32/28', subnet4[2].desc)
|
@@ -5,7 +5,7 @@ require 'test/unit'
|
|
5
5
|
|
6
6
|
|
7
7
|
|
8
|
-
class
|
8
|
+
class TestMethods < Test::Unit::TestCase
|
9
9
|
|
10
10
|
def test_pack_ipv4_addr
|
11
11
|
assert_equal(2**32-1, IPAdmin.pack_ipv4_addr('255.255.255.255') )
|
@@ -184,7 +184,12 @@ class TestFunct < Test::Unit::TestCase
|
|
184
184
|
assert_equal('fec0::', IPAdmin.shorten('fec0:0000:0000:0000:0000:0000:0000:0000') )
|
185
185
|
assert_equal('fec0::2:0:0:1', IPAdmin.shorten('fec0:0000:0000:0000:0002:0000:0000:0001') )
|
186
186
|
assert_equal('fec0::2:0:0:1', IPAdmin.shorten('fec0:00:0000:0:02:0000:0:1') )
|
187
|
-
|
187
|
+
assert_equal('fec0::2:2:0:0:1', IPAdmin.shorten('fec0:0000:0000:0002:0002:0000:0000:0001') )
|
188
|
+
assert_equal('fec0:0:0:1::', IPAdmin.shorten('fec0:0000:0000:0001:0000:0000:0000:0000') )
|
189
|
+
assert_equal('fec0:1:1:1:1:1:1:1', IPAdmin.shorten('fec0:0001:0001:0001:0001:0001:0001:0001') )
|
190
|
+
assert_equal('fec0:ffff:ffff:0:ffff:ffff:ffff:ffff', IPAdmin.shorten('fec0:ffff:ffff:0000:ffff:ffff:ffff:ffff') )
|
191
|
+
assert_equal('fec0:ffff:ffff:ffff:ffff:ffff:ffff:ffff', IPAdmin.shorten('fec0:ffff:ffff:ffff:ffff:ffff:ffff:ffff') )
|
192
|
+
assert_equal('fec0::', IPAdmin.shorten('fec0::') )
|
188
193
|
end
|
189
194
|
|
190
195
|
def test_unshorten
|
@@ -246,7 +251,7 @@ class TestFunct < Test::Unit::TestCase
|
|
246
251
|
IPAdmin::CIDR.new(:CIDR => 'fec0::2/127')]
|
247
252
|
|
248
253
|
merge4 = IPAdmin.merge(:List => cidr4)
|
249
|
-
merge4_2 = IPAdmin.merge(:List => cidr4_2, :Objectify =>
|
254
|
+
merge4_2 = IPAdmin.merge(:List => cidr4_2, :Objectify => true)
|
250
255
|
merge6 = IPAdmin.merge(:List => cidr6)
|
251
256
|
|
252
257
|
assert_equal(5, merge4.length)
|
data/tests/tree_test.rb
CHANGED
@@ -182,9 +182,9 @@ class TestTree < Test::Unit::TestCase
|
|
182
182
|
tree6.add(cidr6_1)
|
183
183
|
tree6.add(cidr6_2)
|
184
184
|
|
185
|
-
assert_equal(
|
186
|
-
assert_equal(
|
187
|
-
|
185
|
+
assert_equal(true, tree4.exists?(cidr4_1))
|
186
|
+
assert_equal(true, tree6.exists?(cidr6_2))
|
187
|
+
assert_equal(false, tree4.exists?(cidr4_3))
|
188
188
|
|
189
189
|
end
|
190
190
|
|
metadata
CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.8.11
|
|
3
3
|
specification_version: 1
|
4
4
|
name: ipadmin
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.2.
|
7
|
-
date: 2006-
|
6
|
+
version: 0.2.1
|
7
|
+
date: 2006-03-08 00:00:00 -06:00
|
8
8
|
summary: A package for manipulating IPv4/IPv6 address space.
|
9
9
|
require_paths:
|
10
10
|
- lib
|
@@ -32,9 +32,9 @@ files:
|
|
32
32
|
- lib/ip_admin.rb
|
33
33
|
- README
|
34
34
|
test_files:
|
35
|
-
- tests/
|
36
|
-
- tests/cidr_test.rb
|
35
|
+
- tests/methods_test.rb
|
37
36
|
- tests/tree_test.rb
|
37
|
+
- tests/cidr_test.rb
|
38
38
|
rdoc_options: []
|
39
39
|
extra_rdoc_files:
|
40
40
|
- README
|