ipadmin 0.1.3.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/README CHANGED
@@ -1,5 +1,5 @@
1
1
 
2
- Copyright (c) 2006 Dustin Spinhirne <dspinhir@yahoo.com>
2
+ Copyright (c) 2006 Dustin Spinhirne <dspinhir at yahoo.com>
3
3
  Licensed under the same terms as Ruby, No Warranty is provided.
4
4
 
5
5
 
@@ -14,178 +14,167 @@
14
14
 
15
15
  =Examples:
16
16
 
17
-
17
+
18
18
  #!/usr/bin/ruby
19
19
 
20
20
  require 'rubygems'
21
21
  require_gem 'ipadmin'
22
22
 
23
- #============================================================================#
24
- # IPAdmin::IPAddr
25
- #============================================================================#
26
- puts "IPAdmin::IPAddr"
27
- print "\n"
28
-
29
- # new
30
- ip4 = IPAdmin::IPAddr.new(:IPAddr => '192.168.1.1/24')
31
- ip4 = IPAdmin::IPAddr.new(:IPAddr => '192.168.1.1',
32
- :Netmask => '255.255.255.0',
33
- :Tag => {'test' => 'ip4 tag'})
34
- ip6 = IPAdmin::IPAddr.new(:IPAddr => 'fec0::1/64')
35
-
36
- # reader/writer
37
- puts "TEST 1"
38
- puts "ip4 tag '#{ip4.tag['test']}'"
39
- ip4.tag['test'] = 'modified ip4 tag'
40
- puts "updated ip4 tag '#{ip4.tag['test']}'"
41
- puts "ip4 version #{ip4.version}"
42
- print "\n"
43
-
44
- # base
45
- puts "TEST 2"
46
- puts "ip4 base addr #{ip4.base()}"
47
- puts "ip6 base addr #{ip6.base()}"
48
- print "\n"
49
-
50
- # broadcast
51
- puts "TEST 3"
52
- puts "ip4 bcast addr #{ip4.broadcast()}"
53
- print "\n"
54
-
55
- # desc
56
- puts "TEST 4"
57
- puts "ip4 description #{ip4.desc()}"
58
- puts "ip6 description #{ip6.desc()}"
59
- print "\n"
60
-
61
- # extended masks
62
- puts "TEST 5"
63
- puts "ip4 extended hostmask #{ip4.hostmask_ext()}"
64
- puts "ip4 extended netmask #{ip4.netmask_ext()}"
65
- print "\n"
66
-
67
- # ip
68
- puts "TEST 6"
69
- puts "ip4 ip addr #{ip4.ip()}"
70
- puts "ip6 ip addr #{ip6.ip()}"
71
- print "\n"
72
-
73
- # netmask
74
- puts "TEST 7"
75
- puts "ip4 netmask in CIDR format #{ip4.netmask()}"
76
- puts "ip6 netmask in CIDR format #{ip6.netmask()}"
77
- print "\n"
78
-
79
- # bits
80
- puts "TEST 8"
81
- puts "ip4 netmask in bits #{ip4.bits()}"
82
- puts "ip6 netmask in bits #{ip6.bits()}"
83
-
84
- print "\n\n\n"
85
- #=====================================#
86
- #
87
- #=====================================#
88
-
89
23
  #============================================================================#
90
24
  # IPAdmin::CIDR
91
25
  #============================================================================#
92
26
  puts "IPAdmin::CIDR"
93
27
  print "\n"
94
-
95
- ip4 = IPAdmin::IPAddr.new(:IPAddr => '192.168.1.1/24')
96
- ip6 = IPAdmin::IPAddr.new(:IPAddr => 'fec0::1/64')
97
28
 
98
29
  # new
99
30
  cidr4 = IPAdmin::CIDR.new(:CIDR => '192.168.1.0/24')
