@@ -273,6 +273,109 @@ function make_ipam_subnet_str(){
273
273
echo " $iss "
274
274
}
275
275
276
+ # # @fn ipv4_to_number()
277
+ # # @brief converts an IPv4 address into the number
278
+ function ipv4_to_number() {
279
+ local ipv4_address=$1
280
+ local octets=
281
+ local oct=
282
+ local number=0
283
+ local n=1
284
+ local k=3
285
+ IFS=' .'
286
+ read -ra octets <<< " $ipv4_address"
287
+
288
+ if [ ${# octets[@]} -ne 4 ]
289
+ then
290
+ echo " 0"
291
+ return 1
292
+ fi
293
+
294
+ while [ $k -ge 0 ]
295
+ do
296
+ oct=${octets[$k]}
297
+ number=` expr $oct \* $n + $number `
298
+ n=` expr 256 \* $n `
299
+ k=` expr $k - 1`
300
+ done
301
+ echo " $number "
302
+ }
303
+
304
+ # # @fn number_to_ipv4()
305
+ # # @brief Converts a number to IPv4 address
306
+ function number_to_ipv4() {
307
+ local number=$1
308
+ local ipv4=
309
+
310
+ oct1n=1
311
+ oct2n=" $(( 256 )) "
312
+ oct3n=" $(( 256 * 256 )) "
313
+ oct4n=" $(( 256 * 256 * 256 )) "
314
+
315
+ oct=" $(( $number / $oct4n )) "
316
+ ipv4=" $oct "
317
+ number=" $(( $number - $oct * $oct4n )) "
318
+
319
+ oct=" $(( $number / $oct3n )) "
320
+ ipv4=" $ipv4 " ." $oct "
321
+ number=" $(( $number - $oct * $oct3n )) "
322
+
323
+ oct=" $(( $number / $oct2n )) "
324
+ ipv4=" $ipv4 " ." $oct "
325
+ number=" $(( $number - $oct * $oct2n )) "
326
+
327
+ oct=" $(( $number / $oct1n )) "
328
+ ipv4=" $ipv4 " ." $oct "
329
+
330
+ echo " $ipv4 "
331
+ }
332
+
333
+ # # @fn split_network_by24()
334
+ # # @brief splits the given network by 24 mask subnets
335
+ function split_network_by24() {
336
+ local net_prefix=$1
337
+
338
+ local net_prefix_len=${net_prefix#* " /" }
339
+ local slash_pos=$(( ${# net_prefix} - ${# net_prefix_len} - 1 ))
340
+ local net_addr=" ${net_prefix: 0: $slash_pos } "
341
+ local net_power=" $(( 32 - $net_prefix_len )) "
342
+
343
+ local net_number=` ipv4_to_number $net_addr `
344
+
345
+ local subnets=
346
+ local subnet24_prefix
347
+
348
+ if [ $net_prefix_len -ge 24 ]
349
+ then
350
+ echo " $net_prefix "
351
+ return 1
352
+ fi
353
+
354
+ if [ $net_number -eq 0 ]
355
+ then
356
+ echo " 0.0.0.0/24"
357
+ return 1
358
+ fi
359
+
360
+ local host_number=" $(( 2 ** $net_power )) "
361
+ local next_net_number=" $(( $net_number + $host_number )) "
362
+ local net24_number=$net_number
363
+ local networks24=
364
+ local net24_addr=
365
+ while [ $net24_number -lt $next_net_number ]
366
+ do
367
+ net24_addr=` number_to_ipv4 $net24_number `
368
+ if [ " $networks24 " = " " ]
369
+ then
370
+ networks24=" $net24_addr /24"
371
+ else
372
+ networks24=" $networks24 $net24_addr /24"
373
+ fi
374
+ net24_number=" $(( $net24_number + 256 )) "
375
+ done
376
+ echo " $networks24 "
377
+ }
378
+
276
379
# # @fn make_random_ipv4_address()
277
380
# # @brief Creates random IPv4 address
278
381
function make_random_ipv4_address(){
0 commit comments