Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

cmd/compile: compiler cannot handle large / complex structs #44155

Closed
mbrancato opened this issue Feb 8, 2021 · 8 comments
Closed

cmd/compile: compiler cannot handle large / complex structs #44155

mbrancato opened this issue Feb 8, 2021 · 8 comments
Labels
FrozenDueToAge NeedsFix The path to resolution is known, but the work has not been done.
Milestone

Comments

@mbrancato
Copy link

What version of Go are you using (go version)?

$ go version
go version go1.15.6 darwin/amd64

Does this issue reproduce with the latest release?

Yes

What operating system and processor architecture are you using (go env)?

go env Output
$ go env
GO111MODULE=""
GOARCH="amd64"
GOBIN=""
GOCACHE="/Users/mike/Library/Caches/go-build"
GOENV="/Users/mike/Library/Application Support/go/env"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOINSECURE=""
GOMODCACHE="/Users/mike/go/pkg/mod"
GONOPROXY=""
GONOSUMDB=""
GOOS="darwin"
GOPATH="/Users/mike/go"
GOPRIVATE=""
GOPROXY="https://proxy.golang.org,direct"
GOROOT="/usr/local/Cellar/go/1.15.6/libexec"
GOSUMDB="sum.golang.org"
GOTMPDIR=""
GOTOOLDIR="/usr/local/Cellar/go/1.15.6/libexec/pkg/tool/darwin_amd64"
GCCGO="gccgo"
AR="ar"
CC="clang"
CXX="clang++"
CGO_ENABLED="1"
GOMOD=""
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/9q/hcffjrls5wd6bsw36jb9v2r40000gn/T/go-build339793224=/tmp/go-build -gno-record-gcc-switches -fno-common"

What did you do?

I wrote script to generate a struct that matched the input/output from an API (EdgeOS). The resulting struct is rather large, the code example below is only a portion. Running go build fails.

What did you expect to see?

I expected go build to complete.

What did you see instead?