100
- cidr4 = IPAdmin::CIDR.new(:CIDR => '192.168.1.0',
31
+ cidr4 = IPAdmin::CIDR.new(:CIDR => '192.168.1.1',
101
32
  :Netmask => '255.255.255.0',
102
33
  :Tag => {'test' => 'cidr4 tag'})
103
- cidr6 = IPAdmin::CIDR.new(:CIDR => 'fec0::0/64')
34
+ cidr6 = IPAdmin::CIDR.new(:CIDR => 'fec0::1/64')
35
+
36
+ cidr4_2 = IPAdmin::CIDR.new(:CIDR => '192.168.1.0/26')
37
+ cidr6_2 = IPAdmin::CIDR.new(:CIDR => 'fec0::0/96')
104
38
 
105
39
  # reader/writer
106
- puts "TEST 1"
40
+ puts "reader/writer"
107
41
  puts "cidr4 tag '#{cidr4.tag['test']}'"
108
42
  cidr4.tag['test'] = 'modified cidr4 tag'
109
43
  puts "updated cidr4 tag '#{cidr4.tag['test']}'"
110
44
  puts "cidr4 version #{cidr4.version}"
111
45
  print "\n"
112
-
46
+
47
+ # bits
48
+ puts "bits"
49
+ puts "cidr4 netmask in bits #{cidr4.bits()}"
50
+ puts "cidr6 netmask in bits #{cidr6.bits()}"
51
+ print "\n"
52
+
113
53
  # contains
114
- puts "TEST 2"
115
- puts "#{cidr4.desc} contains #{ip4.desc}" if ( cidr4.contains(ip4) )
116
- puts "#{cidr6.desc} contains #{ip6.desc}" if ( cidr6.contains(ip6) )
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) )
117
57
  print "\n"
118
58
 
119
59
  # desc
120
- puts "TEST 3"
60
+ puts "desc"
121
61
  puts "cidr4 description #{cidr4.desc()}"
122
62
  puts "cidr6 description #{cidr6.desc()}"
63
+ puts "cidr6 short-hand description #{cidr6.desc(:Short => 1)}"
64
+ print "\n"
65
+
66
+ # enumerate
67
+ puts "enumerate"
68
+ puts "first 4 cidr4 addresses (bitstep 32)"
69
+ cidr4.enumerate(:Limit => 4, :Bitstep => 32).each {|x| puts " #{x}"}
70
+
71
+ puts "first 4 cidr6 addresses (bitstep 32)"
72
+ cidr6.enumerate(:Limit => 4, :Bitstep => 32, :Objectify => 1).each {|x| puts " #{x.desc}"}
123
73
  print "\n"
124
74
 
125
- # extended masks
126
- puts "TEST 4"
75
+ # hostmask_ext
76
+ puts "hostmask_ext"
127
77
  puts "cidr4 extended hostmask #{cidr4.hostmask_ext()}"
128
- puts "cidr4 extended netmask #{cidr4.netmask_ext()}"
78
+ print "\n"
79
+
80
+ # ip
81
+ puts "ip"
82
+ puts "cidr4 ip #{cidr4.ip()}"
83
+ puts "cidr6 short-hand ip #{cidr6.ip(:Short => 1)}"
84
+ print "\n"
85
+
86
+ # last
87
+ puts "last"
88
+ puts "cidr4 last ip #{cidr4.last()}"
89
+ puts "cidr6 last ip #{cidr6.last(:Short => 1)}"
129
90
  print "\n"
130
91
 
131
92
  # netmask
132
- puts "TEST 5"
93
+ puts "netmask"
133
94
  puts "cidr4 netmask in CIDR format #{cidr4.netmask()}"
134
95
  puts "cidr6 netmask in CIDR format #{cidr6.netmask()}"
135
96
  print "\n"
136
97
 
137
- # bits
138
- puts "TEST 6"
139
- puts "cidr4 netmask in bits #{cidr4.bits()}"
140
- puts "cidr6 netmask in bits #{cidr6.bits()}"
98
+ # netmask_ext
99
+ puts "netmask_ext"
100
+ puts "cidr4 extended netmask #{cidr4.netmask_ext()}"
141
101
  print "\n"
142
102
 
143
103
  # network
144
- puts "TEST 7"
104
+ puts "network"
145
105
  puts "cidr4 network address #{cidr4.network()}"
146
- puts "cidr6 network address #{cidr6.network()}"
106
+ puts "cidr6 network address #{cidr6.network(:Short => 1)}"
107
+ print "\n"
108
+
109
+ # next_ip
110
+ puts "next_ip"
111
+ puts "cidr4 next ip #{cidr4.next_ip()}"
112
+ puts "cidr6 next ip #{cidr6.next_ip(:Short => 1)}"
113
+ print "\n"
114
+
115
+ # next_subnet
116
+ puts "next_subnet"
117
+ puts "cidr4 next subnet #{cidr4.next_subnet()}"
118
+ puts "cidr6 next subnet #{cidr6.next_subnet(:Short => 1)}"
147
119
  print "\n"
