# # Return an array of bytes that correspond to an IPv6 netmask. # The MSB is returned as the first byte. # sub make_netmask { my $mask = shift; return if $mask < 0 or $mask > 128; my @bytes; while ($mask > 0) { my $off = ($mask >= 8) ? 0 : (8 - $mask); push @bytes, (0xff << $off) & 0xff; $mask -= 8; } return @bytes; } sub output { my $mask = shift; my @bytes = make_netmask($mask); print "$mask = ", join(' ', map { sprintf "%02x", $_ } @bytes), "\n"; } # Test some inputs output(0); output(3); output(8); output(9); output(127); output(128); __OUTPUT__ 0 = 3 = e0 8 = ff 9 = ff 80 127 = ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff fe 128 = ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff