netaddr 1.5.1 → 2.0.1

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of netaddr might be problematic. Click here for more details.

@@ -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.
@@ -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
-