(ipvec, maskvec vector.Any)
| 91 | } |
| 92 | |
| 93 | func (n *NetworkOf) ipMask(ipvec, maskvec vector.Any) vector.Any { |
| 94 | var nets []netip.Prefix |
| 95 | var errsLen, errsCont []uint32 |
| 96 | for i := range ipvec.Len() { |
| 97 | ip := vector.IPValue(ipvec, i) |
| 98 | mask := vector.IPValue(maskvec, i) |
| 99 | if mask.BitLen() != ip.BitLen() { |
| 100 | errsLen = append(errsLen, i) |
| 101 | continue |
| 102 | } |
| 103 | bits := super.LeadingOnes(mask.AsSlice()) |
| 104 | if netip.PrefixFrom(mask, bits).Masked().Addr() != mask { |
| 105 | errsCont = append(errsCont, i) |
| 106 | continue |
| 107 | } |
| 108 | nets = append(nets, netip.PrefixFrom(ip, bits).Masked()) |
| 109 | } |
| 110 | b := vector.NewCombiner(vector.NewNet(nets)) |
| 111 | m := addressAndMask(n.sctx, ipvec, maskvec) |
| 112 | b.WrappedError(n.sctx, errsLen, "network_of: address and mask have different lengths", m) |
| 113 | b.WrappedError(n.sctx, errsCont, "network_of: mask is non-contiguous", maskvec) |
| 114 | return b.Result() |
| 115 | } |
| 116 | |
| 117 | func (n *NetworkOf) intMask(ipvec, maskvec vector.Any) vector.Any { |
| 118 | var errs []uint32 |
no test coverage detected