Files
nix-ip-utils/lib/internal.nix
2026-02-20 20:07:52 +00:00

57 lines
1.2 KiB
Nix

{ lib }:
let
inherit (builtins) elemAt genList;
inherit (lib) mod;
in
rec {
# Power of 2 calculation
# pow2 n returns 2^n
pow2 =
n:
if n == 0 then
1
else if n == 1 then
2
else
let
half = n / 2;
halfPow = pow2 half;
in
halfPow * halfPow * (if mod n 2 == 1 then 2 else 1);
# Convert list of 4 octets to 32-bit integer
# [192 168 1 1] -> 3232235777
octetsToInt =
octets:
let
a = elemAt octets 0;
b = elemAt octets 1;
c = elemAt octets 2;
d = elemAt octets 3;
in
a * 16777216 + b * 65536 + c * 256 + d;
# Convert 32-bit integer to list of 4 octets
# 3232235777 -> [192 168 1 1]
intToOctets =
ip:
let
a = ip / 16777216;
remainder1 = mod ip 16777216;
b = remainder1 / 65536;
remainder2 = mod remainder1 65536;
c = remainder2 / 256;
d = mod remainder2 256;
in
[
a
b
c
d
];
# Generate a list of integers from start to end (inclusive)
# More efficient than recursive approach for large ranges
intRange = start: end: if end < start then [ ] else genList (i: start + i) (end - start + 1);
}