ADDED:
* num-nets subcommand' this is MUCH much faster than actually splitting
  if you're trying to figure out how many times a given subnet fits into
  a network.
This commit is contained in:
brent saner
2025-04-06 01:31:51 -04:00
parent 701b598b1c
commit 3c239a4d09
5 changed files with 91 additions and 8 deletions

View File

@@ -33,6 +33,8 @@ func main() {
var remaining *netipx.IPSet
var buf *bytes.Buffer
var res *netsplit.StructuredResults
var numNets uint
var v6Only bool
var noStrict bool
var strictErr error
var reservations map[netip.Prefix]*netsplit.IANAAddrNetResRecord
@@ -79,6 +81,27 @@ func main() {
log.Panicln(err)
}
return
case "num-nets":
if numNets, v6Only, err = netsplit.NumNets(
args.NumNets.Sizes.SubnetSize,
args.NumNets.Sizes.NetworkSize,
); err != nil {
log.Panicln(err)
}
if !args.NumNets.Verbose {
fmt.Printf("%d\n", numNets)
if !args.NumNets.NoV6Check {
fmt.Println(v6Only)
}
} else {
fmt.Printf("Network Size:\t\t\t%d\n", args.NumNets.Sizes.NetworkSize)
fmt.Printf("Subnet Size:\t\t\t%d\n", args.NumNets.Sizes.SubnetSize)
fmt.Printf("Number of Subnets:\t\t%d\n", numNets)
if !args.NumNets.NoV6Check {
fmt.Printf("Subnetting is IPv6-Only:\t%v\n", v6Only)
}
}
return
case "reserved":
if origPfx, err = netip.ParsePrefix(args.Check.Network.Network); err != nil {
log.Panicln(err)
@@ -136,7 +159,12 @@ func main() {
origPfx = *resPfx
}
pfx = netipx.PrefixIPNet(origPfx.Masked())
cmnArgs = args.Parse.common
cmnArgs = common{
commonBase: args.Parse.commonBase,
Network: Net{
Network: res.Original.String(),
},
}
if err = printNets(&origPfx, pfx, nets, remaining, &cmnArgs, res.GetSplitter()); err != nil {
log.Panicln(err)
}
@@ -185,7 +213,7 @@ func main() {
PrefixLength: args.SplitCIDR.Prefix,
BaseSplitter: new(netsplit.BaseSplitter),
}
case "vlsm":
case "split-vlsm":
if err = validate.Struct(args.VLSM); err != nil {
log.Panicln(err)
}