checking in- needs some refinement then done

This commit is contained in:
2025-02-09 23:07:25 -05:00
parent 64b669edc3
commit d8469533a7
22 changed files with 1110 additions and 115 deletions

View File

@@ -10,6 +10,7 @@ import (
"net"
"net/netip"
"os"
`sort`
"strings"
"time"
@@ -217,6 +218,11 @@ func printNets(orig *netip.Prefix, origNet *net.IPNet, nets []*netip.Prefix, rem
var masked netip.Prefix
var remPfxs []*netip.Prefix
var invertedMask net.IPMask
var resIdx int
var resPfx netip.Prefix
var resRec *netsplit.IANAAddrNetResRecord
var reservedList []*netip.Prefix
var reserved map[netip.Prefix]*netsplit.IANAAddrNetResRecord
var res *netsplit.StructuredResults
var verb = -1
var fmts []string
@@ -230,9 +236,7 @@ func printNets(orig *netip.Prefix, origNet *net.IPNet, nets []*netip.Prefix, rem
if args == nil {
args = &common{
outputOpts: outputOpts{
Seperator: "\n",
},
Separator: "\n",
}
}
fmts = sectFmts[args.Plain]
@@ -240,9 +244,9 @@ func printNets(orig *netip.Prefix, origNet *net.IPNet, nets []*netip.Prefix, rem
sectSep2 = fmts[1]
// sectSep3 = fmts[2]
if args.outputOpts.Verbose != nil {
if args.Verbose != nil {
verb = 0
for _, i := range args.outputOpts.Verbose {
for _, i := range args.Verbose {
if i {
verb++
}
@@ -269,7 +273,7 @@ func printNets(orig *netip.Prefix, origNet *net.IPNet, nets []*netip.Prefix, rem
verb = -1
}
if args.outputOpts.Fmt == "pretty" {
if args.Fmt == "pretty" {
// "Human"-formatted
// Header
@@ -307,6 +311,73 @@ func printNets(orig *netip.Prefix, origNet *net.IPNet, nets []*netip.Prefix, rem
fmt.Println(sectSep1)
}
// Reservations
if !args.AllowReserved && verb >= 1 {
fmt.Println()
fmt.Println(sectSep1)
fmt.Println("Reserved Subnets in Selection:")
if reserved, err = netsplit.CheckReserved(nets, !args.NoRevRecursive, !args.NoRecursive, !args.NoPrivate); err != nil {
return
}
if reserved == nil || len(reserved) == 0 {
fmt.Println("(No reserved subnets found; good job!)")
} else {
reservedList = make([]*netip.Prefix, len(reserved))
for resPfx, _ = range reserved {
reservedList[resIdx] = &resPfx
resIdx++
}
sort.SliceStable(
reservedList,
func(i, j int) (isLess bool) {
isLess = reservedList[i].String() < reservedList[j].String()
return
},
)
fmt.Println("The following reserved subnets were found to be conflicting with your allocation(s).")
for _, n := range reservedList {
resRec = reserved[*n]
fmt.Printf("\tNetwork: %s\n", n.String())
fmt.Printf("\t\tReservation: %s\n", resRec.Name)
fmt.Println("\t\tAllocations:")
for _, i := range resRec.Networks.Prefixes {
fmt.Printf("\t\t\t%s\n", i.String())
}
if verb >= 2 {
fmt.Println("\t\tReserved By:")
for _, i := range resRec.Spec.References {
fmt.Printf("\t\t\t%s %s\n", i.Type, i.Reference)
}
}
if verb >= 3 {
if resRec.Source != nil && resRec.Source.Evaluated != nil && resRec.Source.Applicable != nil && *resRec.Source.Applicable {
fmt.Printf("\t\tIs Source:\t%v\n", *resRec.Source.Evaluated)
}
if resRec.Dest != nil && resRec.Dest.Evaluated != nil && resRec.Dest.Applicable != nil && *resRec.Dest.Applicable {
fmt.Printf("\t\tIs Destination:\t%v\n", *resRec.Dest.Evaluated)
}
if resRec.Forwardable != nil && resRec.Forwardable.Evaluated != nil && resRec.Forwardable.Applicable != nil && *resRec.Forwardable.Applicable {
fmt.Printf("\t\tIs Forwardable:\t%v\n", *resRec.Forwardable.Evaluated)
}
if resRec.GlobalReach != nil && resRec.GlobalReach.Evaluated != nil && resRec.GlobalReach.Applicable != nil && *resRec.GlobalReach.Applicable {
fmt.Printf("\t\tIs Globally Reachable:\t%v\n", *resRec.GlobalReach.Evaluated)
}
if resRec.ProtoReserved != nil && resRec.ProtoReserved.Evaluated != nil && resRec.ProtoReserved.Applicable != nil && *resRec.ProtoReserved.Applicable {
fmt.Printf("\t\tIs Reserved by Protocol:\t%v\n", *resRec.ProtoReserved.Evaluated)
}
fmt.Printf("\t\tAllocated: %s\n", time.Time(resRec.Allocation).String())
if resRec.Updated != nil {
fmt.Printf("\t\tUpdated: %s\n", time.Time(*resRec.Updated).String())
}
if resRec.Termination != nil {
fmt.Printf("\t\tUpdated: %s\n", time.Time(*resRec.Termination).String())
}
}
}
}
fmt.Println(sectSep1)
}
// Allocations
if verb >= 1 {
fmt.Println()
@@ -319,7 +390,7 @@ func printNets(orig *netip.Prefix, origNet *net.IPNet, nets []*netip.Prefix, rem
}
} else {
for _, n := range nets {
fmt.Print(resFromPfx(n).pretty(verb, 1, args.outputOpts.Seperator, "\t", false, args.Plain))
fmt.Print(resFromPfx(n).pretty(verb, 1, args.Separator, "\t", false, args.Plain))
}
}
if verb >= 1 {
@@ -327,7 +398,7 @@ func printNets(orig *netip.Prefix, origNet *net.IPNet, nets []*netip.Prefix, rem
}
// Remaining
if !args.outputOpts.SuppressRemaining {
if !args.SuppressRemaining {
if verb >= 1 {
fmt.Println()
fmt.Println(sectSep1)
@@ -343,7 +414,7 @@ func printNets(orig *netip.Prefix, origNet *net.IPNet, nets []*netip.Prefix, rem
return
}
for _, n := range remaining.Prefixes() {
fmt.Print(resFromPfx(&n).pretty(verb, 1, args.outputOpts.Seperator, "\t", true, args.Plain))
fmt.Print(resFromPfx(&n).pretty(verb, 1, args.Separator, "\t", true, args.Plain))
}
}
if verb >= 1 {
@@ -355,7 +426,7 @@ func printNets(orig *netip.Prefix, origNet *net.IPNet, nets []*netip.Prefix, rem
if res, err = netsplit.Contain(orig, nets, remaining, splitter); err != nil {
return
}
switch strings.ToLower(args.outputOpts.Fmt) {
switch strings.ToLower(args.Fmt) {
case "json":
if b, err = json.MarshalIndent(res, "", " "); err != nil {
return
@@ -400,6 +471,11 @@ func printNets(orig *netip.Prefix, origNet *net.IPNet, nets []*netip.Prefix, rem
return
}
func printReserved(nets []*netip.Prefix, remaining *netipx.IPSet, args *common) (err error) {
return
}
func printSplitErr(e *netsplit.SplitErr) {
if e == nil {