checking in- needs some refinement then done
This commit is contained in:
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user