netaddr 1.5.1 → 2.0.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,219 +0,0 @@
1
- module NetAddr
2
- private
3
-
4
- #==============================================================================#
5
- # validate_args()
6
- #==============================================================================#
7
-
8
- # validate options hash
9
- #
10
- def validate_args(to_validate,known_args)
11
- to_validate.each do |x|
12
- raise ArgumentError, "Unrecognized argument #{x}. Valid arguments are " +
13
- "#{known_args.join(',')}" if (!known_args.include?(x))
14
- end
15
- end
16
- module_function :validate_args
17
-
18
- #==============================================================================#
19
- # validate_ip_int()
20
- #==============================================================================#
21
-
22
- def validate_ip_int(ip,version)
23
- version = 4 if (!version && ip < 2**32)
24
- if (version == 4)
25
- raise ValidationError, "#{ip} is invalid for IPv4 (Integer is out of bounds)." if ( (ip < 0) || (ip > 2**32-1) )
26
- else
27
- raise ValidationError, "#{ip} is invalid for both IPv4 and IPv6 (Integer is out of bounds)." if ( (ip < 0) || (ip > 2**128-1) )
28
- version = 6
29
- end
30
- return(version)
31
- end
32
- module_function :validate_ip_int
33
-
34
- #==============================================================================#
35
- # validate_ip_str()
36
- #==============================================================================#
37
-
38
- def validate_ip_str(ip,version)
39
- # check validity of charaters
40
- if (ip =~ /[^0-9a-fA-F\.:]/)
41
- raise ValidationError, "#{ip} is invalid (contains invalid characters)."
42
- end
43
-
44
- if (version == 4)
45
- octets = ip.split('.')
46
- raise ValidationError, "#{ip} is invalid (IPv4 requires (4) octets)." if (octets.length != 4)
47
-
48
- # are octets in range 0..255?
49
- octets.each do |octet|
50
- raise ValidationError, "#{ip} is invalid (IPv4 dotted-decimal format " +
51
- "should not contain non-numeric characters)." if (octet =~ /[\D]/ || octet == '')
52
- octet = octet.to_i()
53
- if ( (octet < 0) || (octet >= 256) )
54
- raise ValidationError, "#{ip} is invalid (IPv4 octets should be between 0 and 255)."
55
- end
56
- end
57
-
58
- else
59
- # make sure we only have at most (2) colons in a row, and then only
60
- # (1) instance of that
61
- if ( (ip =~ /:{3,}/) || (ip.split("::").length > 2) )
62
- raise ValidationError, "#{ip} is invalid (IPv6 field separators (:) are bad)."
63
- end
64
-
65
- # set flags
66
- shorthand = false
67
- if (ip =~ /\./)
68
- dotted_dec = true
69
- else
70
- dotted_dec = false
71
- end
72
-
73
- # split up by ':'
74
- fields = []
75
- if (ip =~ /::/)
76
- shorthand = true
77
- ip.split('::').each do |x|
78
- fields.concat( x.split(':') )
79
- end
80
- else
81
- fields.concat( ip.split(':') )
82
- end
83
-
84
- # make sure we have the correct number of fields
85
- if (shorthand)
86
- if ( (dotted_dec && fields.length > 6) || (!dotted_dec && fields.length > 7) )
87
- raise ValidationError, "#{ip} is invalid (IPv6 shorthand notation has " +
88
- "incorrect number of fields)."
89
- end
90
- else
91
- if ( (dotted_dec && fields.length != 7 ) || (!dotted_dec && fields.length != 8) )
92
- raise ValidationError, "#{ip} is invalid (IPv6 address has " +
93
- "incorrect number of fields)."
94
- end
95
- end
96
-
97
- # if dotted_dec then validate the last field
98
- if (dotted_dec)
99
- dotted = fields.pop()
100
- octets = dotted.split('.')
101
- raise ValidationError, "#{ip} is invalid (Legacy IPv4 portion of IPv6 " +
102
- "address should contain (4) octets)." if (octets.length != 4)
103
- octets.each do |x|
104
- raise ValidationError, "#{ip} is invalid (egacy IPv4 portion of IPv6 " +
105
- "address should not contain non-numeric characters)." if (x =~ /[^0-9]/ )
106
- x = x.to_i
107
- if ( (x < 0) || (x >= 256) )
108
- raise ValidationError, "#{ip} is invalid (Octets of a legacy IPv4 portion of IPv6 " +
109
- "address should be between 0 and 255)."
110
- end
111
- end
112
- end
113
-
114
- # validate hex fields
115
- fields.each do |x|
116
- if (x =~ /[^0-9a-fA-F]/)
117
- raise ValidationError, "#{ip} is invalid (IPv6 address contains invalid hex characters)."
118
- else
119
- x = x.to_i(16)
120
- if ( (x < 0) || (x >= 2**16) )
121
- raise ValidationError, "#{ip} is invalid (Fields of an IPv6 address " +
122
- "should be between 0x0 and 0xFFFF)."
123
- end
124
- end
125
- end
126
-
127
- end
128
- return(true)
129
- end
130
- module_function :validate_ip_str
131
-
132
- #==============================================================================#
133
- # validate_netmask_int()
134
- #==============================================================================#
135
- def validate_netmask_int(netmask,version,is_int=false)
136
- address_len = 32
137
- address_len = 128 if (version == 6)
138
-
139
- if (!is_int)
140
- if (netmask > address_len || netmask < 0 )
141
- raise ValidationError, "Netmask, #{netmask}, is out of bounds for IPv#{version}."
142
- end
143
- else
144
- if (netmask >= 2**address_len || netmask < 0 )
145
- raise ValidationError, "netmask (#{netmask}) is out of bounds for IPv#{version}."
146
- end
147
- end
148
- return(true)
149
- end
150
- module_function :validate_netmask_int
151
-
152
- #==============================================================================#
153
- # validate_netmask_str()
154
- #==============================================================================#
155
- def validate_netmask_str(netmask,version)
156
- address_len = 32
157
- address_len = 128 if (version == 6)
158
-
159
- if(netmask =~ /\./) # extended netmask
160
- all_f = 2**32-1
161
- netmask_int = 0
162
-
163
- # validate & pack extended mask
164
- begin
165
- netmask_int = NetAddr.ip_to_i(netmask, :Version => 4)
166
- rescue Exception => error
167
- raise ValidationError, "#{netmask} is improperly formed: #{error}"
168
- end
169
-
170
- # cycle through the bits of hostmask and compare
171
- # with netmask_int. when we hit the firt '1' within
172
- # netmask_int (our netmask boundary), xor hostmask and
173
- # netmask_int. the result should be all 1's. this whole
174
- # process is in place to make sure that we dont have
175
- # and crazy masks such as 255.254.255.0
176
- hostmask = 1
177
- 32.times do
178
- check = netmask_int & hostmask
179
- if ( check != 0)
180
- hostmask = hostmask >> 1
181
- unless ( (netmask_int ^ hostmask) == all_f)
182
- raise ValidationError, "#{netmask} contains '1' bits within the host portion of the netmask."
183
- end
184
- break
185
- else
186
- hostmask = hostmask << 1
187
- hostmask = hostmask | 1
188
- end
189
- end
190
-
191
- else # cidr format
192
- # remove '/' if present
193
- if (netmask =~ /^\// )
194
- netmask[0] = " "
195
- netmask.lstrip!
196
- end
197
-
198
- # check if we have any non numeric characters
199
- if (netmask =~ /\D/)
200
- raise ValidationError, "#{netmask} contains invalid characters."
201
- end
202
-
203
- netmask = netmask.to_i
204
- if (netmask > address_len || netmask < 0 )
205
- raise ValidationError, "Netmask, #{netmask}, is out of bounds for IPv#{version}."
206
- end
207
-
208
- end
209
- return(true)
210
- end
211
- module_function :validate_netmask_str
212
-
213
-
214
-
215
- end # module NetAddr
216
-
217
- __END__
218
-
219
-
data/license DELETED
@@ -1,13 +0,0 @@
1
- Copyright Dustin L. Spinhirne
2
-
3
- Licensed under the Apache License, Version 2.0 (the "License");
4
- you may not use this file except in compliance with the License.
5
- You may obtain a copy of the License at
6
-
7
- http://www.apache.org/licenses/LICENSE-2.0
8
-
9
- Unless required by applicable law or agreed to in writing, software
10
- distributed under the License is distributed on an "AS IS" BASIS,
11
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- See the License for the specific language governing permissions and
13
- limitations under the License.
data/test/cidr_test.rb DELETED
@@ -1,544 +0,0 @@
1
- #!/usr/bin/ruby
2
-
3
- require 'lib/netaddr.rb'
4
- require 'test/unit'
5
-
6
-
7
-
8
- class TestCIDR < Test::Unit::TestCase
9
-
10
-
11
- def test_new
12
- cidr = NetAddr::CIDRv4.new(3232235777, netmask=4294967040, tag={}, wildcard_mask=4294967040)
13
- assert_equal('192.168.1.0/24', cidr.desc)
14
- assert_equal('192.168.1.1', cidr.ip)
15
- assert_equal('255.255.255.0', cidr.wildcard_mask)
16
- end
17
-
18
- def test_create
19
- assert_raise(ArgumentError) {NetAddr::CIDR.create('192.168.1.0/24', :test => true)}
20
- assert_nothing_raised(Exception){NetAddr::CIDR.create('0.0.0.0/0')}
21
- assert_nothing_raised(Exception){NetAddr::CIDR.create('192.168.1.0/24')}
22
- assert_nothing_raised(Exception){NetAddr::CIDR.create('192.168.1.0/24') }
23
- assert_nothing_raised(Exception){NetAddr::CIDR.create('192.168.1.0 255.255.255.0')}
24
- assert_nothing_raised(Exception){NetAddr::CIDR.create('192.168.1.1') }
25
- assert_nothing_raised(Exception){NetAddr::CIDR.create('192.168.1.1 ') }
26
- assert_nothing_raised(Exception){NetAddr::CIDR.create('fec0::/64') }
27
- assert_nothing_raised(Exception){NetAddr::CIDR.create('192.168.1.1/24 255.255.0.0')}
28
- assert_nothing_raised(Exception){NetAddr::CIDR.create('::/0')}
29
- assert_nothing_raised(Exception){NetAddr::CIDR.create('fec0::1/64')}
30
- assert_nothing_raised(Exception){NetAddr::CIDR.create('fec0::1/64')}
31
- assert_nothing_raised(Exception){NetAddr::CIDR.create(0x0a0a0a0a, :Mask => 0xffffffff)}
32
- assert_nothing_raised(Exception){NetAddr::CIDR.create('192.168.1.1', :WildcardMask => ['0.0.7.255', true]) }
33
- assert_nothing_raised(Exception){NetAddr::CIDR.create('192.168.1.1', :WildcardMask => [0x000007ff, true]) }
34
- assert_nothing_raised(Exception){NetAddr::CIDR.create('fec0::1', :WildcardMask => ['0000:ffff::ffff', true])}
35
- assert_nothing_raised(Exception){NetAddr::CIDR.create('fec0::1', :WildcardMask => [0xffff, true])}
36
-
37
- assert_kind_of(NetAddr::CIDRv4, NetAddr::CIDR.create('192.168.1.1 255.255.0.0'))
38
- assert_kind_of(NetAddr::CIDRv4, NetAddr::CIDR.create('192.168.1.1/24 255.255.0.0'))
39
- assert_kind_of(NetAddr::CIDRv6, NetAddr::CIDR.create('fec0::1/64'))
40
- assert_kind_of(NetAddr::CIDRv4, NetAddr::CIDR.create('10.10.10.10/32 255.255.255.0'))
41
- assert_kind_of(NetAddr::CIDRv4, NetAddr::CIDR.create('10.10.10.10/32', :Mask => 0xffffff00))
42
-
43
- assert_raise(ArgumentError){ NetAddr::CIDR.create(:Version => 4) }
44
- assert_raise(NetAddr::ValidationError){ NetAddr::CIDR.create('192.168.1.1', :WildcardMask => ['0000:ffff::ffff', true]) }
45
- assert_raise(NetAddr::ValidationError){ NetAddr::CIDR.create('fec0::1', :WildcardMask => ['0.0.7.255', true]) }
46
-
47
- cidr = NetAddr::CIDRv4.create('192.168.1.1 255.255.0.0')
48
- assert_equal(16, cidr.bits )
49
-
50
- cidr = NetAddr::CIDRv4.create('192.168.1.1/24 255.255.0.0')
51
- assert_equal(24, cidr.bits )
52
-
53
- cidr = NetAddr::CIDRv4.create('10.10.10.10/32 255.255.255.0')
54
- assert_equal(32, cidr.bits )
55
-
56
- cidr = NetAddr::CIDRv4.create('10.10.10.10/32', :Mask => 0xffffff00)
57
- assert_equal(24, cidr.bits )
58
-
59
- cidr = NetAddr::CIDR.create('fec0::1/64')
60
- assert_equal(64, cidr.bits )
61
-
62
- assert_raise(ArgumentError){ NetAddr::CIDRv4.create({}) }
63
- assert_raise(NetAddr::ValidationError){ NetAddr::CIDRv4.create('192.168.1.0 a') }
64
- end
65
-
66
- def test_comparasins
67
- cidr4 = NetAddr::CIDR.create('192.168.1.1/24')
68
-
69
- assert(cidr4 == '192.168.1.0/24')
70
- assert(cidr4 > '192.168.0.0/24')
71
- assert(cidr4 < '192.168.2.0/24')
72
- assert_equal(0, cidr4 <=> '192.168.1.0/24')
73
- assert_equal(1, cidr4 <=> '192.168.0.0/24')
74
- assert_equal(-1, cidr4 <=> '192.168.2.0/24')
75
- end
76
-
77
- def test_index
78
- cidr = NetAddr::CIDR.create('192.168.1.0/24')
79
- assert_equal('192.168.1.1/32', cidr[1].desc)
80
- assert_equal('192.168.1.255/32', cidr[255].desc)
81
- assert_raise(NetAddr::BoundaryError){ cidr[256] }
82
- assert_raise(NetAddr::BoundaryError){ cidr[-1] }
83
- assert_raise(ArgumentError){ cidr['a'] }
84
- end
85
-
86
- def test_allocate_allocate_rfc3531
87
- cidr = NetAddr::CIDR.create('192.168.0.0/16')
88
- centermost = ["192.168.0.0/21", "192.168.32.0/21", "192.168.64.0/21", "192.168.96.0/21",
89
- "192.168.16.0/21", "192.168.48.0/21", "192.168.80.0/21", "192.168.112.0/21",
90
- "192.168.128.0/21", "192.168.144.0/21", "192.168.160.0/21", "192.168.176.0/21",
91
- "192.168.192.0/21", "192.168.208.0/21", "192.168.224.0/21", "192.168.240.0/21",
92
- "192.168.8.0/21", "192.168.24.0/21", "192.168.40.0/21", "192.168.56.0/21", "192.168.72.0/21",
93
- "192.168.88.0/21", "192.168.104.0/21", "192.168.120.0/21", "192.168.136.0/21",
94
- "192.168.152.0/21", "192.168.168.0/21", "192.168.184.0/21", "192.168.200.0/21",
95
- "192.168.216.0/21", "192.168.232.0/21", "192.168.248.0/21"]
96
- leftmost = ["192.168.0.0/21", "192.168.128.0/21", "192.168.64.0/21", "192.168.192.0/21",
97
- "192.168.32.0/21", "192.168.160.0/21", "192.168.96.0/21", "192.168.224.0/21",
98
- "192.168.16.0/21", "192.168.144.0/21", "192.168.80.0/21", "192.168.208.0/21",
99
- "192.168.48.0/21", "192.168.176.0/21", "192.168.112.0/21", "192.168.240.0/21",
100
- "192.168.8.0/21", "192.168.136.0/21", "192.168.72.0/21", "192.168.200.0/21",
101
- "192.168.40.0/21", "192.168.168.0/21", "192.168.104.0/21", "192.168.232.0/21",
102
- "192.168.24.0/21", "192.168.152.0/21", "192.168.88.0/21", "192.168.216.0/21",
103
- "192.168.56.0/21", "192.168.184.0/21", "192.168.120.0/21", "192.168.248.0/21"]
104
-
105
- assert_equal(centermost, cidr.allocate_rfc3531(21, :Strategy => :centermost) )
106
- assert_equal(leftmost, cidr.allocate_rfc3531(21) )
107
- assert_equal("192.168.192.0/21", cidr.allocate_rfc3531(21, :Objectify => true)[3].desc )
108
- assert_equal("192.168.96.0/21", cidr.allocate_rfc3531(21, :Strategy => :centermost, :Objectify => true)[3].desc )
109
- end
110
-
111
- def test_arpa
112
- cidr4 = NetAddr::CIDR.create('192.168.1.1/24')
113
- cidr6 = NetAddr::CIDR.create('fec0::1/64')
114
-
115
- assert_equal('1.168.192.in-addr.arpa.', cidr4.arpa() )
116
- assert_equal('0.0.0.0.0.0.0.0.0.0.0.0.0.c.e.f.ip6.arpa.', cidr6.arpa() )
117
- end
118
-
119
- def test_bits
120
- cidr4 = NetAddr::CIDR.create('192.168.1.1/24')
121
- cidr6 = NetAddr::CIDR.create('fec0::1/64')
122
- assert_equal(24,cidr4.bits() )
123
- assert_equal(64,cidr6.bits() )
124
- end
125
-
126
- def test_cmp
127
-
128
- cidr4 = NetAddr::CIDR.create('192.168.1.0/24')
129
- cidr4_2 = NetAddr::CIDR.create('192.168.1.0/26')
130
- cidr6 = NetAddr::CIDR.create('fec0::/64')
131
- cidr6_2 = NetAddr::CIDR.create('fec0::/96')
132
-
133
- assert_equal(1,cidr4.cmp('192.168.1.0/26') )
134
- assert_equal(-1,cidr4.cmp('192.168.0.0/23') )
135
- assert_equal(0,cidr4.cmp('192.168.1.0/24') )
136
- assert_nil(cidr4.cmp('192.168.2.0/26') )
137
- assert_equal(1,cidr4.cmp(cidr4_2) )
138
- assert_equal(1,cidr6.cmp('fec0::/96') )
139
- assert_equal(-1,cidr6.cmp('fec0::/63') )
140
- assert_equal(0,cidr6.cmp('fec0::/64') )
141
- assert_nil(cidr6.cmp('fe80::/64') )
142
- assert_equal(1,cidr6.cmp(cidr6_2) )
143
-
144
- assert_raise(NetAddr::VersionError) { cidr4.cmp(cidr6_2) }
145
- end
146
-
147
- def test_contains?
148
-
149
- cidr4 = NetAddr::CIDR.create('192.168.1.0/24')
150
- cidr4_2 = NetAddr::CIDR.create('192.168.1.0/26')
151
- cidr6 = NetAddr::CIDR.create('fec0::/64')
152
- cidr6_2 = NetAddr::CIDR.create('fec0::/96')
153
-
154
- assert_equal(true,cidr4.contains?('192.168.1.0/26') )
155
- assert_equal(true,cidr4.contains?(cidr4_2) )
156
- assert_equal(true,cidr6.contains?(cidr6_2) )
157
- assert_equal(false,cidr4.contains?('192.168.2.0/26') )
158
- assert_equal(false,cidr6.contains?('fe80::/96') )
159
-
160
- assert_raise(NetAddr::VersionError) { cidr4.contains?(cidr6_2) }
161
- end
162
-
163
- def test_desc
164
- cidr4 = NetAddr::CIDR.create('192.168.1.1/24')
165
- cidr6 = NetAddr::CIDR.create('fec0::1/64')
166
-
167
- assert_raise(ArgumentError) {cidr4.desc(:test => true)}
168
- assert_equal('192.168.1.0/24',cidr4.desc() )
169
- assert_equal('192.168.1.1/24',cidr4.desc(:IP => true) )
170
- assert_equal('fec0:0000:0000:0000:0000:0000:0000:0000/64',cidr6.desc() )
171
- assert_equal('fec0::/64',cidr6.desc(:Short => true) )
172
- end
173
-
174
- def test_enumerate
175
- cidr4 = NetAddr::CIDR.create('192.168.1.0/24')
176
- cidr6 = NetAddr::CIDR.create('fec0::/64')
177
-
178
- assert_raise(ArgumentError) {cidr4.enumerate(:test => true)}
179
- assert_equal(['192.168.1.0', '192.168.1.1'],cidr4.enumerate(:Limit => 2) )
180
- assert_equal(['fec0:0000:0000:0000:0000:0000:0000:0000'],cidr6.enumerate(:Limit => 1) )
181
- assert_equal(['fec0::'],cidr6.enumerate(:Limit => 1, :Short => true) )
182
-
183
- enums4 = cidr4.enumerate(:Limit => 2, :Bitstep => 5)
184
- enums6 = cidr6.enumerate(:Limit => 2, :Bitstep => 5)
185
- assert_equal('192.168.1.5', enums4[1] )
186
- assert_equal('fec0:0000:0000:0000:0000:0000:0000:0005', enums6[1] )
187
-
188
- enums4 = cidr4.enumerate(:Objectify => true,:Limit => 1)
189
- assert_kind_of(NetAddr::CIDR, enums4[0] )
190
- end
191
-
192
- def test_fill_in
193
- cidr = NetAddr::CIDR.create('192.168.1.0/24')
194
- filled = cidr.fill_in(['192.168.1.0/27','192.168.1.44/30',
195
- '192.168.1.64/26','192.168.1.129'])
196
-
197
- assert_equal(['192.168.1.0/27','192.168.1.32/29','192.168.1.40/30',
198
- '192.168.1.44/30','192.168.1.48/28','192.168.1.64/26',
199
- '192.168.1.128/32','192.168.1.129/32','192.168.1.130/31',
200
- '192.168.1.132/30','192.168.1.136/29','192.168.1.144/28',
201
- '192.168.1.160/27','192.168.1.192/26'],filled)
202
- end
203
-
204
- def test_hostmask_ext
205
- cidr4 = NetAddr::CIDR.create('192.168.1.1/24')
206
- assert_equal('0.0.0.255',cidr4.hostmask_ext() )
207
- assert_equal('255.255.255.0',cidr4.netmask_ext() )
208
- end
209
-
210
- def test_ip
211
- cidr4 = NetAddr::CIDR.create('192.168.1.1/24')
212
- cidr6 = NetAddr::CIDR.create('fec0::1/64')
213
-
214
- assert_raise(ArgumentError) {cidr4.ip(:test => true)}
215
- assert_equal('192.168.1.1',cidr4.ip() )
216
- assert_equal('fec0:0000:0000:0000:0000:0000:0000:0001',cidr6.ip() )
217
- assert_equal('fec0::1',cidr6.ip(:Short => true) )
218
- end
219
-
220
- def test_is_contained?
221
-
222
- cidr4 = NetAddr::CIDR.create('192.168.1.0/24')
223
- cidr4_2 = NetAddr::CIDR.create('192.168.1.0/26')
224
- cidr6 = NetAddr::CIDR.create('fec0::/64')
225
- cidr6_2 = NetAddr::CIDR.create('fec0::/96')
226
-
227
- assert_equal(true,cidr4_2.is_contained?('192.168.1.0/24') )
228
- assert_equal(true,cidr4_2.is_contained?(cidr4) )
229
- assert_equal(true,cidr6_2.is_contained?('fec0::/64') )
230
- assert_equal(true,cidr6_2.is_contained?(cidr6) )
231
- assert_equal(false,cidr4.is_contained?('192.168.2.0/26') )
232
- assert_equal(false,cidr6.is_contained?('fe80::/96') )
233
-
234
- assert_raise(NetAddr::VersionError) { cidr4.is_contained?(cidr6_2) }
235
- end
236
-
237
- def test_last
238
- cidr4 = NetAddr::CIDR.create('192.168.1.1/24')
239
- cidr6 = NetAddr::CIDR.create('fec0::1/64')
240
-
241
- assert_raise(ArgumentError) {cidr4.last(:test => true)}
242
- assert_equal('192.168.1.255',cidr4.last() )
243
- assert_equal('fec0:0000:0000:0000:ffff:ffff:ffff:ffff',cidr6.last() )
244
- assert_equal('fec0::ffff:ffff:ffff:ffff',cidr6.last(:Short => true) )
245
- end
246
-
247
- def test_matches?
248
- cidr = NetAddr::CIDR.create('10.0.0.0/24')
249
- assert(cidr.matches?('10.0.0.22'))
250
- assert(!cidr.matches?('10.1.1.1'))
251
-
252
- cidr = NetAddr::CIDR.create('10.0.248.0', :WildcardMask => ['255.248.255.0'])
253
- assert(cidr.matches?('10.1.248.0'))
254
- assert(!cidr.matches?('10.8.248.0'))
255
-
256
- cidr = NetAddr::CIDR.create('10.0.248.0')
257
- cidr.set_wildcard_mask('0.7.0.255', true)
258
- assert(cidr.matches?('10.1.248.0'))
259
- assert(!cidr.matches?('10.8.248.0'))
260
-
261
- cidr = NetAddr::CIDR.create('127.0.0.0')
262
- cidr.set_wildcard_mask('0.255.255.255', true)
263
- assert(cidr.matches?('127.0.0.1'))
264
- assert(!cidr.matches?('128.0.0.0'))
265
-
266
- cidr = NetAddr::CIDR.create('127.0.0.0', :WildcardMask => ['0.255.255.255', true])
267
- assert(cidr.matches?('127.0.0.1'))
268
- assert(!cidr.matches?('128.0.0.0'))
269
-
270
- cidr = NetAddr::CIDR.create('fec0::1')
271
- cidr.set_wildcard_mask('0000:ffff::ffff', true)
272
- assert(cidr.matches?('fec0:1::1'))
273
- assert(!cidr.matches?('fec0:0:1::1'))
274
-
275
- cidr = NetAddr::CIDR.create('fec0::1', :WildcardMask => ['0000:ffff::ffff', true])
276
- assert(cidr.matches?('fec0:1::1'))
277
- assert(!cidr.matches?('fec0:0:1::1'))
278
- end
279
-
280
- def test_mcast
281
- cidr4 = NetAddr::CIDR.create('224.0.0.1')
282
- cidr4_2 = NetAddr::CIDR.create('239.255.255.255')
283
- cidr4_3 = NetAddr::CIDR.create('230.2.3.5')
284
- cidr4_4 = NetAddr::CIDR.create('235.147.18.23')
285
- cidr4_5 = NetAddr::CIDR.create('192.168.1.1')
286
- cidr6 = NetAddr::CIDR.create('ff00::1')
287
- cidr6_2 = NetAddr::CIDR.create('ffff::1')
288
- cidr6_3 = NetAddr::CIDR.create('ff00::ffff:ffff')
289
- cidr6_4 = NetAddr::CIDR.create('ff00::fec0:1234:')
290
- cidr6_5 = NetAddr::CIDR.create('2001:4800::1')
291
-
292
- assert_raise(ArgumentError) {cidr4.multicast_mac(:test => true)}
293
- assert_equal('01-00-5e-00-00-01',cidr4.multicast_mac(:Objectify => true).address )
294
- assert_equal('01-00-5e-7f-ff-ff',cidr4_2.multicast_mac )
295
- assert_equal('01-00-5e-02-03-05',cidr4_3.multicast_mac )
296
- assert_equal('01-00-5e-13-12-17',cidr4_4.multicast_mac )
297
-
298
- assert_equal('33-33-00-00-00-01',cidr6.multicast_mac(:Objectify => true).address )
299
- assert_equal('33-33-00-00-00-01',cidr6_2.multicast_mac )
300
- assert_equal('33-33-ff-ff-ff-ff',cidr6_3.multicast_mac )
301
- assert_equal('33-33-fe-c0-12-34',cidr6_4.multicast_mac )
302
-
303
- assert_raise(NetAddr::ValidationError){ cidr4_5.multicast_mac }
304
- assert_raise(NetAddr::ValidationError){ cidr6_5.multicast_mac }
305
- end
306
-
307
- def test_netmask
308
- cidr4 = NetAddr::CIDR.create('192.168.1.1/24')
309
- cidr6 = NetAddr::CIDR.create('fec0::1/64')
310
-
311
- assert_equal('/24',cidr4.netmask() )
312
- assert_equal('/64',cidr6.netmask() )
313
- end
314
-
315
- def test_netmask_ext
316
- cidr4 = NetAddr::CIDR.create('192.168.1.1/24')
317
- assert_equal('255.255.255.0',cidr4.netmask_ext() )
318
- end
319
-
320
- def test_network
321
- cidr4 = NetAddr::CIDR.create('192.168.1.1/24')
322
- cidr6 = NetAddr::CIDR.create('fec0::1/64')
323
-
324
- assert_raise(ArgumentError) {cidr4.network(:test => true)}
325
- assert_equal('192.168.1.0',cidr4.network() )
326
- assert_equal('fec0:0000:0000:0000:0000:0000:0000:0000',cidr6.network() )
327
- assert_equal('fec0::',cidr6.network(:Short => true) )
328
- end
329
-
330
- def test_next_ip
331
- cidr4 = NetAddr::CIDR.create('192.168.1.0/24')
332
- cidr6 = NetAddr::CIDR.create('fec0::/64')
333
-
334
- assert_raise(ArgumentError) {cidr4.next_ip(:test => true)}
335
- next4 = cidr4.next_ip()
336
- next6 = cidr6.next_ip()
337
- assert_equal('192.168.2.0',next4 )
338
- assert_equal('fec0:0000:0000:0001:0000:0000:0000:0000',next6 )
339
-
340
- next6 = cidr6.next_ip(:Short => true)
341
- assert_equal('fec0:0:0:1::',next6 )
342
-
343
- next4 = cidr4.next_ip(:Bitstep => 2)
344
- next6 = cidr6.next_ip(:Bitstep => 2)
345
- assert_equal('192.168.2.1',next4 )
346
- assert_equal('fec0:0000:0000:0001:0000:0000:0000:0001',next6 )
347
-
348
- next4 = cidr4.next_ip(:Objectify => true)
349
- next6 = cidr6.next_ip(:Objectify => true)
350
- assert_equal('192.168.2.0/32',next4.desc )
351
- assert_equal('fec0:0000:0000:0001:0000:0000:0000:0000/128',next6.desc )
352
-
353
- end
354
-
355
- def test_next_subnet
356
- cidr4 = NetAddr::CIDR.create('192.168.1.0/24')
357
- cidr6 = NetAddr::CIDR.create('fec0::/64')
358
-
359
- assert_raise(ArgumentError) {cidr4.next_subnet(:test => true)}
360
- next4 = cidr4.next_subnet()
361
- next6 = cidr6.next_subnet()
362
- assert_equal('192.168.2.0/24',next4 )
363
- assert_equal('fec0:0000:0000:0001:0000:0000:0000:0000/64',next6 )
364
-
365
- next6 = cidr6.next_subnet(:Short => true)
366
- assert_equal('fec0:0:0:1::/64',next6 )
367
-
368
- next4 = cidr4.next_subnet(:Bitstep => 2)
369
- next6 = cidr6.next_subnet(:Bitstep => 2)
370
- assert_equal('192.168.3.0/24',next4 )
371
- assert_equal('fec0:0000:0000:0002:0000:0000:0000:0000/64',next6 )
372
-
373
- next4 = cidr4.next_subnet(:Objectify => true)
374
- next6 = cidr6.next_subnet(:Objectify => true)
375
- assert_equal('192.168.2.0/24',next4.desc )
376
- assert_equal('fec0:0000:0000:0001:0000:0000:0000:0000/64',next6.desc )
377
- end
378
-
379
- def test_nth
380
- cidr4 = NetAddr::CIDR.create('192.168.1.0/24')
381
- cidr6 = NetAddr::CIDR.create('fec0::/126')
382
-
383
- assert_raise(ArgumentError) {cidr4.nth(1, :test => true)}
384
- assert_equal('192.168.1.1',cidr4.nth(1) )
385
- assert_equal('192.168.1.50',cidr4.nth(50) )
386
- assert_kind_of(NetAddr::CIDR,cidr4.nth(1, :Objectify => true) )
387
- assert_raise(NetAddr::BoundaryError){ cidr4.nth(256) }
388
- assert_raise(ArgumentError){ cidr4.nth() }
389
-
390
- assert_equal('fec0:0000:0000:0000:0000:0000:0000:0001',cidr6.nth(1) )
391
- assert_equal('fec0:0000:0000:0000:0000:0000:0000:0003',cidr6.nth(3) )
392
- assert_equal('fec0::1',cidr6.nth(1, :Short => true) )
393
- assert_raise(NetAddr::BoundaryError){ cidr6.nth(10) }
394
-
395
- assert_raise(ArgumentError) { cidr4.nth({}) }
396
- end
397
-
398
- def test_range
399
- cidr4 = NetAddr::CIDR.create('192.168.1.0/24')
400
- cidr6 = NetAddr::CIDR.create('fec0::/64')
401
-
402
- assert_raise(ArgumentError) {cidr4.range(25,0, :test => true)}
403
- range4 = cidr4.range(25,0, :Bitstep => 5)
404
- range4_2 = cidr4.range(250)
405
- range6 = cidr6.range(25,0, :Bitstep => 5, :Short => true)
406
-
407
- assert_equal(6,range4.length)
408
- assert_equal(6,range4_2.length)
409
- assert_equal(6,range6.length)
410
- assert_equal('192.168.1.0',range4[0])
411
- assert_equal('192.168.1.25',range4[5])
412
- assert_equal('fec0::',range6[0])
413
- assert_equal('fec0::19',range6[5])
414
- end
415
-
416
- def test_remainder
417
- cidr4 = NetAddr::CIDR.create('192.168.1.0/24')
418
- cidr4_2 = NetAddr::CIDR.create('192.168.1.64/26')
419
-
420
- assert_raise(ArgumentError) {cidr4.remainder(cidr4_2, :test => true)}
421
- remainder = cidr4.remainder(cidr4_2)
422
-
423
- assert_equal(2,remainder.length)
424
- assert_equal('192.168.1.0/26',remainder[0])
425
-
426
- remainder = cidr4.remainder('192.168.1.64/26', :Objectify => true)
427
- assert_equal('192.168.1.128/25',remainder[1].desc)
428
- end
429
-
430
- def test_resize
431
- cidr4 = NetAddr::CIDR.create('192.168.1.129/24')
432
- cidr6 = NetAddr::CIDR.create('fec0::1/64')
433
-
434
- assert_raise(ArgumentError) {cidr4.resize(23, :test => true)}
435
- new4 = cidr4.resize(23)
436
- new6 = cidr6.resize(63)
437
- assert_equal('192.168.0.0/23',new4.desc )
438
- assert_equal('fec0::/63',new6.desc(:Short => true) )
439
-
440
- cidr4.resize!(25)
441
- cidr6.resize!(67)
442
- assert_equal('192.168.1.0/25',cidr4.desc )
443
- assert_equal('192.168.1.0',cidr4.ip )
444
- assert_equal('fec0:0000:0000:0000:0000:0000:0000:0000/67',cidr6.desc )
445
- end
446
-
447
- def test_set_wildcard_mask
448
- cidr = NetAddr::CIDR.create('10.1.0.0/24')
449
- assert_equal('0.0.0.255', cidr.wildcard_mask(true))
450
- assert_equal('255.255.255.0', cidr.wildcard_mask)
451
-
452
- cidr.set_wildcard_mask('0.7.0.255', true)
453
- assert_equal('0.7.0.255', cidr.wildcard_mask(true))
454
- assert_equal('255.248.255.0', cidr.wildcard_mask())
455
- cidr.set_wildcard_mask('255.248.255.0')
456
- assert_equal('0.7.0.255', cidr.wildcard_mask(true))
457
- assert_equal('255.248.255.0', cidr.wildcard_mask())
458
- cidr.set_wildcard_mask('0.0.0.0')
459
- assert_equal('0.0.0.0', cidr.wildcard_mask)
460
- assert_raise(NetAddr::ValidationError){ cidr.set_wildcard_mask('0000:ffff::ffff') }
461
-
462
- cidr = NetAddr::CIDR.create('fec0::1/64')
463
- assert_equal('0000:0000:0000:0000:ffff:ffff:ffff:ffff', cidr.wildcard_mask(true))
464
- cidr.set_wildcard_mask('0000:ffff::ffff', true)
465
- assert_equal('0000:ffff:0000:0000:0000:0000:0000:ffff', cidr.wildcard_mask(true))
466
- assert_raise(NetAddr::ValidationError){ cidr.set_wildcard_mask('0.7.0.255', true) }
467
- end
468
-
469
- def test_size
470
- cidr4 = NetAddr::CIDR.create('192.168.1.1/24')
471
- cidr6 = NetAddr::CIDR.create('fec0::1/64')
472
-
473
- assert_equal(256,cidr4.size() )
474
- assert_equal(2**64,cidr6.size() )
475
- end
476
-
477
- def test_subnet
478
- cidr4 = NetAddr::CIDR.create('192.168.1.0/24')
479
- cidr6 = NetAddr::CIDR.create('fec0::/64')
480
-
481
- assert_raise(ArgumentError) {cidr4.subnet(:test => true)}
482
- subnet4 = cidr4.subnet(:Bits => 26, :NumSubnets => 4)
483
- subnet6 = cidr6.subnet(:Bits => 66, :NumSubnets => 4)
484
- assert_equal('192.168.1.0/26', subnet4[0])
485
- assert_equal('fec0:0000:0000:0000:0000:0000:0000:0000/66', subnet6[0])
486
-
487
- subnet4 = cidr4.subnet(:Bits => 26, :NumSubnets => 1)
488
- assert_equal('192.168.1.0/26', subnet4[0])
489
- assert_equal('192.168.1.64/26', subnet4[1])
490
- assert_equal('192.168.1.128/25', subnet4[2])
491
-
492
- subnet4 = cidr4.subnet(:Bits => 28, :NumSubnets => 3, :Objectify => true)
493
- assert_equal('192.168.1.0/28', subnet4[0].desc)
494
- assert_equal('192.168.1.16/28', subnet4[1].desc)
495
- assert_equal('192.168.1.32/28', subnet4[2].desc)
496
- assert_equal('192.168.1.48/28', subnet4[3].desc)
497
- assert_equal('192.168.1.64/26', subnet4[4].desc)
498
- assert_equal('192.168.1.128/25', subnet4[5].desc)
499
-
500
- subnet4 = cidr4.subnet(:IPCount => 112)
501
- assert_equal('192.168.1.0/25', subnet4[0])
502
-
503
- subnet4 = cidr4.subnet(:IPCount => 31)
504
- assert_equal('192.168.1.0/27', subnet4[0])
505
- end
506
-
507
- def test_succ
508
- cidr4 = NetAddr::CIDR.create('192.168.1.0/24')
509
- cidr6 = NetAddr::CIDR.create('fec0::/64')
510
- cidr4_2 = NetAddr::CIDR.create('255.255.255.0/24')
511
-
512
- assert_equal('192.168.2.0/24',cidr4.succ.desc)
513
- assert_equal('fec0:0000:0000:0001:0000:0000:0000:0000/64',cidr6.succ.desc )
514
- assert_raise(NetAddr::BoundaryError) {cidr4_2.succ}
515
- end
516
-
517
- def test_to_i
518
- cidr4 = NetAddr::CIDR.create('192.168.1.1/24')
519
-
520
- assert_equal(3232235776,cidr4.to_i )
521
- assert_equal(4294967040,cidr4.to_i(:netmask) )
522
- assert_equal(3232235777,cidr4.to_i(:ip) )
523
- assert_equal(255,cidr4.to_i(:hostmask) )
524
- assert_equal(4294967040,cidr4.to_i(:wildcard_mask) )
525
- end
526
-
527
- def test_unique_local
528
- eui = NetAddr::EUI48.new('abcdef010203')
529
- cidr = NetAddr::CIDR.create('FC00::/7')
530
- assert_kind_of(NetAddr::CIDRv6, NetAddr::CIDRv6.unique_local(eui))
531
- assert(cidr.contains?(NetAddr::CIDRv6.unique_local(eui)) )
532
- end
533
-
534
- def test_wildcard_mask
535
- cidr = NetAddr::CIDR.create('10.1.0.0/24', :WildcardMask => ['0.7.0.255', true])
536
- assert_equal('0.7.0.255', cidr.wildcard_mask(true))
537
- assert_equal('255.248.255.0', cidr.wildcard_mask)
538
- end
539
-
540
- end
541
-
542
-
543
-
544
-