ADDED:
* num-addrs subcommand, to get the number of hosts/addresses in a given
  prefix length
* get-net subcommand, to more easily get a single subnet from either the
  beginning or the end of a prefix. (MUCH FASTER than CIDR-splitting!)
This commit is contained in:
brent saner
2025-04-13 18:25:32 -04:00
parent c05f9c4d47
commit 860ad5842b
16 changed files with 334 additions and 78 deletions

View File

@@ -6,6 +6,7 @@ import (
"fmt"
"io"
"log"
`math/big`
"net"
"net/netip"
"os"
@@ -34,6 +35,7 @@ func main() {
var buf *bytes.Buffer
var res *netsplit.StructuredResults
var numNets uint
var numAddrs *big.Int
var v6Only bool
var noStrict bool
var strictErr error
@@ -84,6 +86,18 @@ func main() {
log.Panicln(err)
}
return
case "num-addrs":
if err = validate.Struct(args.NumAddrs); err != nil {
log.Panicln(err)
}
if args.NumAddrs.Size.PrefixSize > 32 {
args.NumAddrs.Isv6 = true
}
if numAddrs, err = netsplit.NumAddrsIn(args.NumAddrs.Size.PrefixSize, args.NumAddrs.Isv6, args.NumAddrs.InclNetAddr, args.NumAddrs.InclBcastAddr); err != nil {
log.Panicln(err)
}
fmt.Println(numAddrs.String())
return
case "num-nets":
if err = validate.Struct(args.NumNets); err != nil {
log.Panicln(err)
@@ -195,6 +209,18 @@ func main() {
These are all handily-dandily enclosed in a `common` struct type.
*/
switch parser.Active.Name {
case "get-net": // Not a *true* splitter, per se; splitting is required but only for functional reasons.
if err = validate.Struct(args.GetPfx); err != nil {
log.Panicln(err)
}
cmnArgs = args.GetPfx.common
splitter = &netsplit.PrefixGetter{
Pos: args.GetPfx.Position,
PrefixLength: args.GetPfx.Prefix,
BaseSplitter: new(netsplit.BaseSplitter),
}
noStrict = false
strictErr = netsplit.ErrBadNumHosts // dummy
case "split-hosts":
if err = validate.Struct(args.SplitHost); err != nil {
log.Panicln(err)