sagemcom_fast_exporter

package module
v0.0.0-...-a145c0e Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 8, 2024 License: MIT Imports: 19 Imported by: 0

README

Build Docker Build

Sagemcom F@st Prometheus Exporter

A Prometheus exporter for the Sagemcom F@st series of fibre hub/routers. It gathers metrics on demand using the HTTP API.

Much of this was ported from https://github.com/iMicknl/python-sagemcom-api, so thanks to @iMicknl for doing the hard work of figuring out the API!

This was developed with a Bell Gigahub with firmware 1.19.6, untested on other models and releases.

Installation

You can build a binary for your system with go get github.com/hairyhenderson/sagemcom_fast_exporter, or you can use a pre-built Docker image:

$ docker run hairyhenderson/sagemcom_fast_exporter

There are two variants: :latest and :alpine - no difference except the latter is based on Alpine and contains a shell. The former is a FROM scratch image, containing only the binary.

The image is built for multiple platforms and architectures:

  • linux/amd64 (x86_64)
  • linux/arm64 (64-bit ARM/aarch64)
  • linux/arm/v6 (32-bit ARM v6, like Raspberry Pi Zero)
  • linux/arm/v7 (32-bit ARM v7, like Raspbarry Pi 2B)
  • windows/amd64 (Windows, based on Windows Nano Server)

See https://hub.docker.com/r/hairyhenderson/sagemcom_fast_exporter.

Usage