148
120
 
149
121
  # nth
150
- puts "TEST 8"
122
+ puts "nth"
151
123
  puts "cidr4 1st ip is #{cidr4.nth(:Index => 1)}"
152
- puts "cidr6 1st ip is #{(cidr6.nth(:Index => 1, :Objectify => 1)).desc}"
124
+ puts "cidr6 1st ip is #{(cidr6.nth(:Index => 1, :Objectify => 1)).base}"
125
+ print "\n"
126
+
127
+ # packed_hostmask
128
+ puts "packed_hostmask"
129
+ puts "cidr4 packed_hostmask is #{cidr4.packed_hostmask.to_s(16)}"
130
+ puts "cidr6 packed_hostmask is #{cidr6.packed_hostmask.to_s(16)}"
131
+ print "\n"
132
+
133
+ # packed_netmask
134
+ puts "packed_netmask"
135
+ puts "cidr4 packed_netmask is #{cidr4.packed_netmask.to_s(16)}"
136
+ puts "cidr6 packed_netmask is #{cidr6.packed_netmask.to_s(16)}"
137
+ print "\n"
138
+
139
+ # packed_network
140
+ puts "packed_network"
141
+ puts "cidr4 packed_network is #{cidr4.packed_network.to_s(16)}"
142
+ puts "cidr6 packed_network is #{cidr6.packed_network.to_s(16)}"
143
+ print "\n"
144
+
145
+ # range
146
+ puts "range"
147
+ cidr4.range(:Indexes => [20,0], :Bitstep => 5).each {|x| puts x}
148
+ cidr6.range(:Indexes => [20,0], :Bitstep => 5).each {|x| puts x}
149
+ print "\n"
150
+
151
+ # remainder
152
+ puts "remainder"
153
+ cidr4_2 = IPAdmin::CIDR.new(:CIDR => '192.168.1.64/26')
154
+ cidr4.remainder(:Exclude => cidr4_2).each {|x| puts x}
155
+ print "\n"
156
+
157
+ # resize!
158
+ puts "resize!"
159
+ cidr4.resize!(:Subnet => 25)
160
+ cidr6.resize!(:Subnet => 65)
161
+ puts "cidr4 resized is #{cidr4.desc}"
162
+ puts "cidr6 resized is #{cidr6.desc}"
153
163
  print "\n"
154
164
 
155
165
  # size
156
- puts "TEST 9"
166
+ puts "size"
157
167
  puts "cidr4 size is #{cidr4.size()}"
158
168
  puts "cidr6 size is #{cidr6.size()}"
159
169
  print "\n"
160
170
 
161
- # enumerate
162
- puts "TEST 10"
163
- puts "first 4 cidr4 addresses (bitstep 32)"
164
- list4 = cidr4.enumerate(:Limit => 4, :Bitstep => 32)
165
- list4.each do |addr|
166
- puts " #{addr}"
167
- end
168
-
169
- puts "first 4 cidr6 addresses (bitstep 32)"
170
- list6 = cidr6.enumerate(:Limit => 4, :Bitstep => 32, :Objectify => 1)
171
- list6.each do |addr|
172
- puts " #{addr.desc}"
173
- end
174
- print "\n"
175
-
176
171
  # subnet
177
- puts "TEST 11"
178
- puts "cidr4 subnetted into at least 3 /28 ranges"
179
- sn4 = cidr4.subnet(:Subnet => 28, :MinCount => 3)
180
- sn4.each do |cidr|
181
- puts " #{cidr.desc()}"
182
- end
172
+ puts "subnet"
173
+ puts "#{cidr4.desc} subnetted into at least 3 /28 ranges"
174
+ cidr4.subnet(:Subnet => 28, :MinCount => 3).each {|x| puts " #{x}"}
183
175
 
184
- puts "cidr6 subnetted into at least 4 /66 ranges"
185
- sn6 = cidr6.subnet(:Subnet => 66, :MinCount => 4)
186
- sn6.each do |cidr|
187
- puts " #{cidr.desc()}"
188
- end
176
+ puts "#{cidr6.desc(:Short => 1)} subnetted into at least 4 /67 ranges"
177
+ cidr6.subnet(:Subnet => 67, :MinCount => 4, :Short => 1).each {|x| puts " #{x}"}
189
178
 