./test.go:2458:13: internal compiler error: name too long: *struct { Rip *struct { Interface *string "json:\"interface,omitempty\""; Neighbor *net.IP "json:\"neighbor,omitempty\""; Route *net.IPNet "json:\"route,omitempty\""; Bfd *struct { Neighbor *map[string]struct { FallOver *string "json:\"fall-over,omitempty\"" } "json:\"neighbor,omitempty\""; AllInterfaces *string "json:\"all-interfaces,omitempty\"" } "json:\"bfd,omitempty\"";...

truncated

Thanks to @davecheney who recommended I open a new issue, and not simply tag onto #18920.

Go Playground cannot handle the code for sharing either. Here is a complete example :

Example Code

package main

import (
	"fmt"
	"net"
)

type ConfigProtocols *struct {
	Rip *struct {
		Interface *string    `json:"interface,omitempty"`
		Neighbor  *net.IP    `json:"neighbor,omitempty"`
		Route     *net.IPNet `json:"route,omitempty"`
		Bfd       *struct {
			Neighbor *map[string]struct {
				FallOver *string `json:"fall-over,omitempty"`
			} `json:"neighbor,omitempty"`
			AllInterfaces *string `json:"all-interfaces,omitempty"`
		} `json:"bfd,omitempty"`
		DefaultDistance *int `json:"default-distance,omitempty"`
		Timers          *struct {
			Update            *int `json:"update,omitempty"`
			Timeout           *int `json:"timeout,omitempty"`
			GarbageCollection *int `json:"garbage-collection,omitempty"`
		} `json:"timers,omitempty"`
		Network       *net.IPNet `json:"network,omitempty"`
		DefaultMetric *int       `json:"default-metric,omitempty"`
		Vrf           *map[string]struct {
			Interface *string `json:"interface,omitempty"`
			Bfd       *struct {
				Neighbor *map[string]struct {
					FallOver *string `json:"fall-over,omitempty"`
				} `json:"neighbor,omitempty"`
				AllInterfaces *string `json:"all-interfaces,omitempty"`
			} `json:"bfd,omitempty"`
			DefaultDistance *int       `json:"default-distance,omitempty"`
			Network         *net.IPNet `json:"network,omitempty"`
			DefaultMetric   *int       `json:"default-metric,omitempty"`
			NetworkDistance *map[string]struct {
				Distance   *int    `json:"distance,omitempty"`
				AccessList *string `json:"access-list,omitempty"`
			} `json:"network-distance,omitempty"`
			Redistribute *struct {
				Connected *struct {
					RouteMap *string `json:"route-map,omitempty"`
					Metric   *int    `json:"metric,omitempty"`
				} `json:"connected,omitempty"`
				Static *struct {
					RouteMap *string `json:"route-map,omitempty"`
					Metric   *int    `json:"metric,omitempty"`
				} `json:"static,omitempty"`
				Bgp *struct {
					RouteMap *string `json:"route-map,omitempty"`
					Metric   *int    `json:"metric,omitempty"`
				} `json:"bgp,omitempty"`
				Ospf *struct {
					RouteMap *string `json:"route-map,omitempty"`
					Metric   *int    `json:"metric,omitempty"`
				} `json:"ospf,omitempty"`
			} `json:"redistribute,omitempty"`
			DistributeList *struct {
				Interface *map[string]struct {
					AccessList *struct {
						Out *int `json:"out,omitempty"`
						In  *int `json:"in,omitempty"`
					} `json:"access-list,omitempty"`
					PrefixList *struct {
						Out *string `json:"out,omitempty"`
						In  *string `json:"in,omitempty"`
					} `json:"prefix-list,omitempty"`
				} `json:"interface,omitempty"`
				AccessList *struct {
					Out *int `json:"out,omitempty"`
					In  *int `json:"in,omitempty"`
				} `json:"access-list,omitempty"`
				PrefixList *struct {
					Out *string `json:"out,omitempty"`
					In  *string `json:"in,omitempty"`
				} `json:"prefix-list,omitempty"`
			} `json:"distribute-list,omitempty"`
			DefaultInformation *struct {
				Originate *string `json:"originate,omitempty"`
			} `json:"default-information,omitempty"`
		} `json:".vrf,omitempty"`
		NetworkDistance *map[string]struct {
			Distance   *int    `json:"distance,omitempty"`
			AccessList *string `json:"access-list,omitempty"`
		} `json:"network-distance,omitempty"`
		PassiveInterface *string `json:"passive-interface,omitempty"`
		Redistribute     *struct {
			Connected *struct {
				RouteMap *string `json:"route-map,omitempty"`
				Metric   *int    `json:"metric,omitempty"`
			} `json:"connected,omitempty"`
			Static *struct {
				RouteMap *string `json:"route-map,omitempty"`
				Metric   *int    `json:"metric,omitempty"`
			} `json:"static,omitempty"`
			Bgp *struct {
				RouteMap *string `json:"route-map,omitempty"`
				Metric   *int    `json:"metric,omitempty"`
			} `json:"bgp,omitempty"`
			Kernel *struct {
				RouteMap *string `json:"route-map,omitempty"`
				Metric   *int    `json:"metric,omitempty"`
			} `json:"kernel,omitempty"`
			Ospf *struct {
				RouteMap *string `json:"route-map,omitempty"`
				Metric   *int    `json:"metric,omitempty"`
			} `json:"ospf,omitempty"`
		} `json:"redistribute,omitempty"`
		DistributeList *struct {
			Interface *map[string]struct {
				AccessList *struct {
					Out *int `json:"out,omitempty"`
					In  *int `json:"in,omitempty"`
				} `json:"access-list,omitempty"`
				PrefixList *struct {
					Out *string `json:"out,omitempty"`
					In  *string `json:"in,omitempty"`
				} `json:"prefix-list,omitempty"`
			} `json:"interface,omitempty"`
			AccessList *struct {
				Out *int `json:"out,omitempty"`
				In  *int `json:"in,omitempty"`
			} `json:"access-list,omitempty"`
			PrefixList *struct {
				Out *string `json:"out,omitempty"`
				In  *string `json:"in,omitempty"`
			} `json:"prefix-list,omitempty"`
		} `json:"distribute-list,omitempty"`
		DefaultInformation *struct {
			Originate *string `json:"originate,omitempty"`
		} `json:"default-information,omitempty"`
	} `json:"rip,omitempty"`
	Mpls *struct {
		LspTunneling *struct {
			Interface *map[string]struct {
				InLabel *map[string]struct {
					OutLabel *map[string]struct {
						NetworkFec *net.IPNet `json:"network-fec,omitempty"`
					} `json:"out-label,omitempty"`
				} `json:"in-label,omitempty"`
			} `json:"interface,omitempty"`
		} `json:"lsp-tunneling,omitempty"`
		AcGroup *map[string]struct {
			GroupId *int `json:"group-id,omitempty"`
		} `json:"ac-group,omitempty"`
		LocalPacketHandling *string `json:"local-packet-handling,omitempty"`
		Interface           *map[string]struct {
			MulticastHellos  *string `json:"multicast-hellos,omitempty"`
			KeepaliveTimeout *int    `json:"keepalive-timeout,omitempty"`
			VcMode           *struct {
				Standby   *string `json:"standby,omitempty"`
				Revertive *string `json:"revertive,omitempty"`
			} `json:"vc-mode,omitempty"`
			LdpIgp *struct {
				Sync *struct {
					Ospf *struct {
						HolddownTimer *int `json:"holddown-timer,omitempty"`
					} `json:"ospf,omitempty"`
				} `json:"sync,omitempty"`
				SyncDelay *int `json:"sync-delay,omitempty"`
			} `json:"ldp-igp,omitempty"`
			MaxPduLength       *int `json:"max-pdu-length,omitempty"`
			LabelRetentionMode *struct {
				Liberal      *string `json:"liberal,omitempty"`
				Conservative *string `json:"conservative,omitempty"`
			} `json:"label-retention-mode,omitempty"`
			AdminGroup *string `json:"admin-group,omitempty"`
			L2Circuit  *map[string]struct {
				Hdlc *struct {
					Primary   *string `json:"primary,omitempty"`
					Secondary *string `json:"secondary,omitempty"`
				} `json:".hdlc,omitempty"`
				Ppp *struct {
					Primary   *string `json:"primary,omitempty"`
					Secondary *string `json:"secondary,omitempty"`
				} `json:".ppp,omitempty"`
				Ethernet *struct {
					Primary   *string `json:"primary,omitempty"`
					Secondary *string `json:"secondary,omitempty"`
				} `json:".ethernet,omitempty"`
			} `json:"l2-circuit,omitempty"`
			LabelSwitching    *string `json:"label-switching,omitempty"`
			HoldTime          *int    `json:"hold-time,omitempty"`
			KeepaliveInterval *int    `json:"keepalive-interval,omitempty"`
			AdvertisementMode *struct {
				DownstreamOnDemand    *string `json:"downstream-on-demand,omitempty"`
				DownstreamUnsolicited *string `json:"downstream-unsolicited,omitempty"`
			} `json:"advertisement-mode,omitempty"`
			HelloInterval *int `json:"hello-interval,omitempty"`
		} `json:"interface,omitempty"`
		L2CircuitFibEntry *map[string]struct {
			InLabel *map[string]struct {
				OutLabel *map[string]struct {
					Ipv4 *map[string]struct {
						Int *map[string]struct {
							Int *string `json:"int,omitempty"`
						} `json:"int,omitempty"`
					} `json:"ipv4,omitempty"`
					Ipv6 *map[string]struct {
						Int *map[string]struct {
							Int *string `json:"int,omitempty"`
						} `json:"int,omitempty"`
					} `json:"ipv6,omitempty"`
				} `json:"out-label,omitempty"`
			} `json:"in-label,omitempty"`
		} `json:".l2-circuit-fib-entry,omitempty"`
		EnableAllInterfaces *string `json:"enable-all-interfaces,omitempty"`
		MsPw                *map[string]struct {
			Description *string `json:"description,omitempty"`
		} `json:"ms-pw,omitempty"`
		IngressTtl *int `json:"ingress-ttl,omitempty"`
		TeClass    *map[string]struct {
			Name *map[string]struct {
				Priority *int `json:"priority,omitempty"`
			} `json:"name,omitempty"`
		} `json:"te-class,omitempty"`
		LspModel *struct {
			Pipe *string `json:"pipe,omitempty"`
		} `json:"lsp-model,omitempty"`
		FtnEntry *struct {
			TunnelId *map[string]struct {
				Ip *map[string]struct {
					Mask *map[string]struct {
						OutLabel *map[string]struct {
							Nexthop *map[string]struct {
								Interface *map[string]struct {
									Primary   *string `json:"primary,omitempty"`
									Secondary *string `json:"secondary,omitempty"`
								} `json:"interface,omitempty"`
							} `json:"nexthop,omitempty"`
						} `json:"out-label,omitempty"`
					} `json:"mask,omitempty"`
				} `json:"ip,omitempty"`
				Ipv6mask *map[string]struct {
					OutLabel *map[string]struct {
						Nexthop *map[string]struct {
							Interface *map[string]struct {
								Primary   *string `json:"primary,omitempty"`
								Secondary *string `json:"secondary,omitempty"`
							} `json:"interface,omitempty"`
						} `json:"nexthop,omitempty"`
					} `json:"out-label,omitempty"`
				} `json:"ipv6mask,omitempty"`
				Ipv4mask *map[string]struct {
					OutLabel *map[string]struct {
						Nexthop *map[string]struct {
							Interface *map[string]struct {
								Primary   *string `json:"primary,omitempty"`
								Secondary *string `json:"secondary,omitempty"`
							} `json:"interface,omitempty"`
						} `json:"nexthop,omitempty"`
					} `json:"out-label,omitempty"`
				} `json:"ipv4mask,omitempty"`
			} `json:"tunnel-id,omitempty"`
		} `json:"ftn-entry,omitempty"`
		ClassToExp *map[string]struct {
			Bit *int `json:"bit,omitempty"`
		} `json:"class-to-exp,omitempty"`
		L2Circuit *map[string]struct {
			Ipv4 *map[string]struct {
				Agi *map[string]struct {
					Saii *map[string]struct {
						Taii *map[string]struct {
							Manual    *string `json:"manual,omitempty"`
							Groupname *map[string]struct {
								GroupId *int `json:"group-id,omitempty"`
							} `json:"groupname,omitempty"`
							ControlWord *struct {
								Manual   *string `json:"manual,omitempty"`
								TunnelId *map[string]struct {
									Passive *string `json:"passive,omitempty"`
									Reverse *struct {
										Passive *string `json:"passive,omitempty"`
										Manual  *string `json:"manual,omitempty"`
									} `json:"reverse,omitempty"`
									Manual  *string `json:"manual,omitempty"`
									Forward *struct {
										Passive *string `json:"passive,omitempty"`
										Manual  *string `json:"manual,omitempty"`
									} `json:"forward,omitempty"`
								} `json:"tunnel-id,omitempty"`
							} `json:"control-word,omitempty"`
							TunnelId *map[string]struct {
								Passive *string `json:"passive,omitempty"`
								Reverse *struct {
									Passive *string `json:"passive,omitempty"`
									Manual  *string `json:"manual,omitempty"`
								} `json:"reverse,omitempty"`
								Manual  *string `json:"manual,omitempty"`
								Forward *struct {
									Passive *string `json:"passive,omitempty"`
									Manual  *string `json:"manual,omitempty"`
								} `json:"forward,omitempty"`
							} `json:"tunnel-id,omitempty"`
						} `json:"taii,omitempty"`
					} `json:"saii,omitempty"`
				} `json:"agi,omitempty"`
			} `json:"ipv4,omitempty"`
			Id *map[string]struct {
				Ipv4 *map[string]struct {
					Passive   *string `json:"passive,omitempty"`
					Manual    *string `json:"manual,omitempty"`
					Groupname *map[string]struct {
						ControlWord *struct {
							Manual *string `json:"manual,omitempty"`
						} `json:"control-word,omitempty"`
					} `json:"groupname,omitempty"`
					ControlWord *struct {
						Passive  *string `json:"passive,omitempty"`
						Manual   *string `json:"manual,omitempty"`
						TunnelId *map[string]struct {
							Passive *string `json:"passive,omitempty"`
							Reverse *struct {
								Passive *string `json:"passive,omitempty"`
								Manual  *string `json:"manual,omitempty"`
							} `json:"reverse,omitempty"`
							Manual  *string `json:"manual,omitempty"`
							Forward *struct {
								Passive *string `json:"passive,omitempty"`
								Manual  *string `json:"manual,omitempty"`
							} `json:"forward,omitempty"`
						} `json:"tunnel-id,omitempty"`
					} `json:"control-word,omitempty"`
					TunnelId *map[string]struct {
						Passive *string `json:"passive,omitempty"`
						Reverse *struct {
							Passive *string `json:"passive,omitempty"`
							Manual  *string `json:"manual,omitempty"`
						} `json:"reverse,omitempty"`
						Manual  *string `json:"manual,omitempty"`
						Forward *struct {
							Passive *string `json:"passive,omitempty"`
							Manual  *string `json:"manual,omitempty"`
						} `json:"forward,omitempty"`
					} `json:"tunnel-id,omitempty"`
				} `json:"ipv4,omitempty"`
				Ipv6 *map[string]struct {
					Manual *string `json:"manual,omitempty"`
				} `json:"ipv6,omitempty"`
			} `json:"id,omitempty"`
		} `json:".l2-circuit,omitempty"`
		EgressTtl     *int `json:"egress-ttl,omitempty"`
		MinLabelValue *map[string]struct {
			LabelSpace *int `json:"label-space,omitempty"`
		} `json:"min-label-value,omitempty"`
		AdminGroup *map[string]struct {
			Value *int `json:"value,omitempty"`
		} `json:"admin-group,omitempty"`
		MsPwStitch *map[string]struct {
			Vc1 *map[string]struct {
				Vc2 *map[string]struct {
					Mtu *map[string]struct {
						Ethernet *string `json:"ethernet,omitempty"`
						Vlan     *int    `json:"vlan,omitempty"`
					} `json:"mtu,omitempty"`
				} `json:"vc2,omitempty"`
			} `json:"vc1,omitempty"`
		} `json:"ms-pw-stitch,omitempty"`
		ClassType *map[string]struct {
			Name *string `json:"name,omitempty"`
		} `json:"class-type,omitempty"`
		IlmEntry *map[string]struct {
			Interface *map[string]struct {
				Pop  *string `json:"pop,omitempty"`
				Swap *map[string]struct {
					Interface *map[string]struct {
						Ip *map[string]struct {
							Fec *map[string]struct {
								Mask *net.IP `json:"mask,omitempty"`
							} `json:"fec,omitempty"`
						} `json:"ip,omitempty"`
					} `json:"interface,omitempty"`
				} `json:"swap,omitempty"`
			} `json:"interface,omitempty"`
		} `json:"ilm-entry,omitempty"`
		SupportDiffservClass *string `json:"support-diffserv-class,omitempty"`
		MapRoute             *map[string]struct {
			Fec *net.IPNet `json:"fec,omitempty"`
		} `json:"map-route,omitempty"`
		Rsvp *struct {
			MinLabelValue *map[string]struct {
				LabelSpace *int `json:"label-space,omitempty"`
			} `json:"min-label-value,omitempty"`
			MaxLabelValue *map[string]struct {
				LabelSpace *int `json:"label-space,omitempty"`
			} `json:"max-label-value,omitempty"`
		} `json:"rsvp,omitempty"`
		Ldp *struct {
			MinLabelValue *map[string]struct {
				LabelSpace *int `json:"label-space,omitempty"`
			} `json:"min-label-value,omitempty"`
			MaxLabelValue *map[string]struct {
				LabelSpace *int `json:"label-space,omitempty"`
			} `json:"max-label-value,omitempty"`
		} `json:"ldp,omitempty"`
		Bgp *struct {
			MinLabelValue *map[string]struct {
				LabelSpace *int `json:"label-space,omitempty"`
			} `json:"min-label-value,omitempty"`
			MaxLabelValue *map[string]struct {
				LabelSpace *int `json:"label-space,omitempty"`
			} `json:"max-label-value,omitempty"`
		} `json:"bgp,omitempty"`
		MaxLabelValue *map[string]struct {
			LabelSpace *int `json:"label-space,omitempty"`
		} `json:"max-label-value,omitempty"`
		PropagateTtl         *string `json:"propagate-ttl,omitempty"`
		DisableAllInterfaces *string `json:"disable-all-interfaces,omitempty"`
	} `json:"mpls,omitempty"`
	Bfd *struct {
		Interface *map[string]struct {
			Enable *string `json:"enable,omitempty"`
			Echo   *struct {
				Interval *int `json:"interval,omitempty"`
			} `json:"echo,omitempty"`
			Auth *struct {
				Key  *string `json:"key,omitempty"`
				Type *string `json:"type,omitempty"`
			} `json:"auth,omitempty"`
			Interval *map[string]struct {
				Minrx *map[string]struct {
					Multiplier *int `json:"multiplier,omitempty"`
				} `json:"minrx,omitempty"`
			} `json:"interval,omitempty"`
			Session *struct {
				Source *map[string]struct {
					Dest *map[string]struct {
						Multihop *struct {
							AdminDown  *string `json:"admin-down,omitempty"`
							DemandMode *struct {
								AdminDown     *string `json:"admin-down,omitempty"`
								NonPersistent *struct {
									AdminDown *string `json:"admin-down,omitempty"`
								} `json:"non-persistent,omitempty"`
							} `json:"demand-mode,omitempty"`
						} `json:"multihop,omitempty"`
						AdminDown  *string `json:"admin-down,omitempty"`
						DemandMode *struct {
							AdminDown     *string `json:"admin-down,omitempty"`
							NonPersistent *struct {
								AdminDown *string `json:"admin-down,omitempty"`
							} `json:"non-persistent,omitempty"`
						} `json:"demand-mode,omitempty"`
						NonPersistent *struct {
							AdminDown *string `json:"admin-down,omitempty"`
						} `json:"non-persistent,omitempty"`
					} `json:"dest,omitempty"`
				} `json:"source,omitempty"`
			} `json:"session,omitempty"`
		} `json:"interface,omitempty"`
		Echo         *string `json:"echo,omitempty"`
		Notification *struct {
			Enable *string `json:"enable,omitempty"`
		} `json:"notification,omitempty"`
		SlowTimer *int `json:"slow-timer,omitempty"`
		Gtsm      *struct {
			Enable *string `json:"enable,omitempty"`
			Ttl    *int    `json:"ttl,omitempty"`
		} `json:"gtsm,omitempty"`
		MultihopPeer *map[string]struct {
			Auth *struct {
				Key  *string `json:"key,omitempty"`
				Type *string `json:"type,omitempty"`
			} `json:"auth,omitempty"`
			Interval *map[string]struct {
				Minrx *map[string]struct {
					Multiplier *int `json:"multiplier,omitempty"`
				} `json:"minrx,omitempty"`
			} `json:"interval,omitempty"`
		} `json:"multihop-peer,omitempty"`
	} `json:"bfd,omitempty"`
	Ripng *struct {
		Interface *string    `json:"interface,omitempty"`
		Route     *net.IPNet `json:"route,omitempty"`
		Timers    *struct {
			Update            *int `json:"update,omitempty"`
			Timeout           *int `json:"timeout,omitempty"`
			GarbageCollection *int `json:"garbage-collection,omitempty"`
		} `json:"timers,omitempty"`
		Network          *net.IPNet `json:"network,omitempty"`
		DefaultMetric    *int       `json:"default-metric,omitempty"`
		AggregateAddress *net.IPNet `json:"aggregate-address,omitempty"`
		Vrf              *map[string]struct {
			Interface *string    `json:"interface,omitempty"`
			Route     *net.IPNet `json:"route,omitempty"`
			Timers    *struct {
				Update            *int `json:"update,omitempty"`
				Timeout           *int `json:"timeout,omitempty"`
				GarbageCollection *int `json:"garbage-collection,omitempty"`
			} `json:"timers,omitempty"`
			Network          *net.IPNet `json:"network,omitempty"`
			DefaultMetric    *int       `json:"default-metric,omitempty"`
			AggregateAddress *net.IPNet `json:"aggregate-address,omitempty"`
			PassiveInterface *string    `json:"passive-interface,omitempty"`
			Redistribute     *struct {
				Connected *struct {
					RouteMap *string `json:"route-map,omitempty"`
					Metric   *int    `json:"metric,omitempty"`
				} `json:"connected,omitempty"`
				Static *struct {
					RouteMap *string `json:"route-map,omitempty"`
					Metric   *int    `json:"metric,omitempty"`
				} `json:"static,omitempty"`
				Bgp *struct {
					RouteMap *string `json:"route-map,omitempty"`
					Metric   *int    `json:"metric,omitempty"`
				} `json:"bgp,omitempty"`
				Ospfv3 *struct {
					RouteMap *string `json:"route-map,omitempty"`
					Metric   *int    `json:"metric,omitempty"`
				} `json:"ospfv3,omitempty"`
			} `json:"redistribute,omitempty"`
			DistributeList *struct {
				Interface *map[string]struct {
					AccessList *struct {
						Out *int `json:"out,omitempty"`
						In  *int `json:"in,omitempty"`
					} `json:"access-list,omitempty"`
					PrefixList *struct {
						Out *string `json:"out,omitempty"`
						In  *string `json:"in,omitempty"`
					} `json:"prefix-list,omitempty"`
				} `json:"interface,omitempty"`
				AccessList *struct {
					Out *int `json:"out,omitempty"`
					In  *int `json:"in,omitempty"`
				} `json:"access-list,omitempty"`
				PrefixList *struct {
					Out *string `json:"out,omitempty"`
					In  *string `json:"in,omitempty"`
				} `json:"prefix-list,omitempty"`
			} `json:"distribute-list,omitempty"`
			DefaultInformation *struct {
				Originate *string `json:"originate,omitempty"`
			} `json:"default-information,omitempty"`
		} `json:".vrf,omitempty"`
		PassiveInterface *string `json:"passive-interface,omitempty"`
		Redistribute     *struct {
			Connected *struct {
				RouteMap *string `json:"route-map,omitempty"`
				Metric   *int    `json:"metric,omitempty"`
			} `json:"connected,omitempty"`
			Static *struct {
				RouteMap *string `json:"route-map,omitempty"`
				Metric   *int    `json:"metric,omitempty"`
			} `json:"static,omitempty"`
			Bgp *struct {
				RouteMap *string `json:"route-map,omitempty"`
				Metric   *int    `json:"metric,omitempty"`
			} `json:"bgp,omitempty"`
			Ospfv3 *struct {
				RouteMap *string `json:"route-map,omitempty"`
				Metric   *int    `json:"metric,omitempty"`
			} `json:"ospfv3,omitempty"`
			Kernel *struct {
				RouteMap *string `json:"route-map,omitempty"`
				Metric   *int    `json:"metric,omitempty"`
			} `json:"kernel,omitempty"`
		} `json:"redistribute,omitempty"`
		DistributeList *struct {
			Interface *map[string]struct {
				AccessList *struct {
					Out *int `json:"out,omitempty"`
					In  *int `json:"in,omitempty"`
				} `json:"access-list,omitempty"`
				PrefixList *struct {
					Out *string `json:"out,omitempty"`
					In  *string `json:"in,omitempty"`
				} `json:"prefix-list,omitempty"`
			} `json:"interface,omitempty"`
			AccessList *struct {
				Out *int `json:"out,omitempty"`
				In  *int `json:"in,omitempty"`
			} `json:"access-list,omitempty"`
			PrefixList *struct {
				Out *string `json:"out,omitempty"`
				In  *string `json:"in,omitempty"`
			} `json:"prefix-list,omitempty"`
		} `json:"distribute-list,omitempty"`
		DefaultInformation *struct {
			Originate *string `json:"originate,omitempty"`
		} `json:"default-information,omitempty"`
	} `json:"ripng,omitempty"`
	Vrf *map[string]struct {
		Interface   *string `json:"interface,omitempty"`
		RouterId    *net.IP `json:"router-id,omitempty"`
		RouteTarget *struct {
			Both   *string `json:"both,omitempty"`
			Export *string `json:"export,omitempty"`
			Import *string `json:"import,omitempty"`
		} `json:"route-target,omitempty"`
		Description *string `json:"description,omitempty"`
		Import      *struct {
			Map *string `json:"map,omitempty"`
		} `json:"import,omitempty"`
		Rd *struct {
			Int *string `json:"int,omitempty"`
			Ip  *string `json:"ip,omitempty"`
		} `json:"rd,omitempty"`
	} `json:".vrf,omitempty"`
	Static *struct {
		InterfaceRoute6 *map[string]struct {
			NextHopInterface *map[string]struct {
				Disable     *string `json:"disable,omitempty"`
				Distance    *int    `json:"distance,omitempty"`
				Description *string `json:"description,omitempty"`
			} `json:"next-hop-interface,omitempty"`
		} `json:"interface-route6,omitempty"`
		Route *map[string]struct {
			NextHop *map[string]struct {
				Disable     *string `json:"disable,omitempty"`
				Bfd         *string `json:"bfd,omitempty"`
				Distance    *int    `json:"distance,omitempty"`
				Description *string `json:"description,omitempty"`
			} `json:"next-hop,omitempty"`
			Blackhole *struct {
				Disable     *string `json:"disable,omitempty"`
				Distance    *int    `json:"distance,omitempty"`
				Description *string `json:"description,omitempty"`
			} `json:"blackhole,omitempty"`
		} `json:"route,omitempty"`
		Bfd *struct {
			Interface *map[string]struct {
				Ipv4 *string `json:"ipv4,omitempty"`
				Ipv6 *string `json:"ipv6,omitempty"`
			} `json:"interface,omitempty"`
			AllInterfaces *struct {
				Ipv4 *string `json:"ipv4,omitempty"`
				Ipv6 *string `json:"ipv6,omitempty"`
			} `json:"all-interfaces,omitempty"`
		} `json:"bfd,omitempty"`
		Vrf *map[string]struct {
			InterfaceRoute6 *map[string]struct {
				NextHopInterface *map[string]struct {
					Gw *map[string]struct {
						Disable *string `json:"disable,omitempty"`
					} `json:"gw,omitempty"`
				} `json:"next-hop-interface,omitempty"`
			} `json:"interface-route6,omitempty"`
			Route *map[string]struct {
				NextHop *map[string]struct {
					Disable   *string `json:"disable,omitempty"`
					Interface *string `json:"interface,omitempty"`
				} `json:"next-hop,omitempty"`
				Blackhole *struct {
					Disable   *string `json:"disable,omitempty"`
					Interface *string `json:"interface,omitempty"`
				} `json:"blackhole,omitempty"`
			} `json:"route,omitempty"`
			InterfaceRoute *map[string]struct {
				NextHopInterface *map[string]struct {
					Disable *string `json:"disable,omitempty"`
				} `json:"next-hop-interface,omitempty"`
			} `json:"interface-route,omitempty"`
			Ip *struct {
				Forwarding *string `json:"forwarding,omitempty"`
			} `json:"ip,omitempty"`
			Route6 *map[string]struct {
				NextHop *map[string]struct {
					Disable   *string `json:"disable,omitempty"`
					Interface *string `json:"interface,omitempty"`
				} `json:"next-hop,omitempty"`
			} `json:"route6,omitempty"`
		} `json:".vrf,omitempty"`
		Table *map[string]struct {
			InterfaceRoute6 *map[string]struct {
				NextHopInterface *map[string]struct {
					Disable     *string `json:"disable,omitempty"`
					Distance    *int    `json:"distance,omitempty"`
					Description *string `json:"description,omitempty"`
				} `json:"next-hop-interface,omitempty"`
			} `json:"interface-route6,omitempty"`
			Route *map[string]struct {
				NextHop *map[string]struct {
					Disable     *string `json:"disable,omitempty"`
					Distance    *int    `json:"distance,omitempty"`
					Description *string `json:"description,omitempty"`
				} `json:"next-hop,omitempty"`
				Blackhole *struct {
					Distance    *int    `json:"distance,omitempty"`
					Description *string `json:"description,omitempty"`
				} `json:"blackhole,omitempty"`
			} `json:"route,omitempty"`
			Mark           *int    `json:"mark,omitempty"`
			Description    *string `json:"description,omitempty"`
			InterfaceRoute *map[string]struct {
				NextHopInterface *map[string]struct {
					Disable     *string `json:"disable,omitempty"`
					Distance    *int    `json:"distance,omitempty"`
					Description *string `json:"description,omitempty"`
				} `json:"next-hop-interface,omitempty"`
			} `json:"interface-route,omitempty"`
			Route6 *map[string]struct {
				NextHop *map[string]struct {
					Disable     *string `json:"disable,omitempty"`
					Distance    *int    `json:"distance,omitempty"`
					Description *string `json:"description,omitempty"`
				} `json:"next-hop,omitempty"`
				Blackhole *struct {
					Distance    *int    `json:"distance,omitempty"`
					Description *string `json:"description,omitempty"`
				} `json:"blackhole,omitempty"`
			} `json:"route6,omitempty"`
		} `json:"table,omitempty"`
		InterfaceRoute *map[string]struct {
			NextHopInterface *map[string]struct {
				Disable     *string `json:"disable,omitempty"`
				Distance    *int    `json:"distance,omitempty"`
				Description *string `json:"description,omitempty"`
			} `json:"next-hop-interface,omitempty"`
		} `json:"interface-route,omitempty"`
		Arp *map[string]struct {
			Hwaddr *net.HardwareAddr `json:"hwaddr,omitempty"`
		} `json:"arp,omitempty"`
		Route6 *map[string]struct {
			NextHop *map[string]struct {
				Disable     *string `json:"disable,omitempty"`
				Interface   *string `json:"interface,omitempty"`
				Bfd         *string `json:"bfd,omitempty"`
				Distance    *int    `json:"distance,omitempty"`
				Description *string `json:"description,omitempty"`
			} `json:"next-hop,omitempty"`
			Blackhole *struct {
				Disable     *string `json:"disable,omitempty"`
				Distance    *int    `json:"distance,omitempty"`
				Description *string `json:"description,omitempty"`
			} `json:"blackhole,omitempty"`
		} `json:"route6,omitempty"`
	} `json:"static,omitempty"`
	Rsvp *struct {
		HelloTimeout *int `json:"hello-timeout,omitempty"`
		Interface    *map[string]struct {
			HelloTimeout     *int    `json:"hello-timeout,omitempty"`
			Disable          *string `json:"disable,omitempty"`
			AckWaitTimeout   *int    `json:"ack-wait-timeout,omitempty"`
			MessageAck       *string `json:"message-ack,omitempty"`
			RefreshReduction *string `json:"refresh-reduction,omitempty"`
			RefreshTime      *int    `json:"refresh-time,omitempty"`
			HelloReceipt     *string `json:"hello-receipt,omitempty"`
			KeepMultiplier   *int    `json:"keep-multiplier,omitempty"`
			NonIANAHello     *string `json:"non-IANA-hello,omitempty"`
			HelloInterval    *int    `json:"hello-interval,omitempty"`
		} `json:"interface,omitempty"`
		Neighbor                 *net.IP `json:"neighbor,omitempty"`
		BundleSend               *string `json:"bundle-send,omitempty"`
		ExplicitNull             *string `json:"explicit-null,omitempty"`
		OverrideDiffserv         *string `json:"override-diffserv,omitempty"`
		PreprogramSuggestedLabel *string `json:"preprogram-suggested-label,omitempty"`
		Notification             *string `json:"notification,omitempty"`
		Path                     *map[string]struct {
			Mpls *struct {
				Loose      *net.IP `json:"loose,omitempty"`
				Unnumbered *map[string]struct {
					LinkId *net.IP `json:"link-id,omitempty"`
				} `json:".unnumbered,omitempty"`
				Strict    *net.IP `json:"strict,omitempty"`
				StrictHop *net.IP `json:".strict-hop,omitempty"`
			} `json:"mpls,omitempty"`
			Gmpls *struct {
				StrictHop  *net.IP `json:"strict-hop,omitempty"`
				Unnumbered *map[string]struct {
					LinkId *net.IP `json:"link-id,omitempty"`
				} `json:"unnumbered,omitempty"`
				Strict *net.IP `json:".strict,omitempty"`
				Loose  *net.IP `json:".loose,omitempty"`
			} `json:".gmpls,omitempty"`
		} `json:"path,omitempty"`
		From               *net.IP `json:"from,omitempty"`
		AckWaitTimeout     *int    `json:"ack-wait-timeout,omitempty"`
		RefreshPathParsing *string `json:"refresh-path-parsing,omitempty"`
		Cspf               *string `json:"cspf,omitempty"`
		GracefulRestart    *struct {
			Enable       *string `json:"enable,omitempty"`
			RestartTime  *int    `json:"restart-time,omitempty"`
			RecoveryTime *int    `json:"recovery-time,omitempty"`
		} `json:"graceful-restart,omitempty"`
		RefreshResvParsing *string `json:"refresh-resv-parsing,omitempty"`
		MessageAck         *string `json:"message-ack,omitempty"`
		RefreshReduction   *string `json:"refresh-reduction,omitempty"`
		LocalProtection    *string `json:"local-protection,omitempty"`
		RefreshTime        *int    `json:"refresh-time,omitempty"`
		NoPhp              *string `json:"no-php,omitempty"`
		HelloReceipt       *string `json:"hello-receipt,omitempty"`
		KeepMultiplier     *int    `json:"keep-multiplier,omitempty"`
		LoopDetection      *string `json:"loop-detection,omitempty"`
		HelloInterval      *int    `json:"hello-interval,omitempty"`
		Trunk              *map[string]struct {
			Gmpls *struct {
				ExtTunnelId *net.IP `json:"ext-tunnel-id,omitempty"`
				LspMetric   *struct {
					Relative *int `json:"relative,omitempty"`
					Absolute *int `json:"absolute,omitempty"`
				} `json:"lsp-metric,omitempty"`
				EnableIgpShortcut *string `json:".enable-igp-shortcut,omitempty"`
				Capability        *struct {
					Psc1  *string `json:"psc-1,omitempty"`
					PbbTe *string `json:"pbb-te,omitempty"`
					Psc4  *string `json:"psc-4,omitempty"`
					Psc3  *string `json:"psc-3,omitempty"`
					Psc2  *string `json:"psc-2,omitempty"`
				} `json:"capability,omitempty"`
				From *net.IP `json:"from,omitempty"`
				Gpid *struct {
					Ethernet *string `json:"ethernet,omitempty"`
					Ipv4     *string `json:"ipv4,omitempty"`
				} `json:"gpid,omitempty"`
				RsvpTrunkRestart *string `json:"rsvp-trunk-restart,omitempty"`
				GmplsLabelSet    *struct {
					Range *struct {
						StartRange *map[string]struct {
							EndRange *int `json:"end_range,omitempty"`
						} `json:"start_range,omitempty"`
					} `json:"range,omitempty"`
					Packet *struct {
						Range *struct {
							StartRange *map[string]struct {
								EndRange *int `json:"end_range,omitempty"`
							} `json:"start_range,omitempty"`
						} `json:"range,omitempty"`
					} `json:"packet,omitempty"`
				} `json:"gmpls-label-set,omitempty"`
				Direction *struct {
					Bidirectional  *string `json:"bidirectional,omitempty"`
					Unidirectional *string `json:"unidirectional,omitempty"`
				} `json:"direction,omitempty"`
				UpdateType *struct {
					MakeBeforeBreak *string `json:"make-before-break,omitempty"`
					BreakBeforeMake *string `json:"break-before-make,omitempty"`
				} `json:"update-type,omitempty"`
				DisableIgpShortcut *string `json:".disable-igp-shortcut,omitempty"`
				Primary            *struct {
					Traffic *struct {
						ControlledLoad *string `json:"controlled-load,omitempty"`
						Guaranteed     *string `json:"guaranteed,omitempty"`
					} `json:"traffic,omitempty"`
					Bandwidth         *int    `json:"bandwidth,omitempty"`
					SetupPriority     *int    `json:"setup-priority,omitempty"`
					Record            *string `json:"record,omitempty"`
					IncludeAny        *string `json:"include-any,omitempty"`
					Affinity          *string `json:"affinity,omitempty"`
					ReuseRouteRecord  *string `json:"reuse-route-record,omitempty"`
					ElspPreconfigured *string `json:"elsp-preconfigured,omitempty"`
					Path              *string `json:"path,omitempty"`
					HoldPriority      *int    `json:"hold-priority,omitempty"`
					HopLimit          *int    `json:"hop-limit,omitempty"`
					Cspf              *string `json:"cspf,omitempty"`
					LabelRecord       *string `json:"label-record,omitempty"`
					NoAffinity        *string `json:"no-affinity,omitempty"`
					Protection        *struct {
						Unprotected         *string `json:"unprotected,omitempty"`
						DedicatedOneToOne   *string `json:"dedicated-one-to-one,omitempty"`
						Shared              *string `json:"shared,omitempty"`
						ExtraTraffic        *string `json:"extra-traffic,omitempty"`
						DedicatedOnePlusOne *string `json:"dedicated-one-plus-one,omitempty"`
						Ehanced             *string `json:"ehanced,omitempty"`
					} `json:"protection,omitempty"`
					RetryLimit      *int    `json:"retry-limit,omitempty"`
					CspfRetryTimer  *int    `json:"cspf-retry-timer,omitempty"`
					ClassType       *string `json:"class-type,omitempty"`
					ElspSignaled    *string `json:"elsp-signaled,omitempty"`
					LocalProtection *string `json:"local-protection,omitempty"`
					ClassToExpBit   *map[string]struct {
						Bit *int `json:"bit,omitempty"`
					} `json:"class-to-exp-bit,omitempty"`
					Filter *struct {
						SharedExplicit *string `json:"shared-explicit,omitempty"`
						Fixed          *string `json:"fixed,omitempty"`
					} `json:"filter,omitempty"`
					ExplicitLabel *map[string]struct {
						Reverse *string `json:"reverse,omitempty"`
						Packet  *struct {
							Reverse *string `json:"reverse,omitempty"`
							Forward *string `json:"forward,omitempty"`
						} `json:"packet,omitempty"`
						Forward *string `json:"forward,omitempty"`
					} `json:"explicit-label,omitempty"`
					CspfRetryLimit *int    `json:"cspf-retry-limit,omitempty"`
					ExcludeAny     *string `json:"exclude-any,omitempty"`
					RetryTimer     *int    `json:"retry-timer,omitempty"`
					NoRecord       *string `json:"no-record,omitempty"`
					Llsp           *string `json:"llsp,omitempty"`
				} `json:"primary,omitempty"`
				To        *net.IP `json:"to,omitempty"`
				Secondary *struct {
					Traffic *struct {
						ControlledLoad *string `json:"controlled-load,omitempty"`
						Guaranteed     *string `json:"guaranteed,omitempty"`
					} `json:"traffic,omitempty"`
					Bandwidth         *int    `json:"bandwidth,omitempty"`
					SetupPriority     *int    `json:"setup-priority,omitempty"`
					Record            *string `json:"record,omitempty"`
					IncludeAny        *string `json:"include-any,omitempty"`
					Affinity          *string `json:"affinity,omitempty"`
					ReuseRouteRecord  *string `json:"reuse-route-record,omitempty"`
					ElspPreconfigured *string `json:"elsp-preconfigured,omitempty"`
					Path              *string `json:"path,omitempty"`
					HoldPriority      *int    `json:"hold-priority,omitempty"`
					HopLimit          *int    `json:"hop-limit,omitempty"`
					Cspf              *string `json:"cspf,omitempty"`
					LabelRecord       *string `json:"label-record,omitempty"`
					NoAffinity        *string `json:"no-affinity,omitempty"`
					Protection        *struct {
						Unprotected         *string `json:"unprotected,omitempty"`
						DedicatedOneToOne   *string `json:"dedicated-one-to-one,omitempty"`
						Shared              *string `json:"shared,omitempty"`
						ExtraTraffic        *string `json:"extra-traffic,omitempty"`
						DedicatedOnePlusOne *string `json:"dedicated-one-plus-one,omitempty"`
						Ehanced             *string `json:"ehanced,omitempty"`
					} `json:"protection,omitempty"`
					RetryLimit      *int    `json:"retry-limit,omitempty"`
					CspfRetryTimer  *int    `json:"cspf-retry-timer,omitempty"`
					ClassType       *string `json:"class-type,omitempty"`
					ElspSignaled    *string `json:"elsp-signaled,omitempty"`
					LocalProtection *string `json:"local-protection,omitempty"`
					ClassToExpBit   *map[string]struct {
						Bit *int `json:"bit,omitempty"`
					} `json:"class-to-exp-bit,omitempty"`
					Filter *struct {
						SharedExplicit *string `json:"shared-explicit,omitempty"`
						Fixed          *string `json:"fixed,omitempty"`
					} `json:"filter,omitempty"`
					ExplicitLabel *map[string]struct {
						Reverse *string `json:"reverse,omitempty"`
						Packet  *struct {
							Reverse *string `json:"reverse,omitempty"`
							Forward *string `json:"forward,omitempty"`
						} `json:"packet,omitempty"`
						Forward *string `json:"forward,omitempty"`
					} `json:"explicit-label,omitempty"`
					CspfRetryLimit *int    `json:"cspf-retry-limit,omitempty"`
					ExcludeAny     *string `json:"exclude-any,omitempty"`
					RetryTimer     *int    `json:"retry-timer,omitempty"`
					NoRecord       *string `json:"no-record,omitempty"`
					Llsp           *string `json:"llsp,omitempty"`
				} `json:"secondary,omitempty"`
			} `json:".gmpls,omitempty"`
			Ipv4 *struct {
				ExtTunnelId *net.IP `json:"ext-tunnel-id,omitempty"`
				LspMetric   *struct {
					Relative *int `json:"relative,omitempty"`
					Absolute *int `json:"absolute,omitempty"`
				} `json:"lsp-metric,omitempty"`
				From             *net.IP `json:"from,omitempty"`
				RsvpTrunkRestart *string `json:".rsvp-trunk-restart,omitempty"`
				Capability       *struct {
					Psc1 *string `json:"psc-1,omitempty"`
					Psc4 *string `json:"psc-4,omitempty"`
					Psc3 *string `json:"psc-3,omitempty"`
					Psc2 *string `json:"psc-2,omitempty"`
				} `json:".capability,omitempty"`
				Direction *struct {
					Bidirectional  *string `json:"bidirectional,omitempty"`
					Unidirectional *string `json:"unidirectional,omitempty"`
				} `json:".direction,omitempty"`
				MapRoute *map[string]struct {
					Class *string `json:"class,omitempty"`
				} `json:"map-route,omitempty"`
				UpdateType *string `json:"update-type,omitempty"`
				Primary    *struct {
					Traffic       *string `json:"traffic,omitempty"`
					Bandwidth     *string `json:"bandwidth,omitempty"`
					SetupPriority *int    `json:"setup-priority,omitempty"`
					Record        *string `json:"record,omitempty"`
					IncludeAny    *string `json:"include-any,omitempty"`
					Protection    *struct {
						Unprotected         *string `json:"unprotected,omitempty"`
						DedicatedOneToOne   *string `json:"dedicated-one-to-one,omitempty"`
						Shared              *string `json:"shared,omitempty"`
						ExtraTraffic        *string `json:"extra-traffic,omitempty"`
						DedicatedOnePlusOne *string `json:"dedicated-one-plus-one,omitempty"`
						Ehanced             *string `json:"ehanced,omitempty"`
					} `json:".protection,omitempty"`
					ReuseRouteRecord  *string `json:"reuse-route-record,omitempty"`
					ElspPreconfigured *string `json:"elsp-preconfigured,omitempty"`
					Path              *string `json:"path,omitempty"`
					ExplicitLabel     *map[string]struct {
						Reverse *string `json:"reverse,omitempty"`
						Packet  *struct {
							Reverse *string `json:"reverse,omitempty"`
							Forward *string `json:"forward,omitempty"`
						} `json:"packet,omitempty"`
						Forward *string `json:"forward,omitempty"`
					} `json:".explicit-label,omitempty"`
					ClassToExp *map[string]struct {
						Bit *int `json:"bit,omitempty"`
					} `json:"class-to-exp,omitempty"`
					HoldPriority    *int    `json:"hold-priority,omitempty"`
					HopLimit        *int    `json:"hop-limit,omitempty"`
					Cspf            *string `json:"cspf,omitempty"`
					LabelRecord     *string `json:"label-record,omitempty"`
					NoAffinity      *string `json:"no-affinity,omitempty"`
					RetryLimit      *int    `json:"retry-limit,omitempty"`
					CspfRetryTimer  *int    `json:"cspf-retry-timer,omitempty"`
					ClassType       *string `json:"class-type,omitempty"`
					NoRecord        *string `json:".no-record,omitempty"`
					ElspSignaled    *string `json:"elsp-signaled,omitempty"`
					LocalProtection *string `json:"local-protection,omitempty"`
					Filter          *string `json:"filter,omitempty"`
					CspfRetryLimit  *int    `json:"cspf-retry-limit,omitempty"`
					ExcludeAny      *string `json:"exclude-any,omitempty"`
					RetryTimer      *int    `json:"retry-timer,omitempty"`
					Llsp            *string `json:"llsp,omitempty"`
				} `json:"primary,omitempty"`
				To                *net.IP `json:"to,omitempty"`
				EnableIgpShortcut *string `json:"enable-igp-shortcut,omitempty"`
				Secondary         *struct {
					Traffic       *string `json:"traffic,omitempty"`
					Bandwidth     *string `json:"bandwidth,omitempty"`
					SetupPriority *int    `json:"setup-priority,omitempty"`
					Record        *string `json:"record,omitempty"`
					IncludeAny    *string `json:"include-any,omitempty"`
					Protection    *struct {
						Unprotected         *string `json:"unprotected,omitempty"`
						DedicatedOneToOne   *string `json:"dedicated-one-to-one,omitempty"`
						Shared              *string `json:"shared,omitempty"`
						ExtraTraffic        *string `json:"extra-traffic,omitempty"`
						DedicatedOnePlusOne *string `json:"dedicated-one-plus-one,omitempty"`
						Ehanced             *string `json:"ehanced,omitempty"`
					} `json:".protection,omitempty"`
					ReuseRouteRecord  *string `json:"reuse-route-record,omitempty"`
					ElspPreconfigured *string `json:"elsp-preconfigured,omitempty"`
					Path              *string `json:"path,omitempty"`
					ExplicitLabel     *map[string]struct {
						Reverse *string `json:"reverse,omitempty"`
						Packet  *struct {
							Reverse *string `json:"reverse,omitempty"`
							Forward *string `json:"forward,omitempty"`
						} `json:"packet,omitempty"`
						Forward *string `json:"forward,omitempty"`
					} `json:".explicit-label,omitempty"`
					ClassToExp *map[string]struct {
						Bit *int `json:"bit,omitempty"`
					} `json:"class-to-exp,omitempty"`
					HoldPriority    *int    `json:"hold-priority,omitempty"`
					HopLimit        *int    `json:"hop-limit,omitempty"`
					Cspf            *string `json:"cspf,omitempty"`
					LabelRecord     *string `json:"label-record,omitempty"`
					NoAffinity      *string `json:"no-affinity,omitempty"`
					RetryLimit      *int    `json:"retry-limit,omitempty"`
					CspfRetryTimer  *int    `json:"cspf-retry-timer,omitempty"`
					ClassType       *string `json:"class-type,omitempty"`
					NoRecord        *string `json:".no-record,omitempty"`
					ElspSignaled    *string `json:"elsp-signaled,omitempty"`
					LocalProtection *string `json:"local-protection,omitempty"`
					Filter          *string `json:"filter,omitempty"`
					CspfRetryLimit  *int    `json:"cspf-retry-limit,omitempty"`
					ExcludeAny      *string `json:"exclude-any,omitempty"`
					RetryTimer      *int    `json:"retry-timer,omitempty"`
					Llsp            *string `json:"llsp,omitempty"`
				} `json:"secondary,omitempty"`
				GmplsLabelSet *struct {
					Range *struct {
						StartRange *map[string]struct {
							EndRange *int `json:"end_range,omitempty"`
						} `json:"start_range,omitempty"`
					} `json:"range,omitempty"`
					Packet *struct {
						Range *struct {
							StartRange *map[string]struct {
								EndRange *int `json:"end_range,omitempty"`
							} `json:"start_range,omitempty"`
						} `json:"range,omitempty"`
					} `json:"packet,omitempty"`
				} `json:".gmpls-label-set,omitempty"`
			} `json:"ipv4,omitempty"`
			Ipv6 *struct {
				ExtTunnelId *net.IP `json:"ext-tunnel-id,omitempty"`
				LspMetric   *struct {
					Relative *int `json:"relative,omitempty"`
					Absolute *int `json:"absolute,omitempty"`
				} `json:"lsp-metric,omitempty"`
				From             *net.IP `json:"from,omitempty"`
				Ethernet         *string `json:"ethernet,omitempty"`
				RsvpTrunkRestart *string `json:"rsvp-trunk-restart,omitempty"`
				Capability       *struct {
					Psc1 *string `json:"psc-1,omitempty"`
					Psc4 *string `json:"psc-4,omitempty"`
					Psc3 *string `json:"psc-3,omitempty"`
					Psc2 *string `json:"psc-2,omitempty"`
				} `json:".capability,omitempty"`
				Direction *struct {
					Bidirectional  *string `json:"bidirectional,omitempty"`
					Unidirectional *string `json:"unidirectional,omitempty"`
				} `json:".direction,omitempty"`
				MapRoute *struct {
					Prefix *map[string]struct {
						Mask *map[string]struct {
							Class *string `json:"class,omitempty"`
						} `json:"mask,omitempty"`
					} `json:"prefix,omitempty"`
					Mask *map[string]struct {
						Class *string `json:"class,omitempty"`
					} `json:"mask,omitempty"`
				} `json:"map-route,omitempty"`
				DisableIgpShortcut *string `json:"disable-igp-shortcut,omitempty"`
				UpdateType         *struct {
					MakeBeforeBreak *string `json:"make-before-break,omitempty"`
					BreakBeforeMake *string `json:"break-before-make,omitempty"`
				} `json:"update-type,omitempty"`
				Primary *struct {
					Traffic *struct {
						ControlledLoad *string `json:"controlled-load,omitempty"`
						Guaranteed     *string `json:"guaranteed,omitempty"`
					} `json:"traffic,omitempty"`
					Bandwidth     *int    `json:"bandwidth,omitempty"`
					SetupPriority *int    `json:"setup-priority,omitempty"`
					Record        *string `json:"record,omitempty"`
					IncludeAny    *string `json:"include-any,omitempty"`
					Protection    *struct {
						Unprotected         *string `json:"unprotected,omitempty"`
						DedicatedOneToOne   *string `json:"dedicated-one-to-one,omitempty"`
						Shared              *string `json:"shared,omitempty"`
						ExtraTraffic        *string `json:"extra-traffic,omitempty"`
						DedicatedOnePlusOne *string `json:"dedicated-one-plus-one,omitempty"`
						Ehanced             *string `json:"ehanced,omitempty"`
					} `json:".protection,omitempty"`
					Affinity          *string `json:"affinity,omitempty"`
					ReuseRouteRecord  *string `json:"reuse-route-record,omitempty"`
					ElspPreconfigured *string `json:"elsp-preconfigured,omitempty"`
					Path              *string `json:"path,omitempty"`
					ExplicitLabel     *map[string]struct {
						Reverse *string `json:"reverse,omitempty"`
						Packet  *struct {
							Reverse *string `json:"reverse,omitempty"`
							Forward *string `json:"forward,omitempty"`
						} `json:"packet,omitempty"`
						Forward *string `json:"forward,omitempty"`
					} `json:".explicit-label,omitempty"`
					HoldPriority    *int    `json:"hold-priority,omitempty"`
					HopLimit        *int    `json:"hop-limit,omitempty"`
					Cspf            *string `json:"cspf,omitempty"`
					LabelRecord     *string `json:"label-record,omitempty"`
					RetryLimit      *int    `json:"retry-limit,omitempty"`
					CspfRetryTimer  *int    `json:"cspf-retry-timer,omitempty"`
					ClassType       *string `json:"class-type,omitempty"`
					NoRecord        *string `json:".no-record,omitempty"`
					ElspSignaled    *string `json:"elsp-signaled,omitempty"`
					NoAffinity      *string `json:".no-affinity,omitempty"`
					LocalProtection *string `json:"local-protection,omitempty"`
					ClassToExpBit   *map[string]struct {
						Bit *int `json:"bit,omitempty"`
					} `json:"class-to-exp-bit,omitempty"`
					Filter *struct {
						SharedExplicit *string `json:"shared-explicit,omitempty"`
						Fixed          *string `json:"fixed,omitempty"`
					} `json:"filter,omitempty"`
					CspfRetryLimit *int    `json:"cspf-retry-limit,omitempty"`
					ExcludeAny     *string `json:"exclude-any,omitempty"`
					RetryTimer     *int    `json:"retry-timer,omitempty"`
					Llsp           *string `json:"llsp,omitempty"`
				} `json:"primary,omitempty"`
				To                *net.IP `json:"to,omitempty"`
				EnableIgpShortcut *string `json:"enable-igp-shortcut,omitempty"`
				Secondary         *struct {
					Traffic *struct {
						ControlledLoad *string `json:"controlled-load,omitempty"`
						Guaranteed     *string `json:"guaranteed,omitempty"`
					} `json:"traffic,omitempty"`
					Bandwidth     *int    `json:"bandwidth,omitempty"`
					SetupPriority *int    `json:"setup-priority,omitempty"`
					Record        *string `json:"record,omitempty"`
					IncludeAny    *string `json:"include-any,omitempty"`
					Protection    *struct {
						Unprotected         *string `json:"unprotected,omitempty"`
						DedicatedOneToOne   *string `json:"dedicated-one-to-one,omitempty"`
						Shared              *string `json:"shared,omitempty"`
						ExtraTraffic        *string `json:"extra-traffic,omitempty"`
						DedicatedOnePlusOne *string `json:"dedicated-one-plus-one,omitempty"`
						Ehanced             *string `json:"ehanced,omitempty"`
					} `json:".protection,omitempty"`
					Affinity          *string `json:"affinity,omitempty"`
					ReuseRouteRecord  *string `json:"reuse-route-record,omitempty"`
					ElspPreconfigured *string `json:"elsp-preconfigured,omitempty"`
					Path              *string `json:"path,omitempty"`
					ExplicitLabel     *map[string]struct {
						Reverse *string `json:"reverse,omitempty"`
						Packet  *struct {
							Reverse *string `json:"reverse,omitempty"`
							Forward *string `json:"forward,omitempty"`
						} `json:"packet,omitempty"`
						Forward *string `json:"forward,omitempty"`
					} `json:".explicit-label,omitempty"`
					HoldPriority    *int    `json:"hold-priority,omitempty"`
					HopLimit        *int    `json:"hop-limit,omitempty"`
					Cspf            *string `json:"cspf,omitempty"`
					LabelRecord     *string `json:"label-record,omitempty"`
					RetryLimit      *int    `json:"retry-limit,omitempty"`
					CspfRetryTimer  *int    `json:"cspf-retry-timer,omitempty"`
					ClassType       *string `json:"class-type,omitempty"`
					NoRecord        *string `json:".no-record,omitempty"`
					ElspSignaled    *string `json:"elsp-signaled,omitempty"`
					NoAffinity      *string `json:".no-affinity,omitempty"`
					LocalProtection *string `json:"local-protection,omitempty"`
					ClassToExpBit   *map[string]struct {
						Bit *int `json:"bit,omitempty"`
					} `json:"class-to-exp-bit,omitempty"`
					Filter *struct {
						SharedExplicit *string `json:"shared-explicit,omitempty"`
						Fixed          *string `json:"fixed,omitempty"`
					} `json:"filter,omitempty"`
					CspfRetryLimit *int    `json:"cspf-retry-limit,omitempty"`
					ExcludeAny     *string `json:"exclude-any,omitempty"`
					RetryTimer     *int    `json:"retry-timer,omitempty"`
					Llsp           *string `json:"llsp,omitempty"`
				} `json:"secondary,omitempty"`
				GmplsLabelSet *struct {
					Range *struct {
						StartRange *map[string]struct {
							EndRange *int `json:"end_range,omitempty"`
						} `json:"start_range,omitempty"`
					} `json:"range,omitempty"`
					Packet *struct {
						Range *struct {
							StartRange *map[string]struct {
								EndRange *int `json:"end_range,omitempty"`
							} `json:"start_range,omitempty"`
						} `json:"range,omitempty"`
					} `json:"packet,omitempty"`
				} `json:".gmpls-label-set,omitempty"`
			} `json:".ipv6,omitempty"`
		} `json:"trunk,omitempty"`
	} `json:"rsvp,omitempty"`
	Vpls *struct {
		Interface *map[string]struct {
			VlanInstance *map[string]struct {
				Vlan *map[string]struct {
				} `json:"vlan,omitempty"`
			} `json:"vlan-instance,omitempty"`
			Instance *string `json:"instance,omitempty"`
		} `json:"interface,omitempty"`
		FibEntry *map[string]struct {
			Peer *map[string]struct {
				InLabel *map[string]struct {
					OutInterface *map[string]struct {
						OutLabel *int `json:"out-label,omitempty"`
					} `json:"out-interface,omitempty"`
				} `json:"in-label,omitempty"`
			} `json:"peer,omitempty"`
			SpokeVc *map[string]struct {
				InLabel *map[string]struct {
					OutInterface *map[string]struct {
						OutLabel *int `json:"out-label,omitempty"`
					} `json:"out-interface,omitempty"`
				} `json:"in-label,omitempty"`
			} `json:".spoke-vc,omitempty"`
		} `json:"fib-entry,omitempty"`
		Instance *map[string]struct {
			Id *map[string]struct {
				VplsAcGroup *string `json:"vpls-ac-group,omitempty"`
				VplsPeer    *map[string]struct {
					Manual   *string `json:"manual,omitempty"`
					TunnelId *map[string]struct {
						Reverse *struct {
							Manual *string `json:"manual,omitempty"`
						} `json:"reverse,omitempty"`
						Manual  *string `json:"manual,omitempty"`
						Forward *struct {
							Manual *string `json:"manual,omitempty"`
						} `json:"forward,omitempty"`
					} `json:"tunnel-id,omitempty"`
				} `json:"vpls-peer,omitempty"`
				Learning *struct {
					Disable *string `json:"disable,omitempty"`
					Limit   *int    `json:"limit,omitempty"`
				} `json:"learning,omitempty"`
				VplsVc *map[string]struct {
					Ethernet *string `json:"ethernet,omitempty"`
					Vlan     *string `json:"vlan,omitempty"`
					Normal   *string `json:"normal,omitempty"`
				} `json:"vpls-vc,omitempty"`
				VplsDescription *string `json:"vpls-description,omitempty"`
				Signaling       *struct {
					Ldp *struct {
						VplsPeer *map[string]struct {
							Agi *map[string]struct {
								Saii *map[string]struct {
									Taii *map[string]struct {
										Normal   *string `json:"normal,omitempty"`
										TunnelId *map[string]struct {
											Reverse *string `json:"reverse,omitempty"`
											Normal  *string `json:"normal,omitempty"`
											Forward *string `json:"forward,omitempty"`
										} `json:"tunnel-id,omitempty"`
									} `json:"taii,omitempty"`
								} `json:"saii,omitempty"`
							} `json:"agi,omitempty"`
							TunnelId *map[string]struct {
								Reverse *string `json:"reverse,omitempty"`
								Forward *string `json:"forward,omitempty"`
							} `json:"tunnel-id,omitempty"`
						} `json:"vpls-peer,omitempty"`
					} `json:"ldp,omitempty"`
					Bgp *struct {
						VeRange     *int    `json:"ve-range,omitempty"`
						VeId        *int    `json:"ve-id,omitempty"`
						RouteTarget *string `json:"route-target,omitempty"`
						Rd          *string `json:"rd,omitempty"`
					} `json:"bgp,omitempty"`
				} `json:"signaling,omitempty"`
				VplsType *string `json:"vpls-type,omitempty"`
				VplsMtu  *int    `json:"vpls-mtu,omitempty"`
			} `json:"id,omitempty"`
		} `json:"instance,omitempty"`
	} `json:"vpls,omitempty"`
	Ldp *struct {
		LdpOptimization           *string `json:"ldp-optimization,omitempty"`
		TargetedPeerHelloInterval *int    `json:"targeted-peer-hello-interval,omitempty"`
		Interface                 *map[string]struct {
			Enable *struct {
				Both *string `json:"both,omitempty"`
				Ipv4 *string `json:"ipv4,omitempty"`
				Ipv6 *string `json:"ipv6,omitempty"`
			} `json:"enable,omitempty"`
			KeepaliveTimeout   *int `json:"keepalive-timeout,omitempty"`
			LabelRetentionMode *struct {
				Liberal      *string `json:"liberal,omitempty"`
				Conservative *string `json:"conservative,omitempty"`
			} `json:"label-retention-mode,omitempty"`
			HoldTime          *int `json:"hold-time,omitempty"`
			KeepaliveInterval *int `json:"keepalive-interval,omitempty"`
			AdvertisementMode *struct {
				DownstreamOnDemand    *string `json:"downstream-on-demand,omitempty"`
				DownstreamUnsolicited *string `json:"downstream-unsolicited,omitempty"`
			} `json:"advertisement-mode,omitempty"`
			HelloInterval *int `json:"hello-interval,omitempty"`
		} `json:"interface,omitempty"`
		Neighbor *map[string]struct {
			Auth *struct {
				Md5 *struct {
					Password *map[string]struct {
						Type *int `json:"type,omitempty"`
					} `json:"password,omitempty"`
				} `json:"md5,omitempty"`
			} `json:"auth,omitempty"`
		} `json:"neighbor,omitempty"`
		MulticastHellos *string `json:"multicast-hellos,omitempty"`
		ExplicitNull    *string `json:"explicit-null,omitempty"`
		ImportBgpRoutes *string `json:"import-bgp-routes,omitempty"`
		AdvertiseLabels *struct {
			ForAcl *map[string]struct {
				To *struct {
					Any *string `json:"any,omitempty"`
				} `json:"to,omitempty"`
			} `json:"for-acl,omitempty"`
			For *struct {
				PeerAcl *map[string]struct {
					To *struct {
						PeerAcl *string `json:"peer-acl,omitempty"`
						Any     *string `json:"any,omitempty"`
					} `json:"to,omitempty"`
				} `json:"peer-acl,omitempty"`
				Any *struct {
					To *struct {
						None *string `json:"none,omitempty"`
					} `json:"to,omitempty"`
				} `json:"any,omitempty"`
			} `json:"for,omitempty"`
		} `json:"advertise-labels,omitempty"`
		KeepaliveTimeout *int    `json:"keepalive-timeout,omitempty"`
		PropagateRelease *string `json:"propagate-release,omitempty"`
		TransportAddress *struct {
			Ipv4 *map[string]struct {
				Labelspace *string `json:"labelspace,omitempty"`
			} `json:"ipv4,omitempty"`
			Ipv6 *map[string]struct {
				Labelspace *string `json:"labelspace,omitempty"`
			} `json:".ipv6,omitempty"`
		} `json:"transport-address,omitempty"`
		RouterId    *net.IP `json:"router-id,omitempty"`
		ControlMode *struct {
			Independent *string `json:"independent,omitempty"`
			Ordered     *string `json:"ordered,omitempty"`
		} `json:"control-mode,omitempty"`
		LabelRetentionMode *struct {
			Liberal      *string `json:"liberal,omitempty"`
			Conservative *string `json:"conservative,omitempty"`
		} `json:"label-retention-mode,omitempty"`
		RequestRetryTimeout *int `json:"request-retry-timeout,omitempty"`
		GracefulRestart     *struct {
			Enable  *string `json:"enable,omitempty"`
			Disable *string `json:"disable,omitempty"`
			Timers  *struct {
				MaxRecovery      *int `json:"max-recovery,omitempty"`
				NeighborLiveness *int `json:"neighbor-liveness,omitempty"`
			} `json:"timers,omitempty"`
		} `json:"graceful-restart,omitempty"`
		TargetedPeerHoldTime      *int    `json:"targeted-peer-hold-time,omitempty"`
		LoopDetectionPathVecCount *int    `json:"loop-detection-path-vec-count,omitempty"`
		HoldTime                  *int    `json:"hold-time,omitempty"`
		RequestRetry              *string `json:"request-retry,omitempty"`
		LoopDetection             *string `json:"loop-detection,omitempty"`
		TargetedPeer              *struct {
			Ipv4 *map[string]struct {
			} `json:"ipv4,omitempty"`
			Ipv6 *net.IP `json:".ipv6,omitempty"`
		} `json:"targeted-peer,omitempty"`
		GlobalMergeCapability *struct {
			NonMergeCapable *string `json:"non-merge-capable,omitempty"`
			MergeCapable    *string `json:"merge-capable,omitempty"`
		} `json:"global-merge-capability,omitempty"`
		KeepaliveInterval *int `json:"keepalive-interval,omitempty"`
		AdvertisementMode *struct {
			DownstreamOnDemand    *string `json:"downstream-on-demand,omitempty"`
			DownstreamUnsolicited *string `json:"downstream-unsolicited,omitempty"`
		} `json:"advertisement-mode,omitempty"`
		LoopDetectionHopCount *int    `json:"loop-detection-hop-count,omitempty"`
		HelloInterval         *int    `json:"hello-interval,omitempty"`
		PwStatusTlv           *string `json:"pw-status-tlv,omitempty"`
	} `json:"ldp,omitempty"`
	IgmpProxy *struct {
		Disable   *string `json:"disable,omitempty"`
		Interface *map[string]struct {
			Whitelist *net.IPNet `json:"whitelist,omitempty"`
			Role      *string    `json:"role,omitempty"`
			AltSubnet *net.IPNet `json:"alt-subnet,omitempty"`
			Threshold *int       `json:"threshold,omitempty"`
		} `json:"interface,omitempty"`
		DisableQuickleave *string `json:"disable-quickleave,omitempty"`
	} `json:"igmp-proxy,omitempty"`
	Bgp *map[string]struct {
		Neighbor *map[string]struct {
			Weight        *int    `json:"weight,omitempty"`
			NoActivate    *string `json:"no-activate,omitempty"`
			EbgpMultihop  *int    `json:"ebgp-multihop,omitempty"`
			Password      *string `json:"password,omitempty"`
			MaximumPrefix *int    `json:"maximum-prefix,omitempty"`
			FilterList    *struct {
				Export *string `json:"export,omitempty"`
				Import *string `json:"import,omitempty"`
			} `json:"filter-list,omitempty"`
			AllowasIn *struct {
				Number *int `json:"number,omitempty"`
			} `json:"allowas-in,omitempty"`
			RouteReflectorClient  *string `json:"route-reflector-client,omitempty"`
			OverrideCapability    *string `json:"override-capability,omitempty"`
			Shutdown              *string `json:"shutdown,omitempty"`
			StrictCapabilityMatch *string `json:"strict-capability-match,omitempty"`
			DisableSendCommunity  *struct {
				Standard *string `json:"standard,omitempty"`
				Extended *string `json:"extended,omitempty"`
			} `json:"disable-send-community,omitempty"`
			Timers *struct {
				Holdtime  *int `json:"holdtime,omitempty"`
				Keepalive *int `json:"keepalive,omitempty"`
				Connect   *int `json:"connect,omitempty"`
			} `json:"timers,omitempty"`
			DefaultOriginate *struct {
				RouteMap *string `json:"route-map,omitempty"`
			} `json:"default-originate,omitempty"`
			RouteServerClient *string `json:"route-server-client,omitempty"`
			Capability        *struct {
				Dynamic *string `json:"dynamic,omitempty"`
				Orf     *struct {
					PrefixList *struct {
						Both    *string `json:"both,omitempty"`
						Receive *string `json:"receive,omitempty"`
						Send    *string `json:"send,omitempty"`
					} `json:"prefix-list,omitempty"`
				} `json:"orf,omitempty"`
				GracefulRestart *string `json:"graceful-restart,omitempty"`
			} `json:"capability,omitempty"`
			UpdateSource *string `json:"update-source,omitempty"`
			TtlSecurity  *struct {
				Hops *int `json:"hops,omitempty"`
			} `json:"ttl-security,omitempty"`
			UnsuppressMap *string `json:"unsuppress-map,omitempty"`
			FallOver      *struct {
				Bfd *struct {
					Multihop *string `json:"multihop,omitempty"`
				} `json:"bfd,omitempty"`
			} `json:"fall-over,omitempty"`
			Passive       *string `json:"passive,omitempty"`
			AddressFamily *struct {
				Ipv6Unicast *struct {
					MaximumPrefix *int `json:"maximum-prefix,omitempty"`
					FilterList    *struct {
						Export *string `json:"export,omitempty"`
						Import *string `json:"import,omitempty"`
					} `json:"filter-list,omitempty"`
					AllowasIn *struct {
						Number *int `json:"number,omitempty"`
					} `json:"allowas-in,omitempty"`
					RouteReflectorClient *string `json:"route-reflector-client,omitempty"`
					NexthopLocal         *struct {
						Unchanged *string `json:"unchanged,omitempty"`
					} `json:"nexthop-local,omitempty"`
					DisableSendCommunity *struct {
						Standard *string `json:"standard,omitempty"`
						Extended *string `json:"extended,omitempty"`
					} `json:"disable-send-community,omitempty"`
					DefaultOriginate *struct {
						RouteMap *string `json:"route-map,omitempty"`
					} `json:"default-originate,omitempty"`
					RouteServerClient *string `json:"route-server-client,omitempty"`
					Capability        *struct {
						Orf *struct {
							PrefixList *struct {
								Receive *string `json:"receive,omitempty"`
								Send    *string `json:"send,omitempty"`
							} `json:"prefix-list,omitempty"`
						} `json:"orf,omitempty"`
						GracefulRestart *string `json:"graceful-restart,omitempty"`
					} `json:"capability,omitempty"`
					UnsuppressMap       *string `json:"unsuppress-map,omitempty"`
					SoftReconfiguration *struct {
						Inbound *string `json:"inbound,omitempty"`
					} `json:"soft-reconfiguration,omitempty"`
					AttributeUnchanged *struct {
						AsPath  *string `json:"as-path,omitempty"`
						NextHop *string `json:"next-hop,omitempty"`
						Med     *string `json:"med,omitempty"`
					} `json:"attribute-unchanged,omitempty"`
					RouteMap *struct {
						Export *string `json:"export,omitempty"`
						Import *string `json:"import,omitempty"`
					} `json:"route-map,omitempty"`
					NexthopSelf     *string `json:"nexthop-self,omitempty"`
					RemovePrivateAs *string `json:"remove-private-as,omitempty"`
					PrefixList      *struct {
						Export *string `json:"export,omitempty"`
						Import *string `json:"import,omitempty"`
					} `json:"prefix-list,omitempty"`
					DistributeList *struct {
						Export *string `json:"export,omitempty"`
						Import *string `json:"import,omitempty"`
					} `json:"distribute-list,omitempty"`
					PeerGroup *string `json:"peer-group,omitempty"`
				} `json:"ipv6-unicast,omitempty"`
			} `json:"address-family,omitempty"`
			Description         *string `json:"description,omitempty"`
			SoftReconfiguration *struct {
				Inbound *string `json:"inbound,omitempty"`
			} `json:"soft-reconfiguration,omitempty"`
			LocalAs *map[string]struct {
				NoPrepend *string `json:"no-prepend,omitempty"`
			} `json:"local-as,omitempty"`
			AttributeUnchanged *struct {
				AsPath  *string `json:"as-path,omitempty"`
				NextHop *string `json:"next-hop,omitempty"`
				Med     *string `json:"med,omitempty"`
			} `json:"attribute-unchanged,omitempty"`
			RouteMap *struct {
				Export *string `json:"export,omitempty"`
				Import *string `json:"import,omitempty"`
			} `json:"route-map,omitempty"`
			RemoteAs                     *int    `json:"remote-as,omitempty"`
			NexthopSelf                  *string `json:"nexthop-self,omitempty"`
			DisableConnectedCheck        *string `json:"disable-connected-check,omitempty"`
			DisableCapabilityNegotiation *string `json:"disable-capability-negotiation,omitempty"`
			Port                         *int    `json:"port,omitempty"`
			AdvertisementInterval        *int    `json:"advertisement-interval,omitempty"`
			RemovePrivateAs              *string `json:"remove-private-as,omitempty"`
			PrefixList                   *struct {
				Export *string `json:"export,omitempty"`
				Import *string `json:"import,omitempty"`
			} `json:"prefix-list,omitempty"`
			DistributeList *struct {
				Word *map[string]struct {
					Out *string `json:"out,omitempty"`
					In  *string `json:"in,omitempty"`
				} `json:"word,omitempty"`
				Export *int `json:"export,omitempty"`
				Import *int `json:"import,omitempty"`
			} `json:"distribute-list,omitempty"`
			PeerGroup *string `json:"peer-group,omitempty"`
		} `json:"neighbor,omitempty"`
		Timers *struct {
			Holdtime  *int `json:"holdtime,omitempty"`
			Keepalive *int `json:"keepalive,omitempty"`
		} `json:"timers,omitempty"`
		MaximumPaths *struct {
			Ibgp *int `json:"ibgp,omitempty"`
			Ebgp *int `json:"ebgp,omitempty"`
		} `json:"maximum-paths,omitempty"`
		Network *map[string]struct {
			Backdoor *string `json:"backdoor,omitempty"`
			RouteMap *string `json:"route-map,omitempty"`
		} `json:"network,omitempty"`
		AggregateAddress *map[string]struct {
			SummaryOnly *string `json:"summary-only,omitempty"`
			AsSet       *string `json:"as-set,omitempty"`
		} `json:"aggregate-address,omitempty"`
		AddressFamily *struct {
			L2vpn *struct {
				Vpls *struct {
					Neighbor *struct {
						Ipv4 *map[string]struct {
							Activate *string `json:"activate,omitempty"`
						} `json:"ipv4,omitempty"`
						Ipv6 *map[string]struct {
							Activate *string `json:"activate,omitempty"`
						} `json:"ipv6,omitempty"`
						Tag *map[string]struct {
							Activate *string `json:"activate,omitempty"`
						} `json:"tag,omitempty"`
					} `json:"neighbor,omitempty"`
				} `json:"vpls,omitempty"`
			} `json:"l2vpn,omitempty"`
			Ipv4Unicast *struct {
				Vrf *map[string]struct {
					Neighbor *map[string]struct {
						Weight        *int `json:"weight,omitempty"`
						EbgpMultihop  *int `json:"ebgp-multihop,omitempty"`
						MaximumPrefix *int `json:"maximum-prefix,omitempty"`
						FilterList    *struct {
							Export *string `json:"export,omitempty"`
							Import *string `json:"import,omitempty"`
						} `json:"filter-list,omitempty"`
						AllowasIn *struct {
							Number *int `json:"number,omitempty"`
						} `json:"allowas-in,omitempty"`
						RouteReflectorClient *string `json:"route-reflector-client,omitempty"`
						Shutdown             *string `json:"shutdown,omitempty"`
						Timers               *struct {
							Holdtime  *int `json:"holdtime,omitempty"`
							Keepalive *int `json:"keepalive,omitempty"`
							Connect   *int `json:"connect,omitempty"`
						} `json:"timers,omitempty"`
						DefaultOriginate *struct {
							RouteMap *string `json:"route-map,omitempty"`
						} `json:"default-originate,omitempty"`
						Capability *struct {
							Dynamic *string `json:"dynamic,omitempty"`
							Orf     *struct {
								PrefixList *struct {
									Both    *string `json:"both,omitempty"`
									Receive *string `json:"receive,omitempty"`
									Send    *string `json:"send,omitempty"`
								} `json:"prefix-list,omitempty"`
							} `json:"orf,omitempty"`
							GracefulRestart *string `json:"graceful-restart,omitempty"`
						} `json:"capability,omitempty"`
						UpdateSource        *string `json:"update-source,omitempty"`
						UnsuppressMap       *string `json:"unsuppress-map,omitempty"`
						Passive             *string `json:"passive,omitempty"`
						Description         *string `json:"description,omitempty"`
						SoftReconfiguration *struct {
							Inbound *string `json:"inbound,omitempty"`
						} `json:"soft-reconfiguration,omitempty"`
						LocalAs *map[string]struct {
							NoPrepend *string `json:"no-prepend,omitempty"`
						} `json:"local-as,omitempty"`
						AttributeUnchanged *struct {
							AsPath  *string `json:"as-path,omitempty"`
							NextHop *string `json:"next-hop,omitempty"`
							Med     *string `json:"med,omitempty"`
						} `json:"attribute-unchanged,omitempty"`
						RouteMap *struct {
							Export *string `json:"export,omitempty"`
							Import *string `json:"import,omitempty"`
						} `json:"route-map,omitempty"`
						RemoteAs              *int    `json:"remote-as,omitempty"`
						Activate              *string `json:"activate,omitempty"`
						Port                  *int    `json:"port,omitempty"`
						AdvertisementInterval *int    `json:"advertisement-interval,omitempty"`
						RemovePrivateAs       *string `json:"remove-private-as,omitempty"`
						PrefixList            *struct {
							Export *string `json:"export,omitempty"`
							Import *string `json:"import,omitempty"`
						} `json:"prefix-list,omitempty"`
						DistributeList *struct {
							Word *map[string]struct {
								Out *string `json:"out,omitempty"`
								In  *string `json:"in,omitempty"`
							} `json:"word,omitempty"`
						} `json:"distribute-list,omitempty"`
						PeerGroup *string `json:"peer-group,omitempty"`
					} `json:"neighbor,omitempty"`
					Network *map[string]struct {
						RouteMap *string `json:"route-map,omitempty"`
					} `json:"network,omitempty"`
					Parameters *struct {
						Dampening *struct {
							MaxSuppressTime   *int `json:"max-suppress-time,omitempty"`
							StartSuppressTime *int `json:"start-suppress-time,omitempty"`
							ReUse             *int `json:"re-use,omitempty"`
							HalfLife          *int `json:"half-life,omitempty"`
						} `json:"dampening,omitempty"`
						Confederation *struct {
							Identifier *int `json:"identifier,omitempty"`
							Peers      *int `json:"peers,omitempty"`
						} `json:"confederation,omitempty"`
					} `json:"parameters,omitempty"`
					Redistribute *struct {
						Rip *struct {
							RouteMap *string `json:"route-map,omitempty"`
							Metric   *int    `json:"metric,omitempty"`
						} `json:"rip,omitempty"`
						Connected *struct {
							RouteMap *string `json:"route-map,omitempty"`
							Metric   *int    `json:"metric,omitempty"`
						} `json:"connected,omitempty"`
						Static *struct {
							RouteMap *string `json:"route-map,omitempty"`
							Metric   *int    `json:"metric,omitempty"`
						} `json:"static,omitempty"`
						Kernel *struct {
							RouteMap *string `json:"route-map,omitempty"`
							Metric   *int    `json:"metric,omitempty"`
						} `json:"kernel,omitempty"`
						Ospf *struct {
							RouteMap *string `json:"route-map,omitempty"`
							Metric   *int    `json:"metric,omitempty"`
						} `json:"ospf,omitempty"`
					} `json:"redistribute,omitempty"`
					PeerGroup *map[string]struct {
						Weight        *int `json:"weight,omitempty"`
						EbgpMultihop  *int `json:"ebgp-multihop,omitempty"`
						MaximumPrefix *int `json:"maximum-prefix,omitempty"`
						FilterList    *struct {
							Export *string `json:"export,omitempty"`
							Import *string `json:"import,omitempty"`
						} `json:"filter-list,omitempty"`
						AllowasIn *struct {
							Number *int `json:"number,omitempty"`
						} `json:"allowas-in,omitempty"`
						RouteReflectorClient *string `json:"route-reflector-client,omitempty"`
						OverrideCapability   *string `json:"override-capability,omitempty"`
						Shutdown             *string `json:"shutdown,omitempty"`
						DisableSendCommunity *struct {
							Standard *string `json:"standard,omitempty"`
							Extended *string `json:"extended,omitempty"`
						} `json:"disable-send-community,omitempty"`
						DefaultOriginate *struct {
							RouteMap *string `json:"route-map,omitempty"`
						} `json:"default-originate,omitempty"`
						Capability *struct {
							Dynamic *string `json:"dynamic,omitempty"`
							Orf     *struct {
								PrefixList *struct {
									Receive *string `json:"receive,omitempty"`
									Send    *string `json:"send,omitempty"`
								} `json:"prefix-list,omitempty"`
							} `json:"orf,omitempty"`
						} `json:"capability,omitempty"`
						UpdateSource  *string `json:"update-source,omitempty"`
						UnsuppressMap *string `json:"unsuppress-map,omitempty"`
						Passive       *string `json:"passive,omitempty"`
						Timers        *struct {
							Holdtime  *int `json:"holdtime,omitempty"`
							Keepalive *int `json:"keepalive,omitempty"`
						} `json:".timers,omitempty"`
						Description         *string `json:"description,omitempty"`
						SoftReconfiguration *struct {
							Inbound *string `json:"inbound,omitempty"`
						} `json:"soft-reconfiguration,omitempty"`
						LocalAs *map[string]struct {
							NoPrepend *string `json:"no-prepend,omitempty"`
						} `json:"local-as,omitempty"`
						AttributeUnchanged *struct {
							AsPath  *string `json:"as-path,omitempty"`
							NextHop *string `json:"next-hop,omitempty"`
							Med     *string `json:"med,omitempty"`
						} `json:"attribute-unchanged,omitempty"`
						RouteMap *struct {
							Export *string `json:"export,omitempty"`
							Import *string `json:"import,omitempty"`
						} `json:"route-map,omitempty"`
						RemoteAs                     *int    `json:"remote-as,omitempty"`
						DisableConnectedCheck        *string `json:"disable-connected-check,omitempty"`
						DisableCapabilityNegotiation *string `json:"disable-capability-negotiation,omitempty"`
						RemovePrivateAs              *string `json:"remove-private-as,omitempty"`
						PrefixList                   *struct {
							Export *string `json:"export,omitempty"`
							Import *string `json:"import,omitempty"`
						} `json:"prefix-list,omitempty"`
						DistributeList *struct {
							Export *int `json:"export,omitempty"`
							Import *int `json:"import,omitempty"`
						} `json:"distribute-list,omitempty"`
					} `json:"peer-group,omitempty"`
				} `json:"vrf,omitempty"`
			} `json:".ipv4-unicast,omitempty"`
			Ipv6Unicast *struct {
				Network *map[string]struct {
					RouteMap  *string `json:"route-map,omitempty"`
					PathLimit *int    `json:"path-limit,omitempty"`
				} `json:"network,omitempty"`
				AggregateAddress *map[string]struct {
					SummaryOnly *string `json:"summary-only,omitempty"`
				} `json:"aggregate-address,omitempty"`
				Redistribute *struct {
					Connected *struct {
						RouteMap *string `json:"route-map,omitempty"`
						Metric   *int    `json:"metric,omitempty"`
					} `json:"connected,omitempty"`
					Ripng *struct {
						RouteMap *string `json:"route-map,omitempty"`
						Metric   *int    `json:"metric,omitempty"`
					} `json:"ripng,omitempty"`
					Static *struct {
						RouteMap *string `json:"route-map,omitempty"`
						Metric   *int    `json:"metric,omitempty"`
					} `json:"static,omitempty"`
					Ospfv3 *struct {
						RouteMap *string `json:"route-map,omitempty"`
						Metric   *int    `json:"metric,omitempty"`
					} `json:"ospfv3,omitempty"`
					Kernel *struct {
						RouteMap *string `json:"route-map,omitempty"`
						Metric   *int    `json:"metric,omitempty"`
					} `json:"kernel,omitempty"`
				} `json:"redistribute,omitempty"`
			} `json:"ipv6-unicast,omitempty"`
		} `json:"address-family,omitempty"`
		Dampening *struct {
			RouteMap *string `json:"route-map,omitempty"`
			HalfLife *map[string]struct {
				ReuseRoute *map[string]struct {
					SupRoute *map[string]struct {
						Time *map[string]struct {
							HalfTime *int `json:"half-time,omitempty"`
						} `json:"time,omitempty"`
					} `json:"sup-route,omitempty"`
				} `json:"reuse-route,omitempty"`
			} `json:"half-life,omitempty"`
		} `json:"dampening,omitempty"`
		Parameters *struct {
			ClusterId                  *net.IP `json:"cluster-id,omitempty"`
			DisableNetworkImportCheck  *string `json:"disable-network-import-check,omitempty"`
			NoClientToClientReflection *string `json:"no-client-to-client-reflection,omitempty"`
			EnforceFirstAs             *string `json:"enforce-first-as,omitempty"`
			RouterId                   *net.IP `json:"router-id,omitempty"`
			Distance                   *struct {
				Prefix *map[string]struct {
					Distance *int `json:"distance,omitempty"`
				} `json:"prefix,omitempty"`
				Global *struct {
					Internal *int `json:"internal,omitempty"`
					Local    *int `json:"local,omitempty"`
					External *int `json:"external,omitempty"`
				} `json:"global,omitempty"`
			} `json:"distance,omitempty"`
			Default *struct {
				NoIpv4Unicast *string `json:"no-ipv4-unicast,omitempty"`
				LocalPref     *int    `json:"local-pref,omitempty"`
			} `json:"default,omitempty"`
			AlwaysCompareMed *string `json:"always-compare-med,omitempty"`
			GracefulRestart  *struct {
				StalepathTime *int `json:"stalepath-time,omitempty"`
			} `json:"graceful-restart,omitempty"`
			Dampening *struct {
				MaxSuppressTime   *int `json:"max-suppress-time,omitempty"`
				StartSuppressTime *int `json:"start-suppress-time,omitempty"`
				ReUse             *int `json:"re-use,omitempty"`
				HalfLife          *int `json:"half-life,omitempty"`
			} `json:"dampening,omitempty"`
			DeterministicMed *string `json:"deterministic-med,omitempty"`
			Bestpath         *struct {
				AsPath *struct {
					Confed *string `json:"confed,omitempty"`
					Ignore *string `json:"ignore,omitempty"`
				} `json:"as-path,omitempty"`
				CompareRouterid *string `json:"compare-routerid,omitempty"`
				Med             *struct {
					Confed         *string `json:"confed,omitempty"`
					MissingAsWorst *string `json:"missing-as-worst,omitempty"`
				} `json:"med,omitempty"`
			} `json:"bestpath,omitempty"`
			LogNeighborChanges *string `json:"log-neighbor-changes,omitempty"`
			ScanTime           *int    `json:"scan-time,omitempty"`
			Confederation      *struct {
				Identifier *int `json:"identifier,omitempty"`
				Peers      *int `json:"peers,omitempty"`
			} `json:"confederation,omitempty"`
			NoFastExternalFailover *string `json:"no-fast-external-failover,omitempty"`
		} `json:"parameters,omitempty"`
		Redistribute *struct {
			Rip *struct {
				RouteMap *string `json:"route-map,omitempty"`
				Metric   *int    `json:"metric,omitempty"`
			} `json:"rip,omitempty"`
			Connected *struct {
				RouteMap *string `json:"route-map,omitempty"`
				Metric   *int    `json:"metric,omitempty"`
			} `json:"connected,omitempty"`
			Static *struct {
				RouteMap *string `json:"route-map,omitempty"`
				Metric   *int    `json:"metric,omitempty"`
			} `json:"static,omitempty"`
			Kernel *struct {
				RouteMap *string `json:"route-map,omitempty"`
				Metric   *int    `json:"metric,omitempty"`
			} `json:"kernel,omitempty"`
			Ospf *struct {
				RouteMap *string `json:"route-map,omitempty"`
				Metric   *int    `json:"metric,omitempty"`
			} `json:"ospf,omitempty"`
		} `json:"redistribute,omitempty"`
		PeerGroup *map[string]struct {
			Weight        *int    `json:"weight,omitempty"`
			EbgpMultihop  *int    `json:"ebgp-multihop,omitempty"`
			Password      *string `json:"password,omitempty"`
			MaximumPrefix *int    `json:"maximum-prefix,omitempty"`
			FilterList    *struct {
				Export *string `json:"export,omitempty"`
				Import *string `json:"import,omitempty"`
			} `json:"filter-list,omitempty"`
			AllowasIn *struct {
				Number *int `json:"number,omitempty"`
			} `json:"allowas-in,omitempty"`
			RouteReflectorClient *string `json:"route-reflector-client,omitempty"`
			OverrideCapability   *string `json:"override-capability,omitempty"`
			Shutdown             *string `json:"shutdown,omitempty"`
			DisableSendCommunity *struct {
				Standard *string `json:"standard,omitempty"`
				Extended *string `json:"extended,omitempty"`
			} `json:"disable-send-community,omitempty"`
			DefaultOriginate *struct {
				RouteMap *string `json:"route-map,omitempty"`
			} `json:"default-originate,omitempty"`
			RouteServerClient *string `json:"route-server-client,omitempty"`
			Capability        *struct {
				Dynamic *string `json:"dynamic,omitempty"`
				Orf     *struct {
					PrefixList *struct {
						Receive *string `json:"receive,omitempty"`
						Send    *string `json:"send,omitempty"`
					} `json:"prefix-list,omitempty"`
				} `json:"orf,omitempty"`
				GracefulRestart *string `json:"graceful-restart,omitempty"`
			} `json:"capability,omitempty"`
			UpdateSource *string `json:"update-source,omitempty"`
			TtlSecurity  *struct {
				Hops *int `json:"hops,omitempty"`
			} `json:"ttl-security,omitempty"`
			UnsuppressMap *string `json:"unsuppress-map,omitempty"`
			Passive       *string `json:"passive,omitempty"`
			Timers        *struct {
				Holdtime  *int `json:"holdtime,omitempty"`
				Keepalive *int `json:"keepalive,omitempty"`
			} `json:".timers,omitempty"`
			AddressFamily *struct {
				Ipv6Unicast *struct {
					MaximumPrefix *int `json:"maximum-prefix,omitempty"`
					FilterList    *struct {
						Export *string `json:"export,omitempty"`
						Import *string `json:"import,omitempty"`
					} `json:"filter-list,omitempty"`
					AllowasIn *struct {
						Number *int `json:"number,omitempty"`
					} `json:"allowas-in,omitempty"`
					RouteReflectorClient *string `json:"route-reflector-client,omitempty"`
					NexthopLocal         *struct {
						Unchanged *string `json:"unchanged,omitempty"`
					} `json:"nexthop-local,omitempty"`
					DisableSendCommunity *struct {
						Standard *string `json:"standard,omitempty"`
						Extended *string `json:"extended,omitempty"`
					} `json:"disable-send-community,omitempty"`
					DefaultOriginate *struct {
						RouteMap *string `json:"route-map,omitempty"`
					} `json:"default-originate,omitempty"`
					RouteServerClient *string `json:"route-server-client,omitempty"`
					Capability        *struct {
						Orf *struct {
							PrefixList *struct {
								Receive *string `json:"receive,omitempty"`
								Send    *string `json:"send,omitempty"`
							} `json:"prefix-list,omitempty"`
						} `json:"orf,omitempty"`
						GracefulRestart *string `json:"graceful-restart,omitempty"`
					} `json:"capability,omitempty"`
					UnsuppressMap       *string `json:"unsuppress-map,omitempty"`
					SoftReconfiguration *struct {
						Inbound *string `json:"inbound,omitempty"`
					} `json:"soft-reconfiguration,omitempty"`
					AttributeUnchanged *struct {
						AsPath  *string `json:"as-path,omitempty"`
						NextHop *string `json:"next-hop,omitempty"`
						Med     *string `json:"med,omitempty"`
					} `json:"attribute-unchanged,omitempty"`
					RouteMap *struct {
						Export *string `json:"export,omitempty"`
						Import *string `json:"import,omitempty"`
					} `json:"route-map,omitempty"`
					NexthopSelf     *string `json:"nexthop-self,omitempty"`
					RemovePrivateAs *string `json:"remove-private-as,omitempty"`
					PrefixList      *struct {
						Export *string `json:"export,omitempty"`
						Import *string `json:"import,omitempty"`
					} `json:"prefix-list,omitempty"`
					DistributeList *struct {
						Export *string `json:"export,omitempty"`
						Import *string `json:"import,omitempty"`
					} `json:"distribute-list,omitempty"`
				} `json:"ipv6-unicast,omitempty"`
			} `json:"address-family,omitempty"`
			Description         *string `json:"description,omitempty"`
			SoftReconfiguration *struct {
				Inbound *string `json:"inbound,omitempty"`
			} `json:"soft-reconfiguration,omitempty"`
			LocalAs *map[string]struct {
				NoPrepend *string `json:"no-prepend,omitempty"`
			} `json:"local-as,omitempty"`
			AttributeUnchanged *struct {
				AsPath  *string `json:"as-path,omitempty"`
				NextHop *string `json:"next-hop,omitempty"`
				Med     *string `json:"med,omitempty"`
			} `json:"attribute-unchanged,omitempty"`
			RouteMap *struct {
				Export *string `json:"export,omitempty"`
				Import *string `json:"import,omitempty"`
			} `json:"route-map,omitempty"`
			RemoteAs                     *int    `json:"remote-as,omitempty"`
			NexthopSelf                  *string `json:"nexthop-self,omitempty"`
			DisableConnectedCheck        *string `json:"disable-connected-check,omitempty"`
			DisableCapabilityNegotiation *string `json:"disable-capability-negotiation,omitempty"`
			RemovePrivateAs              *string `json:"remove-private-as,omitempty"`
			PrefixList                   *struct {
				Export *string `json:"export,omitempty"`
				Import *string `json:"import,omitempty"`
			} `json:"prefix-list,omitempty"`
			DistributeList *struct {
				Export *int `json:"export,omitempty"`
				Import *int `json:"import,omitempty"`
			} `json:"distribute-list,omitempty"`
		} `json:"peer-group,omitempty"`
	} `json:"bgp,omitempty"`
	Ospfv3 *struct {
		Bfd *struct {
			Interface     *string `json:"interface,omitempty"`
			AllInterfaces *string `json:"all-interfaces,omitempty"`
		} `json:"bfd,omitempty"`
		Area *map[string]struct {
			ExportList *string `json:"export-list,omitempty"`
			Interface  *string `json:"interface,omitempty"`
			FilterList *map[string]struct {
			} `json:".filter-list,omitempty"`
			ImportList *string `json:"import-list,omitempty"`
			AreaType   *struct {
				Stub *struct {
					DefaultCost *int    `json:"default-cost,omitempty"`
					NoSummary   *string `json:"no-summary,omitempty"`
				} `json:"stub,omitempty"`
				Normal *string `json:"normal,omitempty"`
				Nssa   *struct {
					DefaultCost                 *int    `json:"default-cost,omitempty"`
					Translate                   *string `json:"translate,omitempty"`
					NoSummary                   *string `json:"no-summary,omitempty"`
					StabilityInterval           *int    `json:"stability-interval,omitempty"`
					DefaultInformationOriginate *struct {
						RouteMap *string `json:"route-map,omitempty"`
						Metric   *map[string]struct {
							Type *string `json:"type,omitempty"`
						} `json:"metric,omitempty"`
					} `json:"default-information-originate,omitempty"`
					NoRedistribution *string `json:"no-redistribution,omitempty"`
				} `json:"nssa,omitempty"`
			} `json:"area-type,omitempty"`
			VirtualLink *map[string]struct {
				Bfd *string `json:"bfd,omitempty"`
			} `json:"virtual-link,omitempty"`
			Range *map[string]struct {
				NotAdvertise *string `json:"not-advertise,omitempty"`
			} `json:"range,omitempty"`
		} `json:"area,omitempty"`
		Timers *struct {
			SfpExpDelay *struct {
				Min *map[string]struct {
					Max *int `json:"max,omitempty"`
				} `json:"min,omitempty"`
			} `json:"sfp-exp-delay,omitempty"`
		} `json:"timers,omitempty"`
		Capability *struct {
			DbSummaryOpt    *string `json:"db-summary-opt,omitempty"`
			Te              *string `json:"te,omitempty"`
			Cspf            *string `json:"cspf,omitempty"`
			GracefulRestart *string `json:"graceful-restart,omitempty"`
		} `json:"capability,omitempty"`
		DefaultMetric *int `json:"default-metric,omitempty"`
		Distance      *struct {
			Global *int `json:"global,omitempty"`
			Ospfv3 *struct {
				InterArea *int `json:"inter-area,omitempty"`
				External  *int `json:"external,omitempty"`
				IntraArea *int `json:"intra-area,omitempty"`
			} `json:"ospfv3,omitempty"`
		} `json:"distance,omitempty"`
		LogAdjacencyChanges *struct {
			Detail *string `json:"detail,omitempty"`
		} `json:"log-adjacency-changes,omitempty"`
		SummaryAddress *net.IPNet `json:"summary-address,omitempty"`
		Cspf           *struct {
			TieBreak             *string `json:"tie-break,omitempty"`
			DefaultRetryInterval *int    `json:"default-retry-interval,omitempty"`
		} `json:"cspf,omitempty"`
		AutoCost *struct {
			ReferenceBandwidth *int `json:"reference-bandwidth,omitempty"`
		} `json:"auto-cost,omitempty"`
		PassiveInterfaceExclude *string `json:"passive-interface-exclude,omitempty"`
		Vrf                     *map[string]struct {
			Bfd *struct {
				AllInterfaces *string `json:"all-interfaces,omitempty"`
			} `json:"bfd,omitempty"`
			Area *map[string]struct {
				ExportList *string `json:"export-list,omitempty"`
				Interface  *string `json:"interface,omitempty"`
				FilterList *map[string]struct {
				} `json:".filter-list,omitempty"`
				ImportList  *string `json:"import-list,omitempty"`
				VirtualLink *map[string]struct {
					Bfd *string `json:"bfd,omitempty"`
				} `json:"virtual-link,omitempty"`
				Range *map[string]struct {
					Advertise    *string `json:"advertise,omitempty"`
					NotAdvertise *string `json:"not-advertise,omitempty"`
				} `json:"range,omitempty"`
			} `json:"area,omitempty"`
			Parameters *struct {
				RouterId *net.IP `json:"router-id,omitempty"`
			} `json:"parameters,omitempty"`
			Redistribute *struct {
				Connected *struct {
					RouteMap *string `json:"route-map,omitempty"`
				} `json:"connected,omitempty"`
				Ripng *struct {
					RouteMap *string `json:"route-map,omitempty"`
				} `json:"ripng,omitempty"`
				Static *struct {
					RouteMap *string `json:"route-map,omitempty"`
				} `json:"static,omitempty"`
				Bgp *struct {
					RouteMap *string `json:"route-map,omitempty"`
				} `json:"bgp,omitempty"`
				Kernel *struct {
					RouteMap *string `json:"route-map,omitempty"`
				} `json:"kernel,omitempty"`
			} `json:"redistribute,omitempty"`
		} `json:".vrf,omitempty"`
		Parameters *struct {
			RouterId *net.IP `json:"router-id,omitempty"`
			AbrType  *string `json:"abr-type,omitempty"`
		} `json:"parameters,omitempty"`
		PassiveInterface *string `json:"passive-interface,omitempty"`
		MaxConcurrentDd  *int    `json:"max-concurrent-dd,omitempty"`
		Redistribute     *struct {
			Connected *struct {
				RouteMap *string `json:"route-map,omitempty"`
			} `json:"connected,omitempty"`
			Ripng *struct {
				RouteMap *string `json:"route-map,omitempty"`
			} `json:"ripng,omitempty"`
			Static *struct {
				RouteMap *string `json:"route-map,omitempty"`
			} `json:"static,omitempty"`
			Bgp *struct {
				RouteMap *string `json:"route-map,omitempty"`
			} `json:"bgp,omitempty"`
			Kernel *struct {
				RouteMap *string `json:"route-map,omitempty"`
			} `json:"kernel,omitempty"`
		} `json:"redistribute,omitempty"`
		DistributeList *map[string]struct {
			Out *struct {
				Rip       *string `json:"rip,omitempty"`
				Connected *string `json:"connected,omitempty"`
				Static    *string `json:"static,omitempty"`
				Bgp       *string `json:"bgp,omitempty"`
				Kernel    *string `json:"kernel,omitempty"`
				Ospf      *int    `json:"ospf,omitempty"`
				Isis      *string `json:"isis,omitempty"`
			} `json:"out,omitempty"`
			In *string `json:"in,omitempty"`
		} `json:"distribute-list,omitempty"`
		DefaultInformation *struct {
			Originate *struct {
				Always     *string `json:"always,omitempty"`
				RouteMap   *string `json:"route-map,omitempty"`
				MetricType *string `json:"metric-type,omitempty"`
				Metric     *int    `json:"metric,omitempty"`
			} `json:"originate,omitempty"`
		} `json:"default-information,omitempty"`
	} `json:"ospfv3,omitempty"`
	Ospf *struct {
		Neighbor *map[string]struct {
			PollInterval *int `json:"poll-interval,omitempty"`
			Priority     *int `json:"priority,omitempty"`
		} `json:"neighbor,omitempty"`
		Bfd *struct {
			Interface     *string `json:"interface,omitempty"`
			AllInterfaces *string `json:"all-interfaces,omitempty"`
		} `json:"bfd,omitempty"`
		Area *map[string]struct {
			Shortcut *string    `json:"shortcut,omitempty"`
			Network  *net.IPNet `json:"network,omitempty"`
			AreaType *struct {
				Stub *struct {
					DefaultCost *int    `json:"default-cost,omitempty"`
					NoSummary   *string `json:"no-summary,omitempty"`
				} `json:"stub,omitempty"`
				Normal *string `json:"normal,omitempty"`
				Nssa   *struct {
					DefaultCost *int    `json:"default-cost,omitempty"`
					Translate   *string `json:"translate,omitempty"`
					NoSummary   *string `json:"no-summary,omitempty"`
				} `json:"nssa,omitempty"`
			} `json:"area-type,omitempty"`
			VirtualLink *map[string]struct {
				RetransmitInterval *int    `json:"retransmit-interval,omitempty"`
				TransmitDelay      *int    `json:"transmit-delay,omitempty"`
				Bfd                *string `json:"bfd,omitempty"`
				DeadInterval       *int    `json:"dead-interval,omitempty"`
				Authentication     *struct {
					Md5 *struct {
						KeyId *map[string]struct {
							Md5Key *string `json:"md5-key,omitempty"`
						} `json:"key-id,omitempty"`
					} `json:"md5,omitempty"`
					PlaintextPassword *string `json:"plaintext-password,omitempty"`
				} `json:"authentication,omitempty"`
				HelloInterval *int `json:"hello-interval,omitempty"`
			} `json:"virtual-link,omitempty"`
			Range *map[string]struct {
				Cost         *int       `json:"cost,omitempty"`
				Substitute   *net.IPNet `json:"substitute,omitempty"`
				NotAdvertise *string    `json:"not-advertise,omitempty"`
			} `json:"range,omitempty"`
			Authentication *string `json:"authentication,omitempty"`
		} `json:"area,omitempty"`
		Refresh *struct {
			Timers *int `json:"timers,omitempty"`
		} `json:"refresh,omitempty"`
		Timers *struct {
			Throttle *struct {
				Spf *struct {
					MaxHoldtime     *int `json:"max-holdtime,omitempty"`
					Delay           *int `json:"delay,omitempty"`
					InitialHoldtime *int `json:"initial-holdtime,omitempty"`
				} `json:"spf,omitempty"`
			} `json:"throttle,omitempty"`
		} `json:"timers,omitempty"`
		DefaultMetric *int `json:"default-metric,omitempty"`
		Distance      *struct {
			Global *int `json:"global,omitempty"`
			Ospf   *struct {
				InterArea *int `json:"inter-area,omitempty"`
				External  *int `json:"external,omitempty"`
				IntraArea *int `json:"intra-area,omitempty"`
			} `json:"ospf,omitempty"`
		} `json:"distance,omitempty"`
		LogAdjacencyChanges *struct {
			Detail *string `json:"detail,omitempty"`
		} `json:"log-adjacency-changes,omitempty"`
		MplsTe *struct {
			Enable        *string `json:"enable,omitempty"`
			RouterAddress *net.IP `json:"router-address,omitempty"`
		} `json:"mpls-te,omitempty"`
		AutoCost *struct {
			ReferenceBandwidth *int `json:"reference-bandwidth,omitempty"`
		} `json:"auto-cost,omitempty"`
		PassiveInterfaceExclude *string `json:"passive-interface-exclude,omitempty"`
		AccessList              *map[string]struct {
			Export *string `json:"export,omitempty"`
			Import *string `json:"import,omitempty"`
		} `json:"access-list,omitempty"`
		InstanceId *map[string]struct {
			Vrf *map[string]struct {
				Neighbor *map[string]struct {
					PollInterval *int `json:"poll-interval,omitempty"`
					Priority     *int `json:"priority,omitempty"`
				} `json:"neighbor,omitempty"`
				Bfd *struct {
					AllInterfaces *string `json:"all-interfaces,omitempty"`
				} `json:"bfd,omitempty"`
				Area *map[string]struct {
					Shortcut *string    `json:"shortcut,omitempty"`
					Network  *net.IPNet `json:"network,omitempty"`
					AreaType *struct {
						Stub *struct {
							DefaultCost *int    `json:"default-cost,omitempty"`
							NoSummary   *string `json:"no-summary,omitempty"`
						} `json:"stub,omitempty"`
						Normal *string `json:"normal,omitempty"`
						Nssa   *struct {
							DefaultCost *int    `json:"default-cost,omitempty"`
							Translate   *string `json:"translate,omitempty"`
							NoSummary   *string `json:"no-summary,omitempty"`
						} `json:"nssa,omitempty"`
					} `json:"area-type,omitempty"`
					VirtualLink *map[string]struct {
						RetransmitInterval *int    `json:"retransmit-interval,omitempty"`
						TransmitDelay      *int    `json:"transmit-delay,omitempty"`
						Bfd                *string `json:"bfd,omitempty"`
						DeadInterval       *int    `json:"dead-interval,omitempty"`
						Authentication     *struct {
							Md5 *struct {
								KeyId *map[string]struct {
									Md5Key *string `json:"md5-key,omitempty"`
								} `json:"key-id,omitempty"`
							} `json:"md5,omitempty"`
							PlaintextPassword *string `json:"plaintext-password,omitempty"`
						} `json:"authentication,omitempty"`
						HelloInterval *int `json:"hello-interval,omitempty"`
					} `json:"virtual-link,omitempty"`
					Range *map[string]struct {
						Cost         *int       `json:"cost,omitempty"`
						Substitute   *net.IPNet `json:"substitute,omitempty"`
						NotAdvertise *string    `json:"not-advertise,omitempty"`
					} `json:"range,omitempty"`
					Authentication *string `json:"authentication,omitempty"`
				} `json:"area,omitempty"`
				Refresh *struct {
					Timers *int `json:"timers,omitempty"`
				} `json:"refresh,omitempty"`
				Timers *struct {
					Throttle *struct {
						Spf *struct {
							MaxHoldtime     *int `json:"max-holdtime,omitempty"`
							Delay           *int `json:"delay,omitempty"`
							InitialHoldtime *int `json:"initial-holdtime,omitempty"`
						} `json:"spf,omitempty"`
					} `json:"throttle,omitempty"`
				} `json:"timers,omitempty"`
				Capability *struct {
					Cspf *struct {
						EnableBetterProtection *string `json:"enable-better-protection,omitempty"`
						TieBreak               *struct {
							MostFill  *string `json:"most-fill,omitempty"`
							LeastFill *string `json:"least-fill,omitempty"`
							Random    *string `json:"random,omitempty"`
						} `json:"tie-break,omitempty"`
						DisableBetterProtection *string `json:"disable-better-protection,omitempty"`
						DefaultRetryInterval    *int    `json:"default-retry-interval,omitempty"`
					} `json:"cspf,omitempty"`
					TrafficEngineering *string `json:"traffic-engineering,omitempty"`
				} `json:"capability,omitempty"`
				DefaultMetric *int `json:"default-metric,omitempty"`
				Distance      *struct {
					Global *int `json:"global,omitempty"`
					Ospf   *struct {
						InterArea *int `json:"inter-area,omitempty"`
						External  *int `json:"external,omitempty"`
						IntraArea *int `json:"intra-area,omitempty"`
					} `json:"ospf,omitempty"`
				} `json:"distance,omitempty"`
				LogAdjacencyChanges *struct {
					Detail *string `json:"detail,omitempty"`
				} `json:"log-adjacency-changes,omitempty"`
				MplsTe *struct {
					Enable        *string `json:"enable,omitempty"`
					RouterAddress *net.IP `json:"router-address,omitempty"`
				} `json:"mpls-te,omitempty"`
				AutoCost *struct {
					ReferenceBandwidth *int `json:"reference-bandwidth,omitempty"`
				} `json:"auto-cost,omitempty"`
				PassiveInterfaceExclude *string `json:"passive-interface-exclude,omitempty"`
				AccessList              *map[string]struct {
					Export *string `json:"export,omitempty"`
				} `json:"access-list,omitempty"`
				Parameters *struct {
					Rfc1583Compatibility *string `json:"rfc1583-compatibility,omitempty"`
					RouterId             *net.IP `json:"router-id,omitempty"`
					AbrType              *string `json:"abr-type,omitempty"`
					OpaqueLsa            *string `json:"opaque-lsa,omitempty"`
				} `json:"parameters,omitempty"`
				PassiveInterface *string `json:"passive-interface,omitempty"`
				Redistribute     *struct {
					Rip *struct {
						RouteMap   *string `json:"route-map,omitempty"`
						MetricType *int    `json:"metric-type,omitempty"`
						Metric     *int    `json:"metric,omitempty"`
					} `json:"rip,omitempty"`
					Connected *struct {
						RouteMap   *string `json:"route-map,omitempty"`
						MetricType *int    `json:"metric-type,omitempty"`
						Metric     *int    `json:"metric,omitempty"`
					} `json:"connected,omitempty"`
					Static *struct {
						RouteMap   *string `json:"route-map,omitempty"`
						MetricType *int    `json:"metric-type,omitempty"`
						Metric     *int    `json:"metric,omitempty"`
					} `json:"static,omitempty"`
					Bgp *struct {
						RouteMap   *string `json:"route-map,omitempty"`
						MetricType *int    `json:"metric-type,omitempty"`
						Metric     *int    `json:"metric,omitempty"`
					} `json:"bgp,omitempty"`
					Kernel *struct {
						RouteMap   *string `json:"route-map,omitempty"`
						MetricType *int    `json:"metric-type,omitempty"`
						Metric     *int    `json:"metric,omitempty"`
					} `json:"kernel,omitempty"`
				} `json:"redistribute,omitempty"`
				MaxMetric *struct {
					RouterLsa *struct {
						OnStartup      *int    `json:"on-startup,omitempty"`
						Administrative *string `json:"administrative,omitempty"`
						OnShutdown     *int    `json:"on-shutdown,omitempty"`
					} `json:"router-lsa,omitempty"`
				} `json:"max-metric,omitempty"`
				DefaultInformation *struct {
					Originate *struct {
						Always     *string `json:"always,omitempty"`
						RouteMap   *string `json:"route-map,omitempty"`
						MetricType *int    `json:"metric-type,omitempty"`
						Metric     *int    `json:"metric,omitempty"`
					} `json:"originate,omitempty"`
				} `json:"default-information,omitempty"`
			} `json:"vrf,omitempty"`
		} `json:".instance-id,omitempty"`
		Parameters *struct {
			Rfc1583Compatibility *string `json:"rfc1583-compatibility,omitempty"`
			RouterId             *net.IP `json:"router-id,omitempty"`
			AbrType              *string `json:"abr-type,omitempty"`
			OpaqueLsa            *string `json:"opaque-lsa,omitempty"`
		} `json:"parameters,omitempty"`
		PassiveInterface *string `json:"passive-interface,omitempty"`
		Redistribute     *struct {
			Rip *struct {
				RouteMap   *string `json:"route-map,omitempty"`
				MetricType *int    `json:"metric-type,omitempty"`
				Metric     *int    `json:"metric,omitempty"`
			} `json:"rip,omitempty"`
			Connected *struct {
				RouteMap   *string `json:"route-map,omitempty"`
				MetricType *int    `json:"metric-type,omitempty"`
				Metric     *int    `json:"metric,omitempty"`
			} `json:"connected,omitempty"`
			Static *struct {
				RouteMap   *string `json:"route-map,omitempty"`
				MetricType *int    `json:"metric-type,omitempty"`
				Metric     *int    `json:"metric,omitempty"`
			} `json:"static,omitempty"`
			Bgp *struct {
				RouteMap   *string `json:"route-map,omitempty"`
				MetricType *int    `json:"metric-type,omitempty"`
				Metric     *int    `json:"metric,omitempty"`
			} `json:"bgp,omitempty"`
			Kernel *struct {
				RouteMap   *string `json:"route-map,omitempty"`
				MetricType *int    `json:"metric-type,omitempty"`
				Metric     *int    `json:"metric,omitempty"`
			} `json:"kernel,omitempty"`
		} `json:"redistribute,omitempty"`
		MaxMetric *struct {
			RouterLsa *struct {
				OnStartup      *int    `json:"on-startup,omitempty"`
				Administrative *string `json:"administrative,omitempty"`
				OnShutdown     *int    `json:"on-shutdown,omitempty"`
			} `json:"router-lsa,omitempty"`
		} `json:"max-metric,omitempty"`
		DefaultInformation *struct {
			Originate *struct {
				Always     *string `json:"always,omitempty"`
				RouteMap   *string `json:"route-map,omitempty"`
				MetricType *int    `json:"metric-type,omitempty"`
				Metric     *int    `json:"metric,omitempty"`
			} `json:"originate,omitempty"`
		} `json:"default-information,omitempty"`
	} `json:"ospf,omitempty"`
}

func main() {
	var config ConfigProtocols
	fmt.Println(config)
}

@ianlancetaylor ianlancetaylor changed the title Compiler cannot handle large / complex structs cmd/compile: compiler cannot handle large / complex structs Feb 8, 2021
@davecheney
Copy link
Contributor

Thank you for the reproduction.

@davecheney davecheney added the NeedsInvestigation Someone must examine and confirm this is a valid issue and not a duplicate of an existing one. label Feb 8, 2021
@randall77
Copy link
Contributor

We have a hardcoded limit of 65535 bytes for a type name. Unnamed struct types can get really long names.
I think we could probably lift that restriction.

(As a workaround for now, it may help to pull out some of those structs into separate type declarations. That gives them names so they can be encoded in smaller strings.)

@randall77 randall77 added this to the Go1.17 milestone Feb 11, 2021
@randall77 randall77 added NeedsFix The path to resolution is known, but the work has not been done. and removed NeedsInvestigation Someone must examine and confirm this is a valid issue and not a duplicate of an existing one. labels Feb 11, 2021
@ianlancetaylor
Copy link
Contributor

It would probably be moderately safe to use a 65536 byte hash for symbol names that would otherwise be longer.

@tpaschalis
Copy link
Contributor

tpaschalis commented Apr 20, 2021

I've never worked on the compiler before so I'm not sure how hard or easy this would be, but I'd like to give it a shot!

Is the idea of using a hash of the symbol name an acceptable solution? (I suppose the part of the hash being 65536 bytes long was the joke, right? 😅)

@randall77
Copy link
Contributor

I think the easiest fix is just to allow longer names.

@tpaschalis
Copy link
Contributor

Sorry for the belated answer.

I removed the size check altogether and strangely enough, ./all.bash passed! Now I'm trying to figure out just how longer the names should be (eg. allow 8 more bits), or if the limit can be completely abolished? What's your view?

As I'm reading through how the static name encoding works, and I think that to avoid making other changes, the returned off + len(b) from dnameData should fit in an int32 as it's passed in objw.Global.

@randall77
Copy link
Contributor

Yes, as long as the offset fits in 32 bits we should be fine. A few things go in that entry, so I don't think we can go to a full 32 bits for just the name. 24 is the next obvious threshold.

@gopherbot
Copy link

Change https://golang.org/cl/318249 mentions this issue: cmd/compile,reflect: allow longer type names

@golang golang locked and limited conversation to collaborators May 10, 2022
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
FrozenDueToAge NeedsFix The path to resolution is known, but the work has not been done.
Projects
None yet
Development

No branches or pull requests

6 participants