在 PostgreSQL 中,我需要找到一种方法将 IPv6 子网分成两半,即。计算共同构成输入子网的两个 IPv6 地址,如下所示:
"1::/64" should give "1::/65" and "1:0:0:0:8000::/65"
知道怎么做吗?我有这个用于 IPv4 的函数,但它使用的算法不适用于 128 位数字(net_ip 是要拆分的子网地址):
SELECT * INTO STRICT net_old FROM subnet WHERE subnet_i = _subnet_i;
mask := masklen(net_old.net_ip);
nsize := 2^(31 - mask);
_addr_new_1 := set_masklen(net_old.net_ip, mask + 1);
_addr_new_2 := set_masklen(net_old.net_ip, mask + 1) + nsize;