190
179
  print "\n\n\n"
191
180
  #=====================================#
@@ -199,100 +188,44 @@
199
188
  puts "IPAdmin::Tree"
200
189
  print "\n"
201
190
 
202
- cidr4_1 = IPAdmin::CIDR.new(:CIDR => '192.168.1.0/24')
203
- cidr4_2 = IPAdmin::CIDR.new(:CIDR => '192.168.1.0/26')
204
- cidr4_3 = IPAdmin::CIDR.new(:CIDR => '192.168.1.64/26')
205
- cidr4_4 = IPAdmin::CIDR.new(:CIDR => '192.168.1.128/26')
206
- cidr4_5 = IPAdmin::CIDR.new(:CIDR => '192.168.1.192/26')
207
- cidr4_6 = IPAdmin::CIDR.new(:CIDR => '192.168.1.0/27')
208
- cidr4_7 = IPAdmin::CIDR.new(:CIDR => '192.168.1.32/27')
191
+ cidr4 = [IPAdmin::CIDR.new(:CIDR => '192.168.1.0/24'),
192
+ IPAdmin::CIDR.new(:CIDR => '192.168.1.0/26'),
193
+ IPAdmin::CIDR.new(:CIDR => '192.168.1.64/26'),
194
+ IPAdmin::CIDR.new(:CIDR => '192.168.1.128/26'),
195
+ IPAdmin::CIDR.new(:CIDR => '192.168.1.192/26'),
196
+ IPAdmin::CIDR.new(:CIDR => '192.168.1.0/27'),
197
+ IPAdmin::CIDR.new(:CIDR => '192.168.1.0/28'),
198
+ IPAdmin::CIDR.new(:CIDR => '192.168.1.16/28'),
199
+ IPAdmin::CIDR.new(:CIDR => '192.168.1.16/29'),
200
+ IPAdmin::CIDR.new(:CIDR => '192.168.1.32/27')]
209
201
 
210
- cidr6_1 = IPAdmin::CIDR.new(:CIDR => 'fec0::/64')
211
- cidr6_2 = IPAdmin::CIDR.new(:CIDR => 'fec0::/66')
212
- cidr6_3 = IPAdmin::CIDR.new(:CIDR => 'fec0::4000:0:0:0/66')
213
- cidr6_4 = IPAdmin::CIDR.new(:CIDR => 'fec0::8000:0:0:0/66')
214
- cidr6_5 = IPAdmin::CIDR.new(:CIDR => 'fec0::c000:0:0:0/66')
215
- cidr6_6 = IPAdmin::CIDR.new(:CIDR => 'fec0::/67')
216
- cidr6_7 = IPAdmin::CIDR.new(:CIDR => 'fec0::2000:0:0:0/67')
202
+ cidr6 = [IPAdmin::CIDR.new(:CIDR => 'fec0::/64'),
203
+ IPAdmin::CIDR.new(:CIDR => 'fec0::/66'),
204
+ IPAdmin::CIDR.new(:CIDR => 'fec0::4000:0:0:0/66'),
205
+ IPAdmin::CIDR.new(:CIDR => 'fec0::8000:0:0:0/66'),
206
+ IPAdmin::CIDR.new(:CIDR => 'fec0::c000:0:0:0/66'),
207
+ IPAdmin::CIDR.new(:CIDR => 'fec0::c000:0:0:0/67'),
208
+ IPAdmin::CIDR.new(:CIDR => 'fec0::/67'),
209
+ IPAdmin::CIDR.new(:CIDR => 'fec0::2000:0:0:0/67')]
217
210
 
218
211
  # new
219
212
  tree4 = IPAdmin::Tree.new(:Version => 4)
220
213
  tree6 = IPAdmin::Tree.new(:Version => 6)
221
214
 
222
215
  # add