The exporter needs to be given at least the address of the device (with -host), and the credentials (-username and -password). The default username is admin, so you likely only need to provide the password (which is the device's serial number by default).

By default, the exporter listens only on localhost, on port 9780. For metrics to be accessible from a Prometheus server running on a different host from the exporter, set -addr to listen to 0.0.0.0:<port> (or a specific IP address).

$ sagemcom_fast_exporter -addr 0.0.0.0:9780 -host 192.168.2.1 -password ABC123456789

Now you can visit http://localhost:9780/scrape to have the exporter scrape metrics from the device. Note that it will take a few seconds for the device to respond (usually around 5-10s).

To configure Prometheus to scrape from this exporter, use a scrape_config like this one:

  - job_name: 'gigahub'
    metrics_path: /scrape
    static_configs:
      - targets:
        - 'localhost:9780'

Grafana Dashboard

There's a Grafana dashboard published to Grafana.com and also available in this repo which looks like this:

Grafana dashboard

The easiest way to get set up with Grafana is to use Grafana Cloud, which has an excellent free tier.

To use it, you'll need to set up a Prometheus data source in Grafana, and then import the dashboard.

License

The MIT License

Copyright (c) 2023-2024 Dave Henderson

Documentation

Index

Constants

View Source
const (
	API_ENDPOINT       = "/cgi/json-req"
	DEFAULT_TIMEOUT    = 7
	DEFAULT_USER_AGENT = "SagemcomFastExporter"
)
View Source
const (
	EncryptionMethodMD5    = "MD5"
	EncryptionMethodSHA512 = "SHA512"
)

Variables

View Source
var (
	ErrRequestNoError    = &xmoError{Code: 16777216, Description: "XMO_REQUEST_NO_ERR"}
	ErrInvalidSession    = &xmoError{Code: 16777219, Description: "XMO_INVALID_SESSION_ERR"}
	ErrAuthentication    = &xmoError{Code: 16777223, Description: "XMO_AUTHENTICATION_ERR"}
	ErrRequestAction     = &xmoError{Code: 16777236, Description: "XMO_REQUEST_ACTION_ERR"}
	ErrNoError           = &xmoError{Code: 16777238, Description: "XMO_NO_ERR"}
	ErrAccessRestriction = &xmoError{Code: 1, Description: "XMO_ACCESS_RESTRICTION_ERR"}
	ErrNonWritableParam  = &xmoError{Code: 3, Description: "XMO_NON_WRITABLE_PARAMETER_ERR"}
	ErrUnknownPath       = &xmoError{Code: 7, Description: "XMO_UNKNOWN_PATH_ERR"}
	ErrMaxSessionCount   = &xmoError{Code: 8, Description: "XMO_MAX_SESSION_COUNT_ERR"}
)

Functions

This section is empty.

Types

type CrashHistory

type CrashHistory struct {
	LastCrashDate        time.Time `json:"LastCrashDate,omitempty"`
	MonthlyNumberOfCrash int       `json:"MonthlyNumberOfCrash,omitempty"`
	NumberOfCrash        int       `json:"NumberOfCrash,omitempty"`
}

func (*CrashHistory) UnmarshalJSON

func (c *CrashHistory) UnmarshalJSON(b []byte) error

type Device

type Device struct {
	ARP struct {
	} `json:"ARP,omitempty"`
	DHCPv4 struct {
		Server struct {
			Enable bool `json:"Enable,omitempty"`
			Pools  []struct {
				Alias             string `json:"Alias,omitempty"`
				AllowKnownClients bool   `json:"AllowKnownClients,omitempty"`
				BlockAckFlag      bool   `json:"BlockAckFlag,omitempty"`
				BootFileName      string `json:"BootFileName,omitempty"`
				Chaddr            string `json:"Chaddr,omitempty"`
				ChaddrExclude     bool   `json:"ChaddrExclude,omitempty"`
				ChaddrMask        string `json:"ChaddrMask,omitempty"`
				ClientID          string `json:"ClientID,omitempty"`
				ClientIDExclude   bool   `json:"ClientIDExclude,omitempty"`
				Clients           []struct {
					Active        bool   `json:"Active,omitempty"`
					Alias         string `json:"Alias,omitempty"`
					Chaddr        string `json:"Chaddr,omitempty"`
					IPv4Addresses []struct {
						IPAddress          string `json:"IPAddress,omitempty"`
						LeaseTimeRemaining string `json:"LeaseTimeRemaining,omitempty"`
						UID                int    `json:"uid,omitempty"`
					} `json:"IPv4Addresses,omitempty"`
					Options []struct {
						Tag   int    `json:"Tag,omitempty"`
						Value string `json:"Value,omitempty"`
						UID   int    `json:"uid,omitempty"`
					} `json:"Options,omitempty"`
					UID int `json:"uid,omitempty"`
				} `json:"Clients,omitempty"`
				DHCPServerConfigurable bool   `json:"DHCPServerConfigurable,omitempty"`
				DNSServers             string `json:"DNSServers,omitempty"`
				DomainName             string `json:"DomainName,omitempty"`
				Enable                 bool   `json:"Enable,omitempty"`
				FlushDHCPLeases        bool   `json:"FlushDHCPLeases,omitempty"`
				IPInterface            string `json:"IPInterface,omitempty"`
				IPRouters              string `json:"IPRouters,omitempty"`
				Interface              string `json:"Interface,omitempty"`
				LeaseTime              int    `json:"LeaseTime,omitempty"`
				MaxAddress             string `json:"MaxAddress,omitempty"`
				MinAddress             string `json:"MinAddress,omitempty"`
				NextServer             string `json:"NextServer,omitempty"`
				Options                []struct {
					Alias  string `json:"Alias,omitempty"`
					Enable bool   `json:"Enable,omitempty"`
					Tag    int    `json:"Tag,omitempty"`
					Value  string `json:"Value,omitempty"`
					UID    int    `json:"uid,omitempty"`
				} `json:"Options,omitempty"`
				Order                 int    `json:"Order,omitempty"`
				ReservedAddresses     string `json:"ReservedAddresses,omitempty"`
				ServerName            string `json:"ServerName,omitempty"`
				StaticAddresses       []any  `json:"StaticAddresses,omitempty"`
				Status                string `json:"Status,omitempty"`
				SubnetMask            string `json:"SubnetMask,omitempty"`
				UserClassID           string `json:"UserClassID,omitempty"`
				UserClassIDExclude    bool   `json:"UserClassIDExclude,omitempty"`
				VendorClassID         string `json:"VendorClassID,omitempty"`
				VendorClassIDExclude  bool   `json:"VendorClassIDExclude,omitempty"`
				VendorClassIDMode     string `json:"VendorClassIDMode,omitempty"`
				XSAGEMCOMForceOptions bool   `json:"X_SAGEMCOM_ForceOptions,omitempty"`
				UID                   int    `json:"uid,omitempty"`
			} `json:"Pools,omitempty"`
			XSAGEMCOMAuthoritative bool `json:"X_SAGEMCOM_Authoritative,omitempty"`
			XmoConfVersion         int  `json:"XmoConfVersion,omitempty"`
		} `json:"Server,omitempty"`
	} `json:"DHCPv4,omitempty"`
	DLNA struct {
		Capabilities struct {
			AVClassProfileID         string `json:"AVClassProfileID,omitempty"`
			AudioClassProfileID      string `json:"AudioClassProfileID,omitempty"`
			DeviceCapability         string `json:"DeviceCapability,omitempty"`
			HIDDeviceClass           string `json:"HIDDeviceClass,omitempty"`
			HNDDeviceClass           string `json:"HNDDeviceClass,omitempty"`
			ImageClassProfileIDs     string `json:"ImageClassProfileIDs,omitempty"`
			MediaCollectionProfileID string `json:"MediaCollectionProfileID,omitempty"`
			PrinterClassProfileID    string `json:"PrinterClassProfileID,omitempty"`
		} `json:"Capabilities,omitempty"`
		Device struct {
			Enable bool `json:"Enable,omitempty"`
		} `json:"Device,omitempty"`
	} `json:"DLNA,omitempty"`
	DNS struct {
		Client struct {
			Attempts          int    `json:"Attempts,omitempty"`
			Enable            bool   `json:"Enable,omitempty"`
			FallbackTimeout   int    `json:"FallbackTimeout,omitempty"`
			GenerateHostsFile bool   `json:"GenerateHostsFile,omitempty"`
			HostName          string `json:"HostName,omitempty"`
			LocalDomains      string `json:"LocalDomains,omitempty"`
			Servers           []struct {
				Alias      string `json:"Alias,omitempty"`
				DNSServer  string `json:"DNSServer,omitempty"`
				Enable     bool   `json:"Enable,omitempty"`
				Interface  string `json:"Interface,omitempty"`
				StaticDNSs []any  `json:"StaticDNSs,omitempty"`
				Status     string `json:"Status,omitempty"`
				Type       string `json:"Type,omitempty"`
				UID        int    `json:"uid,omitempty"`
			} `json:"Servers,omitempty"`
			Status        string `json:"Status,omitempty"`
			UseGUAAddress bool   `json:"UseGUAAddress,omitempty"`
			UseLLAAddress bool   `json:"UseLLAAddress,omitempty"`
			UseULAAddress bool   `json:"UseULAAddress,omitempty"`
		} `json:"Client,omitempty"`
		Diagnostics struct {
			NSLookupDiagnostics struct {
				DNSServer           string `json:"DNSServer,omitempty"`
				DiagnosticsState    string `json:"DiagnosticsState,omitempty"`
				HostName            string `json:"HostName,omitempty"`
				Interface           string `json:"Interface,omitempty"`
				NumberOfRepetitions int    `json:"NumberOfRepetitions,omitempty"`
				Results             []any  `json:"Results,omitempty"`
				SuccessCount        int    `json:"SuccessCount,omitempty"`
				Timeout             int    `json:"Timeout,omitempty"`
			} `json:"NSLookupDiagnostics,omitempty"`
		} `json:"Diagnostics,omitempty"`
		Relay struct {
			AllowedRebindingDomains string `json:"AllowedRebindingDomains,omitempty"`
			Attempts                int    `json:"Attempts,omitempty"`
			Cache                   struct {
				AvailableMemory        int    `json:"AvailableMemory,omitempty"`
				Content                string `json:"Content,omitempty"`
				FlushCache             bool   `json:"FlushCache,omitempty"`
				QueriesAnsweredLocally int    `json:"QueriesAnsweredLocally,omitempty"`
				QueriesForwarded       int    `json:"QueriesForwarded,omitempty"`
				QueriesPerServers      string `json:"QueriesPerServers,omitempty"`
				Status                 string `json:"Status,omitempty"`
				UsageStatistics        string `json:"UsageStatistics,omitempty"`
			} `json:"Cache,omitempty"`
			CacheSize       int  `json:"CacheSize,omitempty"`
			Debug           bool `json:"Debug,omitempty"`
			Enable          bool `json:"Enable,omitempty"`
			FallbackTimeout int  `json:"FallbackTimeout,omitempty"`
			Forwardings     []struct {
				Alias      string `json:"Alias,omitempty"`
				DNSServer  string `json:"DNSServer,omitempty"`
				Enable     bool   `json:"Enable,omitempty"`
				Interface  string `json:"Interface,omitempty"`
				StaticDNSs []any  `json:"StaticDNSs,omitempty"`
				Status     string `json:"Status,omitempty"`
				Type       string `json:"Type,omitempty"`
				UID        int    `json:"uid,omitempty"`
			} `json:"Forwardings,omitempty"`
			HandleRetransmissions bool `json:"HandleRetransmissions,omitempty"`
			InputInterfaces       []struct {
				AcceptInput bool   `json:"AcceptInput,omitempty"`
				Interface   string `json:"Interface,omitempty"`
				UID         int    `json:"uid,omitempty"`
			} `json:"InputInterfaces,omitempty"`
			MaximumTTLServer                int    `json:"MaximumTTLServer,omitempty"`
			MinimumSourcePort               int    `json:"MinimumSourcePort,omitempty"`
			NegativeTTLServer               int    `json:"NegativeTTLServer,omitempty"`
			NoForwardDomains                string `json:"NoForwardDomains,omitempty"`
			RetransmissionTimeout           int    `json:"RetransmissionTimeout,omitempty"`
			ServerQuarantineTimeout         int    `json:"ServerQuarantineTimeout,omitempty"`
			ServerQuarantineTimeoutEndRange int    `json:"ServerQuarantineTimeoutEndRange,omitempty"`
			Status                          string `json:"Status,omitempty"`
			StopDNSRebind                   bool   `json:"StopDNSRebind,omitempty"`
			TryAllNsAfterNxDomain           bool   `json:"TryAllNsAfterNxDomain,omitempty"`
		} `json:"Relay,omitempty"`
		Sd struct {
			Enable   bool  `json:"Enable,omitempty"`
			Services []any `json:"Services,omitempty"`
		} `json:"SD,omitempty"`
		SupportedRecordTypes string `json:"SupportedRecordTypes,omitempty"`
	} `json:"DNS,omitempty"`
	DeviceDiscovery struct {
		AccessPoints []struct {
			Connected bool   `json:"Connected,omitempty"`
			Name      string `json:"Name,omitempty"`
			UID       int    `json:"uid,omitempty"`
		} `json:"AccessPoints,omitempty"`
		DHCPPools            []any `json:"DHCPPools,omitempty"`
		DeviceIdentification struct {
			DHCPFingerprintDatabase struct {
				Entries    []any `json:"Entries,omitempty"`
				MaxEntries int   `json:"MaxEntries,omitempty"`
			} `json:"DHCPFingerprintDatabase,omitempty"`
			DeviceTypes []any `json:"DeviceTypes,omitempty"`
		} `json:"DeviceIdentification,omitempty"`
		Enable     bool `json:"Enable,omitempty"`
		Interfaces []struct {
			Arp  bool   `json:"Arp,omitempty"`
			Path string `json:"Path,omitempty"`
			UID  int    `json:"uid,omitempty"`
		} `json:"Interfaces,omitempty"`
		MaxHosts  int `json:"MaxHosts,omitempty"`
		USBEntity struct {
			Connected bool   `json:"Connected,omitempty"`
			Name      string `json:"Name,omitempty"`
		} `json:"USBEntity,omitempty"`
	} `json:"DeviceDiscovery,omitempty"`
	DeviceInfo    DeviceInfo `json:"DeviceInfo,omitempty"`
	DeviceSummary string     `json:"DeviceSummary,omitempty"`
	Ethernet      struct {
		Interfaces []EthernetInterface `json:"Interfaces,omitempty"`
		Links      []struct {
			Alias           string `json:"Alias,omitempty"`
			Enable          bool   `json:"Enable,omitempty"`
			IfcName         string `json:"IfcName,omitempty"`
			LastChange      int    `json:"LastChange,omitempty"`
			LastStatsReset  int    `json:"LastStatsReset,omitempty"`
			LowerLayers     string `json:"LowerLayers,omitempty"`
			MACAddress      string `json:"MACAddress,omitempty"`
			Name            string `json:"Name,omitempty"`
			PriorityTagging bool   `json:"PriorityTagging,omitempty"`
			ResetStats      bool   `json:"ResetStats,omitempty"`
			Stats           struct {
				BroadcastPacketsReceived    string `json:"BroadcastPacketsReceived,omitempty"`
				BroadcastPacketsSent        string `json:"BroadcastPacketsSent,omitempty"`
				BytesReceived               string `json:"BytesReceived,omitempty"`
				BytesSent                   string `json:"BytesSent,omitempty"`
				CollisionsPackets           int    `json:"CollisionsPackets,omitempty"`
				DiscardPacketsReceived      int    `json:"DiscardPacketsReceived,omitempty"`
				DiscardPacketsSent          int    `json:"DiscardPacketsSent,omitempty"`
				ErrorsReceived              int    `json:"ErrorsReceived,omitempty"`
				ErrorsSent                  int    `json:"ErrorsSent,omitempty"`
				MulticastPacketsReceived    string `json:"MulticastPacketsReceived,omitempty"`
				MulticastPacketsSent        string `json:"MulticastPacketsSent,omitempty"`
				PacketsReceived             string `json:"PacketsReceived,omitempty"`
				PacketsSent                 string `json:"PacketsSent,omitempty"`
				RetransCount                int    `json:"RetransCount,omitempty"`
				UnicastPacketsReceived      string `json:"UnicastPacketsReceived,omitempty"`
				UnicastPacketsSent          string `json:"UnicastPacketsSent,omitempty"`
				UnknownProtoPacketsReceived int    `json:"UnknownProtoPacketsReceived,omitempty"`
			} `json:"Stats,omitempty"`
			Status    string `json:"Status,omitempty"`
			StoppedBy string `json:"StoppedBy,omitempty"`
			UID       int    `json:"uid,omitempty"`
		} `json:"Links,omitempty"`
		OAM struct {
			OAM1731 struct {
				CCMinterval   int    `json:"CCMinterval,omitempty"`
				EnableOAM1731 bool   `json:"EnableOAM1731,omitempty"`
				InterfaceName string `json:"InterfaceName,omitempty"`
				Ccm           bool   `json:"ccm,omitempty"`
				Loopback      int    `json:"loopback,omitempty"`
				Meg           int    `json:"meg,omitempty"`
				MegLevel      int    `json:"megLevel,omitempty"`
				MepID         int    `json:"mepId,omitempty"`
				Vlan          int    `json:"vlan,omitempty"`
			} `json:"OAM1731,omitempty"`
			OAM1ag struct {
				CCMinterval   int    `json:"CCMinterval,omitempty"`
				EnableOAM1Ag  bool   `json:"EnableOAM1ag,omitempty"`
				InterfaceName string `json:"InterfaceName,omitempty"`
				Ccm           bool   `json:"ccm,omitempty"`
				Loopback      int    `json:"loopback,omitempty"`
				Ma            int    `json:"ma,omitempty"`
				Md            int    `json:"md,omitempty"`
				MdLevel       int    `json:"mdLevel,omitempty"`
				MegLevel      int    `json:"megLevel,omitempty"`
				MepID         int    `json:"mepId,omitempty"`
				Vlan          int    `json:"vlan,omitempty"`
			} `json:"OAM1ag,omitempty"`
			OAM3ah struct {
				EnableOAM3Ah  bool   `json:"EnableOAM3ah,omitempty"`
				InterfaceName string `json:"InterfaceName,omitempty"`
				Features      int    `json:"features,omitempty"`
				Loopback      int    `json:"loopback,omitempty"`
				OamID         int    `json:"oamID,omitempty"`
			} `json:"OAM3ah,omitempty"`
		} `json:"OAM,omitempty"`
		RMONStatistics   []any `json:"RMONStatistics,omitempty"`
		VLANTerminations []struct {
			Alias                   string `json:"Alias,omitempty"`
			EgressPriorityMappings  string `json:"EgressPriorityMappings,omitempty"`
			Enable                  bool   `json:"Enable,omitempty"`
			IfcName                 string `json:"IfcName,omitempty"`
			IngressPriorityMappings string `json:"IngressPriorityMappings,omitempty"`
			LastChange              int    `json:"LastChange,omitempty"`
			LastStatsReset          int    `json:"LastStatsReset,omitempty"`
			LowerLayers             string `json:"LowerLayers,omitempty"`
			Name                    string `json:"Name,omitempty"`
			ResetStats              bool   `json:"ResetStats,omitempty"`
			Stats                   struct {
				BroadcastPacketsReceived    string `json:"BroadcastPacketsReceived,omitempty"`
				BroadcastPacketsSent        string `json:"BroadcastPacketsSent,omitempty"`
				BytesReceived               string `json:"BytesReceived,omitempty"`
				BytesSent                   string `json:"BytesSent,omitempty"`
				CollisionsPackets           int    `json:"CollisionsPackets,omitempty"`
				DiscardPacketsReceived      int    `json:"DiscardPacketsReceived,omitempty"`
				DiscardPacketsSent          int    `json:"DiscardPacketsSent,omitempty"`
				ErrorsReceived              int    `json:"ErrorsReceived,omitempty"`
				ErrorsSent                  int    `json:"ErrorsSent,omitempty"`
				MulticastPacketsReceived    string `json:"MulticastPacketsReceived,omitempty"`
				MulticastPacketsSent        string `json:"MulticastPacketsSent,omitempty"`
				PacketsReceived             string `json:"PacketsReceived,omitempty"`
				PacketsSent                 string `json:"PacketsSent,omitempty"`
				RetransCount                int    `json:"RetransCount,omitempty"`
				UnicastPacketsReceived      string `json:"UnicastPacketsReceived,omitempty"`
				UnicastPacketsSent          string `json:"UnicastPacketsSent,omitempty"`
				UnknownProtoPacketsReceived int    `json:"UnknownProtoPacketsReceived,omitempty"`
			} `json:"Stats,omitempty"`
			Status    string `json:"Status,omitempty"`
			StoppedBy string `json:"StoppedBy,omitempty"`
			Tpid      int    `json:"TPID,omitempty"`
			Untagged  bool   `json:"Untagged,omitempty"`
			Vlanid    int    `json:"VLANID,omitempty"`
			UID       int    `json:"uid,omitempty"`
		} `json:"VLANTerminations,omitempty"`
	} `json:"Ethernet,omitempty"`
	Firewall struct {
		AdvancedLevel            string `json:"AdvancedLevel,omitempty"`
		BlockFragmentedIPPackets bool   `json:"BlockFragmentedIPPackets,omitempty"`
		Chains                   []struct {
			Alias   string `json:"Alias,omitempty"`
			Creator string `json:"Creator,omitempty"`
			Enable  bool   `json:"Enable,omitempty"`
			Name    string `json:"Name,omitempty"`
			Rules   []struct {
				Alias                  string `json:"Alias,omitempty"`
				CreationDate           string `json:"CreationDate,omitempty"`
				Creator                string `json:"Creator,omitempty"`
				Dscp                   int    `json:"DSCP,omitempty"`
				DSCPExclude            bool   `json:"DSCPExclude,omitempty"`
				Description            string `json:"Description,omitempty"`
				DestAllInterfaces      bool   `json:"DestAllInterfaces,omitempty"`
				DestIP                 string `json:"DestIP,omitempty"`
				DestIPExclude          bool   `json:"DestIPExclude,omitempty"`
				DestInterface          string `json:"DestInterface,omitempty"`
				DestInterfaceExclude   bool   `json:"DestInterfaceExclude,omitempty"`
				DestMask               string `json:"DestMask,omitempty"`
				DestPort               int    `json:"DestPort,omitempty"`
				DestPortExclude        bool   `json:"DestPortExclude,omitempty"`
				DestPortRangeMax       int    `json:"DestPortRangeMax,omitempty"`
				Enable                 bool   `json:"Enable,omitempty"`
				ExpiryDate             string `json:"ExpiryDate,omitempty"`
				IPVersion              int    `json:"IPVersion,omitempty"`
				Log                    bool   `json:"Log,omitempty"`
				MacID                  string `json:"MacId,omitempty"`
				Order                  int64  `json:"Order,omitempty"`
				Protocol               string `json:"Protocol,omitempty"`
				ProtocolExclude        bool   `json:"ProtocolExclude,omitempty"`
				ProtocolNumber         int    `json:"ProtocolNumber,omitempty"`
				Service                string `json:"Service,omitempty"`
				SourceAllInterfaces    bool   `json:"SourceAllInterfaces,omitempty"`
				SourceIP               string `json:"SourceIP,omitempty"`
				SourceIPExclude        bool   `json:"SourceIPExclude,omitempty"`
				SourceInterface        string `json:"SourceInterface,omitempty"`
				SourceInterfaceExclude bool   `json:"SourceInterfaceExclude,omitempty"`
				SourceMask             string `json:"SourceMask,omitempty"`
				SourcePort             int    `json:"SourcePort,omitempty"`
				SourcePortExclude      bool   `json:"SourcePortExclude,omitempty"`
				SourcePortRangeMax     int    `json:"SourcePortRangeMax,omitempty"`
				Status                 string `json:"Status,omitempty"`
				Target                 string `json:"Target,omitempty"`
				TargetChain            string `json:"TargetChain,omitempty"`
				UID                    int    `json:"uid,omitempty"`
			} `json:"Rules,omitempty"`
			UID int `json:"uid,omitempty"`
		} `json:"Chains,omitempty"`
		Config     string `json:"Config,omitempty"`
		Enable     bool   `json:"Enable,omitempty"`
		Interfaces []struct {
			EnableIPSourceCheck    bool   `json:"EnableIpSourceCheck,omitempty"`
			IPv4IcmpFloodDetection int    `json:"IPv4IcmpFloodDetection,omitempty"`
			IPv4PortScanDetection  int    `json:"IPv4PortScanDetection,omitempty"`
			IPv4SynFloodDetection  int    `json:"IPv4SynFloodDetection,omitempty"`
			IPv4UDPFloodDetection  int    `json:"IPv4UdpFloodDetection,omitempty"`
			IPv6IcmpFloodDetection int    `json:"IPv6IcmpFloodDetection,omitempty"`
			IPv6PortScanDetection  int    `json:"IPv6PortScanDetection,omitempty"`
			IPv6SynFloodDetection  int    `json:"IPv6SynFloodDetection,omitempty"`
			IPv6UDPFloodDetection  int    `json:"IPv6UdpFloodDetection,omitempty"`
			Interface              string `json:"Interface,omitempty"`
			RespondToPing4         bool   `json:"RespondToPing4,omitempty"`
			RespondToPing6         bool   `json:"RespondToPing6,omitempty"`
			SendPing4              bool   `json:"SendPing4,omitempty"`
			SendPing6              bool   `json:"SendPing6,omitempty"`
			UID                    int    `json:"uid,omitempty"`
		} `json:"Interfaces,omitempty"`
		LanInterface string `json:"LanInterface,omitempty"`
		LastChange   string `json:"LastChange,omitempty"`
		Levels       []struct {
			Alias              string `json:"Alias,omitempty"`
			Chain              string `json:"Chain,omitempty"`
			DefaultLogPolicy   bool   `json:"DefaultLogPolicy,omitempty"`
			DefaultPolicy      string `json:"DefaultPolicy,omitempty"`
			Description        string `json:"Description,omitempty"`
			Name               string `json:"Name,omitempty"`
			Order              int    `json:"Order,omitempty"`
			PortMappingEnabled bool   `json:"PortMappingEnabled,omitempty"`
			UID                int    `json:"uid,omitempty"`
		} `json:"Levels,omitempty"`
		PortScanDetection bool   `json:"PortScanDetection,omitempty"`
		Type              string `json:"Type,omitempty"`
		Version           string `json:"Version,omitempty"`
	} `json:"Firewall,omitempty"`
	GRE struct {
		Filters []any `json:"Filters,omitempty"`
		Tunnels []any `json:"Tunnels,omitempty"`
		Vlans   []any `json:"Vlans,omitempty"`
	} `json:"GRE,omitempty"`
	GatewayInfo struct {
		ManufacturerOUI string `json:"ManufacturerOUI,omitempty"`
		ProductClass    string `json:"ProductClass,omitempty"`
	} `json:"GatewayInfo,omitempty"`
	HomePlug struct {
		Enable            bool   `json:"Enable,omitempty"`
		Interfaces        []any  `json:"Interfaces,omitempty"`
		LastDetectionDate string `json:"LastDetectionDate,omitempty"`
		NetworkInterfaces string `json:"NetworkInterfaces,omitempty"`
		Status            string `json:"Status,omitempty"`
	} `json:"HomePlug,omitempty"`
	Hosts struct {
		Hosts                     []Host `json:"Hosts,omitempty"`
		MaxHosts                  int    `json:"MaxHosts,omitempty"`
		STBVendorClassIDList      string `json:"STBVendorClassIDList,omitempty"`
		SweepARP                  int    `json:"SweepARP,omitempty"`
		VAPVendorClassIDList      string `json:"VAPVendorClassIDList,omitempty"`
		WiFiPODSVendorClassIDList string `json:"WiFiPODSVendorClassIDList,omitempty"`
	} `json:"Hosts,omitempty"`
	IP struct {
		ActivePorts []any `json:"ActivePorts,omitempty"`
		Diagnostics struct {
			BroadcomSpeedService struct {
				Algorithm        string `json:"Algorithm,omitempty"`
				DiagnosticsState string `json:"DiagnosticsState,omitempty"`
				Direction        string `json:"Direction,omitempty"`
				DurationSec      string `json:"DurationSec,omitempty"`
				Kbps             string `json:"Kbps,omitempty"`
				LossPercentage   string `json:"LossPercentage,omitempty"`
				MaxKbps          string `json:"MaxKbps,omitempty"`
				MaxSteps         string `json:"MaxSteps,omitempty"`
				Mode             string `json:"Mode,omitempty"`
				PacketLength     string `json:"PacketLength,omitempty"`
				ServerIPAddress  string `json:"ServerIpAddress,omitempty"`
				TCPPort          string `json:"TcpPort,omitempty"`
			} `json:"BroadcomSpeedService,omitempty"`
			DownloadDiagnostics struct {
				BOMTime             string `json:"BOMTime,omitempty"`
				Dscp                int    `json:"DSCP,omitempty"`
				DiagnosticsState    string `json:"DiagnosticsState,omitempty"`
				DownloadTransports  string `json:"DownloadTransports,omitempty"`
				DownloadURL         string `json:"DownloadURL,omitempty"`
				EOMTime             string `json:"EOMTime,omitempty"`
				EthernetPriority    int    `json:"EthernetPriority,omitempty"`
				Interface           string `json:"Interface,omitempty"`
				ROMTime             string `json:"ROMTime,omitempty"`
				TCPOpenRequestTime  string `json:"TCPOpenRequestTime,omitempty"`
				TCPOpenResponseTime string `json:"TCPOpenResponseTime,omitempty"`
				TestBytesReceived   int    `json:"TestBytesReceived,omitempty"`
				TotalBytesReceived  int    `json:"TotalBytesReceived,omitempty"`
			} `json:"DownloadDiagnostics,omitempty"`
			IPPing struct {
				AverageResponseTime         int    `json:"AverageResponseTime,omitempty"`
				AverageResponseTimeDetailed int    `json:"AverageResponseTimeDetailed,omitempty"`
				Df                          bool   `json:"DF,omitempty"`
				Dscp                        int    `json:"DSCP,omitempty"`
				DataBlockSize               int    `json:"DataBlockSize,omitempty"`
				DiagnosticsState            string `json:"DiagnosticsState,omitempty"`
				FailureCount                int    `json:"FailureCount,omitempty"`
				Host                        string `json:"Host,omitempty"`
				IPAddressUsed               string `json:"IPAddressUsed,omitempty"`
				Interface                   string `json:"Interface,omitempty"`
				MaximumResponseTime         int    `json:"MaximumResponseTime,omitempty"`
				MaximumResponseTimeDetailed int    `json:"MaximumResponseTimeDetailed,omitempty"`
				MinimumResponseTime         int    `json:"MinimumResponseTime,omitempty"`
				MinimumResponseTimeDetailed int    `json:"MinimumResponseTimeDetailed,omitempty"`
				NumberOfRepetitions         int    `json:"NumberOfRepetitions,omitempty"`
				ProtocolVersion             string `json:"ProtocolVersion,omitempty"`
				SuccessCount                int    `json:"SuccessCount,omitempty"`
				Timeout                     int    `json:"Timeout,omitempty"`
			} `json:"IPPing,omitempty"`
			IPv4PingSupported       bool `json:"IPv4PingSupported,omitempty"`
			IPv4TraceRouteSupported bool `json:"IPv4TraceRouteSupported,omitempty"`
			IPv6PingSupported       bool `json:"IPv6PingSupported,omitempty"`
			IPv6TraceRouteSupported bool `json:"IPv6TraceRouteSupported,omitempty"`
			SpeedTest               struct {
				BlockTraffic      bool   `json:"BlockTraffic,omitempty"`
				DiagnosticsState  string `json:"DiagnosticsState,omitempty"`
				DiagnosticsStatus string `json:"DiagnosticsStatus,omitempty"`
				Download          string `json:"Download,omitempty"`
				History           struct {
					BlockTraffic          string `json:"BlockTraffic,omitempty"`
					Download              string `json:"Download,omitempty"`
					Index                 int    `json:"Index,omitempty"`
					Latency               string `json:"Latency,omitempty"`
					SelectedServerAddress string `json:"SelectedServerAddress,omitempty"`
					Timestamp             string `json:"Timestamp,omitempty"`
					Upload                string `json:"Upload,omitempty"`
				} `json:"History,omitempty"`
				Latency               int    `json:"Latency,omitempty"`
				MaxDownload           string `json:"MaxDownload,omitempty"`
				MaxRate               int    `json:"MaxRate,omitempty"`
				MaxUpload             string `json:"MaxUpload,omitempty"`
				SelectedServerAddress string `json:"SelectedServerAddress,omitempty"`
				ServerList            string `json:"ServerList,omitempty"`
				ServerTestCount       int    `json:"ServerTestCount,omitempty"`
				Upload                string `json:"Upload,omitempty"`
			} `json:"SpeedTest,omitempty"`
			TraceRoute struct {
				Dscp             int    `json:"DSCP,omitempty"`
				DataBlockSize    int    `json:"DataBlockSize,omitempty"`
				DiagnosticsState string `json:"DiagnosticsState,omitempty"`
				Host             string `json:"Host,omitempty"`
				IPAddressUsed    string `json:"IPAddressUsed,omitempty"`
				Interface        string `json:"Interface,omitempty"`
				MaxHopCount      int    `json:"MaxHopCount,omitempty"`
				NumberOfTries    int    `json:"NumberOfTries,omitempty"`
				ProtocolVersion  string `json:"ProtocolVersion,omitempty"`
				ResponseTime     int    `json:"ResponseTime,omitempty"`
				RouteHops        []any  `json:"RouteHops,omitempty"`
				Timeout          int    `json:"Timeout,omitempty"`
			} `json:"TraceRoute,omitempty"`
			UDPEchoConfig struct {
				BytesReceived           int    `json:"BytesReceived,omitempty"`
				BytesResponded          int    `json:"BytesResponded,omitempty"`
				EchoPlusEnabled         bool   `json:"EchoPlusEnabled,omitempty"`
				EchoPlusSupported       bool   `json:"EchoPlusSupported,omitempty"`
				Enable                  bool   `json:"Enable,omitempty"`
				Interface               string `json:"Interface,omitempty"`
				PacketsReceived         int    `json:"PacketsReceived,omitempty"`
				PacketsResponded        int    `json:"PacketsResponded,omitempty"`
				SourceIPAddress         string `json:"SourceIPAddress,omitempty"`
				TimeFirstPacketReceived string `json:"TimeFirstPacketReceived,omitempty"`
				TimeLastPacketReceived  string `json:"TimeLastPacketReceived,omitempty"`
				UDPPort                 int    `json:"UDPPort,omitempty"`
			} `json:"UDPEchoConfig,omitempty"`
			UploadDiagnostics struct {
				BOMTime             string `json:"BOMTime,omitempty"`
				Dscp                int    `json:"DSCP,omitempty"`
				DiagnosticsState    string `json:"DiagnosticsState,omitempty"`
				EOMTime             string `json:"EOMTime,omitempty"`
				EthernetPriority    int    `json:"EthernetPriority,omitempty"`
				Interface           string `json:"Interface,omitempty"`
				ROMTime             string `json:"ROMTime,omitempty"`
				TCPOpenRequestTime  string `json:"TCPOpenRequestTime,omitempty"`
				TCPOpenResponseTime string `json:"TCPOpenResponseTime,omitempty"`
				TestFileLength      int    `json:"TestFileLength,omitempty"`
				TotalBytesSent      int    `json:"TotalBytesSent,omitempty"`
				UploadTransports    string `json:"UploadTransports,omitempty"`
				UploadURL           string `json:"UploadURL,omitempty"`
			} `json:"UploadDiagnostics,omitempty"`
		} `json:"Diagnostics,omitempty"`
		IPv4Capable bool   `json:"IPv4Capable,omitempty"`
		IPv4Enable  bool   `json:"IPv4Enable,omitempty"`
		IPv4Status  string `json:"IPv4Status,omitempty"`
		IPv6Capable bool   `json:"IPv6Capable,omitempty"`
		IPv6Enable  bool   `json:"IPv6Enable,omitempty"`
		IPv6Status  string `json:"IPv6Status,omitempty"`
		Interfaces  []struct {
			Alias          string `json:"Alias,omitempty"`
			AliasID        int    `json:"Alias_id,omitempty"`
			AutoIPEnable   bool   `json:"AutoIPEnable,omitempty"`
			CurrentMTUSize int    `json:"CurrentMTUSize,omitempty"`
			DHCPRelease    bool   `json:"DHCPRelease,omitempty"`
			Enable         bool   `json:"Enable,omitempty"`
			IPv4Addresses  []struct {
				AddressingType string `json:"AddressingType,omitempty"`
				Alias          string `json:"Alias,omitempty"`
				DNS            string `json:"Dns,omitempty"`
				Enable         bool   `json:"Enable,omitempty"`
				IPAddress      string `json:"IPAddress,omitempty"`
				IPGateway      string `json:"IPGateway,omitempty"`
				Status         string `json:"Status,omitempty"`
				SubnetMask     string `json:"SubnetMask,omitempty"`
				UID            int    `json:"uid,omitempty"`
			} `json:"IPv4Addresses,omitempty"`
			IPv4Enable    bool `json:"IPv4Enable,omitempty"`
			IPv6Addresses []struct {
				Alias             string `json:"Alias,omitempty"`
				Anycast           bool   `json:"Anycast,omitempty"`
				Enable            bool   `json:"Enable,omitempty"`
				IPAddress         string `json:"IPAddress,omitempty"`
				IPAddressStatus   string `json:"IPAddressStatus,omitempty"`
				Origin            string `json:"Origin,omitempty"`
				PreferredLifetime string `json:"PreferredLifetime,omitempty"`
				Prefix            string `json:"Prefix,omitempty"`
				Status            string `json:"Status,omitempty"`
				ValidLifetime     string `json:"ValidLifetime,omitempty"`
				UID               int    `json:"uid,omitempty"`
			} `json:"IPv6Addresses,omitempty"`
			IPv6Enable   bool `json:"IPv6Enable,omitempty"`
			IPv6Prefixes []struct {
				Alias             string `json:"Alias,omitempty"`
				Autonomous        bool   `json:"Autonomous,omitempty"`
				ChildPrefixBits   string `json:"ChildPrefixBits,omitempty"`
				Enable            bool   `json:"Enable,omitempty"`
				OnLink            bool   `json:"OnLink,omitempty"`
				Origin            string `json:"Origin,omitempty"`
				ParentPrefix      string `json:"ParentPrefix,omitempty"`
				PreferredLifetime string `json:"PreferredLifetime,omitempty"`
				Prefix            string `json:"Prefix,omitempty"`
				PrefixStatus      string `json:"PrefixStatus,omitempty"`
				StaticType        string `json:"StaticType,omitempty"`
				Status            string `json:"Status,omitempty"`
				ValidLifetime     string `json:"ValidLifetime,omitempty"`
				UID               int    `json:"uid,omitempty"`
			} `json:"IPv6Prefixes,omitempty"`
			IfcName        string `json:"IfcName,omitempty"`
			LastChange     int    `json:"LastChange,omitempty"`
			LastStatsReset int    `json:"LastStatsReset,omitempty"`
			Loopback       bool   `json:"Loopback,omitempty"`
			LowerLayers    string `json:"LowerLayers,omitempty"`
			MaxMTUSize     int    `json:"MaxMTUSize,omitempty"`
			Name           string `json:"Name,omitempty"`
			Reset          bool   `json:"Reset,omitempty"`
			ResetStats     bool   `json:"ResetStats,omitempty"`
			Router         string `json:"Router,omitempty"`
			Stats          struct {
				BroadcastPacketsReceived    string `json:"BroadcastPacketsReceived,omitempty"`
				BroadcastPacketsSent        string `json:"BroadcastPacketsSent,omitempty"`
				BytesReceived               string `json:"BytesReceived,omitempty"`
				BytesSent                   string `json:"BytesSent,omitempty"`
				CollisionsPackets           int    `json:"CollisionsPackets,omitempty"`
				DiscardPacketsReceived      int    `json:"DiscardPacketsReceived,omitempty"`
				DiscardPacketsSent          int    `json:"DiscardPacketsSent,omitempty"`
				ErrorsReceived              int    `json:"ErrorsReceived,omitempty"`
				ErrorsSent                  int    `json:"ErrorsSent,omitempty"`
				MulticastPacketsReceived    string `json:"MulticastPacketsReceived,omitempty"`
				MulticastPacketsSent        string `json:"MulticastPacketsSent,omitempty"`
				PacketsReceived             string `json:"PacketsReceived,omitempty"`
				PacketsSent                 string `json:"PacketsSent,omitempty"`
				RetransCount                int    `json:"RetransCount,omitempty"`
				UnicastPacketsReceived      string `json:"UnicastPacketsReceived,omitempty"`
				UnicastPacketsSent          string `json:"UnicastPacketsSent,omitempty"`
				UnknownProtoPacketsReceived int    `json:"UnknownProtoPacketsReceived,omitempty"`
			} `json:"Stats,omitempty"`
			Status    string `json:"Status,omitempty"`
			StoppedBy string `json:"StoppedBy,omitempty"`
			Type      string `json:"Type,omitempty"`
			ULAEnable bool   `json:"ULAEnable,omitempty"`
			UID       int    `json:"uid,omitempty"`
		} `json:"Interfaces,omitempty"`
		TCPConnections int    `json:"TCPConnections,omitempty"`
		ULAPrefix      string `json:"ULAPrefix,omitempty"`
		XmoConfVersion int    `json:"XmoConfVersion,omitempty"`
	} `json:"IP,omitempty"`
	ISMv2 struct {
		DeviceInets []struct {
			Alias      string `json:"Alias,omitempty"`
			Dscp       int    `json:"DSCP,omitempty"`
			Enable     bool   `json:"Enable,omitempty"`
			Interface  string `json:"Interface,omitempty"`
			Name       string `json:"Name,omitempty"`
			PortListen int    `json:"PortListen,omitempty"`
			PortNotice int    `json:"PortNotice,omitempty"`
			Start      bool   `json:"Start,omitempty"`
			TLS        struct {
				Enable    bool   `json:"Enable,omitempty"`
				PKIClient string `json:"PKIClient,omitempty"`
				PKIServer string `json:"PKIServer,omitempty"`
			} `json:"TLS,omitempty"`
			TimerNoticeCheckRecv int `json:"TimerNoticeCheckRecv,omitempty"`
			TimerNoticeSend      int `json:"TimerNoticeSend,omitempty"`
			UID                  int `json:"uid,omitempty"`
		} `json:"DeviceInets,omitempty"`
		PKIClients []any `json:"PKIClients,omitempty"`
		PKIServers []any `json:"PKIServers,omitempty"`
	} `json:"ISMv2,omitempty"`
	LANConfigSecurity struct {
		ConfigPassword string `json:"ConfigPassword,omitempty"`
	} `json:"LANConfigSecurity,omitempty"`
	MQTT struct {
		Capabilities struct {
			MaxNumberOfBrokerBridgeSubscriptions int    `json:"MaxNumberOfBrokerBridgeSubscriptions,omitempty"`
			MaxNumberOfBrokerBridges             int    `json:"MaxNumberOfBrokerBridges,omitempty"`
			MaxNumberOfClientSubscriptions       int    `json:"MaxNumberOfClientSubscriptions,omitempty"`
			ProtocolVersionsSupported            string `json:"ProtocolVersionsSupported,omitempty"`
			TransportProtocolSupported           string `json:"TransportProtocolSupported,omitempty"`
		} `json:"Capabilities,omitempty"`
		Clients []struct {
			Alias            string `json:"Alias,omitempty"`
			BrokerAddress    string `json:"BrokerAddress,omitempty"`
			BrokerPort       int    `json:"BrokerPort,omitempty"`
			CaFile           string `json:"CaFile,omitempty"`
			CaPath           string `json:"CaPath,omitempty"`
			CertFile         string `json:"CertFile,omitempty"`
			CleanSession     bool   `json:"CleanSession,omitempty"`
			ClientID         string `json:"ClientID,omitempty"`
			ConnectRetryTime int    `json:"ConnectRetryTime,omitempty"`
			Enable           bool   `json:"Enable,omitempty"`
			ForceReconnect   bool   `json:"ForceReconnect,omitempty"`
			Interface        string `json:"Interface,omitempty"`
			KeepAliveTime    int    `json:"KeepAliveTime,omitempty"`
			KeyFile          string `json:"KeyFile,omitempty"`
			MessageRetryTime int    `json:"MessageRetryTime,omitempty"`
			Name             string `json:"Name,omitempty"`
			Password         string `json:"Password,omitempty"`
			ProtocolVersion  string `json:"ProtocolVersion,omitempty"`
			Stats            struct {
				BrokerConnectionEstablished string `json:"BrokerConnectionEstablished,omitempty"`
				ConnectionErrors            int    `json:"ConnectionErrors,omitempty"`
				LastPublishMessageReceived  string `json:"LastPublishMessageReceived,omitempty"`
				LastPublishMessageSent      string `json:"LastPublishMessageSent,omitempty"`
				MQTTMessagesReceived        string `json:"MQTTMessagesReceived,omitempty"`
				MQTTMessagesSent            string `json:"MQTTMessagesSent,omitempty"`
				PublishErrors               int    `json:"PublishErrors,omitempty"`
				PublishReceived             string `json:"PublishReceived,omitempty"`
				PublishSent                 string `json:"PublishSent,omitempty"`
				SubscribeSent               string `json:"SubscribeSent,omitempty"`
				UnSubscribeSent             string `json:"UnSubscribeSent,omitempty"`
			} `json:"Stats,omitempty"`
			Status                 string `json:"Status,omitempty"`
			SubscriptionFileConfig string `json:"SubscriptionFileConfig,omitempty"`
			Subscriptions          []any  `json:"Subscriptions,omitempty"`
			TLSInsecure            bool   `json:"TlsInsecure,omitempty"`
			TransportProtocol      string `json:"TransportProtocol,omitempty"`
			Username               string `json:"Username,omitempty"`
			WillEnable             bool   `json:"WillEnable,omitempty"`
			WillQoS                int    `json:"WillQoS,omitempty"`
			WillRetain             bool   `json:"WillRetain,omitempty"`
			WillTopic              string `json:"WillTopic,omitempty"`
			WillValue              string `json:"WillValue,omitempty"`
			UID                    int    `json:"uid,omitempty"`
		} `json:"Clients,omitempty"`
		Enable bool `json:"Enable,omitempty"`
	} `json:"MQTT,omitempty"`
	NAT struct {
		IPSecPassthroughEnable bool `json:"IPSecPassthroughEnable,omitempty"`
		InterfaceSettings      []struct {
			Alias     string `json:"Alias,omitempty"`
			Enable    bool   `json:"Enable,omitempty"`
			Interface string `json:"Interface,omitempty"`
			SourceIP  string `json:"SourceIP,omitempty"`
			Status    string `json:"Status,omitempty"`
			UID       int    `json:"uid,omitempty"`
		} `json:"InterfaceSettings,omitempty"`
		PPTPPassthroughEnable bool `json:"PPTPPassthroughEnable,omitempty"`
		PortMappings          []struct {
			Alias                 string `json:"Alias,omitempty"`
			AllExternalInterfaces bool   `json:"AllExternalInterfaces,omitempty"`
			Creator               string `json:"Creator,omitempty"`
			Description           string `json:"Description,omitempty"`
			Enable                bool   `json:"Enable,omitempty"`
			ExternalInterface     string `json:"ExternalInterface,omitempty"`
			ExternalPort          int    `json:"ExternalPort,omitempty"`
			ExternalPortEndRange  int    `json:"ExternalPortEndRange,omitempty"`
			InternalClient        string `json:"InternalClient,omitempty"`
			InternalInterface     string `json:"InternalInterface,omitempty"`
			InternalPort          int    `json:"InternalPort,omitempty"`
			LeaseDuration         int    `json:"LeaseDuration,omitempty"`
			LeaseStart            string `json:"LeaseStart,omitempty"`
			Protocol              string `json:"Protocol,omitempty"`
			PublicIP              string `json:"PublicIP,omitempty"`
			RemoteHost            string `json:"RemoteHost,omitempty"`
			Service               string `json:"Service,omitempty"`
			Status                string `json:"Status,omitempty"`
			Target                string `json:"Target,omitempty"`
			UID                   int    `json:"uid,omitempty"`
		} `json:"PortMappings,omitempty"`
		SipAlgSubnet          string `json:"SipAlgSubnet,omitempty"`
		XSAGEMCOMSIPALGEnable bool   `json:"X_SAGEMCOM_SIPALGEnable,omitempty"`
	} `json:"NAT,omitempty"`
	NeighborDiscovery struct {
		Enable            bool `json:"Enable,omitempty"`
		InterfaceSettings []struct {
			Alias                   string `json:"Alias,omitempty"`
			Enable                  bool   `json:"Enable,omitempty"`
			Interface               string `json:"Interface,omitempty"`
			MaxRtrSolicitations     int    `json:"MaxRtrSolicitations,omitempty"`
			NUDEnable               bool   `json:"NUDEnable,omitempty"`
			RSEnable                bool   `json:"RSEnable,omitempty"`
			RetransTimer            int    `json:"RetransTimer,omitempty"`
			RtrSolicitationInterval int    `json:"RtrSolicitationInterval,omitempty"`
			Status                  string `json:"Status,omitempty"`
			UID                     int    `json:"uid,omitempty"`
		} `json:"InterfaceSettings,omitempty"`
	} `json:"NeighborDiscovery,omitempty"`
	Optical struct {
		G988 struct {
			Debug               bool `json:"Debug,omitempty"`
			EquipmentManagement struct {
				Onu2G struct {
					EquipmentID       string `json:"EquipmentId,omitempty"`
					VendorProductCode int    `json:"VendorProductCode,omitempty"`
				} `json:"Onu2G,omitempty"`
				OnuG struct {
					SerialNumber            string `json:"SerialNumber,omitempty"`
					TrafficManagementOption int    `json:"TrafficManagementOption,omitempty"`
					VendorID                string `json:"VendorId,omitempty"`
					Version                 string `json:"Version,omitempty"`
				} `json:"OnuG,omitempty"`
				SoftwareImages []struct {
					IsActive        bool   `json:"IsActive,omitempty"`
					IsCommitted     bool   `json:"IsCommitted,omitempty"`
					IsValid         bool   `json:"IsValid,omitempty"`
					ManagedEntityID int    `json:"ManagedEntityId,omitempty"`
					Version         string `json:"Version,omitempty"`
					UID             int    `json:"uid,omitempty"`
				} `json:"SoftwareImages,omitempty"`
			} `json:"EquipmentManagement,omitempty"`
			General struct {
				OltG struct {
					EquipmentID string `json:"EquipmentId,omitempty"`
					OltVendorID string `json:"OltVendorId,omitempty"`
					Version     string `json:"Version,omitempty"`
				} `json:"OltG,omitempty"`
			} `json:"General,omitempty"`
			GponState string `json:"GponState,omitempty"`
			Logging   struct {
				Destination string `json:"Destination,omitempty"`
				Level       string `json:"Level,omitempty"`
			} `json:"Logging,omitempty"`
			OnuMode         string `json:"OnuMode,omitempty"`
			OperatorConf    bool   `json:"OperatorConf,omitempty"`
			QosModeRG       bool   `json:"QosModeRG,omitempty"`
			RegID           string `json:"RegId,omitempty"`
			Software0UbiDev string `json:"Software0UbiDev,omitempty"`
			Software1UbiDev string `json:"Software1UbiDev,omitempty"`
		} `json:"G988,omitempty"`
		Interfaces []OpticalInterface `json:"Interfaces,omitempty"`
	} `json:"Optical,omitempty"`
	PPP struct {
		Interfaces []struct {
			Alias                               string `json:"Alias,omitempty"`
			AuthenticationProtocol              string `json:"AuthenticationProtocol,omitempty"`
			AutoDisconnectTime                  int    `json:"AutoDisconnectTime,omitempty"`
			BFState                             string `json:"BFState,omitempty"`
			ChapMaxResponse                     int    `json:"ChapMaxResponse,omitempty"`
			ChapResponseRestart                 int    `json:"ChapResponseRestart,omitempty"`
			CompressionProtocol                 string `json:"CompressionProtocol,omitempty"`
			ConnectionStatus                    string `json:"ConnectionStatus,omitempty"`
			ConnectionTrigger                   string `json:"ConnectionTrigger,omitempty"`
			CurrentMRUSize                      int    `json:"CurrentMRUSize,omitempty"`
			DefaultRoute                        string `json:"DefaultRoute,omitempty"`
			Enable                              bool   `json:"Enable,omitempty"`
			EncryptionProtocol                  string `json:"EncryptionProtocol,omitempty"`
			Holdoff                             int    `json:"Holdoff,omitempty"`
			HoldoffAuthFailedAdd                int    `json:"HoldoffAuthFailedAdd,omitempty"`
			HoldoffAuthFailedAdditionalsRetries int    `json:"HoldoffAuthFailedAdditionalsRetries,omitempty"`
			HoldoffAuthFailedInit               int    `json:"HoldoffAuthFailedInit,omitempty"`
			HoldoffAuthFailedMax                int    `json:"HoldoffAuthFailedMax,omitempty"`
			HoldoffAuthFailedRetries            int    `json:"HoldoffAuthFailedRetries,omitempty"`
			HoldoffLcpEchoTimeout               bool   `json:"HoldoffLcpEchoTimeout,omitempty"`
			HoldoffPeerNoResource               bool   `json:"HoldoffPeerNoResource,omitempty"`
			IPCP                                struct {
				DNSServers          string `json:"DNSServers,omitempty"`
				LocalIPAddress      string `json:"LocalIPAddress,omitempty"`
				PassthroughDHCPPool string `json:"PassthroughDHCPPool,omitempty"`
				PassthroughEnable   bool   `json:"PassthroughEnable,omitempty"`
				RemoteIPAddress     string `json:"RemoteIPAddress,omitempty"`
			} `json:"IPCP,omitempty"`
			IPCPEnable bool `json:"IPCPEnable,omitempty"`
			IPv6CP     struct {
				Eui64UseEnable            bool   `json:"Eui64UseEnable,omitempty"`
				LocalInterfaceIdentifier  string `json:"LocalInterfaceIdentifier,omitempty"`
				RemoteInterfaceIdentifier string `json:"RemoteInterfaceIdentifier,omitempty"`
			} `json:"IPv6CP,omitempty"`
			IPv6CPEnable                bool     `json:"IPv6CPEnable,omitempty"`
			IdleDisconnectTime          int      `json:"IdleDisconnectTime,omitempty"`
			IfcName                     string   `json:"IfcName,omitempty"`
			InternalLastConnectionError string   `json:"InternalLastConnectionError,omitempty"`
			IpcpMaxConfigure            int      `json:"IpcpMaxConfigure,omitempty"`
			IpcpMaxTerminate            int      `json:"IpcpMaxTerminate,omitempty"`
			IpcpRestart                 int      `json:"IpcpRestart,omitempty"`
			IpcpTermRestart             int      `json:"IpcpTermRestart,omitempty"`
			LCPEcho                     int      `json:"LCPEcho,omitempty"`
			LCPEchoRetry                int      `json:"LCPEchoRetry,omitempty"`
			LastChange                  int      `json:"LastChange,omitempty"`
			LastConnectionError         string   `json:"LastConnectionError,omitempty"`
			LastStatsReset              int      `json:"LastStatsReset,omitempty"`
			LcpMaxConfigure             int      `json:"LcpMaxConfigure,omitempty"`
			LcpMaxTerminate             int      `json:"LcpMaxTerminate,omitempty"`
			LcpRestart                  int      `json:"LcpRestart,omitempty"`
			LcpTermRestart              int      `json:"LcpTermRestart,omitempty"`
			LowerLayers                 string   `json:"LowerLayers,omitempty"`
			MaxFail                     int      `json:"MaxFail,omitempty"`
			MaxMRUSize                  int      `json:"MaxMRUSize,omitempty"`
			Name                        string   `json:"Name,omitempty"`
			NoCCP                       bool     `json:"NoCCP,omitempty"`
			PPPoA                       struct{} `json:"PPPoA,omitempty"`
			PPPoE                       struct {
				ACName              string `json:"ACName,omitempty"`
				OldPPPoESessionOpen string `json:"OldPPPoESessionOpen,omitempty"`
				RemoteMac           string `json:"RemoteMac,omitempty"`
				ServiceName         string `json:"ServiceName,omitempty"`
				SessionID           int    `json:"SessionID,omitempty"`
			} `json:"PPPoE,omitempty"`
			PPPoEMaxPadi                 int    `json:"PPPoEMaxPadi,omitempty"`
			PPPoEMaxPadiInterval         int    `json:"PPPoEMaxPadiInterval,omitempty"`
			PPPoEPadi1StRandom           bool   `json:"PPPoEPadi1stRandom,omitempty"`
			PPPoEPadiInterval            int    `json:"PPPoEPadiInterval,omitempty"`
			PPPoEPadrInterval            int    `json:"PPPoEPadrInterval,omitempty"`
			PPPoEPadrIntervalStatic      bool   `json:"PPPoEPadrIntervalStatic,omitempty"`
			PPPoEUseMaxPadiAfterSrvError bool   `json:"PPPoEUseMaxPadiAfterSrvError,omitempty"`
			PapMaxAuthReq                int    `json:"PapMaxAuthReq,omitempty"`
			PapRestart                   int    `json:"PapRestart,omitempty"`
			Password                     string `json:"Password,omitempty"`
			PeerAuth                     struct {
				AuthType string `json:"AuthType,omitempty"`
				Chap     string `json:"Chap,omitempty"`
				Eap      string `json:"Eap,omitempty"`
				MsChap   string `json:"MsChap,omitempty"`
				MsChapV2 string `json:"MsChapV2,omitempty"`
				Pap      string `json:"Pap,omitempty"`
			} `json:"PeerAuth,omitempty"`
			Reset      bool   `json:"Reset,omitempty"`
			ResetStats bool   `json:"ResetStats,omitempty"`
			SMUState   string `json:"SMUState,omitempty"`
			SelfAuth   struct {
				Chap     string `json:"Chap,omitempty"`
				Eap      string `json:"Eap,omitempty"`
				MsChap   string `json:"MsChap,omitempty"`
				MsChapV2 string `json:"MsChapV2,omitempty"`
				Pap      string `json:"Pap,omitempty"`
			} `json:"SelfAuth,omitempty"`
			Stats struct {
				BroadcastPacketsReceived    string `json:"BroadcastPacketsReceived,omitempty"`
				BroadcastPacketsSent        string `json:"BroadcastPacketsSent,omitempty"`
				BytesReceived               string `json:"BytesReceived,omitempty"`
				BytesSent                   string `json:"BytesSent,omitempty"`
				CollisionsPackets           int    `json:"CollisionsPackets,omitempty"`
				DiscardPacketsReceived      int    `json:"DiscardPacketsReceived,omitempty"`
				DiscardPacketsSent          int    `json:"DiscardPacketsSent,omitempty"`
				ErrorsReceived              int    `json:"ErrorsReceived,omitempty"`
				ErrorsSent                  int    `json:"ErrorsSent,omitempty"`
				MulticastPacketsReceived    string `json:"MulticastPacketsReceived,omitempty"`
				MulticastPacketsSent        string `json:"MulticastPacketsSent,omitempty"`
				PacketsReceived             string `json:"PacketsReceived,omitempty"`
				PacketsSent                 string `json:"PacketsSent,omitempty"`
				RetransCount                int    `json:"RetransCount,omitempty"`
				UnicastPacketsReceived      string `json:"UnicastPacketsReceived,omitempty"`
				UnicastPacketsSent          string `json:"UnicastPacketsSent,omitempty"`
				UnknownProtoPacketsReceived int    `json:"UnknownProtoPacketsReceived,omitempty"`
			} `json:"Stats,omitempty"`
			Status              string `json:"Status,omitempty"`
			StoppedBy           string `json:"StoppedBy,omitempty"`
			SupportedNCPs       string `json:"SupportedNCPs,omitempty"`
			TransportType       string `json:"TransportType,omitempty"`
			UnitNumber          int    `json:"UnitNumber,omitempty"`
			UseRandom1StHoldoff bool   `json:"UseRandom1stHoldoff,omitempty"`
			Username            string `json:"Username,omitempty"`
			WarnDisconnectDelay int    `json:"WarnDisconnectDelay,omitempty"`
			UID                 int    `json:"uid,omitempty"`
		} `json:"Interfaces,omitempty"`
		SupportedNCPs string `json:"SupportedNCPs,omitempty"`
	} `json:"PPP,omitempty"`
	PeriodicStatistics struct {
		MaxReportSamples  int   `json:"MaxReportSamples,omitempty"`
		MinSampleInterval int   `json:"MinSampleInterval,omitempty"`
		SampleSets        []any `json:"SampleSets,omitempty"`
	} `json:"PeriodicStatistics,omitempty"`
	RestoreInfo struct {
		AvailableBackups []any `json:"AvailableBackups,omitempty"`
		BackupInfo       struct {
			LastDailyBackup   string `json:"LastDailyBackup,omitempty"`
			LastManualBackup  string `json:"LastManualBackup,omitempty"`
			LastMonthlyBackup string `json:"LastMonthlyBackup,omitempty"`
			LastWeeklyBackup  string `json:"LastWeeklyBackup,omitempty"`
		} `json:"BackupInfo,omitempty"`
		FileFieldName  string `json:"FileFieldName,omitempty"`
		LastRestore    string `json:"LastRestore,omitempty"`
		URLKOFieldName string `json:"UrlKOFieldName,omitempty"`
		URLOKFieldName string `json:"UrlOKFieldName,omitempty"`
		URLRestore     string `json:"UrlRestore,omitempty"`
	} `json:"RestoreInfo,omitempty"`
	RootDataModelVersion string `json:"RootDataModelVersion,omitempty"`
	RouterAdvertisement  struct {
		Enable            bool `json:"Enable,omitempty"`
		InterfaceSettings []struct {
			AdvCurHopLimit             int    `json:"AdvCurHopLimit,omitempty"`
			AdvDefaultLifetime         int    `json:"AdvDefaultLifetime,omitempty"`
			AdvLinkMTU                 int    `json:"AdvLinkMTU,omitempty"`
			AdvManagedFlag             bool   `json:"AdvManagedFlag,omitempty"`
			AdvMobileAgentFlag         bool   `json:"AdvMobileAgentFlag,omitempty"`
			AdvNDProxyFlag             bool   `json:"AdvNDProxyFlag,omitempty"`
			AdvOtherConfigFlag         bool   `json:"AdvOtherConfigFlag,omitempty"`
			AdvPreferredRouterFlag     string `json:"AdvPreferredRouterFlag,omitempty"`
			AdvReachableTime           int    `json:"AdvReachableTime,omitempty"`
			AdvRetransTimer            int    `json:"AdvRetransTimer,omitempty"`
			Alias                      string `json:"Alias,omitempty"`
			Enable                     bool   `json:"Enable,omitempty"`
			Interface                  string `json:"Interface,omitempty"`
			ManualPrefixes             string `json:"ManualPrefixes,omitempty"`
			MaxRtrAdvInterval          int    `json:"MaxRtrAdvInterval,omitempty"`
			MinRtrAdvInterval          int    `json:"MinRtrAdvInterval,omitempty"`
			NeighAdvertisementInterval int    `json:"NeighAdvertisementInterval,omitempty"`
			Options                    []struct {
				Alias  string `json:"Alias,omitempty"`
				Enable bool   `json:"Enable,omitempty"`
				Tag    int    `json:"Tag,omitempty"`
				Value  string `json:"Value,omitempty"`
				UID    int    `json:"uid,omitempty"`
			} `json:"Options,omitempty"`
			Prefixes string `json:"Prefixes,omitempty"`
			Status   string `json:"Status,omitempty"`
			UID      int    `json:"uid,omitempty"`
		} `json:"InterfaceSettings,omitempty"`
	} `json:"RouterAdvertisement,omitempty"`
	Routing struct {
		Rip struct {
			Enable                            bool   `json:"Enable,omitempty"`
			InterfaceSettings                 []any  `json:"InterfaceSettings,omitempty"`
			Redistribute                      string `json:"Redistribute,omitempty"`
			SupportedModes                    string `json:"SupportedModes,omitempty"`
			XSAGEMCOMAdvertisementInterval    int    `json:"X_SAGEMCOM_AdvertisementInterval,omitempty"`
			XSAGEMCOMRIPIPPrefix              []any  `json:"X_SAGEMCOM_RIPIPPrefix,omitempty"`
			XSAGEMCOMRIPNATRoutedSubnetEnable bool   `json:"X_SAGEMCOM_RIPNATRoutedSubnetEnable,omitempty"`
		} `json:"RIP,omitempty"`
		RouteInformation struct {
			Enable            bool  `json:"Enable,omitempty"`
			InterfaceSettings []any `json:"InterfaceSettings,omitempty"`
		} `json:"RouteInformation,omitempty"`
		Routers []struct {
			Alias           string `json:"Alias,omitempty"`
			DefaultRouter   bool   `json:"DefaultRouter,omitempty"`
			Enable          bool   `json:"Enable,omitempty"`
			IPv4Forwardings []struct {
				Alias            string `json:"Alias,omitempty"`
				DestIPAddress    string `json:"DestIPAddress,omitempty"`
				DestSubnetMask   string `json:"DestSubnetMask,omitempty"`
				DeviceName       string `json:"DeviceName,omitempty"`
				Enable           bool   `json:"Enable,omitempty"`
				ForwardingMetric int    `json:"ForwardingMetric,omitempty"`
				ForwardingPolicy int    `json:"ForwardingPolicy,omitempty"`
				GatewayIPAddress string `json:"GatewayIPAddress,omitempty"`
				Interface        string `json:"Interface,omitempty"`
				NbRef            int    `json:"NbRef,omitempty"`
				Origin           string `json:"Origin,omitempty"`
				Source           string `json:"Source,omitempty"`
				StaticRoute      bool   `json:"StaticRoute,omitempty"`
				Status           string `json:"Status,omitempty"`
				UID              int    `json:"uid,omitempty"`
			} `json:"IPv4Forwardings,omitempty"`
			IPv6Forwardings []any  `json:"IPv6Forwardings,omitempty"`
			Status          string `json:"Status,omitempty"`
			UID             int    `json:"uid,omitempty"`
		} `json:"Routers,omitempty"`
	} `json:"Routing,omitempty"`
	SelfTestDiagnostics struct {
		DiagnosticsState string `json:"DiagnosticsState,omitempty"`
		Results          string `json:"Results,omitempty"`
	} `json:"SelfTestDiagnostics,omitempty"`
	Services struct {
		Activation struct {
			RequestCount int `json:"RequestCount,omitempty"`
		} `json:"Activation,omitempty"`
		BellBandwidthMonitoring struct {
			BillingDay          int    `json:"BillingDay,omitempty"`
			CurrentDate         string `json:"CurrentDate,omitempty"`
			DateList            string `json:"DateList,omitempty"`
			HostNumberOfEntries int    `json:"HostNumberOfEntries,omitempty"`
			Hosts               []any  `json:"Hosts,omitempty"`
			PreviousDate        string `json:"PreviousDate,omitempty"`
			RetentionPeriod     int    `json:"RetentionPeriod,omitempty"`
			Stats               struct {
				CurrentDayReceived  int    `json:"CurrentDayReceived,omitempty"`
				CurrentDaySent      int    `json:"CurrentDaySent,omitempty"`
				PreviousDayReceived int    `json:"PreviousDayReceived,omitempty"`
				PreviousDaySent     int    `json:"PreviousDaySent,omitempty"`
				ReceivedList        string `json:"ReceivedList,omitempty"`
				SentList            string `json:"SentList,omitempty"`
			} `json:"Stats,omitempty"`
		} `json:"BellBandwidthMonitoring,omitempty"`
		BellCredentialsRequestEmail struct {
			RequestCount int `json:"RequestCount,omitempty"`
		} `json:"BellCredentialsRequestEmail,omitempty"`
		BellIGMPStatistics struct {
			Enable                   bool  `json:"Enable,omitempty"`
			MessagesReceived         int   `json:"MessagesReceived,omitempty"`
			QueriesReceived          int   `json:"QueriesReceived,omitempty"`
			Stream                   []any `json:"Stream,omitempty"`
			V2LeaveMessagesReceived  int   `json:"V2LeaveMessagesReceived,omitempty"`
			V2ReportMessagesReceived int   `json:"V2ReportMessagesReceived,omitempty"`
			V3ReportMessagesReceived int   `json:"V3ReportMessagesReceived,omitempty"`
		} `json:"BellIGMPStatistics,omitempty"`
		BellInformationalEmail struct {
			ClearTextAuthEnable      bool   `json:"ClearTextAuthEnable,omitempty"`
			DestinationAddress       string `json:"DestinationAddress,omitempty"`
			Enable                   bool   `json:"Enable,omitempty"`
			SMTPPassword             string `json:"SMTPPassword,omitempty"`
			SMTPServerAddress        string `json:"SMTPServerAddress,omitempty"`
			SMTPUsername             string `json:"SMTPUsername,omitempty"`
			SecurePasswordAuthEnable bool   `json:"SecurePasswordAuthEnable,omitempty"`
		} `json:"BellInformationalEmail,omitempty"`
		BellNetworkCfg struct {
			AdvancedDMZ struct {
				AdvancedDMZhost string `json:"AdvancedDMZhost,omitempty"`
				Enable          bool   `json:"Enable,omitempty"`
				Status          string `json:"Status,omitempty"`
			} `json:"AdvancedDMZ,omitempty"`
			AutoSensingMode     string `json:"AutoSensingMode,omitempty"`
			BandwidthMonitoring struct {
				CollectingPeriod int    `json:"CollectingPeriod,omitempty"`
				Enable           bool   `json:"Enable,omitempty"`
				HistoryPeriod    int    `json:"HistoryPeriod,omitempty"`
				Status           string `json:"Status,omitempty"`
			} `json:"BandwidthMonitoring,omitempty"`
			ButtonOsmEnable             bool   `json:"ButtonOsmEnable,omitempty"`
			FirmwareRollback            bool   `json:"FirmwareRollback,omitempty"`
			FirmwareRollbackMinVersion  string `json:"FirmwareRollbackMinVersion,omitempty"`
			IPTVEnable                  bool   `json:"IPTVEnable,omitempty"`
			IPv6Allowed                 bool   `json:"IPv6Allowed,omitempty"`
			InterfaceType               string `json:"InterfaceType,omitempty"`
			KnownSTBMacAddresses        string `json:"KnownSTBMacAddresses,omitempty"`
			KnownVAPMacAddresses        string `json:"KnownVAPMacAddresses,omitempty"`
			LanOsmEnable                bool   `json:"LanOsmEnable,omitempty"`
			LedOsmEnable                bool   `json:"LedOsmEnable,omitempty"`
			ResetIPTVService            bool   `json:"ResetIPTVService,omitempty"`
			ResetInternetService        bool   `json:"ResetInternetService,omitempty"`
			ResetVoiceService           bool   `json:"ResetVoiceService,omitempty"`
			SSHEnable                   bool   `json:"SSHEnable,omitempty"`
			ScreenOsmEnable             bool   `json:"ScreenOsmEnable,omitempty"`
			SetBridgeMode               string `json:"SetBridgeMode,omitempty"`
			SetIPTVInterface            int    `json:"SetIPTVInterface,omitempty"`
			SetIPTVMode                 string `json:"SetIPTVMode,omitempty"`
			SetIVoIPInterface           string `json:"SetIVoIPInterface,omitempty"`
			SetInternetMode             string `json:"SetInternetMode,omitempty"`
			SetServicesMode             string `json:"SetServicesMode,omitempty"`
			TVOsmEnable                 bool   `json:"TVOsmEnable,omitempty"`
			TelnetEnable                bool   `json:"TelnetEnable,omitempty"`
			TemperatureMonitorOsmEnable bool   `json:"TemperatureMonitorOsmEnable,omitempty"`
			TemperatureMonitoring       struct {
				DisplayInUI                 bool   `json:"DisplayInUI,omitempty"`
				DisplayOnScreen             bool   `json:"DisplayOnScreen,omitempty"`
				ListFeaturesPreviousState   int    `json:"ListFeaturesPreviousState,omitempty"`
				ListFeaturesShutdown        int    `json:"ListFeaturesShutdown,omitempty"`
				Mode                        string `json:"Mode,omitempty"`
				RebootCountDown             int    `json:"RebootCountDown,omitempty"`
				Temperature                 int    `json:"Temperature,omitempty"`
				TemperatureMonitoringPeriod int    `json:"TemperatureMonitoringPeriod,omitempty"`
				Thresholds                  string `json:"Thresholds,omitempty"`
			} `json:"TemperatureMonitoring,omitempty"`
			VoiceAllowedWANModes string `json:"VoiceAllowedWANModes,omitempty"`
			VoiceEnable          bool   `json:"VoiceEnable,omitempty"`
			WANSSHBlockTimer     int    `json:"WANSSHBlockTimer,omitempty"`
			WANSSHSessionTimer   int    `json:"WANSSHSessionTimer,omitempty"`
			WanMode              string `json:"WanMode,omitempty"`
			WanModeVoiceLock     bool   `json:"WanModeVoiceLock,omitempty"`
			WanType              string `json:"WanType,omitempty"`
		} `json:"BellNetworkCfg,omitempty"`
		BellPPPoEPassthrough struct {
			Client []any `json:"Client,omitempty"`
			Enable bool  `json:"Enable,omitempty"`
		} `json:"BellPPPoEPassthrough,omitempty"`
		CLIPassword string `json:"CLIPassword,omitempty"`
		DynamicDNS  struct {
			Clients []struct {
				Alias     string `json:"Alias,omitempty"`
				Enable    bool   `json:"Enable,omitempty"`
				Hidden    bool   `json:"Hidden,omitempty"`
				Hostnames []struct {
					LastIP     string `json:"LastIP,omitempty"`
					LastUpdate string `json:"LastUpdate,omitempty"`
					Name       string `json:"Name,omitempty"`
					Status     string `json:"Status,omitempty"`
					UID        int    `json:"uid,omitempty"`
				} `json:"Hostnames,omitempty"`
				Interface                  string `json:"Interface,omitempty"`
				LastError                  string `json:"LastError,omitempty"`
				Offline                    bool   `json:"Offline,omitempty"`
				Password                   string `json:"Password,omitempty"`
				RemoteApplicationHTTPSPort int    `json:"RemoteApplicationHTTPSPort,omitempty"`
				ServiceEnum                string `json:"ServiceEnum,omitempty"`
				ServiceReference           string `json:"ServiceReference,omitempty"`
				Status                     string `json:"Status,omitempty"`
				Username                   string `json:"Username,omitempty"`
				UID                        int    `json:"uid,omitempty"`
			} `json:"Clients,omitempty"`
			Services []struct {
				Authentication string `json:"Authentication,omitempty"`
				GUIName        string `json:"GUIName,omitempty"`
				MaxRetries     int    `json:"MaxRetries,omitempty"`
				Name           string `json:"Name,omitempty"`
				Request        string `json:"Request,omitempty"`
				RetryInterval  int    `json:"RetryInterval,omitempty"`
				Server         string `json:"Server,omitempty"`
				ServerPort     int    `json:"ServerPort,omitempty"`
				UpdateInterval int    `json:"UpdateInterval,omitempty"`
				UID            int    `json:"uid,omitempty"`
			} `json:"Services,omitempty"`
		} `json:"DynamicDNS,omitempty"`
		IPTVDNSStatus     bool `json:"IPTVDNSStatus,omitempty"`
		InternetDNSStatus bool `json:"InternetDNSStatus,omitempty"`
		Notification      struct {
			CellularFailoverCount              int    `json:"CellularFailoverCount,omitempty"`
			CellularFailoverNotificationEnable bool   `json:"CellularFailoverNotificationEnable,omitempty"`
			ContactDisplay                     bool   `json:"ContactDisplay,omitempty"`
			CredentialsRequestCount            int    `json:"CredentialsRequestCount,omitempty"`
			CredentialsRequestEnable           bool   `json:"CredentialsRequestEnable,omitempty"`
			DestinationEmailAddress            string `json:"DestinationEmailAddress,omitempty"`
			DestinationSMSNumber               string `json:"DestinationSMSNumber,omitempty"`
			DisplayOnScreen                    bool   `json:"DisplayOnScreen,omitempty"`
			Email                              bool   `json:"Email,omitempty"`
			EndOfLifeBatteryNotificationCount  int    `json:"EndOfLifeBatteryNotificationCount,omitempty"`
			EndOfLifeBatteryNotificationEnable bool   `json:"EndOfLifeBatteryNotificationEnable,omitempty"`
			IgnoreDisabled                     bool   `json:"IgnoreDisabled,omitempty"`
			IgnoreNullDestinationAddress       bool   `json:"IgnoreNullDestinationAddress,omitempty"`
			Sms                                bool   `json:"SMS,omitempty"`
		} `json:"Notification,omitempty"`
		Plume struct {
			CloudAddress   string `json:"CloudAddress,omitempty"`
			Enable         string `json:"Enable,omitempty"`
			LocationID     string `json:"LocationID,omitempty"`
			OVSDBPort      int    `json:"OVSDBPort,omitempty"`
			PlumeCloudPort string `json:"PlumeCloudPort,omitempty"`
			Restart        bool   `json:"Restart,omitempty"`
			SavedMode      string `json:"SavedMode,omitempty"`
			Status         int    `json:"Status,omitempty"`
			SyslogLevel    string `json:"SyslogLevel,omitempty"`
			WhiteList      string `json:"WhiteList,omitempty"`
		} `json:"Plume,omitempty"`
		Schedulers struct {
			Schedulers []any `json:"Schedulers,omitempty"`
		} `json:"Schedulers,omitempty"`
		ServicesDNSStatus bool `json:"ServicesDNSStatus,omitempty"`
		SetLEDState       bool `json:"SetLEDState,omitempty"`
		StorageServices   []struct {
			Capabilities struct {
				FTPCapable                bool   `json:"FTPCapable,omitempty"`
				HTTPCapable               bool   `json:"HTTPCapable,omitempty"`
				HTTPSCapable              bool   `json:"HTTPSCapable,omitempty"`
				HTTPWritable              bool   `json:"HTTPWritable,omitempty"`
				SFTPCapable               bool   `json:"SFTPCapable,omitempty"`
				SupportedFileSystemTypes  string `json:"SupportedFileSystemTypes,omitempty"`
				SupportedNetworkProtocols string `json:"SupportedNetworkProtocols,omitempty"`
				SupportedRaidTypes        string `json:"SupportedRaidTypes,omitempty"`
				VolumeEncryptionCapable   bool   `json:"VolumeEncryptionCapable,omitempty"`
			} `json:"Capabilities,omitempty"`
			DefaultLogicalVolumesName string `json:"DefaultLogicalVolumesName,omitempty"`
			Enable                    bool   `json:"Enable,omitempty"`
			FTPServer                 struct {
				AnonymousUser struct {
					Enable         bool   `json:"Enable,omitempty"`
					ReadOnlyAccess bool   `json:"ReadOnlyAccess,omitempty"`
					StartingFolder string `json:"StartingFolder,omitempty"`
				} `json:"AnonymousUser,omitempty"`
				Enable      bool   `json:"Enable,omitempty"`
				IdleTime    int    `json:"IdleTime,omitempty"`
				MaxNumUsers int    `json:"MaxNumUsers,omitempty"`
				PortNumber  int    `json:"PortNumber,omitempty"`
				Status      string `json:"Status,omitempty"`
			} `json:"FTPServer,omitempty"`
			HTTPSServer struct {
				AuthenticationReq  bool   `json:"AuthenticationReq,omitempty"`
				Enable             bool   `json:"Enable,omitempty"`
				HTTPWritingEnabled bool   `json:"HTTPWritingEnabled,omitempty"`
				IdleTime           int    `json:"IdleTime,omitempty"`
				MaxNumUsers        int    `json:"MaxNumUsers,omitempty"`
				PortNumber         int    `json:"PortNumber,omitempty"`
				Status             string `json:"Status,omitempty"`
			} `json:"HTTPSServer,omitempty"`
			HTTPServer struct {
				AuthenticationReq  bool   `json:"AuthenticationReq,omitempty"`
				Enable             bool   `json:"Enable,omitempty"`
				HTTPWritingEnabled bool   `json:"HTTPWritingEnabled,omitempty"`
				IdleTime           int    `json:"IdleTime,omitempty"`
				MaxNumUsers        int    `json:"MaxNumUsers,omitempty"`
				PortNumber         int    `json:"PortNumber,omitempty"`
				Status             string `json:"Status,omitempty"`
			} `json:"HTTPServer,omitempty"`
			LogicalVolumes []any `json:"LogicalVolumes,omitempty"`
			NetInfo        struct {
				DomainName string `json:"DomainName,omitempty"`
				HostName   string `json:"HostName,omitempty"`
			} `json:"NetInfo,omitempty"`
			NetworkServer struct {
				AFPEnable              bool `json:"AFPEnable,omitempty"`
				NFSEnable              bool `json:"NFSEnable,omitempty"`
				NetworkProtocolAuthReq bool `json:"NetworkProtocolAuthReq,omitempty"`
				SMBEnable              bool `json:"SMBEnable,omitempty"`
			} `json:"NetworkServer,omitempty"`
			PhysicalMediums []any `json:"PhysicalMediums,omitempty"`
			Printers        struct {
				Enable         bool  `json:"Enable,omitempty"`
				PrinterDevices []any `json:"PrinterDevices,omitempty"`
			} `json:"Printers,omitempty"`
			SFTPServer struct {
				Enable      bool   `json:"Enable,omitempty"`
				IdleTime    int    `json:"IdleTime,omitempty"`
				MaxNumUsers int    `json:"MaxNumUsers,omitempty"`
				PortNumber  int    `json:"PortNumber,omitempty"`
				Status      string `json:"Status,omitempty"`
			} `json:"SFTPServer,omitempty"`
			StorageArrays []any `json:"StorageArrays,omitempty"`
			UserAccounts  []any `json:"UserAccounts,omitempty"`
			UserGroups    []any `json:"UserGroups,omitempty"`
			UID           int   `json:"uid,omitempty"`
		} `json:"StorageServices,omitempty"`
		VoiceOnlyEnable bool `json:"VoiceOnlyEnable,omitempty"`
		VoiceServices   []struct {
			Alias   string `json:"Alias,omitempty"`
			Battery struct {
				CriticalBatteryNotificationEnable bool   `json:"CriticalBatteryNotificationEnable,omitempty"`
				Enable                            bool   `json:"Enable,omitempty"`
				LowBatteryNotificationEnable      bool   `json:"LowBatteryNotificationEnable,omitempty"`
				NotificationFile                  string `json:"NotificationFile,omitempty"`
				NotificationInterval              int    `json:"NotificationInterval,omitempty"`
			} `json:"Battery,omitempty"`
			CallControl struct {
				CallLogNumberOfEntries  int    `json:"CallLogNumberOfEntries,omitempty"`
				CallLogs                []any  `json:"CallLogs,omitempty"`
				IncomingMaps            []any  `json:"IncomingMaps,omitempty"`
				InterDigitTimerOpen     int    `json:"InterDigitTimerOpen,omitempty"`
				InterDigitTimerStd      int    `json:"InterDigitTimerStd,omitempty"`
				Mailboxs                []any  `json:"Mailboxs,omitempty"`
				MaxIncomingCallLogCount int    `json:"MaxIncomingCallLogCount,omitempty"`
				MaxOutgoingCallLogCount int    `json:"MaxOutgoingCallLogCount,omitempty"`
				NumberingPlans          []any  `json:"NumberingPlans,omitempty"`
				OutgoingMaps            []any  `json:"OutgoingMaps,omitempty"`
				TerminationDigit        string `json:"TerminationDigit,omitempty"`
			} `json:"CallControl,omitempty"`
			CallingNumber string `json:"CallingNumber,omitempty"`
			Capabilities  struct {
				ButtonMap               bool  `json:"ButtonMap,omitempty"`
				Codecs                  []any `json:"Codecs,omitempty"`
				DSCPCoupled             bool  `json:"DSCPCoupled,omitempty"`
				DigitMap                bool  `json:"DigitMap,omitempty"`
				EthernetTaggingCoupled  bool  `json:"EthernetTaggingCoupled,omitempty"`
				FaxPassThrough          bool  `json:"FaxPassThrough,omitempty"`
				FaxT38                  bool  `json:"FaxT38,omitempty"`
				FileBasedRingGeneration bool  `json:"FileBasedRingGeneration,omitempty"`
				FileBasedToneGeneration bool  `json:"FileBasedToneGeneration,omitempty"`
				H323                    struct {
					FastStart                 bool   `json:"FastStart,omitempty"`
					H235AuthenticationMethods string `json:"H235AuthenticationMethods,omitempty"`
				} `json:"H323,omitempty"`
				Mgcp struct {
					Extensions string `json:"Extensions,omitempty"`
				} `json:"MGCP,omitempty"`
				MaxLineCount               int    `json:"MaxLineCount,omitempty"`
				MaxProfileCount            int    `json:"MaxProfileCount,omitempty"`
				MaxSessionCount            int    `json:"MaxSessionCount,omitempty"`
				MaxSessionsPerLine         int    `json:"MaxSessionsPerLine,omitempty"`
				ModemPassThrough           bool   `json:"ModemPassThrough,omitempty"`
				NumberingPlan              bool   `json:"NumberingPlan,omitempty"`
				PSTNSoftSwitchOver         bool   `json:"PSTNSoftSwitchOver,omitempty"`
				PatternBasedRingGeneration bool   `json:"PatternBasedRingGeneration,omitempty"`
				PatternBasedToneGeneration bool   `json:"PatternBasedToneGeneration,omitempty"`
				Rtcp                       bool   `json:"RTCP,omitempty"`
				RTPRedundancy              bool   `json:"RTPRedundancy,omitempty"`
				Regions                    string `json:"Regions,omitempty"`
				RingDescriptionsEditable   bool   `json:"RingDescriptionsEditable,omitempty"`
				RingFileFormats            string `json:"RingFileFormats,omitempty"`
				RingGeneration             bool   `json:"RingGeneration,omitempty"`
				RingPatternEditable        bool   `json:"RingPatternEditable,omitempty"`
				Sip                        struct {
					EventSubscription          bool   `json:"EventSubscription,omitempty"`
					Extensions                 string `json:"Extensions,omitempty"`
					ResponseMap                bool   `json:"ResponseMap,omitempty"`
					Role                       string `json:"Role,omitempty"`
					TLSAuthenticationKeySizes  string `json:"TLSAuthenticationKeySizes,omitempty"`
					TLSAuthenticationProtocols string `json:"TLSAuthenticationProtocols,omitempty"`
					TLSEncryptionKeySizes      string `json:"TLSEncryptionKeySizes,omitempty"`
					TLSEncryptionProtocols     string `json:"TLSEncryptionProtocols,omitempty"`
					TLSKeyExchangeProtocols    string `json:"TLSKeyExchangeProtocols,omitempty"`
					Transports                 string `json:"Transports,omitempty"`
					URISchemes                 string `json:"URISchemes,omitempty"`
				} `json:"SIP,omitempty"`
				Srtp                     bool   `json:"SRTP,omitempty"`
				SRTPEncryptionKeySizes   string `json:"SRTPEncryptionKeySizes,omitempty"`
				SRTPKeyingMethods        string `json:"SRTPKeyingMethods,omitempty"`
				SignalingProtocols       string `json:"SignalingProtocols,omitempty"`
				ToneDescriptionsEditable bool   `json:"ToneDescriptionsEditable,omitempty"`
				ToneFileFormats          string `json:"ToneFileFormats,omitempty"`
				ToneGeneration           bool   `json:"ToneGeneration,omitempty"`
				VoicePortTests           bool   `json:"VoicePortTests,omitempty"`
			} `json:"Capabilities,omitempty"`
			Contacts          []any `json:"Contacts,omitempty"`
			Enable            bool  `json:"Enable,omitempty"`
			ExtensionProfiles []any `json:"ExtensionProfiles,omitempty"`
			IVR               struct {
				AlternativeShortNumber string `json:"AlternativeShortNumber,omitempty"`
				DayNightSchedule       struct {
					Enable              bool  `json:"Enable,omitempty"`
					ManagementNightDays []any `json:"ManagementNightDays,omitempty"`
				} `json:"DayNightSchedule,omitempty"`
				DirectCallRestrictionID int    `json:"DirectCallRestrictionID,omitempty"`
				ExternalNumber          string `json:"ExternalNumber,omitempty"`
				Keys                    []any  `json:"Keys,omitempty"`
				Name                    string `json:"Name,omitempty"`
				Number                  int    `json:"Number,omitempty"`
				RepeatDelay             string `json:"RepeatDelay,omitempty"`
				RepeatTime              string `json:"RepeatTime,omitempty"`
				RingbackEnable          bool   `json:"RingbackEnable,omitempty"`
			} `json:"IVR,omitempty"`
			Messages        []any `json:"Messages,omitempty"`
			NetworkProfiles []any `json:"NetworkProfiles,omitempty"`
			PhyInterfaces   []struct {
				Alias           string `json:"Alias,omitempty"`
				CallingFeatures struct {
					CallTransferEnable        bool `json:"CallTransferEnable,omitempty"`
					CallWaitingEnable         bool `json:"CallWaitingEnable,omitempty"`
					CallWaitingTimeout        int  `json:"CallWaitingTimeout,omitempty"`
					CallingFeatureEnable      bool `json:"CallingFeatureEnable,omitempty"`
					DoubleCallEnable          bool `json:"DoubleCallEnable,omitempty"`
					LocalAnnouncementEnable   bool `json:"LocalAnnouncementEnable,omitempty"`
					MWIEnable                 bool `json:"MWIEnable,omitempty"`
					XSAGEMCOMConferenceEnable bool `json:"X_SAGEMCOM_ConferenceEnable,omitempty"`
					XSAGEMCOMVMWIEnable       bool `json:"X_SAGEMCOM_VMWIEnable,omitempty"`
				} `json:"CallingFeatures,omitempty"`
				CodecLists []struct {
					EntryID   int    `json:"EntryID,omitempty"`
					FXSStatus string `json:"FXSStatus,omitempty"`
					UID       int    `json:"uid,omitempty"`
				} `json:"CodecLists,omitempty"`
				Description      string `json:"Description,omitempty"`
				FXSStatus        string `json:"FXSStatus,omitempty"`
				FlashhookEnable  bool   `json:"FlashhookEnable,omitempty"`
				ForceDTMFInband  bool   `json:"ForceDTMFInband,omitempty"`
				InterfaceID      int    `json:"InterfaceID,omitempty"`
				Number           string `json:"Number,omitempty"`
				OutGoingLine     string `json:"OutGoingLine,omitempty"`
				PhyInterfaceType string `json:"PhyInterfaceType,omitempty"`
				PhyPort          string `json:"PhyPort,omitempty"`
				Status           string `json:"Status,omitempty"`
				StatusTime       string `json:"StatusTime,omitempty"`
				Tests            struct {
					TestResult   string `json:"TestResult,omitempty"`
					TestSelector string `json:"TestSelector,omitempty"`
					TestState    string `json:"TestState,omitempty"`
				} `json:"Tests,omitempty"`
				XSagemcomDectusb struct {
					CurrentNbPP        int    `json:"CurrentNbPP,omitempty"`
					Enable             bool   `json:"Enable,omitempty"`
					Status             string `json:"Status,omitempty"`
					SubscriptionEnable string `json:"SubscriptionEnable,omitempty"`
				} `json:"X_SAGEMCOM_DECTUSB,omitempty"`
				XSagemcomDectFp struct {
					CipheringEnable        bool   `json:"CipheringEnable,omitempty"`
					ClockMastered          bool   `json:"ClockMastered,omitempty"`
					CurrentNbPP            int    `json:"CurrentNbPP,omitempty"`
					EepromVersion          string `json:"EepromVersion,omitempty"`
					Enable                 bool   `json:"Enable,omitempty"`
					EncryptionType         string `json:"EncryptionType,omitempty"`
					ErrorStatus            string `json:"ErrorStatus,omitempty"`
					FUPercent              int    `json:"FUPercent,omitempty"`
					FirmwareVersion        string `json:"FirmwareVersion,omitempty"`
					HardwareVersion        string `json:"HardwareVersion,omitempty"`
					InternalListMngtEnable bool   `json:"InternalListMngtEnable,omitempty"`
					MaxSupportedPP         int    `json:"MaxSupportedPP,omitempty"`
					NEMOEnable             bool   `json:"NEMOEnable,omitempty"`
					Pin                    string `json:"PIN,omitempty"`
					Rfpi                   string `json:"RFPI,omitempty"`
					RFPowerControl         string `json:"RFPowerControl,omitempty"`
					RepeaterSupportEnabled bool   `json:"RepeaterSupportEnabled,omitempty"`
					Reset                  bool   `json:"Reset,omitempty"`
					Standard               string `json:"Standard,omitempty"`
					Status                 string `json:"Status,omitempty"`
					SubscriptionEnable     string `json:"SubscriptionEnable,omitempty"`
					SubscriptionTimeout    int    `json:"SubscriptionTimeout,omitempty"`
				} `json:"X_SAGEMCOM_DECT_FP,omitempty"`
				XSagemcomDectPp struct {
					Control                                 string `json:"Control,omitempty"`
					EMCforSUOTA                             int    `json:"EMCforSUOTA,omitempty"`
					HandsetRole                             string `json:"HandsetRole,omitempty"`
					HandsetType                             string `json:"HandsetType,omitempty"`
					HardwareVersion                         string `json:"HardwareVersion,omitempty"`
					InternationalPortableEquipementIdentity string `json:"InternationalPortableEquipementIdentity,omitempty"`
					InternationalPortableUserIdentity       string `json:"InternationalPortableUserIdentity,omitempty"`
					LastUpdateDateTime                      string `json:"LastUpdateDateTime,omitempty"`
					PortableAccessRightsKey                 string `json:"PortableAccessRightsKey,omitempty"`
					RFPIAttachedTo                          string `json:"RFPIAttachedTo,omitempty"`
					SoftwareUpgrade                         bool   `json:"SoftwareUpgrade,omitempty"`
					SoftwareVersion                         string `json:"SoftwareVersion,omitempty"`
					Status                                  string `json:"Status,omitempty"`
					SubscriptionTime                        string `json:"SubscriptionTime,omitempty"`
				} `json:"X_SAGEMCOM_DECT_PP,omitempty"`
				XSagemcomFxs struct {
					CallerIDDateTimeEnable bool `json:"CallerIdDateTimeEnable,omitempty"`
					EchoCancellationEnable bool `json:"EchoCancellationEnable,omitempty"`
					ReceiveGain            int  `json:"ReceiveGain,omitempty"`
					TransmitGain           int  `json:"TransmitGain,omitempty"`
				} `json:"X_SAGEMCOM_FXS,omitempty"`
				UID int `json:"uid,omitempty"`
			} `json:"PhyInterfaces,omitempty"`
			RegionalOptions []any `json:"RegionalOptions,omitempty"`
			SIP             struct {
				RegistrarNumberOfEntries int   `json:"RegistrarNumberOfEntries,omitempty"`
				Registrars               []any `json:"Registrars,omitempty"`
			} `json:"SIP,omitempty"`
			Tone struct {
				Descriptions []any `json:"Descriptions,omitempty"`
			} `json:"Tone,omitempty"`
			VoIPProfiles []any `json:"VoIPProfiles,omitempty"`
			VoiceMail    struct {
				MaxAccess       int    `json:"MaxAccess,omitempty"`
				Number          int    `json:"Number,omitempty"`
				NumberRemoteExt string `json:"NumberRemoteExt,omitempty"`
				NumberRemoteInt int    `json:"NumberRemoteInt,omitempty"`
				SMTP            struct {
					From     string `json:"From,omitempty"`
					Login    string `json:"Login,omitempty"`
					Password string `json:"Password,omitempty"`
					Server   string `json:"Server,omitempty"`
				} `json:"SMTP,omitempty"`
			} `json:"VoiceMail,omitempty"`
			VoiceProfiles []struct {
				BackupInterfaceSwitchCounter int `json:"BackupInterfaceSwitchCounter,omitempty"`
				ButtonMap                    struct {
					Buttons         []any `json:"Buttons,omitempty"`
					NumberOfButtons int   `json:"NumberOfButtons,omitempty"`
				} `json:"ButtonMap,omitempty"`
				DTMFMethod     string `json:"DTMFMethod,omitempty"`
				DTMFMethodG711 string `json:"DTMFMethodG711,omitempty"`
				DigitMapEnable bool   `json:"DigitMapEnable,omitempty"`
				DigitMaps      []any  `json:"DigitMaps,omitempty"`
				Emergency      struct {
					AutoRingBackEnable            bool   `json:"AutoRingBackEnable,omitempty"`
					BlockCallingFeaturesEnable    bool   `json:"BlockCallingFeaturesEnable,omitempty"`
					CalledPartyHoldEnable         bool   `json:"CalledPartyHoldEnable,omitempty"`
					CalledPartyHoldTimer          int    `json:"CalledPartyHoldTimer,omitempty"`
					DigitMap                      string `json:"DigitMap,omitempty"`
					Enable                        bool   `json:"Enable,omitempty"`
					EnhancedCalledPartyHoldEnable bool   `json:"EnhancedCalledPartyHoldEnable,omitempty"`
					EnhancedCalledPartyHoldTimer  int    `json:"EnhancedCalledPartyHoldTimer,omitempty"`
				} `json:"Emergency,omitempty"`
				Enable                    string `json:"Enable,omitempty"`
				FQDNServerNumberOfEntries int    `json:"FQDNServerNumberOfEntries,omitempty"`
				FQDNServers               []any  `json:"FQDNServers,omitempty"`
				FaxPassThrough            string `json:"FaxPassThrough,omitempty"`
				FaxT38                    struct {
					BitRate             int    `json:"BitRate,omitempty"`
					ECMTransport        bool   `json:"ECMTransport,omitempty"`
					Enable              bool   `json:"Enable,omitempty"`
					HighSpeedPacketRate int    `json:"HighSpeedPacketRate,omitempty"`
					HighSpeedRedundancy int    `json:"HighSpeedRedundancy,omitempty"`
					LowSpeedRedundancy  int    `json:"LowSpeedRedundancy,omitempty"`
					TCFMethod           string `json:"TCFMethod,omitempty"`
				} `json:"FaxT38,omitempty"`
				LastBackupInterfaceTime string `json:"LastBackupInterfaceTime,omitempty"`
				Lines                   []struct {
					CallState       string `json:"CallState,omitempty"`
					CallingFeatures struct {
						AnonymousCalEnable                bool   `json:"AnonymousCalEnable,omitempty"`
						AnonymousCallBlockEnable          bool   `json:"AnonymousCallBlockEnable,omitempty"`
						BlindCallTransferEnable           bool   `json:"BlindCallTransferEnable,omitempty"`
						CallDeclineEnable                 bool   `json:"CallDeclineEnable,omitempty"`
						CallForwardOnBusyActCode          string `json:"CallForwardOnBusyActCode,omitempty"`
						CallForwardOnBusyDeactCode        string `json:"CallForwardOnBusyDeactCode,omitempty"`
						CallForwardOnBusyEnable           bool   `json:"CallForwardOnBusyEnable,omitempty"`
						CallForwardOnBusyNumber           string `json:"CallForwardOnBusyNumber,omitempty"`
						CallForwardOnNoAnswerActCode      string `json:"CallForwardOnNoAnswerActCode,omitempty"`
						CallForwardOnNoAnswerDeactCode    string `json:"CallForwardOnNoAnswerDeactCode,omitempty"`
						CallForwardOnNoAnswerEnable       bool   `json:"CallForwardOnNoAnswerEnable,omitempty"`
						CallForwardOnNoAnswerNumber       string `json:"CallForwardOnNoAnswerNumber,omitempty"`
						CallForwardOnNoAnswerRingCount    int    `json:"CallForwardOnNoAnswerRingCount,omitempty"`
						CallForwardUnconditionalActCode   string `json:"CallForwardUnconditionalActCode,omitempty"`
						CallForwardUnconditionalDeactCode string `json:"CallForwardUnconditionalDeactCode,omitempty"`
						CallForwardUnconditionalEnable    bool   `json:"CallForwardUnconditionalEnable,omitempty"`
						CallForwardUnconditionalNumber    string `json:"CallForwardUnconditionalNumber,omitempty"`
						CallParkingEnable                 bool   `json:"CallParkingEnable,omitempty"`
						CallParkingMode                   string `json:"CallParkingMode,omitempty"`
						CallParkingTimeout                int    `json:"CallParkingTimeout,omitempty"`
						CallReturnEnable                  bool   `json:"CallReturnEnable,omitempty"`
						CallTransferEnable                bool   `json:"CallTransferEnable,omitempty"`
						CallWaitingEnable                 bool   `json:"CallWaitingEnable,omitempty"`
						CallWaitingStatus                 string `json:"CallWaitingStatus,omitempty"`
						CallWaitingTimeout                int    `json:"CallWaitingTimeout,omitempty"`
						CallerIDEnable                    bool   `json:"CallerIDEnable,omitempty"`
						CallerIDName                      string `json:"CallerIDName,omitempty"`
						CallerIDNameEnable                bool   `json:"CallerIDNameEnable,omitempty"`
						ConferenceCallingSessionCount     int    `json:"ConferenceCallingSessionCount,omitempty"`
						ConferenceCallingStatus           string `json:"ConferenceCallingStatus,omitempty"`
						DNDNbCallAttempts                 int    `json:"DND_NbCallAttempts,omitempty"`
						DNDNoActivityTimeout              int    `json:"DND_NoActivityTimeout,omitempty"`
						DoNotDisturbEnable                bool   `json:"DoNotDisturbEnable,omitempty"`
						DoubleCallEnable                  bool   `json:"DoubleCallEnable,omitempty"`
						HotLineEnable                     bool   `json:"HotLineEnable,omitempty"`
						HotLineWarmLineURI                string `json:"HotLineWarmLineURI,omitempty"`
						MWIEnable                         bool   `json:"MWIEnable,omitempty"`
						MaxSessions                       int    `json:"MaxSessions,omitempty"`
						MessageWaiting                    bool   `json:"MessageWaiting,omitempty"`
						MultiCallEnable                   bool   `json:"MultiCallEnable,omitempty"`
						OutgoingCallEnable                bool   `json:"OutgoingCallEnable,omitempty"`
						PermanentCLIRActCode              string `json:"PermanentCLIRActCode,omitempty"`
						PermanentCLIRDeactCode            string `json:"PermanentCLIRDeactCode,omitempty"`
						PermanentCLIREnable               bool   `json:"PermanentCLIREnable,omitempty"`
						RepeatDialEnable                  bool   `json:"RepeatDialEnable,omitempty"`
						WarmLineActCode                   string `json:"WarmLineActCode,omitempty"`
						WarmLineDeactCode                 string `json:"WarmLineDeactCode,omitempty"`
						WarmLineEnable                    bool   `json:"WarmLineEnable,omitempty"`
						WarmLineTimeout                   int    `json:"WarmLineTimeout,omitempty"`
						XSAGEMCOMCLIPEnable               bool   `json:"X_SAGEMCOM_CLIPEnable,omitempty"`
						XSAGEMCOMCNIPEnable               bool   `json:"X_SAGEMCOM_CNIPEnable,omitempty"`
						XSAGEMCOMConferenceEnable         bool   `json:"X_SAGEMCOM_ConferenceEnable,omitempty"`
						XSAGEMCOMVMWIEnable               bool   `json:"X_SAGEMCOM_VMWIEnable,omitempty"`
					} `json:"CallingFeatures,omitempty"`
					Codec struct {
						Lists []struct {
							BitRate                      int    `json:"BitRate,omitempty"`
							Codec                        string `json:"Codec,omitempty"`
							Enable                       bool   `json:"Enable,omitempty"`
							EntryID                      int    `json:"EntryID,omitempty"`
							PacketizationPeriod          string `json:"PacketizationPeriod,omitempty"`
							PreferredPacketisationPeriod int    `json:"PreferredPacketisationPeriod,omitempty"`
							Priority                     int    `json:"Priority,omitempty"`
							SilenceSuppression           bool   `json:"SilenceSuppression,omitempty"`
							UID                          int    `json:"uid,omitempty"`
						} `json:"Lists,omitempty"`
						ReceiveBitRate              int    `json:"ReceiveBitRate,omitempty"`
						ReceiveCodec                string `json:"ReceiveCodec,omitempty"`
						ReceiveSilenceSuppression   bool   `json:"ReceiveSilenceSuppression,omitempty"`
						TransmitBitRate             int    `json:"TransmitBitRate,omitempty"`
						TransmitCodec               string `json:"TransmitCodec,omitempty"`
						TransmitPacketizationPeriod int    `json:"TransmitPacketizationPeriod,omitempty"`
						TransmitSilenceSuppression  bool   `json:"TransmitSilenceSuppression,omitempty"`
					} `json:"Codec,omitempty"`
					DirectoryNumber  string `json:"DirectoryNumber,omitempty"`
					Enable           string `json:"Enable,omitempty"`
					ErrorCode        string `json:"ErrorCode,omitempty"`
					LineID           int    `json:"LineId,omitempty"`
					Name             string `json:"Name,omitempty"`
					PhyReferenceList string `json:"PhyReferenceList,omitempty"`
					RingMuteStatus   bool   `json:"RingMuteStatus,omitempty"`
					RingVolumeStatus int    `json:"RingVolumeStatus,omitempty"`
					Ringer           struct {
						Descriptions []struct {
							EntryID     int    `json:"EntryID,omitempty"`
							RingEnable  bool   `json:"RingEnable,omitempty"`
							RingFile    string `json:"RingFile,omitempty"`
							RingName    string `json:"RingName,omitempty"`
							RingPattern int    `json:"RingPattern,omitempty"`
							UID         int    `json:"uid,omitempty"`
						} `json:"Descriptions,omitempty"`
						Events   []any `json:"Events,omitempty"`
						Patterns []any `json:"Patterns,omitempty"`
					} `json:"Ringer,omitempty"`
					Sessions []any `json:"Sessions,omitempty"`
					Stats    struct {
						AverageFarEndInterarrivalJitter  int    `json:"AverageFarEndInterarrivalJitter,omitempty"`
						AverageReceiveInterarrivalJitter int    `json:"AverageReceiveInterarrivalJitter,omitempty"`
						AverageRoundTripDelay            int    `json:"AverageRoundTripDelay,omitempty"`
						BytesReceived                    int    `json:"BytesReceived,omitempty"`
						BytesSent                        int    `json:"BytesSent,omitempty"`
						CallsDropped                     int    `json:"CallsDropped,omitempty"`
						FarEndInterarrivalJitter         int    `json:"FarEndInterarrivalJitter,omitempty"`
						FarEndPacketLossRate             int    `json:"FarEndPacketLossRate,omitempty"`
						IncomingCallsAnswered            int    `json:"IncomingCallsAnswered,omitempty"`
						IncomingCallsConnected           int    `json:"IncomingCallsConnected,omitempty"`
						IncomingCallsFailed              int    `json:"IncomingCallsFailed,omitempty"`
						IncomingCallsReceived            int    `json:"IncomingCallsReceived,omitempty"`
						OutgoingCallsAnswered            int    `json:"OutgoingCallsAnswered,omitempty"`
						OutgoingCallsAttempted           int    `json:"OutgoingCallsAttempted,omitempty"`
						OutgoingCallsConnected           int    `json:"OutgoingCallsConnected,omitempty"`
						OutgoingCallsFailed              int    `json:"OutgoingCallsFailed,omitempty"`
						Overruns                         int    `json:"Overruns,omitempty"`
						PacketsLost                      int    `json:"PacketsLost,omitempty"`
						PacketsReceived                  int    `json:"PacketsReceived,omitempty"`
						PacketsSent                      int    `json:"PacketsSent,omitempty"`
						ReceiveInterarrivalJitter        int    `json:"ReceiveInterarrivalJitter,omitempty"`
						ReceivePacketLossRate            int    `json:"ReceivePacketLossRate,omitempty"`
						ResetStatistics                  bool   `json:"ResetStatistics,omitempty"`
						RoundTripDelay                   int    `json:"RoundTripDelay,omitempty"`
						ServerDownTime                   int    `json:"ServerDownTime,omitempty"`
						TotalCallTime                    int    `json:"TotalCallTime,omitempty"`
						Underruns                        int    `json:"Underruns,omitempty"`
						XSAGEMCOMLastCalledNumber        string `json:"X_SAGEMCOM_LastCalledNumber,omitempty"`
					} `json:"Stats,omitempty"`
					Status          string `json:"Status,omitempty"`
					StatusReason    string `json:"StatusReason,omitempty"`
					VoiceMail       string `json:"VoiceMail,omitempty"`
					VoiceProcessing struct {
						EchoCancellationEnable bool `json:"EchoCancellationEnable,omitempty"`
						EchoCancellationInUse  bool `json:"EchoCancellationInUse,omitempty"`
						EchoCancellationTail   int  `json:"EchoCancellationTail,omitempty"`
						ReceiveGain            int  `json:"ReceiveGain,omitempty"`
						TransmitGain           int  `json:"TransmitGain,omitempty"`
					} `json:"VoiceProcessing,omitempty"`
					XSAGEMCOMMaxSessions int `json:"X_SAGEMCOM_MaxSessions,omitempty"`
					UID                  int `json:"uid,omitempty"`
				} `json:"Lines,omitempty"`
				MaxSessions                         int    `json:"MaxSessions,omitempty"`
				ModemPassThrough                    string `json:"ModemPassThrough,omitempty"`
				Name                                string `json:"Name,omitempty"`
				NonVoiceBandwidthReservedDownstream int    `json:"NonVoiceBandwidthReservedDownstream,omitempty"`
				NonVoiceBandwidthReservedUpstream   int    `json:"NonVoiceBandwidthReservedUpstream,omitempty"`
				NumberOfLines                       int    `json:"NumberOfLines,omitempty"`
				NumberingPlan                       struct {
					FirstDigitTimer              int    `json:"FirstDigitTimer,omitempty"`
					FlashHookTimer               int    `json:"FlashHookTimer,omitempty"`
					InterDigitTimerOpen          int    `json:"InterDigitTimerOpen,omitempty"`
					InterDigitTimerStd           int    `json:"InterDigitTimerStd,omitempty"`
					InvalidNumberTone            int    `json:"InvalidNumberTone,omitempty"`
					MaximumNumberOfDigits        int    `json:"MaximumNumberOfDigits,omitempty"`
					MinimumNumberOfDigits        int    `json:"MinimumNumberOfDigits,omitempty"`
					PrefixInfos                  []any  `json:"PrefixInfos,omitempty"`
					XSAGEMCOMEndOfNumberingDigit string `json:"X_SAGEMCOM_EndOfNumberingDigit,omitempty"`
				} `json:"NumberingPlan,omitempty"`
				PLCMode             string `json:"PLCMode,omitempty"`
				PSTNFailOver        bool   `json:"PSTNFailOver,omitempty"`
				Region              string `json:"Region,omitempty"`
				Reset               bool   `json:"Reset,omitempty"`
				STUNEnable          bool   `json:"STUNEnable,omitempty"`
				STUNServer          string `json:"STUNServer,omitempty"`
				ServiceProviderInfo struct {
					ContactPhoneNumber string `json:"ContactPhoneNumber,omitempty"`
					EmailAddress       string `json:"EmailAddress,omitempty"`
					Name               string `json:"Name,omitempty"`
					URL                string `json:"URL,omitempty"`
				} `json:"ServiceProviderInfo,omitempty"`
				SignalingProtocol                string `json:"SignalingProtocol,omitempty"`
				Status                           string `json:"Status,omitempty"`
				VoiceBackupInterfaceEnable       bool   `json:"VoiceBackupInterfaceEnable,omitempty"`
				VoiceBackupInterfaceStatus       string `json:"VoiceBackupInterfaceStatus,omitempty"`
				VoiceBackupInterfaceStatusReason string `json:"VoiceBackupInterfaceStatusReason,omitempty"`
				UID                              int    `json:"uid,omitempty"`
			} `json:"VoiceProfiles,omitempty"`
			XSAGEMCOMDECTBaseEnable bool `json:"X_SAGEMCOM_DECTBaseEnable,omitempty"`
			XSAGEMCOMMaxLicense     int  `json:"X_SAGEMCOM_MaxLicense,omitempty"`
			XSAGEMCOMPSTNEnable     bool `json:"X_SAGEMCOM_PSTNEnable,omitempty"`
			XSAGEMCOMVoiceBehavior  struct {
				BackupInterface struct {
					FailOverInterfaceDownDuringCallTimer int `json:"FailOverInterfaceDownDuringCallTimer,omitempty"`
					FailOverInterfaceDownTimer           int `json:"FailOverInterfaceDownTimer,omitempty"`
					FailOverInviteNoRespTimer            int `json:"FailOverInviteNoRespTimer,omitempty"`
					FailOverRegisterNoRespTimer          int `json:"FailOverRegisterNoRespTimer,omitempty"`
				} `json:"BackupInterface,omitempty"`
				LocalAnnouncement struct {
					PauseDelayMs  int    `json:"PauseDelayMs,omitempty"`
					RepeatNumber  int    `json:"RepeatNumber,omitempty"`
					StartDelayMs  int    `json:"StartDelayMs,omitempty"`
					StopDigitList string `json:"StopDigitList,omitempty"`
				} `json:"LocalAnnouncement,omitempty"`
			} `json:"X_SAGEMCOM_VoiceBehavior,omitempty"`
			XSAGEMCOMVoiceManagement struct {
				AutoStart                      bool   `json:"AutoStart,omitempty"`
				BfProcessCertifMode            bool   `json:"BfProcessCertifMode,omitempty"`
				BfProcessDebugMode             bool   `json:"BfProcessDebugMode,omitempty"`
				BfProcessName                  string `json:"BfProcessName,omitempty"`
				BfProcessUnexpectedTerminateNb int    `json:"BfProcessUnexpectedTerminateNb,omitempty"`
				DataInterface                  string `json:"DataInterface,omitempty"`
				FxoInterface                   string `json:"FxoInterface,omitempty"`
				IP6Enable                      bool   `json:"IP6Enable,omitempty"`
				MonitoringEnable               bool   `json:"MonitoringEnable,omitempty"`
				UseOption120                   bool   `json:"UseOption120,omitempty"`
				VoiceCallEmergencyInProgress   bool   `json:"VoiceCallEmergencyInProgress,omitempty"`
				VoiceConfigLocked              bool   `json:"VoiceConfigLocked,omitempty"`
				VoiceServiceEnable             bool   `json:"VoiceServiceEnable,omitempty"`
				VoipBackupInterface            string `json:"VoipBackupInterface,omitempty"`
				VoipInterface                  string `json:"VoipInterface,omitempty"`
			} `json:"X_SAGEMCOM_VoiceManagement,omitempty"`
			UID int `json:"uid,omitempty"`
		} `json:"VoiceServices,omitempty"`
	} `json:"Services,omitempty"`
	Time struct {
		CurrentLocalTime      string `json:"CurrentLocalTime,omitempty"`
		DaylightSavingTime    string `json:"DaylightSavingTime,omitempty"`
		Enable                bool   `json:"Enable,omitempty"`
		Interfaces            string `json:"Interfaces,omitempty"`
		LocalTimeZone         string `json:"LocalTimeZone,omitempty"`
		LocalTimeZoneName     string `json:"LocalTimeZoneName,omitempty"`
		LocalTimeZoneNameReal string `json:"LocalTimeZoneNameReal,omitempty"`
		NTPRetryInterval      string `json:"NTPRetryInterval,omitempty"`
		NTPServer1            string `json:"NTPServer1,omitempty"`
		NTPServer2            string `json:"NTPServer2,omitempty"`
		NTPServer3            string `json:"NTPServer3,omitempty"`
		NTPServer4            string `json:"NTPServer4,omitempty"`
		NTPServer5            string `json:"NTPServer5,omitempty"`
		NTPSyncInterval       int    `json:"NTPSyncInterval,omitempty"`
		Status                string `json:"Status,omitempty"`
	} `json:"Time,omitempty"`
	Tunneling struct {
		TunnelsL2 []any `json:"TunnelsL2,omitempty"`
	} `json:"Tunneling,omitempty"`
	UPA struct {
		Diagnostics struct {
			InterfaceMeasurement struct {
				DiagnosticsState string `json:"DiagnosticsState,omitempty"`
				Interface        string `json:"Interface,omitempty"`
				Measurements     string `json:"Measurements,omitempty"`
				Port             int    `json:"Port,omitempty"`
				RxGain           int    `json:"RxGain,omitempty"`
				Type             string `json:"Type,omitempty"`
			} `json:"InterfaceMeasurement,omitempty"`
		} `json:"Diagnostics,omitempty"`
		Interfaces []any `json:"Interfaces,omitempty"`
	} `json:"UPA,omitempty"`
	UPnP struct {
		Description struct {
			DeviceDescription []any `json:"DeviceDescription,omitempty"`
			DeviceInstance    []any `json:"DeviceInstance,omitempty"`
			ServiceInstance   []any `json:"ServiceInstance,omitempty"`
		} `json:"Description,omitempty"`
		Device struct {
			Capabilities struct {
				UPnPArchitecture         int `json:"UPnPArchitecture,omitempty"`
				UPnPArchitectureMinorVer int `json:"UPnPArchitectureMinorVer,omitempty"`
				UPnPBasicDevice          int `json:"UPnPBasicDevice,omitempty"`
				UPnPDMBasicMgmt          int `json:"UPnPDMBasicMgmt,omitempty"`
				UPnPDMConfigurationMgmt  int `json:"UPnPDMConfigurationMgmt,omitempty"`
				UPnPDMSoftwareMgmt       int `json:"UPnPDMSoftwareMgmt,omitempty"`
				UPnPIGD                  int `json:"UPnPIGD,omitempty"`
				UPnPMediaRenderer        int `json:"UPnPMediaRenderer,omitempty"`
				UPnPMediaServer          int `json:"UPnPMediaServer,omitempty"`
				UPnPQoSDevice            int `json:"UPnPQoSDevice,omitempty"`
				UPnPQoSPolicyHolder      int `json:"UPnPQoSPolicyHolder,omitempty"`
				UPnPWLANAccessPoint      int `json:"UPnPWLANAccessPoint,omitempty"`
			} `json:"Capabilities,omitempty"`
			Enable   bool `json:"Enable,omitempty"`
			Services struct {
				UPnPIGD struct {
					RulesAutoCleanEnable bool `json:"RulesAutoCleanEnable,omitempty"`
				} `json:"UPnPIGD,omitempty"`
			} `json:"Services,omitempty"`
			UPnPDMBasicMgmt         bool `json:"UPnPDMBasicMgmt,omitempty"`
			UPnPDMConfigurationMgmt bool `json:"UPnPDMConfigurationMgmt,omitempty"`
			UPnPDMSoftwareMgmt      bool `json:"UPnPDMSoftwareMgmt,omitempty"`
			UPnPIGD                 bool `json:"UPnPIGD,omitempty"`
			UPnPMediaRenderer       bool `json:"UPnPMediaRenderer,omitempty"`
			UPnPMediaServer         bool `json:"UPnPMediaServer,omitempty"`
			UPnPQoSDevice           bool `json:"UPnPQoSDevice,omitempty"`
			UPnPQoSPolicyHolder     bool `json:"UPnPQoSPolicyHolder,omitempty"`
			UPnPWLANAccessPoint     bool `json:"UPnPWLANAccessPoint,omitempty"`
		} `json:"Device,omitempty"`
		Discovery struct {
			Devices []struct {
				FriendlyName string `json:"FriendlyName,omitempty"`
				Host         string `json:"Host,omitempty"`
				LastUpdate   string `json:"LastUpdate,omitempty"`
				LeaseTime    int    `json:"LeaseTime,omitempty"`
				Location     string `json:"Location,omitempty"`
				Manufacturer string `json:"Manufacturer,omitempty"`
				MediaType    string `json:"MediaType,omitempty"`
				ModelName    string `json:"ModelName,omitempty"`
				Port         int    `json:"Port,omitempty"`
				Server       string `json:"Server,omitempty"`
				Status       string `json:"Status,omitempty"`
				Usn          string `json:"USN,omitempty"`
				UUID         string `json:"UUID,omitempty"`
				UserAgent    string `json:"UserAgent,omitempty"`
				UID          int    `json:"uid,omitempty"`
			} `json:"Devices,omitempty"`
			RootDevices []struct {
				Host       string `json:"Host,omitempty"`
				LastUpdate string `json:"LastUpdate,omitempty"`
				LeaseTime  int    `json:"LeaseTime,omitempty"`
				Location   string `json:"Location,omitempty"`
				Port       int    `json:"Port,omitempty"`
				Server     string `json:"Server,omitempty"`
				Status     string `json:"Status,omitempty"`
				Usn        string `json:"USN,omitempty"`
				UUID       string `json:"UUID,omitempty"`
				UserAgent  string `json:"UserAgent,omitempty"`
				UID        int    `json:"uid,omitempty"`
			} `json:"RootDevices,omitempty"`
			Services []struct {
				Host         string `json:"Host,omitempty"`
				LastUpdate   string `json:"LastUpdate,omitempty"`
				LeaseTime    int    `json:"LeaseTime,omitempty"`
				Location     string `json:"Location,omitempty"`
				ParentDevice string `json:"ParentDevice,omitempty"`
				Port         int    `json:"Port,omitempty"`
				Server       string `json:"Server,omitempty"`
				Status       string `json:"Status,omitempty"`
				Usn          string `json:"USN,omitempty"`
				UserAgent    string `json:"UserAgent,omitempty"`
				UID          int    `json:"uid,omitempty"`
			} `json:"Services,omitempty"`
		} `json:"Discovery,omitempty"`
		Settings struct {
			ExtendedUPnPSecurity bool   `json:"ExtendedUPnPSecurity,omitempty"`
			Instance             string `json:"Instance,omitempty"`
			LanInterface         string `json:"LanInterface,omitempty"`
			UPnP                 struct {
				TimeoutPolling int `json:"TimeoutPolling,omitempty"`
			} `json:"UPnP,omitempty"`
			UPnPIGD struct {
				AccessProvider        string `json:"AccessProvider,omitempty"`
				AdvertisementInterval int    `json:"AdvertisementInterval,omitempty"`
				AdvertisementTTL      int    `json:"AdvertisementTTL,omitempty"`
				AuthorizationEnable   bool   `json:"AuthorizationEnable,omitempty"`
				DebugLevel            string `json:"DebugLevel,omitempty"`
				DefaultDuration       int    `json:"DefaultDuration,omitempty"`
				DefaultHTTPSPort      int    `json:"DefaultHttpsPort,omitempty"`
				IGDRelease            string `json:"IGDRelease,omitempty"`
				InternetGatewayDevice struct {
					FriendlyName     string `json:"FriendlyName,omitempty"`
					Manufacturer     string `json:"Manufacturer,omitempty"`
					ManufacturerURL  string `json:"ManufacturerURL,omitempty"`
					ModelDescription string `json:"ModelDescription,omitempty"`
					ModelName        string `json:"ModelName,omitempty"`
					ModelNumber      string `json:"ModelNumber,omitempty"`
					ModelURL         string `json:"ModelURL,omitempty"`
					PresentationURL  string `json:"PresentationURL,omitempty"`
					SerialNumber     string `json:"SerialNumber,omitempty"`
					Upc              string `json:"UPC,omitempty"`
				} `json:"InternetGatewayDevice,omitempty"`
				Layer3ForwardingEnable string `json:"Layer3ForwardingEnable,omitempty"`
				MaxRulesNumber         int    `json:"MaxRulesNumber,omitempty"`
				PnPX                   struct {
					CompatibleID       string `json:"CompatibleId,omitempty"`
					DfDeviceCategory   string `json:"DfDeviceCategory,omitempty"`
					Did                string `json:"Did,omitempty"`
					Enable             bool   `json:"Enable,omitempty"`
					PnpxDeviceCategory string `json:"PnpxDeviceCategory,omitempty"`
					Rid                string `json:"Rid,omitempty"`
					Sid                string `json:"Sid,omitempty"`
					Vid                string `json:"Vid,omitempty"`
				} `json:"PnPX,omitempty"`
				WANConnectionDevice struct {
					FriendlyName     string `json:"FriendlyName,omitempty"`
					Manufacturer     string `json:"Manufacturer,omitempty"`
					ManufacturerURL  string `json:"ManufacturerURL,omitempty"`
					ModelDescription string `json:"ModelDescription,omitempty"`
					ModelName        string `json:"ModelName,omitempty"`
					ModelNumber      string `json:"ModelNumber,omitempty"`
					ModelURL         string `json:"ModelURL,omitempty"`
					PresentationURL  string `json:"PresentationURL,omitempty"`
					SerialNumber     string `json:"SerialNumber,omitempty"`
					Upc              string `json:"UPC,omitempty"`
				} `json:"WANConnectionDevice,omitempty"`
				WANDevice struct {
					FriendlyName     string `json:"FriendlyName,omitempty"`
					Manufacturer     string `json:"Manufacturer,omitempty"`
					ManufacturerURL  string `json:"ManufacturerURL,omitempty"`
					ModelDescription string `json:"ModelDescription,omitempty"`
					ModelName        string `json:"ModelName,omitempty"`
					ModelNumber      string `json:"ModelNumber,omitempty"`
					ModelURL         string `json:"ModelURL,omitempty"`
					PresentationURL  string `json:"PresentationURL,omitempty"`
					SerialNumber     string `json:"SerialNumber,omitempty"`
					Upc              string `json:"UPC,omitempty"`
				} `json:"WANDevice,omitempty"`
				WanInterfaces []struct {
					DefaultName string `json:"DefaultName,omitempty"`
					DefaultType string `json:"DefaultType,omitempty"`
					Enable      bool   `json:"Enable,omitempty"`
					EventEnable bool   `json:"EventEnable,omitempty"`
					Interface   string `json:"Interface,omitempty"`
					UID         int    `json:"uid,omitempty"`
				} `json:"WanInterfaces,omitempty"`
				WithIcon bool `json:"WithIcon,omitempty"`
			} `json:"UPnPIGD,omitempty"`
			UPnPMediaServer struct {
				AccessPwd    string `json:"AccessPwd,omitempty"`
				AccessUser   string `json:"AccessUser,omitempty"`
				AdaptCase    string `json:"AdaptCase,omitempty"`
				Aggmode      string `json:"Aggmode,omitempty"`
				Aggregation  bool   `json:"Aggregation,omitempty"`
				AllName      string `json:"AllName,omitempty"`
				AllPictures  string `json:"AllPictures,omitempty"`
				AllRadio     string `json:"AllRadio,omitempty"`
				AllTracks    string `json:"AllTracks,omitempty"`
				AllVideos    string `json:"AllVideos,omitempty"`
				AutoTree     string `json:"AutoTree,omitempty"`
				CacheMaxSize string `json:"CacheMaxSize,omitempty"`
				ContentDir   string `json:"ContentDir,omitempty"`
				DbDir        string `json:"DbDir,omitempty"`
				FolderNodes  []struct {
					Attributes string `json:"Attributes,omitempty"`
					UID        int    `json:"uid,omitempty"`
				} `json:"FolderNodes,omitempty"`
				FriendlyName  string `json:"FriendlyName,omitempty"`
				InternetRadio string `json:"InternetRadio,omitempty"`
				Language      string `json:"Language,omitempty"`
				MaxCount      string `json:"MaxCount,omitempty"`
				MaxMedia      string `json:"MaxMedia,omitempty"`
				MaxMem        string `json:"MaxMem,omitempty"`
				MusicNodes    []struct {
					Attributes string `json:"Attributes,omitempty"`
					UID        int    `json:"uid,omitempty"`
				} `json:"MusicNodes,omitempty"`
				PictureNodes []struct {
					Attributes string `json:"Attributes,omitempty"`
					UID        int    `json:"uid,omitempty"`
				} `json:"PictureNodes,omitempty"`
				PlaylistLastPlayed           string `json:"PlaylistLastPlayed,omitempty"`
				PlaylistMostPlayed           string `json:"PlaylistMostPlayed,omitempty"`
				PlaylistNumEntries           string `json:"PlaylistNumEntries,omitempty"`
				Playlists                    string `json:"Playlists,omitempty"`
				PresentationURL              string `json:"PresentationUrl,omitempty"`
				RootFolder                   string `json:"RootFolder,omitempty"`
				RootMusic                    string `json:"RootMusic,omitempty"`
				RootPicture                  string `json:"RootPicture,omitempty"`
				RootVideo                    string `json:"RootVideo,omitempty"`
				SSDPBeatTime                 string `json:"SSDPBeatTime,omitempty"`
				TagsPicture                  string `json:"TagsPicture,omitempty"`
				UPnPMediaServerPort          int    `json:"UPnPMediaServerPort,omitempty"`
				UPnPMediaServerVersionNumber string `json:"UPnPMediaServerVersionNumber,omitempty"`
				UPnPNMCServer                bool   `json:"UPnPNMCServer,omitempty"`
				UploadEnabled                string `json:"UploadEnabled,omitempty"`
				Verbose                      string `json:"Verbose,omitempty"`
				VideoNodes                   []struct {
					Attributes string `json:"Attributes,omitempty"`
					UID        int    `json:"uid,omitempty"`
				} `json:"VideoNodes,omitempty"`
			} `json:"UPnPMediaServer,omitempty"`
		} `json:"Settings,omitempty"`
	} `json:"UPnP,omitempty"`
	USB struct {
		Enable     bool  `json:"Enable,omitempty"`
		Interfaces []any `json:"Interfaces,omitempty"`
		Ports      []struct {
			Alias      string `json:"Alias,omitempty"`
			Name       string `json:"Name,omitempty"`
			Power      string `json:"Power,omitempty"`
			Rate       string `json:"Rate,omitempty"`
			Receptacle string `json:"Receptacle,omitempty"`
			Standard   string `json:"Standard,omitempty"`
			SysfsID    string `json:"SysfsId,omitempty"`
			Type       string `json:"Type,omitempty"`
			UID        int    `json:"uid,omitempty"`
		} `json:"Ports,omitempty"`
		USBHosts struct {
			Hosts []struct {
				Alias                 string `json:"Alias,omitempty"`
				Devices               []any  `json:"Devices,omitempty"`
				Enable                bool   `json:"Enable,omitempty"`
				Name                  string `json:"Name,omitempty"`
				PowerManagementEnable bool   `json:"PowerManagementEnable,omitempty"`
				Reset                 bool   `json:"Reset,omitempty"`
				Type                  string `json:"Type,omitempty"`
				USBVersion            string `json:"USBVersion,omitempty"`
				UID                   int    `json:"uid,omitempty"`
			} `json:"Hosts,omitempty"`
		} `json:"USBHosts,omitempty"`
	} `json:"USB,omitempty"`
	UserAccounts struct {
		LANInterface string `json:"LANInterface,omitempty"`
		MNGInterface string `json:"MNGInterface,omitempty"`
		Users        []struct {
			Address                    string `json:"Address,omitempty"`
			Alias                      string `json:"Alias,omitempty"`
			BasicAuthenticationEnabled bool   `json:"BasicAuthenticationEnabled,omitempty"`
			Category                   string `json:"Category,omitempty"`
			City                       string `json:"City,omitempty"`
			ClearTextPassword          string `json:"ClearTextPassword,omitempty"`
			Company                    string `json:"Company,omitempty"`
			ConsoleAccess              bool   `json:"ConsoleAccess,omitempty"`
			Country                    string `json:"Country,omitempty"`
			CurrentSessions            []struct {
				ConnectionType  string `json:"ConnectionType,omitempty"`
				HostExclusive   bool   `json:"HostExclusive,omitempty"`
				InterfaceType   string `json:"InterfaceType,omitempty"`
				LastRequestDate string `json:"LastRequestDate,omitempty"`
				LocalAddress    string `json:"LocalAddress,omitempty"`
				LocalPort       int    `json:"LocalPort,omitempty"`
				LoginDate       string `json:"LoginDate,omitempty"`
				RemoteAddress   string `json:"RemoteAddress,omitempty"`
				RemotePort      int    `json:"RemotePort,omitempty"`
				RequestCount    int    `json:"RequestCount,omitempty"`
				Service         string `json:"Service,omitempty"`
				SessionID       int    `json:"SessionId,omitempty"`
				Status          string `json:"Status,omitempty"`
				Timeout         int    `json:"Timeout,omitempty"`
				UID             int    `json:"uid,omitempty"`
			} `json:"CurrentSessions,omitempty"`
			CurrentlyRemoteAccess bool   `json:"CurrentlyRemoteAccess,omitempty"`
			Email                 string `json:"Email,omitempty"`
			Enable                bool   `json:"Enable,omitempty"`
			FirstName             string `json:"FirstName,omitempty"`
			ForcePasswordChange   bool   `json:"ForcePasswordChange,omitempty"`
			Language              string `json:"Language,omitempty"`
			LastName              string `json:"LastName,omitempty"`
			LocalAccess           bool   `json:"LocalAccess,omitempty"`
			Login                 string `json:"Login,omitempty"`
			MaxSessionCount       int    `json:"MaxSessionCount,omitempty"`
			MobilePhoneNumber     string `json:"MobilePhoneNumber,omitempty"`
			OwnPass               bool   `json:"OwnPass,omitempty"`
			Password              string `json:"Password,omitempty"`
			PhoneNumbers          []any  `json:"PhoneNumbers,omitempty"`
			Role                  string `json:"Role,omitempty"`
			SecretAnswer          string `json:"SecretAnswer,omitempty"`
			SecretQuery           string `json:"SecretQuery,omitempty"`
			Zip                   string `json:"ZIP,omitempty"`
			UID                   int    `json:"uid,omitempty"`
		} `json:"Users,omitempty"`
		WANInterface string `json:"WANInterface,omitempty"`
	} `json:"UserAccounts,omitempty"`
	UserInterface struct {
		AutoUpdateServer   string `json:"AutoUpdateServer,omitempty"`
		AvailableLanguages string `json:"AvailableLanguages,omitempty"`
		BackgroundColor    string `json:"BackgroundColor,omitempty"`
		BackupDatas        []struct {
			Alias string `json:"Alias,omitempty"`
			Tag   string `json:"Tag,omitempty"`
			Value string `json:"Value,omitempty"`
			UID   int    `json:"uid,omitempty"`
		} `json:"BackupDatas,omitempty"`
		Brand           string `json:"Brand,omitempty"`
		ButtonColor     string `json:"ButtonColor,omitempty"`
		ButtonTextColor string `json:"ButtonTextColor,omitempty"`
		CurrentLanguage string `json:"CurrentLanguage,omitempty"`
		GuiLockTime     int    `json:"GuiLockTime,omitempty"`
		HideTables      []any  `json:"HideTables,omitempty"`
		Httpd           struct {
			HostAttackProtection bool   `json:"HostAttackProtection,omitempty"`
			MaxSessions          int    `json:"MaxSessions,omitempty"`
			Redirection          string `json:"Redirection,omitempty"`
			SessionTimeout       int    `json:"SessionTimeout,omitempty"`
		} `json:"Httpd,omitempty"`
		ISPHelpDesk   string `json:"ISPHelpDesk,omitempty"`
		ISPHelpPage   string `json:"ISPHelpPage,omitempty"`
		ISPHomePage   string `json:"ISPHomePage,omitempty"`
		ISPLogo       string `json:"ISPLogo,omitempty"`
		ISPLogoSize   int    `json:"ISPLogoSize,omitempty"`
		ISPMailServer string `json:"ISPMailServer,omitempty"`
		ISPName       string `json:"ISPName,omitempty"`
		ISPNewsServer string `json:"ISPNewsServer,omitempty"`
		LocalDisplay  struct {
			DisplayHeight int  `json:"DisplayHeight,omitempty"`
			DisplayWidth  int  `json:"DisplayWidth,omitempty"`
			GuiFlag       bool `json:"GuiFlag,omitempty"`
			Height        int  `json:"Height,omitempty"`
			Movable       bool `json:"Movable,omitempty"`
			PosX          int  `json:"PosX,omitempty"`
			PosY          int  `json:"PosY,omitempty"`
			Resizable     bool `json:"Resizable,omitempty"`
			Width         int  `json:"Width,omitempty"`
		} `json:"LocalDisplay,omitempty"`
		LoginRetryNumber       int    `json:"LoginRetryNumber,omitempty"`
		Market                 string `json:"Market,omitempty"`
		Password               string `json:"Password,omitempty"`
		PasswordMinLength      int    `json:"PasswordMinLength,omitempty"`
		PasswordRequired       bool   `json:"PasswordRequired,omitempty"`
		PasswordReset          bool   `json:"PasswordReset,omitempty"`
		PasswordUserSelectable bool   `json:"PasswordUserSelectable,omitempty"`
		RedirectionReason      string `json:"RedirectionReason,omitempty"`
		RemoteAccess           struct {
			Enable                       bool   `json:"Enable,omitempty"`
			GeneralCodeRemoteApplication string `json:"GeneralCodeRemoteApplication,omitempty"`
			Port                         int    `json:"Port,omitempty"`
			Protocol                     string `json:"Protocol,omitempty"`
			RemoteAccessHost             string `json:"RemoteAccessHost,omitempty"`
			RemoteApplicationEnable      bool   `json:"RemoteApplicationEnable,omitempty"`
			RemoteApplicationHTTPSPort   int    `json:"RemoteApplicationHTTPSPort,omitempty"`
			SupportedProtocols           string `json:"SupportedProtocols,omitempty"`
			Timeout                      int    `json:"Timeout,omitempty"`
		} `json:"RemoteAccess,omitempty"`
		RouterRedirectURL       string `json:"RouterRedirectURL,omitempty"`
		RouterRedirectURLEnable bool   `json:"RouterRedirectURLEnable,omitempty"`
		Screen                  struct {
			ClearOnOk    bool   `json:"ClearOnOk,omitempty"`
			DisplayState string `json:"DisplayState,omitempty"`
			DisplayTime  int    `json:"DisplayTime,omitempty"`
			Lines        []struct {
				TextToDisplay string `json:"TextToDisplay,omitempty"`
				UID           int    `json:"uid,omitempty"`
			} `json:"Lines,omitempty"`
			PixelLeap      int `json:"PixelLeap,omitempty"`
			Priority       int `json:"Priority,omitempty"`
			ScrollingSpeed int `json:"ScrollingSpeed,omitempty"`
		} `json:"Screen,omitempty"`
		TextColor        string `json:"TextColor,omitempty"`
		UpgradeAvailable bool   `json:"UpgradeAvailable,omitempty"`
		UserUpdateServer string `json:"UserUpdateServer,omitempty"`
		WarrantyDate     string `json:"WarrantyDate,omitempty"`
		BaseUrls         []any  `json:"baseUrls,omitempty"`
	} `json:"UserInterface,omitempty"`
	WebAccesses struct {
		PortTrigger    []any `json:"PortTrigger,omitempty"`
		WebRestriction []any `json:"WebRestriction,omitempty"`
	} `json:"WebAccesses,omitempty"`
	WiFi struct {
		AccessPoints []struct {
			ACs []struct {
				Acm                            bool   `json:"ACM,omitempty"`
				ACMSta                         bool   `json:"ACM_sta,omitempty"`
				Aifsn                          int    `json:"AIFSN,omitempty"`
				AIFSNSta                       int    `json:"AIFSN_sta,omitempty"`
				AccessCategory                 string `json:"AccessCategory,omitempty"`
				AckPolicy                      bool   `json:"AckPolicy,omitempty"`
				AckPolicySta                   bool   `json:"AckPolicy_sta,omitempty"`
				Alias                          string `json:"Alias,omitempty"`
				ECWMax                         int    `json:"ECWMax,omitempty"`
				ECWMaxSta                      int    `json:"ECWMax_sta,omitempty"`
				ECWMin                         int    `json:"ECWMin,omitempty"`
				ECWMinSta                      int    `json:"ECWMin_sta,omitempty"`
				OutQLenHistogramIntervals      string `json:"OutQLenHistogramIntervals,omitempty"`
				OutQLenHistogramSampleInterval int    `json:"OutQLenHistogramSampleInterval,omitempty"`
				Stats                          struct {
					BytesReceived          string `json:"BytesReceived,omitempty"`
					BytesSent              string `json:"BytesSent,omitempty"`
					DiscardPacketsReceived int    `json:"DiscardPacketsReceived,omitempty"`
					DiscardPacketsSent     int    `json:"DiscardPacketsSent,omitempty"`
					ErrorsReceived         int    `json:"ErrorsReceived,omitempty"`
					ErrorsSent             int    `json:"ErrorsSent,omitempty"`
					OutQLenHistogram       string `json:"OutQLenHistogram,omitempty"`
					PacketsReceived        string `json:"PacketsReceived,omitempty"`
					PacketsSent            string `json:"PacketsSent,omitempty"`
					RetransCount           int    `json:"RetransCount,omitempty"`
				} `json:"Stats,omitempty"`
				TxOpMax    int `json:"TxOpMax,omitempty"`
				TxOpMaxSta int `json:"TxOpMax_sta,omitempty"`
				UID        int `json:"uid,omitempty"`
			} `json:"ACs,omitempty"`
			Accounting struct {
				ClientPort            int    `json:"ClientPort,omitempty"`
				Enable                bool   `json:"Enable,omitempty"`
				InterimInterval       int    `json:"InterimInterval,omitempty"`
				Retries               int    `json:"Retries,omitempty"`
				RetryTimeout          int    `json:"RetryTimeout,omitempty"`
				SecondarySecret       string `json:"SecondarySecret,omitempty"`
				SecondaryServerIPAddr string `json:"SecondaryServerIPAddr,omitempty"`
				SecondaryServerPort   int    `json:"SecondaryServerPort,omitempty"`
				Secret                string `json:"Secret,omitempty"`
				ServerIPAddr          string `json:"ServerIPAddr,omitempty"`
				ServerPort            int    `json:"ServerPort,omitempty"`
			} `json:"Accounting,omitempty"`
			Alias             string `json:"Alias,omitempty"`
			AssociatedDevices []struct {
				Active                  bool   `json:"Active,omitempty"`
				AssociationCount        int    `json:"AssociationCount,omitempty"`
				AssociationTime         string `json:"AssociationTime,omitempty"`
				AssociationsDateTime    string `json:"AssociationsDateTime,omitempty"`
				AuthenticationCount     int    `json:"AuthenticationCount,omitempty"`
				AuthenticationState     bool   `json:"AuthenticationState,omitempty"`
				AuthenticationUsername  string `json:"AuthenticationUsername,omitempty"`
				DeauthenticationCount   int    `json:"DeauthenticationCount,omitempty"`
				DeviceType              string `json:"DeviceType,omitempty"`
				DisassociationCount     int    `json:"DisassociationCount,omitempty"`
				DisassociationsDateTime string `json:"DisassociationsDateTime,omitempty"`
				Encryption              string `json:"Encryption,omitempty"`
				IPAddress               string `json:"IPAddress,omitempty"`
				LastDataDownlinkRate    int    `json:"LastDataDownlinkRate,omitempty"`
				LastDataUplinkRate      int    `json:"LastDataUplinkRate,omitempty"`
				MACAddress              string `json:"MACAddress,omitempty"`
				MUSupport               bool   `json:"MUSupport,omitempty"`
				Noise                   int    `json:"Noise,omitempty"`
				OperatingStandard       string `json:"OperatingStandard,omitempty"`
				Retransmissions         int    `json:"Retransmissions,omitempty"`
				SecurityMode            string `json:"SecurityMode,omitempty"`
				SignalStrength          int    `json:"SignalStrength,omitempty"`
				Stats                   struct {
					AntennasRssi       string `json:"AntennasRssi,omitempty"`
					BytesReceived      string `json:"BytesReceived,omitempty"`
					BytesSent          string `json:"BytesSent,omitempty"`
					ErrorsReceived     string `json:"ErrorsReceived,omitempty"`
					ErrorsSent         int    `json:"ErrorsSent,omitempty"`
					FailedRetransCount int    `json:"FailedRetransCount,omitempty"`
					MultipleRetryCount int    `json:"MultipleRetryCount,omitempty"`
					PacketsReceived    string `json:"PacketsReceived,omitempty"`
					PacketsSent        string `json:"PacketsSent,omitempty"`
					RetransCount       int    `json:"RetransCount,omitempty"`
					RetryCount         int    `json:"RetryCount,omitempty"`
				} `json:"Stats,omitempty"`
				SupportedStandards string `json:"SupportedStandards,omitempty"`
				Uptime             int    `json:"Uptime,omitempty"`
				UID                int    `json:"uid,omitempty"`
			} `json:"AssociatedDevices,omitempty"`
			AssociationForbidden      bool   `json:"AssociationForbidden,omitempty"`
			AuthenticationServiceMode string `json:"AuthenticationServiceMode,omitempty"`
			BasicAuthenticationMode   string `json:"BasicAuthenticationMode,omitempty"`
			BasicDataTransmitRates    string `json:"BasicDataTransmitRates,omitempty"`
			Bridge                    string `json:"Bridge,omitempty"`
			DirectMulticast           bool   `json:"DirectMulticast,omitempty"`
			Enable                    bool   `json:"Enable,omitempty"`
			IP                        string `json:"Ip,omitempty"`
			IsolationEnable           bool   `json:"IsolationEnable,omitempty"`
			MACFiltering              struct {
				MACAddresses []any  `json:"MACAddresses,omitempty"`
				Mode         string `json:"Mode,omitempty"`
			} `json:"MACFiltering,omitempty"`
			MaxAssociatedDevices         int    `json:"MaxAssociatedDevices,omitempty"`
			OperationalDataTransmitRates string `json:"OperationalDataTransmitRates,omitempty"`
			PossibleDataTransmitRates    string `json:"PossibleDataTransmitRates,omitempty"`
			ProxyMode                    string `json:"ProxyMode,omitempty"`
			RadioMeasurements            struct {
				BeaconRequestActive  bool `json:"BeaconRequestActive,omitempty"`
				BeaconRequestPassive bool `json:"BeaconRequestPassive,omitempty"`
				BeaconRequestTable   bool `json:"BeaconRequestTable,omitempty"`
				LinkMeasurement      bool `json:"LinkMeasurement,omitempty"`
				NeighborReport       bool `json:"NeighborReport,omitempty"`
			} `json:"RadioMeasurements,omitempty"`
			RetryLimit               int    `json:"RetryLimit,omitempty"`
			SSIDAdvertisementEnabled bool   `json:"SSIDAdvertisementEnabled,omitempty"`
			SSIDReference            string `json:"SSIDReference,omitempty"`
			Security                 struct {
				AntiCloggingThreshold       int    `json:"AntiCloggingThreshold,omitempty"`
				ECGroupID                   string `json:"ECGroupID,omitempty"`
				EncryptionModeEnabled       string `json:"EncryptionModeEnabled,omitempty"`
				EncryptionModesSupported    string `json:"EncryptionModesSupported,omitempty"`
				KeyPassphrase               string `json:"KeyPassphrase,omitempty"`
				MFPConfig                   string `json:"MFPConfig,omitempty"`
				ModeEnabled                 string `json:"ModeEnabled,omitempty"`
				ModesSupported              string `json:"ModesSupported,omitempty"`
				PreSharedKey                string `json:"PreSharedKey,omitempty"`
				RadiusSecret                string `json:"RadiusSecret,omitempty"`
				RadiusServerIPAddr          string `json:"RadiusServerIPAddr,omitempty"`
				RadiusServerPort            int    `json:"RadiusServerPort,omitempty"`
				RekeyingInterval            int    `json:"RekeyingInterval,omitempty"`
				Reset                       bool   `json:"Reset,omitempty"`
				SAEPassphrase               string `json:"SAEPassphrase,omitempty"`
				SecondaryRadiusSecret       string `json:"SecondaryRadiusSecret,omitempty"`
				SecondaryRadiusServerIPAddr string `json:"SecondaryRadiusServerIPAddr,omitempty"`
				SecondaryRadiusServerPort   int    `json:"SecondaryRadiusServerPort,omitempty"`
			} `json:"Security,omitempty"`
			Status                string `json:"Status,omitempty"`
			UAPSDCapability       bool   `json:"UAPSDCapability,omitempty"`
			UAPSDEnable           bool   `json:"UAPSDEnable,omitempty"`
			VirtualInterfaceIndex int    `json:"VirtualInterfaceIndex,omitempty"`
			WMMCapability         bool   `json:"WMMCapability,omitempty"`
			WMMEnable             bool   `json:"WMMEnable,omitempty"`
			Wps                   struct {
				ConfigMethodsEnabled   string `json:"ConfigMethodsEnabled,omitempty"`
				ConfigMethodsSupported string `json:"ConfigMethodsSupported,omitempty"`
				DevicePIN              string `json:"DevicePIN,omitempty"`
				Enable                 bool   `json:"Enable,omitempty"`
				EnrolleePIN            string `json:"EnrolleePIN,omitempty"`
				M1AccessControlList    string `json:"M1AccessControlList,omitempty"`
				M1AccessControlRule    string `json:"M1AccessControlRule,omitempty"`
				SecurityModesEnabled   string `json:"SecurityModesEnabled,omitempty"`
				SessionStatus          string `json:"SessionStatus,omitempty"`
				Timeout                int    `json:"Timeout,omitempty"`
				Unconfigured           bool   `json:"Unconfigured,omitempty"`
			} `json:"WPS,omitempty"`
			ZeroPacketLost int `json:"ZeroPacketLost,omitempty"`
			UID            int `json:"uid,omitempty"`
		} `json:"AccessPoints,omitempty"`
		BandSteering struct {
			BsdParameters struct {
				AirtimeSlowestLink int  `json:"AirtimeSlowestLink,omitempty"`
				BSSTransition      bool `json:"BSSTransition,omitempty"`
				BounceDetection    struct {
					Counts     int `json:"Counts,omitempty"`
					DwellTime  int `json:"DwellTime,omitempty"`
					WindowTime int `json:"WindowTime,omitempty"`
				} `json:"BounceDetection,omitempty"`
				BsdScheme          int  `json:"BsdScheme,omitempty"`
				LegacyBandSteering bool `json:"LegacyBandSteering,omitempty"`
				MessageLevelDebug  bool `json:"MessageLevelDebug,omitempty"`
				PhyRate            int  `json:"PhyRate,omitempty"`
			} `json:"BsdParameters,omitempty"`
			Devices    []any  `json:"Devices,omitempty"`
			Enable     bool   `json:"Enable,omitempty"`
			Interfaces []any  `json:"Interfaces,omitempty"`
			Status     string `json:"Status,omitempty"`
		} `json:"BandSteering,omitempty"`
		Broadcom struct {
			CrashNumberSinceBoot     int    `json:"CrashNumberSinceBoot,omitempty"`
			DetectedCrash            string `json:"DetectedCrash,omitempty"`
			DongleMemDumpLocalPath   string `json:"DongleMemDumpLocalPath,omitempty"`
			DriverErrorManagement    string `json:"DriverErrorManagement,omitempty"`
			LastCrashSinceBoot       string `json:"LastCrashSinceBoot,omitempty"`
			LastCrashSinceReset      string `json:"LastCrashSinceReset,omitempty"`
			ReloadNumberBeforeReboot int    `json:"ReloadNumberBeforeReboot,omitempty"`
		} `json:"Broadcom,omitempty"`
		NeighboringWiFiDiagnostic struct {
			DiagnosticsState string `json:"DiagnosticsState,omitempty"`
			Result           []any  `json:"Result,omitempty"`
		} `json:"NeighboringWiFiDiagnostic,omitempty"`
		Radios          []Radio `json:"Radios,omitempty"`
		SSIDs           []SSID  `json:"SSIDs,omitempty"`
		VisionEnable    bool    `json:"VisionEnable,omitempty"`
		VisionInterface string  `json:"VisionInterface,omitempty"`
		Wms             struct {
			BeaconReportPeriod int   `json:"BeaconReportPeriod,omitempty"`
			Enable             bool  `json:"Enable,omitempty"`
			HeaderLogPeriod    int   `json:"HeaderLogPeriod,omitempty"`
			Period             int   `json:"Period,omitempty"`
			BeaconAPs          []any `json:"beaconAPs,omitempty"`
		} `json:"WMS,omitempty"`
	} `json:"WiFi,omitempty"`
}

type DeviceInfo

type DeviceInfo struct {
	APIVersion                string       `json:"APIVersion,omitempty"`
	AdditionalHardwareVersion string       `json:"AdditionalHardwareVersion,omitempty"`
	AdditionalSoftwareVersion string       `json:"AdditionalSoftwareVersion,omitempty"`
	BackupSoftwareVersion     string       `json:"BackupSoftwareVersion,omitempty"`
	BackupTimeStamp           time.Time    `json:"BackupTimeStamp,omitempty"`
	BootloaderVersion         string       `json:"BootloaderVersion,omitempty"`
	BuildDate                 time.Time    `json:"BuildDate,omitempty"`
	Clid                      string       `json:"CLID,omitempty"`
	ConfigBackupRestoreEnable bool         `json:"ConfigBackupRestoreEnable,omitempty"`
	Country                   string       `json:"Country,omitempty"`
	CrashHistory              CrashHistory `json:"CrashHistory,omitempty"`
	CustomerModelName         string       `json:"CustomerModelName,omitempty"`
	Description               string       `json:"Description,omitempty"`
	DeviceCategory            string       `json:"DeviceCategory,omitempty"`
	DeviceLog                 string       `json:"DeviceLog,omitempty"`
	EventLog                  string       `json:"EventLog,omitempty"`
	ExternalFirmwareVersion   string       `json:"ExternalFirmwareVersion,omitempty"`
	FirstConnection           bool         `json:"FirstConnection,omitempty"`
	FirstUseDate              time.Time    `json:"FirstUseDate,omitempty"`
	FlashMemoryStatus         struct {
		Free  int `json:"Free,omitempty"`
		Total int `json:"Total,omitempty"`
	} `json:"FlashMemoryStatus,omitempty"`
	FlushDeviceLog          bool   `json:"FlushDeviceLog,omitempty"`
	GUIAPIVersion           string `json:"GUIAPIVersion,omitempty"`
	GUIFirmwareVersion      string `json:"GUIFirmwareVersion,omitempty"`
	HardwareVersion         string `json:"HardwareVersion,omitempty"`
	InternalFirmwareVersion string `json:"InternalFirmwareVersion,omitempty"`
	Locations               []any  `json:"Locations,omitempty"`
	Logging                 struct {
		LogLevel     string `json:"LogLevel,omitempty"`
		ResetLogOper bool   `json:"ResetLogOper,omitempty"`
		Syslog       struct {
			Destinations []struct {
				Alias               string `json:"Alias,omitempty"`
				Enable              bool   `json:"Enable,omitempty"`
				FileStorageLocation string `json:"FileStorageLocation,omitempty"`
				LogSize             int    `json:"LogSize,omitempty"`
				LoggerCategories    string `json:"LoggerCategories,omitempty"`
				SourceIndex         int    `json:"SourceIndex,omitempty"`
				Status              string `json:"Status,omitempty"`
				SyslogConfig        string `json:"SyslogConfig,omitempty"`
				UID                 int    `json:"uid,omitempty"`
			} `json:"Destinations,omitempty"`
			DisplayKernelLogs   bool   `json:"DisplayKernelLogs,omitempty"`
			Enable              bool   `json:"Enable,omitempty"`
			FileStorageLocation string `json:"FileStorageLocation,omitempty"`
			LogStorage          string `json:"LogStorage,omitempty"`
			Sources             []struct {
				Alias              string `json:"Alias,omitempty"`
				Enable             bool   `json:"Enable,omitempty"`
				FileSourceLocation string `json:"FileSourceLocation,omitempty"`
				InternalSource     bool   `json:"InternalSource,omitempty"`
				KernelSource       bool   `json:"KernelSource,omitempty"`
				Network            struct {
					Enable   bool   `json:"Enable,omitempty"`
					Port     int    `json:"Port,omitempty"`
					Protocol string `json:"Protocol,omitempty"`
				} `json:"Network,omitempty"`
				UnixStream bool `json:"UnixStream,omitempty"`
				UID        int  `json:"uid,omitempty"`
			} `json:"Sources,omitempty"`
		} `json:"Syslog,omitempty"`
	} `json:"Logging,omitempty"`
	MACAddress      string `json:"MACAddress,omitempty"`
	Manufacturer    string `json:"Manufacturer,omitempty"`
	ManufacturerOUI string `json:"ManufacturerOUI,omitempty"`
	MemoryStatus    struct {
		Free  int `json:"Free,omitempty"`
		Total int `json:"Total,omitempty"`
	} `json:"MemoryStatus,omitempty"`
	Mode              string `json:"Mode,omitempty"`
	ModelName         string `json:"ModelName,omitempty"`
	ModelNumber       string `json:"ModelNumber,omitempty"`
	NetworkProperties struct {
		MaxTCPWindowSize  int    `json:"MaxTCPWindowSize,omitempty"`
		TCPImplementation string `json:"TCPImplementation,omitempty"`
	} `json:"NetworkProperties,omitempty"`
	NodesToRestore  string `json:"NodesToRestore,omitempty"`
	ONTSerialNumber string `json:"ONTSerialNumber,omitempty"`
	Processors      []struct {
		Alias        string `json:"Alias,omitempty"`
		Architecture string `json:"Architecture,omitempty"`
		UID          int    `json:"uid,omitempty"`
	} `json:"Processors,omitempty"`
	ProductClass     string `json:"ProductClass,omitempty"`
	ProvisioningCode string `json:"ProvisioningCode,omitempty"`
	ProxierInfo      struct {
		ManufacturerOUI string `json:"ManufacturerOUI,omitempty"`
		ProductClass    string `json:"ProductClass,omitempty"`
		ProxyProtocol   string `json:"ProxyProtocol,omitempty"`
		SerialNumber    string `json:"SerialNumber,omitempty"`
	} `json:"ProxierInfo,omitempty"`
	RebootCount  int    `json:"RebootCount,omitempty"`
	RebootStatus int    `json:"RebootStatus,omitempty"`
	ResetStatus  int    `json:"ResetStatus,omitempty"`
	RouterName   string `json:"RouterName,omitempty"`
	SNMP         bool   `json:"SNMP,omitempty"`
	SimpleLogs   struct {
		CallLog     string `json:"CallLog,omitempty"`
		FirewallLog string `json:"FirewallLog,omitempty"`
		SystemLog   string `json:"SystemLog,omitempty"`
	} `json:"SimpleLogs,omitempty"`
	SoftwareVersion   string `json:"SoftwareVersion,omitempty"`
	SpecVersion       string `json:"SpecVersion,omitempty"`
	TemperatureStatus struct {
		TemperatureSensors []struct {
			Alias           string `json:"Alias,omitempty"`
			Enable          bool   `json:"Enable,omitempty"`
			HighAlarmTime   string `json:"HighAlarmTime,omitempty"`
			HighAlarmValue  int    `json:"HighAlarmValue,omitempty"`
			LastUpdate      string `json:"LastUpdate,omitempty"`
			LowAlarmTime    string `json:"LowAlarmTime,omitempty"`
			LowAlarmValue   int    `json:"LowAlarmValue,omitempty"`
			MaxTime         string `json:"MaxTime,omitempty"`
			MaxValue        int    `json:"MaxValue,omitempty"`
			MinTime         string `json:"MinTime,omitempty"`
			MinValue        int    `json:"MinValue,omitempty"`
			Name            string `json:"Name,omitempty"`
			PollingInterval int    `json:"PollingInterval,omitempty"`
			Reset           bool   `json:"Reset,omitempty"`
			ResetTime       string `json:"ResetTime,omitempty"`
			Status          string `json:"Status,omitempty"`
			Value           int    `json:"Value,omitempty"`
			UID             int    `json:"uid,omitempty"`
		} `json:"TemperatureSensors,omitempty"`
	} `json:"TemperatureStatus,omitempty"`
	UpTime            int   `json:"UpTime,omitempty"`
	UpdateStatus      int   `json:"UpdateStatus,omitempty"`
	UserConfigFiles   []any `json:"UserConfigFiles,omitempty"`
	VendorConfigFiles []struct {
		Alias               string `json:"Alias,omitempty"`
		Date                string `json:"Date,omitempty"`
		Description         string `json:"Description,omitempty"`
		Name                string `json:"Name,omitempty"`
		UseForBackupRestore bool   `json:"UseForBackupRestore,omitempty"`
		Version             string `json:"Version,omitempty"`
		UID                 int    `json:"uid,omitempty"`
	} `json:"VendorConfigFiles,omitempty"`
	VendorLogFiles []struct {
		Alias           string `json:"Alias,omitempty"`
		DiagnosticState string `json:"DiagnosticState,omitempty"`
		LogData         string `json:"LogData,omitempty"`
		MaximumSize     int    `json:"MaximumSize,omitempty"`
		Name            string `json:"Name,omitempty"`
		Persistent      bool   `json:"Persistent,omitempty"`
		UID             int    `json:"uid,omitempty"`
	} `json:"VendorLogFiles,omitempty"`
}

func (*DeviceInfo) UnmarshalJSON

func (d *DeviceInfo) UnmarshalJSON(b []byte) error

type EthernetInterface

type EthernetInterface struct {
	Alias             string               `json:"Alias,omitempty"`
	AssociatedDevices []any                `json:"AssociatedDevices,omitempty"`
	CurrentBitRate    int64                `json:"CurrentBitRate,omitempty"`
	Diagnostics       InterfaceDiagnostics `json:"Diagnostics,omitempty"`
	DuplexMode        string               `json:"DuplexMode,omitempty"`
	EEECapability     bool                 `json:"EEECapability,omitempty"`
	EEEEnable         bool                 `json:"EEEEnable,omitempty"`
	Enable            bool                 `json:"Enable,omitempty"`
	IfcName           string               `json:"IfcName,omitempty"`
	LastChange        int                  `json:"LastChange,omitempty"`
	LastStatsReset    int                  `json:"LastStatsReset,omitempty"`
	LowerLayers       string               `json:"LowerLayers,omitempty"`
	MACAddress        string               `json:"MACAddress,omitempty"`
	MTUSize           int                  `json:"MTUSize,omitempty"`
	MaxBitRate        int                  `json:"MaxBitRate,omitempty"`
	Name              string               `json:"Name,omitempty"`
	PhyNum            int                  `json:"PhyNum,omitempty"`
	ResetStats        bool                 `json:"ResetStats,omitempty"`
	Role              string               `json:"Role,omitempty"`
	Stats             InterfaceStats       `json:"Stats,omitempty"`
	Status            string               `json:"Status,omitempty"`
	StoppedBy         string               `json:"StoppedBy,omitempty"`
	Upstream          bool                 `json:"Upstream,omitempty"`
	UID               int                  `json:"uid,omitempty"`
}

type Host

type Host struct {
	AccessPoint           string `json:"AccessPoint,omitempty"`
	Active                bool   `json:"Active,omitempty"`
	ActiveLastChange      string `json:"ActiveLastChange,omitempty"`
	AddressSource         string `json:"AddressSource,omitempty"`
	Alias                 string `json:"Alias,omitempty"`
	AssociatedDevice      string `json:"AssociatedDevice,omitempty"`
	BlacklistStatus       bool   `json:"BlacklistStatus,omitempty"`
	ClientID              string `json:"ClientID,omitempty"`
	DHCPClient            string `json:"DHCPClient,omitempty"`
	DetectedDeviceType    string `json:"DetectedDeviceType,omitempty"`
	DeviceTypeAssociation string `json:"DeviceTypeAssociation,omitempty"`
	Hidden                bool   `json:"Hidden,omitempty"`
	History               struct {
		AddressSource   string `json:"AddressSource,omitempty"`
		ClientID        string `json:"ClientID,omitempty"`
		HostName        string `json:"HostName,omitempty"`
		IPAddress       string `json:"IPAddress,omitempty"`
		IPv6Address     string `json:"IPv6Address,omitempty"`
		Layer1Interface string `json:"Layer1Interface,omitempty"`
		Layer3Interface string `json:"Layer3Interface,omitempty"`
		Options         []struct {
			OptionTag   int    `json:"OptionTag,omitempty"`
			OptionValue string `json:"OptionValue,omitempty"`
			UID         int    `json:"uid,omitempty"`
		} `json:"Options,omitempty"`
		UserClassID     string `json:"UserClassID,omitempty"`
		VendorClassID   string `json:"VendorClassID,omitempty"`
		VendorClassIDv6 string `json:"VendorClassIDv6,omitempty"`
	} `json:"History,omitempty"`
	HostName      string `json:"HostName,omitempty"`
	IPAddress     string `json:"IPAddress,omitempty"`
	IPv4Addresses []struct {
		Active    bool   `json:"Active,omitempty"`
		IPAddress string `json:"IPAddress,omitempty"`
		UID       int    `json:"uid,omitempty"`
	} `json:"IPv4Addresses,omitempty"`
	IPv6Addresses      []json.RawMessage `json:"IPv6Addresses,omitempty"`
	Icon               string            `json:"Icon,omitempty"`
	InterfaceType      string            `json:"InterfaceType,omitempty"`
	Layer1Interface    string            `json:"Layer1Interface,omitempty"`
	Layer3Interface    string            `json:"Layer3Interface,omitempty"`
	LeaseDuration      int               `json:"LeaseDuration,omitempty"`
	LeaseStart         int               `json:"LeaseStart,omitempty"`
	LeaseTimeRemaining int               `json:"LeaseTimeRemaining,omitempty"`
	Options            []json.RawMessage `json:"Options,omitempty"`
	PhysAddress        string            `json:"PhysAddress,omitempty"`
	SysfsID            string            `json:"SysfsId,omitempty"`
	UnblockHoursCount  int               `json:"UnblockHoursCount,omitempty"`
	UserClassID        string            `json:"UserClassID,omitempty"`
	UserDeviceType     string            `json:"UserDeviceType,omitempty"`
	UserFriendlyName   string            `json:"UserFriendlyName,omitempty"`
	UserHostName       string            `json:"UserHostName,omitempty"`
	VendorClassID      string            `json:"VendorClassID,omitempty"`
	VendorClassIDv6    string            `json:"VendorClassIDv6,omitempty"`
	UID                int               `json:"uid,omitempty"`
}

type InterfaceDiagnostics

type InterfaceDiagnostics struct {
	CableLength       int    `json:"CableLength,omitempty"`
	CableStatus       string `json:"CableStatus,omitempty"`
	CurrentDuplexMode string `json:"CurrentDuplexMode,omitempty"`
}

type InterfaceStats

type InterfaceStats struct {
	BroadcastPacketsReceived    int64 `json:"BroadcastPacketsReceived,omitempty,string"`
	BroadcastPacketsSent        int64 `json:"BroadcastPacketsSent,omitempty,string"`
	BytesReceived               int64 `json:"BytesReceived,omitempty,string"`
	BytesSent                   int64 `json:"BytesSent,omitempty,string"`
	CollisionsPackets           int64 `json:"CollisionsPackets,omitempty"`
	DiscardPacketsReceived      int64 `json:"DiscardPacketsReceived,omitempty"`
	DiscardPacketsSent          int64 `json:"DiscardPacketsSent,omitempty"`
	ErrorsReceived              int64 `json:"ErrorsReceived,omitempty"`
	ErrorsSent                  int64 `json:"ErrorsSent,omitempty"`
	MulticastPacketsReceived    int64 `json:"MulticastPacketsReceived,omitempty,string"`
	MulticastPacketsSent        int64 `json:"MulticastPacketsSent,omitempty,string"`
	PacketsReceived             int64 `json:"PacketsReceived,omitempty,string"`
	PacketsSent                 int64 `json:"PacketsSent,omitempty,string"`
	RetransCount                int64 `json:"RetransCount,omitempty"`
	UnicastPacketsReceived      int64 `json:"UnicastPacketsReceived,omitempty,string"`
	UnicastPacketsSent          int64 `json:"UnicastPacketsSent,omitempty,string"`
	UnknownProtoPacketsReceived int64 `json:"UnknownProtoPacketsReceived,omitempty"`
}

type LogLine

type LogLine struct {
	TS      time.Time
	Level   string
	Module  string
	Message string
}

type OpticalInterface

type OpticalInterface struct {
	Alarm       string `json:"Alarm,omitempty"`
	Alias       string `json:"Alias,omitempty"`
	BIASCurrent int64  `json:"BIASCurrent,omitempty"`
	CATV        struct {
		Alarm            string `json:"Alarm,omitempty"`
		RfRxOpticalPower int    `json:"RfRxOpticalPower,omitempty"`
		RfVoltage        int    `json:"RfVoltage,omitempty"`
		Status           string `json:"Status,omitempty"`
	} `json:"CATV,omitempty"`
	Enable                      bool   `json:"Enable,omitempty"`
	IfcName                     string `json:"IfcName,omitempty"`
	LastChange                  int64  `json:"LastChange,omitempty"`
	LastStatsReset              int    `json:"LastStatsReset,omitempty"`
	LowerLayers                 string `json:"LowerLayers,omitempty"`
	LowerOpticalThreshold       int64  `json:"LowerOpticalThreshold,omitempty"`
	LowerTransmitPowerThreshold int64  `json:"LowerTransmitPowerThreshold,omitempty"`
	Name                        string `json:"Name,omitempty"`
	OpticalPartNumber           string `json:"OpticalPartNumber,omitempty"`
	OpticalSignalLevel          int64  `json:"OpticalSignalLevel,omitempty"`
	OpticalVendorName           string `json:"OpticalVendorName,omitempty"`
	PonStats                    struct {
		GemPorts []struct {
			BytesReceived            string `json:"BytesReceived,omitempty"`
			BytesSent                string `json:"BytesSent,omitempty"`
			Direction                string `json:"Direction,omitempty"`
			DiscardedPacketsReceived int    `json:"DiscardedPacketsReceived,omitempty"`
			DiscardedPacketsSent     int    `json:"DiscardedPacketsSent,omitempty"`
			FlowType                 string `json:"FlowType,omitempty"`
			ID                       int    `json:"Id,omitempty"`
			Index                    int    `json:"Index,omitempty"`
			PacketsReceived          int    `json:"PacketsReceived,omitempty"`
			PacketsSent              int    `json:"PacketsSent,omitempty"`
			TcontIndex               int    `json:"TcontIndex,omitempty"`
			UID                      int    `json:"uid,omitempty"`
		} `json:"GemPorts,omitempty"`
		Reset  bool `json:"Reset,omitempty"`
		Tconts []struct {
			AllocID        int `json:"AllocId,omitempty"`
			GemPacketsSent int `json:"GemPacketsSent,omitempty"`
			Index          int `json:"Index,omitempty"`
			UID            int `json:"uid,omitempty"`
		} `json:"Tconts,omitempty"`
	} `json:"PonStats,omitempty"`
	ResetStats bool `json:"ResetStats,omitempty"`
	RogueOnu   struct {
		RogueOnuCount           int    `json:"RogueOnuCount,omitempty"`
		RogueOnuDetectionEnable bool   `json:"RogueOnuDetectionEnable,omitempty"`
		RogueOnuOccurrences     []any  `json:"RogueOnuOccurrences,omitempty"`
		RogueOnuStatus          string `json:"RogueOnuStatus,omitempty"`
	} `json:"RogueOnu,omitempty"`
	Stats struct {
		BroadcastPacketsReceived      int64 `json:"BroadcastPacketsReceived,omitempty"`
		BroadcastPacketsSent          int64 `json:"BroadcastPacketsSent,omitempty"`
		BytesReceived                 int64 `json:"BytesReceived,omitempty,string"`
		BytesSent                     int64 `json:"BytesSent,omitempty,string"`
		DiscardChecksumReceived       int64 `json:"DiscardChecksumReceived,omitempty"`
		DiscardSequenceNumberReceived int64 `json:"DiscardSequenceNumberReceived,omitempty"`
		ErrorsReceived                int64 `json:"ErrorsReceived,omitempty"`
		ErrorsSent                    int64 `json:"ErrorsSent,omitempty"`
		MulticastPacketsReceived      int64 `json:"MulticastPacketsReceived,omitempty"`
		MulticastPacketsSent          int64 `json:"MulticastPacketsSent,omitempty"`
		PacketsReceived               int64 `json:"PacketsReceived,omitempty"`
		PacketsSent                   int64 `json:"PacketsSent,omitempty"`
		UnicastPacketsReceived        int64 `json:"UnicastPacketsReceived,omitempty"`
		UnicastPacketsSent            int64 `json:"UnicastPacketsSent,omitempty"`
	} `json:"Stats,omitempty"`
	Status        string `json:"Status,omitempty"`
	StoppedBy     string `json:"StoppedBy,omitempty"`
	SupportedSFPs []struct {
		PartNumber string `json:"PartNumber,omitempty"`
		Type       string `json:"Type,omitempty"`
		VendorName string `json:"VendorName,omitempty"`
		UID        int    `json:"uid,omitempty"`
	} `json:"SupportedSFPs,omitempty"`
	Temperature                 int64 `json:"Temperature,omitempty"`
	TransmitOpticalLevel        int64 `json:"TransmitOpticalLevel,omitempty"`
	UpperOpticalThreshold       int64 `json:"UpperOpticalThreshold,omitempty"`
	UpperTransmitPowerThreshold int64 `json:"UpperTransmitPowerThreshold,omitempty"`
	Upstream                    bool  `json:"Upstream,omitempty"`
	Voltage                     int64 `json:"Voltage,omitempty"`
	UID                         int   `json:"uid,omitempty"`
}

type ProcessStatus

type ProcessStatus struct {
	PID         int    `json:"PID,string"`
	ProcessName string `json:"ProcessName"`
	Size        int64  `json:"Size,string"`
	Priority    int    `json:"Priority,string"`
	CPUTime     int64  `json:"CPUTime,string"`
	State       string `json:"State"`
}

type ProcessStatuses

type ProcessStatuses []ProcessStatus

func (*ProcessStatuses) UnmarshalJSON

func (p *ProcessStatuses) UnmarshalJSON(data []byte) error

type Radio

type Radio struct {
	Ampdu                    int    `json:"AMPDU,omitempty"`
	Ampdumpdu                int    `json:"AMPDUMPDU,omitempty"`
	Amsdu                    int    `json:"AMSDU,omitempty"`
	ATFEnable                bool   `json:"ATFEnable,omitempty"`
	AdminStatus              bool   `json:"AdminStatus,omitempty"`
	Alias                    string `json:"Alias,omitempty"`
	AutoChannelAcsTriggerVar int    `json:"AutoChannelAcsTriggerVar,omitempty"`
	AutoChannelEnable        bool   `json:"AutoChannelEnable,omitempty"`
	AutoChannelList          string `json:"AutoChannelList,omitempty"`
	AutoChannelLockoutPeriod int    `json:"AutoChannelLockoutPeriod,omitempty"`
	AutoChannelMaxAcs        int    `json:"AutoChannelMaxAcs,omitempty"`
	AutoChannelRefreshPeriod int    `json:"AutoChannelRefreshPeriod,omitempty"`
	AutoChannelSupported     bool   `json:"AutoChannelSupported,omitempty"`
	AutoChannelTrigger       bool   `json:"AutoChannelTrigger,omitempty"`
	BasicDataTransmitRates   string `json:"BasicDataTransmitRates,omitempty"`
	BeaconPeriod             int    `json:"BeaconPeriod,omitempty"`
	BlackListedChannels      string `json:"BlackListedChannels,omitempty"`
	BoardSpecificChipIndex   int    `json:"BoardSpecificChipIndex,omitempty"`
	BurstModeEnable          bool   `json:"BurstModeEnable,omitempty"`
	CCAReport                string `json:"CCAReport,omitempty"`
	CCARequest               string `json:"CCARequest,omitempty"`
	CSACount                 int    `json:"CSACount,omitempty"`
	CSADeauth                string `json:"CSADeauth,omitempty"`
	CSAEnable                bool   `json:"CSAEnable,omitempty"`
	Channel                  int    `json:"Channel,omitempty"`
	ChannelHoppingEnable     bool   `json:"ChannelHoppingEnable,omitempty"`
	ChannelHoppingHistory    struct {
		Channels  string `json:"Channels,omitempty"`
		Count     int    `json:"Count,omitempty"`
		Reason    string `json:"Reason,omitempty"`
		Timestamp string `json:"Timestamp,omitempty"`
	} `json:"ChannelHoppingHistory,omitempty"`
	ChannelHoppingStatus             bool   `json:"ChannelHoppingStatus,omitempty"`
	ChannelsInUse                    string `json:"ChannelsInUse,omitempty"`
	CurrentOperatingChannelBandwidth int64
	DFSChannel                       string `json:"DFSChannel,omitempty"`
	DLMUMIMOEnabled                  bool   `json:"DLMUMIMOEnabled,omitempty"`
	DTIMPeriod                       int    `json:"DTIMPeriod,omitempty"`
	DeviceOperationMode              string `json:"DeviceOperationMode,omitempty"`
	Diversity11B                     bool   `json:"Diversity11b,omitempty"`
	DownlinkOFDMAEnable              bool   `json:"DownlinkOFDMAEnable,omitempty"`
	Enable                           bool   `json:"Enable,omitempty"`
	Enable11Ac2G                     bool   `json:"Enable11ac2G,omitempty"`
	ExtensionChannel                 string `json:"ExtensionChannel,omitempty"`
	FragmentationThreshold           int    `json:"FragmentationThreshold,omitempty"`
	FrameBurstEnabled                bool   `json:"FrameBurstEnabled,omitempty"`
	GreenAPDelay                     int    `json:"GreenAPDelay,omitempty"`
	GreenAPEnabled                   bool   `json:"GreenAPEnabled,omitempty"`
	GuardInterval                    string `json:"GuardInterval,omitempty"`
	HostBasedScbEnable               bool   `json:"HostBasedScbEnable,omitempty"`
	HybridScanMode                   bool   `json:"HybridScanMode,omitempty"`
	IEEE80211HEnabled                bool   `json:"IEEE80211hEnabled,omitempty"`
	IEEE80211HSupported              bool   `json:"IEEE80211hSupported,omitempty"`
	IfcName                          string `json:"IfcName,omitempty"`
	IncreasedPowerEnable             bool   `json:"IncreasedPowerEnable,omitempty"`
	InitiateACS                      string `json:"InitiateACS,omitempty"`
	Interference                     string `json:"Interference,omitempty"`
	LastChange                       int    `json:"LastChange,omitempty"`
	LastStatsReset                   int    `json:"LastStatsReset,omitempty"`
	LocationDescription              string `json:"LocationDescription,omitempty"`
	LongRetryLimit                   int    `json:"LongRetryLimit,omitempty"`
	LowerLayers                      string `json:"LowerLayers,omitempty"`
	Mcs                              int    `json:"MCS,omitempty"`
	MaxBitRate                       int64  `json:"MaxBitRate,omitempty"`
	Name                             string `json:"Name,omitempty"`
	NewChannelsEnable                bool   `json:"NewChannelsEnable,omitempty"`
	OperatingChannelBandwidth        string `json:"OperatingChannelBandwidth,omitempty"`
	OperatingFrequencyBand           string `json:"OperatingFrequencyBand,omitempty"`
	OperatingMCSSet                  string `json:"OperatingMCSSet,omitempty"`
	OperatingStandards               string `json:"OperatingStandards,omitempty"`
	OperationalDataTransmitRates     string `json:"OperationalDataTransmitRates,omitempty"`
	PacketAggregationEnable          bool   `json:"PacketAggregationEnable,omitempty"`
	PossibleChannels                 string `json:"PossibleChannels,omitempty"`
	PreambleType                     string `json:"PreambleType,omitempty"`
	RPIHistogramReport               string `json:"RPIHistogramReport,omitempty"`
	RPIHistogramRequest              string `json:"RPIHistogramRequest,omitempty"`
	RTSThreshold                     int    `json:"RTSThreshold,omitempty"`
	RadarDetections                  int    `json:"RadarDetections,omitempty"`
	RegulatoryDomain                 string `json:"RegulatoryDomain,omitempty"`
	RegulatoryRegionSubRegion        string `json:"RegulatoryRegionSubRegion,omitempty"`
	ResetStats                       bool   `json:"ResetStats,omitempty"`
	RetryLimit                       int    `json:"RetryLimit,omitempty"`
	RxSTBC                           string `json:"RxSTBC,omitempty"`
	SingleTxCCK                      bool   `json:"SingleTxCCK,omitempty"`
	SiteSurvey                       struct {
		ChannelSurveys []any  `json:"ChannelSurveys,omitempty"`
		ChannelsToTest string `json:"ChannelsToTest,omitempty"`
		MaxDwellTime   int    `json:"MaxDwellTime,omitempty"`
		MinDwellTime   int    `json:"MinDwellTime,omitempty"`
		NbEntries      int    `json:"NbEntries,omitempty"`
		SamplePeriod   int    `json:"SamplePeriod,omitempty"`
		ScanMode       string `json:"ScanMode,omitempty"`
		State          string `json:"State,omitempty"`
	} `json:"SiteSurvey,omitempty"`
	SplittedOperatingFrequencyBand string `json:"SplittedOperatingFrequencyBand,omitempty"`
	Stats                          struct {
		Active                 string `json:"Active,omitempty"`
		BKCount                string `json:"BK_count,omitempty"`
		BcnCount               string `json:"Bcn_count,omitempty"`
		BeCount                string `json:"Be_count,omitempty"`
		BytesReceived          string `json:"BytesReceived,omitempty"`
		BytesSent              string `json:"BytesSent,omitempty"`
		CabCount               string `json:"Cab_count,omitempty"`
		CollisionsPackets      int    `json:"CollisionsPackets,omitempty"`
		DiscardPacketsReceived int    `json:"DiscardPacketsReceived,omitempty"`
		DiscardPacketsSent     int    `json:"DiscardPacketsSent,omitempty"`
		ErrorsReceived         int    `json:"ErrorsReceived,omitempty"`
		ErrorsSent             int    `json:"ErrorsSent,omitempty"`
		FCSErrorCount          int    `json:"FCSErrorCount,omitempty"`
		InvalidMACCount        int    `json:"InvalidMACCount,omitempty"`
		Noise                  int    `json:"Noise,omitempty"`
		Opertxpower            int    `json:"Opertxpower,omitempty"`
		PLCPErrorCount         int    `json:"PLCPErrorCount,omitempty"`
		PacketsOtherReceived   int    `json:"PacketsOtherReceived,omitempty"`
		PacketsReceived        string `json:"PacketsReceived,omitempty"`
		PacketsSent            string `json:"PacketsSent,omitempty"`
		SampleCount            int    `json:"SampleCount,omitempty"`
		ViCount                string `json:"Vi_count,omitempty"`
		VoCount                string `json:"Vo_count,omitempty"`
	} `json:"Stats,omitempty"`
	Status                     string `json:"Status,omitempty"`
	StoppedBy                  string `json:"StoppedBy,omitempty"`
	SupportedChannelBandwidth  string `json:"SupportedChannelBandwidth,omitempty"`
	SupportedDataTransmitRates string `json:"SupportedDataTransmitRates,omitempty"`
	SupportedFrequencyBands    string `json:"SupportedFrequencyBands,omitempty"`
	SupportedStandards         string `json:"SupportedStandards,omitempty"`
	TransmitBeamForming        bool   `json:"TransmitBeamForming,omitempty"`
	TransmitPower              float64
	TransmitPowerMax           float64 `json:"TransmitPowerMax,omitempty"`
	TransmitPowerSupported     string  `json:"TransmitPowerSupported,omitempty"`
	TxLDPC                     string  `json:"TxLDPC,omitempty"`
	TxSTBC                     string  `json:"TxSTBC,omitempty"`
	UplinkOFDMAEnable          bool    `json:"UplinkOFDMAEnable,omitempty"`
	Upstream                   bool    `json:"Upstream,omitempty"`
	VoWEnable                  bool    `json:"VoWEnable,omitempty"`
	WirelessScan               struct {
		ChannelsToTest string `json:"ChannelsToTest,omitempty"`
		SSIDs          []any  `json:"SSIDs,omitempty"`
		State          string `json:"State,omitempty"`
	} `json:"WirelessScan,omitempty"`
	GModeProtectionEnabled bool `json:"gModeProtectionEnabled,omitempty"`
	UID                    int  `json:"uid,omitempty"`
}

func (*Radio) UnmarshalJSON

func (r *Radio) UnmarshalJSON(data []byte) error

type ResourceUsage

type ResourceUsage struct {
	TotalMemory          int64           `json:"TotalMemory,omitempty"`
	FreeMemory           int64           `json:"FreeMemory,omitempty"`
	AvailableFlashMemory int64           `json:"AvailableFlashMemory,omitempty"`
	UsedFlashMemory      int64           `json:"UsedFlashMemory,omitempty"`
	CPUUsage             int64           `json:"CPUUsage,omitempty"`
	LoadAverage          float64         `json:"LoadAverage,omitempty"`
	LoadAverage5         float64         `json:"LoadAverage5,omitempty"`
	LoadAverage15        float64         `json:"LoadAverage15,omitempty"`
	ProcessStatus        ProcessStatuses `json:"ProcessStatus,omitempty"`
}

type SSID

type SSID struct {
	Alias          string `json:"Alias,omitempty"`
	Bssid          string `json:"BSSID,omitempty"`
	Enable         bool   `json:"Enable,omitempty"`
	IfcName        string `json:"IfcName,omitempty"`
	LastChange     int    `json:"LastChange,omitempty"`
	LastStatsReset int    `json:"LastStatsReset,omitempty"`
	LowerLayers    string `json:"LowerLayers,omitempty"`
	MACAddress     string `json:"MACAddress,omitempty"`
	Name           string `json:"Name,omitempty"`
	ResetStats     bool   `json:"ResetStats,omitempty"`
	SSID           string `json:"SSID,omitempty"`
	Stats          struct {
		ACKFailureCount             int64 `json:"ACKFailureCount"`
		AggregatedPacketCount       int64 `json:"AggregatedPacketCount"`
		BroadcastPacketsReceived    int64 `json:"BroadcastPacketsReceived,string"`
		BroadcastPacketsSent        int64 `json:"BroadcastPacketsSent,string"`
		BytesReceived               int64 `json:"BytesReceived,string"`
		BytesSent                   int64 `json:"BytesSent,string"`
		CollisionsPackets           int64 `json:"CollisionsPackets"`
		DiscardPacketsReceived      int64 `json:"DiscardPacketsReceived"`
		DiscardPacketsSent          int64 `json:"DiscardPacketsSent"`
		ErrorsReceived              int64 `json:"ErrorsReceived"`
		ErrorsSent                  int64 `json:"ErrorsSent"`
		FailedRetransCount          int64 `json:"FailedRetransCount"`
		MulticastPacketsReceived    int64 `json:"MulticastPacketsReceived,string"`
		MulticastPacketsSent        int64 `json:"MulticastPacketsSent,string"`
		MultipleRetryCount          int64 `json:"MultipleRetryCount"`
		PacketsReceived             int64 `json:"PacketsReceived,string"`
		PacketsSent                 int64 `json:"PacketsSent,string"`
		RetransCount                int64 `json:"RetransCount"`
		RetryCount                  int64 `json:"RetryCount"`
		RxRetryCount                int64 `json:"RxRetryCount"`
		UnicastPacketsReceived      int64 `json:"UnicastPacketsReceived,string"`
		UnicastPacketsSent          int64 `json:"UnicastPacketsSent,string"`
		UnknownProtoPacketsReceived int64 `json:"UnknownProtoPacketsReceived"`
	} `json:"Stats,omitempty"`
	Status    string `json:"Status,omitempty"`
	StoppedBy string `json:"StoppedBy,omitempty"`
	UID       int    `json:"uid,omitempty"`
}

type Scraper

type Scraper interface {
	// GetValue retrieves a value from the device using a given XPath.
	GetValue(ctx context.Context, xpath string) (*ValueResponse, error)
	// GetResourceUsage retrieves resource usage from the device.
	GetResourceUsage(ctx context.Context) (*ResourceUsage, error)
}

Scraper is an interface for scraping data from a Sagemcom F@st device

func New

func New(host, username, password, authMethod string, hc *http.Client, refresh time.Duration) Scraper

type ValueResponse

type ValueResponse struct {
	Device Device `json:"Device,omitempty"`
}

ValueResponse represents the full response from the router from the getValue method

Directories

Path Synopsis
cmd
internal

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL