MCPcopy Create free account
hub / github.com/brimdata/super / ipMask

Method ipMask

runtime/vam/expr/function/networkof.go:93–115  ·  view source on GitHub ↗
(ipvec, maskvec vector.Any)

Source from the content-addressed store, hash-verified

91}
92
93func (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
117func (n *NetworkOf) intMask(ipvec, maskvec vector.Any) vector.Any {
118 var errs []uint32

Callers 1

CallMethod · 0.95

Calls 9

WrappedErrorMethod · 0.95
ResultMethod · 0.95
IPValueFunction · 0.92
LeadingOnesFunction · 0.92
NewCombinerFunction · 0.92
NewNetFunction · 0.92
AddrMethod · 0.80
addressAndMaskFunction · 0.70
LenMethod · 0.65

Tested by

no test coverage detected