def get_ipv6_range(numeric_netaddr, prefix_len):
    """
    Return the smallest and biggest possible IPv6 address of the specified
    network address (in numeric representation) and prefix length.
    """
    mask_bin_full = 340282366920938463463374607431768211455
    mask_inverted = 128 - prefix_len
    mask_bin = mask_bin_full >> mask_inverted << mask_inverted
    range_start = numeric_netaddr & mask_bin
    range_end = range_start | (1 << mask_inverted) - 1
    return range_start, range_end