223
- tree4.add(cidr4_1)
224
- tree4.add(cidr4_2)
225
- tree4.add(cidr4_3)
226
- tree4.add(cidr4_4)
227
- tree4.add(cidr4_5)
228
- tree4.add(cidr4_6)
229
- tree4.add(cidr4_7)
230
-
231
- tree6.add(cidr6_1)
232
- tree6.add(cidr6_2)
233
- tree6.add(cidr6_3)
234
- tree6.add(cidr6_4)
235
- tree6.add(cidr6_5)
236
- tree6.add(cidr6_6)
237
- tree6.add(cidr6_7)
238
-
239
- # show
240
- puts "TEST 1"
241
- puts "tree4 is..."
242
- puts tree4.show()
243
- print "\n"
244
- puts "tree6 is..."
245
- puts tree6.show()
246
- print "\n"
247
-
248
- # collapse
249
- puts "TEST 2"
250
- puts "collapsed tree4 is..."
251
- new_tree4 = tree4.collapse()
252
- puts new_tree4.show()
253
- print "\n"
254
- puts "collapsed tree6 is..."
255
- new_tree6 = tree6.collapse()
256
- puts new_tree6.show()
257
- print "\n"
258
-
259
- # find space
260
- puts "TEST 3"
261
- puts "available /27 space"
262
- space = tree4.find_space(:Size => 27)
263
- space.each do |obj|
264
- puts " #{obj.desc}"
216
+ puts "add"
217
+ cidr4.each do |x|
218
+ puts "adding #{x.desc}..."
219
+ tree4.add(x)
265
220
  end
266
- print "\n"
267
- puts "available /67 space"
268
- space = tree6.find_space(:Size => 67)
269
- space.each do |obj|
270
- puts " #{obj.desc}"
221
+ cidr6.each do |x|
222
+ puts "adding #{x.desc}..."
223
+ tree6.add(x)
271
224
  end
272
225
  print "\n"
273
226
 
274
- # remove
275
- puts "TEST 4"
276
- puts "removing #{cidr4_4.desc}"
277
- tree4.remove(cidr4_4)
278
- puts tree4.show()
279
- print "\n"
280
- puts "removing #{cidr6_4.desc}"
281
- tree6.remove(cidr6_4)
282
- puts tree6.show()
283
- print "\n"
284
-
285
- # prune
286
- puts "TEST 5"
287
- puts "pruning #{cidr4_2.desc}"
288
- tree4.prune(cidr4_2)
289
-
290
- puts "pruning #{cidr6_2.desc}"
291
- tree6.prune(cidr6_2)
292
- print "\n"
293
-
294
- # dump
295
- puts "TEST 6"
227
+ # dump
228
+ puts "dump"
296
229
  puts "dumping & printing tree4"
297
230
  dumped = tree4.dump()
298
231
  dumped.each do |val|
@@ -318,6 +251,54 @@
318
251
  puts obj.desc()
319
252
  end
320
253
  end
254
+ print "\n"
255
+
256
+ # find space
257
+ puts "find_space with at least 28 IP's in it"
258
+ puts "available space with at least 28 IPs"
259
+ space = tree4.find_space(:IPCount => 28)
260
+ space.each do |obj|
261
+ puts " #{obj.desc}"
262
+ end
263
+ print "\n"
264
+ puts "available /67 space"
265
+ space = tree6.find_space(:Subnet => 67)
266
+ space.each do |obj|
267
+ puts " #{obj.desc}"
268
+ end
269
+ print "\n"
270
+
271
+ # remove
272
+ puts "remove"
273
+ puts "removing #{cidr4[8].desc}"
274
+ tree4.remove(cidr4[8])
275
+ puts tree4.show()
276
+ print "\n"
277
+ puts "removing #{cidr6[5].desc}"
278
+ tree6.remove(cidr6[5])
279
+ puts tree6.show()
280
+ print "\n"
281
+
282
+ # prune
283
+ puts "prune"
284
+ puts "pruning #{cidr4[4].desc}"
285
+ tree4.prune(cidr4[4])
286
+ puts tree4.show()
287
+ print "\n"
288
+ puts "pruning #{cidr6[1].desc}"
289
+ tree6.prune(cidr6[1])
290
+ puts tree6.show()
291
+ print "\n"
292
+
293
+ # collapse
294
+ puts "collapse"
295
+ puts "collapsed tree4 is..."
296
+ new_tree4 = tree4.collapse()
297
+ puts new_tree4.show()
298
+ print "\n"
299
+ puts "collapsed tree6 is..."
300
+ new_tree6 = tree6.collapse()
301
+ puts new_tree6.show()
321
302
 
322
303
  print "\n\n\n"
323
304
  #=====================================#
@@ -328,27 +309,29 @@
328
309
  # IPAdmin Methods
329
310
  #============================================================================#
330
311
  puts "IPAdmin Methods"
331
-
312
+ print "\n"
313
+
332
314
  # validate ip
333
- puts "TEST 1"
315
+ puts "validate ip"
334
316
  puts "192.168.1.0 is valid" if ( IPAdmin.validate_ipv4_addr('192.168.1.0') )
335
- puts "192.168.1.0 is valid" if ( IPAdmin.validate_ipv6_addr('fec0::0') )
317
+ puts "fec0::0 is valid" if ( IPAdmin.validate_ipv6_addr('fec0::0') )
336
318
  print "\n"
337
319
 
338
320
  # validate netmask
339
- puts "TEST 2"
321
+ puts "validate netmask"
340
322
  puts "255.255.255.0 is valid" if (IPAdmin.validate_ipv4_netmask('255.255.255.0') )
341
323
  puts "/24 is valid" if ( IPAdmin.validate_ipv4_netmask(24) )
342
324
  puts "/64 is valid" if ( IPAdmin.validate_ipv6_netmask(64) )
343
325
 
344
326
  cidr4_1 = IPAdmin::CIDR.new(:CIDR => '192.168.1.0/24')
345
327
  cidr4_2 = IPAdmin::CIDR.new(:CIDR => '192.168.1.0/25')
328
+ cidr4_3 = IPAdmin::CIDR.new(:CIDR => '192.168.1.50')
346
329
  cidr6_1 = IPAdmin::CIDR.new(:CIDR => 'fec0::0/10')
347
330
  cidr6_2 = IPAdmin::CIDR.new(:CIDR => 'fec0::0/64')
348
331
  print "\n"
349
332
 
350
333
  # compare
351
- puts "TEST 3"
334
+ puts "compare"
352
335
  comp1 = IPAdmin.compare(cidr4_1,cidr4_2)
353
336
  comp2 = IPAdmin.compare(cidr6_1,cidr6_2)
354
337
  puts "#{(comp1[0]).desc} is the supernet of #{(comp1[1]).desc}"
@@ -358,31 +341,32 @@
358
341
  cidr4_2 = IPAdmin::CIDR.new(:CIDR => '192.168.0.0/24')
359
342
  cidr6_1 = IPAdmin::CIDR.new(:CIDR => 'fec0::0/128')
360
343
  cidr6_2 = IPAdmin::CIDR.new(:CIDR => 'fec0::1/128')
361
-
362
- ip1 = IPAdmin::IPAddr.new(:IPAddr => '192.168.1.0')
363
- ip2 = IPAdmin::IPAddr.new(:IPAddr => '192.168.1.50')
364
344
  print "\n"
365
345
 
366
346
  # range
367
- puts "TEST 4"
368
- list = IPAdmin.range(:Boundaries => [ip1,ip2], :Bitstep => 20 )
369
- puts "ip's between #{ip1.desc} and #{ip2.desc} (bitstep of 20)"
347
+ puts "range"
348
+ list = IPAdmin.range(:Boundaries => [cidr4_1,cidr4_3], :Bitstep => 20 )
349
+ puts "ip's between #{cidr4_1.base} and #{cidr4_3.base} (bitstep of 20)"
370
350
  list.each do |x|
371
351
  puts " #{x}"
372
352
  end
373
353
  print "\n"
374
354
 
375
355
  # arpa
376
- puts "TEST 5"
356
+ puts "arpa"
377
357
  puts "arpa for #{cidr4_1.desc()} is #{IPAdmin.arpa(cidr4_1)}"
378
358
  puts "arpa for #{cidr6_1.desc()} is #{IPAdmin.arpa(cidr6_1)}"
379
359
  print "\n"
380
360
 
381
361
  # shorten
382
- puts "TEST 6"
362
+ puts "shorten"
383
363
  puts "shorthand notation for #{cidr6_1.network()} is #{IPAdmin.shorten(cidr6_1.network)}"
364
+ print "\n"
365
+
366
+ # unshorten
367
+ puts "unshorten"
368
+ puts "expanded notation for fec0:: is #{IPAdmin.unshorten('fec0::')}"
384
369
 
385
- print "\n\n\n"
386
370
  #=====================================#
387
371
  #
388
372
  #=====================================#