// Code generated by "infoblox-go-client-generator"; DO NOT EDIT.

package ibclient

// WAPI_VERSION is a version of WAPI, which was used to generate infoblox-go-client.
const WAPI_VERSION = "2.12.1"

// AdAuthService represents Infoblox object ad_auth_service.
// This object allows you to specify an Active Directory (AD) authentication
// method and the AD authentication servers that Infoblox uses to authenticate
// administrators.
type AdAuthService struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The Active Directory domain to which this server belongs.
	AdDomain *string `json:"ad_domain,omitempty"`

	// The unordered list of additional search paths for nested group querying.
	AdditionalSearchPaths []string `json:"additional_search_paths,omitempty"`

	// The descriptive comment for the AD authentication service.
	Comment *string `json:"comment,omitempty"`

	// Determines whether the default search path for nested group querying is
	// used.
	DisableDefaultSearchPath *bool `json:"disable_default_search_path,omitempty"`

	// Determines if Active Directory Authentication Service is disabled.
	Disabled *bool `json:"disabled,omitempty"`

	// The AD authentication server list.
	DomainControllers []*AdAuthServer `json:"domain_controllers,omitempty"`

	// The AD authentication service name.
	Name *string `json:"name,omitempty"`

	// Determines whether the nested group querying is enabled.
	NestedGroupQuerying *bool `json:"nested_group_querying,omitempty"`

	// The number of seconds that the appliance waits for a response from the AD
	// server.
	Timeout *uint32 `json:"timeout,omitempty"`
}

func (AdAuthService) ObjectType() string {
	return "ad_auth_service"
}

func (obj AdAuthService) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"name"}
	}
	return obj.returnFields
}

// Admingroup represents Infoblox object admingroup.
// An Admin Group object creates and manages a local admin group on the
// Infoblox appliance. The privileges and properties that are set for the group
// apply to all the admin accounts that are assigned to the group.
type Admingroup struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// Access methods specify whether an admin group can use the GUI and the API to
	// access the appliance or to send Taxii messages to the appliance. Note that
	// API includes both the Perl API and RESTful API.
	AccessMethod []string `json:"access_method,omitempty"`

	// Admin set commands for the admin command group.
	AdminSetCommands *AdmingroupAdminsetcommands `json:"admin_set_commands,omitempty"`

	// Admin show commands for the admin command group.
	AdminShowCommands *AdmingroupAdminshowcommands `json:"admin_show_commands,omitempty"`

	// Admin_toplevel commands for the admin command group
	AdminToplevelCommands *AdmingroupAdmintoplevelcommands `json:"admin_toplevel_commands,omitempty"`

	// Cloud set commands for the cloud command group.
	CloudSetCommands *AdmingroupCloudsetcommands `json:"cloud_set_commands,omitempty"`

	// Cloud show commands for admin group
	CloudShowCommands *AdmingroupCloudshowcommands `json:"cloud_show_commands,omitempty"`

	// Comment for the Admin Group; maximum 256 characters.
	Comment *string `json:"comment,omitempty"`

	// Database show commands for admin group.
	DatabaseSetCommands *AdmingroupDatabasesetcommands `json:"database_set_commands,omitempty"`

	// Database show commands for the database command
	DatabaseShowCommands *AdmingroupDatabaseshowcommands `json:"database_show_commands,omitempty"`

	// Dhcp set commands for the dhcp command group.
	DhcpSetCommands *AdmingroupDhcpsetcommands `json:"dhcp_set_commands,omitempty"`

	// Dhcp show commands for the dhcp command group.
	DhcpShowCommands *AdmingroupDhcpshowcommands `json:"dhcp_show_commands,omitempty"`

	// Determines whether the Admin Group is disabled or not. When this is set to
	// False, the Admin Group is enabled.
	Disable *bool `json:"disable,omitempty"`

	// Disable concurrent login feature
	DisableConcurrentLogin *bool `json:"disable_concurrent_login,omitempty"`

	// Dns set commands for the dns command group.
	DnsSetCommands *AdmingroupDnssetcommands `json:"dns_set_commands,omitempty"`

	// Dns show commands for the dns command group.
	DnsShowCommands *AdmingroupDnsshowcommands `json:"dns_show_commands,omitempty"`

	// Dns toplevel commands for the dns command group.
	DnsToplevelCommands *AdmingroupDnstoplevelcommands `json:"dns_toplevel_commands,omitempty"`

	// Docker set commands for the dcoker command group.
	DockerSetCommands *AdmingroupDockersetcommands `json:"docker_set_commands,omitempty"`

	// Docker show commands for the dcoker command group.
	DockerShowCommands *AdmingroupDockershowcommands `json:"docker_show_commands,omitempty"`

	// The e-mail addresses for the Admin Group.
	EmailAddresses []string `json:"email_addresses,omitempty"`

	// Determines whether the restrictions will be applied to the admin connector
	// level for users of this Admin Group.
	EnableRestrictedUserAccess *bool `json:"enable_restricted_user_access,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// Grid set commands for the grid command group.
	GridSetCommands *AdmingroupGridsetcommands `json:"grid_set_commands,omitempty"`

	// Show commands for the grid command group.
	GridShowCommands *AdmingroupGridshowcommands `json:"grid_show_commands,omitempty"`

	// The Admin group inactivity lockout settings.
	InactivityLockoutSetting *SettingInactivelockout `json:"inactivity_lockout_setting,omitempty"`

	// Set commands for the licensing command group.
	LicensingSetCommands *AdmingroupLicensingsetcommands `json:"licensing_set_commands,omitempty"`

	// Show commands for the licensing command group.
	LicensingShowCommands *AdmingroupLicensingshowcommands `json:"licensing_show_commands,omitempty"`

	// This struct specifies security policy settings in admin group.
	LockoutSetting *AdmingroupLockoutsetting `json:"lockout_setting,omitempty"`

	// Machine control toplevel commands for the machine control command group.
	MachineControlToplevelCommands *AdmingroupMachinecontroltoplevelcommands `json:"machine_control_toplevel_commands,omitempty"`

	// The name of the Admin Group.
	Name *string `json:"name,omitempty"`

	// Set commands for the networking command group.
	NetworkingSetCommands *AdmingroupNetworkingsetcommands `json:"networking_set_commands,omitempty"`

	// Show commands for the networking command group.
	NetworkingShowCommands *AdmingroupNetworkingshowcommands `json:"networking_show_commands,omitempty"`

	// The Admin Group password settings.
	PasswordSetting *AdmingroupPasswordsetting `json:"password_setting,omitempty"`

	// The names of roles this Admin Group applies to.
	Roles []string `json:"roles,omitempty"`

	// The Admin Group SAML settings.
	SamlSetting *AdmingroupSamlsetting `json:"saml_setting,omitempty"`

	// Set commands for the security command group.
	SecuritySetCommands *AdmingroupSecuritysetcommands `json:"security_set_commands,omitempty"`

	// Show commands for the security command group.
	SecurityShowCommands *AdmingroupSecurityshowcommands `json:"security_show_commands,omitempty"`

	// Determines whether this Admin Group is a superuser group. A superuser group
	// can perform all operations on the appliance, and can view and configure all
	// types of data.
	Superuser *bool `json:"superuser,omitempty"`

	// Toplevel commands for the troubleshooting command group.
	TroubleShootingToplevelCommands *AdmingroupTroubleshootingtoplevelcommands `json:"trouble_shooting_toplevel_commands,omitempty"`

	// This is the use flag for account inactivity lockout settings.
	UseAccountInactivityLockoutEnable *bool `json:"use_account_inactivity_lockout_enable,omitempty"`

	// Whether to override grid concurrent login
	UseDisableConcurrentLogin *bool `json:"use_disable_concurrent_login,omitempty"`

	// Whether to override grid sequential lockout setting
	UseLockoutSetting *bool `json:"use_lockout_setting,omitempty"`

	// Whether grid password expiry setting should be override.
	UsePasswordSetting *bool `json:"use_password_setting,omitempty"`

	// The access control items for this Admin Group.
	UserAccess []*Addressac `json:"user_access,omitempty"`
}

func (Admingroup) ObjectType() string {
	return "admingroup"
}

func (obj Admingroup) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"comment", "name"}
	}
	return obj.returnFields
}

// Adminrole represents Infoblox object adminrole.
// An Admin Role object creates and manages a local admin role on the Infoblox
// appliance. A Role object is used to aggregate a set of permissions
// (represented by Permission objects).
type Adminrole struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The descriptive comment of the Admin Role object.
	Comment *string `json:"comment,omitempty"`

	// The disable flag.
	Disable *bool `json:"disable,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// The name of an admin role.
	Name *string `json:"name,omitempty"`
}

func (Adminrole) ObjectType() string {
	return "adminrole"
}

func (obj Adminrole) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"comment", "name"}
	}
	return obj.returnFields
}

// Adminuser represents Infoblox object adminuser.
// An admin account provides access to the Infoblox appliance. An admin account
// inherits the privileges and properties of the group to which it belongs.
type Adminuser struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The names of the Admin Groups to which this Admin User belongs. Currently,
	// this is limited to only one Admin Group.
	AdminGroups []string `json:"admin_groups,omitempty"`

	// Determines the way of authentication
	AuthMethod string `json:"auth_method,omitempty"`

	// The authentication type for the admin user.
	AuthType string `json:"auth_type,omitempty"`

	// The CA certificate that is used for user lookup during authentication.
	CaCertificateIssuer *string `json:"ca_certificate_issuer,omitempty"`

	// The serial number of the client certificate.
	ClientCertificateSerialNumber *string `json:"client_certificate_serial_number,omitempty"`

	// Comment for the admin user; maximum 256 characters.
	Comment *string `json:"comment,omitempty"`

	// Determines whether the admin user is disabled or not. When this is set to
	// False, the admin user is enabled.
	Disable *bool `json:"disable,omitempty"`

	// The e-mail address for the admin user.
	Email *string `json:"email,omitempty"`

	// Determines whether the user is allowed to log in only with the certificate.
	// Regular username/password authentication will be disabled for this user.
	EnableCertificateAuthentication *bool `json:"enable_certificate_authentication,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// The name of the admin user.
	Name *string `json:"name,omitempty"`

	// The password for the administrator to use when logging in.
	Password *string `json:"password,omitempty"`

	// List of ssh keys for a particular user.
	SshKeys []*SshKey `json:"ssh_keys,omitempty"`

	// Status of the user account.
	Status string `json:"status,omitempty"`

	// The time zone for this admin user.
	TimeZone string `json:"time_zone,omitempty"`

	// \, Enable/disable the ssh keypair authentication.
	UseSshKeys *bool `json:"use_ssh_keys,omitempty"`

	// Use flag for: time_zone
	UseTimeZone *bool `json:"use_time_zone,omitempty"`
}

func (Adminuser) ObjectType() string {
	return "adminuser"
}

func (obj Adminuser) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"admin_groups", "comment", "name"}
	}
	return obj.returnFields
}

// Allendpoints represents Infoblox object allendpoints.
// The object provides information about all thrid-party servers configured on
// the Grid.
type Allendpoints struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The Grid endpoint IPv4 Address or IPv6 Address or Fully-Qualified Domain
	// Name (FQDN).
	Address string `json:"address,omitempty"`

	// The Grid endpoint descriptive comment.
	Comment string `json:"comment,omitempty"`

	// Determines whether a Grid endpoint is disabled or not. When this is set to
	// False, the Grid endpoint is enabled.
	Disable bool `json:"disable,omitempty"`

	// The name of the Grid Member object that is serving Grid endpoint.
	SubscribingMember string `json:"subscribing_member,omitempty"`

	// The Grid endpoint type.
	Type string `json:"type,omitempty"`

	// The Grid endpoint version.
	Version string `json:"version,omitempty"`
}

func (Allendpoints) ObjectType() string {
	return "allendpoints"
}

func (obj Allendpoints) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{}
	}
	return obj.returnFields
}

// Allnsgroup represents Infoblox object allnsgroup.
// The All NS Groups object is a generic name server group object that provides
// information about all name server groups.
type Allnsgroup struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The comment for the name server group.
	Comment string `json:"comment,omitempty"`

	// The name of the name server group.
	Name string `json:"name,omitempty"`

	// The type of the name server group.
	Type string `json:"type,omitempty"`
}

func (Allnsgroup) ObjectType() string {
	return "allnsgroup"
}

func (obj Allnsgroup) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"name", "type"}
	}
	return obj.returnFields
}

// Allrecords represents Infoblox object allrecords.
// The allrecords object is a read-only synthetic object used to retrieve
// records that belong to a particular zone.
type Allrecords struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The record address.
	Address string `json:"address,omitempty"`

	// The record comment.
	Comment string `json:"comment,omitempty"`

	// The record creator.
	Creator string `json:"creator,omitempty"`

	// The GSS-TSIG principal that owns this record.
	DdnsPrincipal string `json:"ddns_principal,omitempty"`

	// Determines if the DDNS updates for this record are allowed or not.
	DdnsProtected bool `json:"ddns_protected,omitempty"`

	// The disable value determines if the record is disabled or not. "False" means
	// the record is enabled.
	Disable bool `json:"disable,omitempty"`

	// The specific LBDN record.
	DtcObscured string `json:"dtc_obscured,omitempty"`

	// The name of the record.
	Name string `json:"name,omitempty"`

	// Determines if the record is reclaimable or not.
	Reclaimable bool `json:"reclaimable,omitempty"`

	// The record object, if supported by the WAPI. Otherwise, the value is "None".
	Record string `json:"record,omitempty"`

	// The Time To Live (TTL) value for which the record is valid or being cached.
	// The 32-bit unsigned integer represents the duration in seconds. Zero
	// indicates that the record should not be cached.
	Ttl uint32 `json:"ttl,omitempty"`

	// The record type. When searching for an unspecified record type, the search
	// is performed for all records. On retrieval, the appliance returns
	// "UNSUPPORTED" for unsupported records.
	Type string `json:"type,omitempty"`

	// Name of the DNS View in which the record resides.
	View string `json:"view,omitempty"`

	// Name of the zone in which the record resides.
	Zone string `json:"zone,omitempty"`
}

func (Allrecords) ObjectType() string {
	return "allrecords"
}

func (obj Allrecords) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"comment", "name", "type", "view", "zone"}
	}
	return obj.returnFields
}

// Allrpzrecords represents Infoblox object allrpzrecords.
// A synthetic object used to return record object types that belong to a
// Response Policy Zone.
type Allrpzrecords struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The alert type of the record associated with the allrpzrecords object.
	AlertType string `json:"alert_type,omitempty"`

	// The descriptive comment of the record associated with the allrpzrecords
	// object.
	Comment string `json:"comment,omitempty"`

	// The disable flag of the record associated with the allrpzrecords object (if
	// present).
	Disable bool `json:"disable,omitempty"`

	// The expiration time of the record associated with the allrpzrecords object.
	ExpirationTime uint32 `json:"expiration_time,omitempty"`

	// The time when the record associated with the allrpzrecords object was last
	// updated.
	LastUpdated uint32 `json:"last_updated,omitempty"`

	// The name of the record associated with the allrpzrecords object. Note that
	// this value might be different than the value of the name field for the
	// associated record.
	Name string `json:"name,omitempty"`

	// The record object associated with the allrpzrecords object.
	Record string `json:"record,omitempty"`

	// The RPZ rule type of the record associated with the allrpzrecrods object.
	RpzRule string `json:"rpz_rule,omitempty"`

	// The TTL value of the record associated with the allrpzrecords object (if
	// present).
	Ttl uint32 `json:"ttl,omitempty"`

	// The type of record associated with the allrpzrecords object. This is a
	// descriptive string that identifies the record to which this allrpzrecords
	// object refers. (Examples: 'record:rpz:a', 'record:rpz:mx', etc.)
	Type string `json:"type,omitempty"`

	// The DNS view name of the record associated with the allrpzrecords object.
	View string `json:"view,omitempty"`

	// The Response Policy Zone name of the record associated with the
	// allrpzrecords object.
	Zone string `json:"zone,omitempty"`
}

func (Allrpzrecords) ObjectType() string {
	return "allrpzrecords"
}

func (obj Allrpzrecords) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"comment", "name", "type", "view", "zone"}
	}
	return obj.returnFields
}

// Approvalworkflow represents Infoblox object approvalworkflow.
// The approval workflow object supports routing certain core network service
// tasks submitted by an admin group to another approval. You can add an admin
// group to an approval workflow and define the group as a submitter or an
// approver group. You can also define when and to whom e-mail notifications
// must be sent, and configure options such as whether the submitters or
// approvers must enter a comment or a ticket number when they submit tasks for
// approval. Approval workflows are useful when you want to control tasks that
// require reviews.
type Approvalworkflow struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The approval administration group.
	ApprovalGroup *string `json:"approval_group,omitempty"`

	// The destination for approval task notifications.
	ApprovalNotifyTo string `json:"approval_notify_to,omitempty"`

	// The destination for approved task notifications.
	ApprovedNotifyTo string `json:"approved_notify_to,omitempty"`

	// The requirement for the comment when an approver approves a submitted task.
	ApproverComment string `json:"approver_comment,omitempty"`

	// Determines whether approval task notifications are enabled.
	EnableApprovalNotify *bool `json:"enable_approval_notify,omitempty"`

	// Determines whether approved task notifications are enabled.
	EnableApprovedNotify *bool `json:"enable_approved_notify,omitempty"`

	// Determines whether failed task notifications are enabled.
	EnableFailedNotify *bool `json:"enable_failed_notify,omitempty"`

	// Determines whether e-mail notifications to admin group's e-mail address are
	// enabled.
	EnableNotifyGroup *bool `json:"enable_notify_group,omitempty"`

	// Determines whether e-mail notifications to an admin member's e-mail address
	// are enabled.
	EnableNotifyUser *bool `json:"enable_notify_user,omitempty"`

	// Determines whether rejected task notifications are enabled.
	EnableRejectedNotify *bool `json:"enable_rejected_notify,omitempty"`

	// Determines whether rescheduled task notifications are enabled.
	EnableRescheduledNotify *bool `json:"enable_rescheduled_notify,omitempty"`

	// Determines whether succeeded task notifications are enabled.
	EnableSucceededNotify *bool `json:"enable_succeeded_notify,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// The destination for failed task notifications.
	FailedNotifyTo string `json:"failed_notify_to,omitempty"`

	// The destination for rejected task notifications.
	RejectedNotifyTo string `json:"rejected_notify_to,omitempty"`

	// The destination for rescheduled task notifications.
	RescheduledNotifyTo string `json:"rescheduled_notify_to,omitempty"`

	// The requirement for the comment when a submitter submits a task for
	// approval.
	SubmitterComment string `json:"submitter_comment,omitempty"`

	// The submitter admininstration group.
	SubmitterGroup string `json:"submitter_group,omitempty"`

	// The destination for succeeded task notifications.
	SucceededNotifyTo string `json:"succeeded_notify_to,omitempty"`

	// The requirement for the ticket number when a submitter submits a task for
	// approval.
	TicketNumber string `json:"ticket_number,omitempty"`
}

func (Approvalworkflow) ObjectType() string {
	return "approvalworkflow"
}

func (obj Approvalworkflow) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"approval_group", "submitter_group"}
	}
	return obj.returnFields
}

// Authpolicy represents Infoblox object authpolicy.
// The authentication policy defines which authentication server groups the
// appliance uses to authenticate admins and lists the local admin groups that
// map to the remote admin groups.
type Authpolicy struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// List of names of local administration groups that are mapped to remote
	// administration groups.
	AdminGroups []string `json:"admin_groups,omitempty"`

	// The array that contains an ordered list of refs to
	// :doc:`localuser:authservice object </objects/localuser.authservice>`,
	// ldap_auth_service object ldap_auth_service, :doc:`radius:authservice object
	// </objects/radius.authservice>`, :doc:`tacacsplus:authservice object
	// </objects/tacacsplus.authservice>`, ad_auth_service object ad_auth_service,
	// :doc:`certificate:authservice object </objects/certificate.authservice>`.
	// :doc:`saml:authservice object </objects/saml.authservice>`,
	AuthServices []*LocaluserAuthservice `json:"auth_services,omitempty"`

	// The default admin group that provides authentication in case no valid group
	// is found.
	DefaultGroup *string `json:"default_group,omitempty"`

	// Remote policies usage.
	UsageType string `json:"usage_type,omitempty"`
}

func (Authpolicy) ObjectType() string {
	return "authpolicy"
}

func (obj Authpolicy) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"default_group", "usage_type"}
	}
	return obj.returnFields
}

// Awsrte53taskgroup represents Infoblox object awsrte53taskgroup.
// An AWS Route53 task group is a collection of one or more tasks allowing you
// to specify various zone filters to retrieve DNS zone data from AWS Route53
// service using specified AWS user credentials. Grouping these tasks together
// helps organize related groups of sync data, enable/disable these and manage
// the grid member these run on.
type Awsrte53taskgroup struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The AWS Account ID associated with this task group.
	AccountId string `json:"account_id,omitempty"`

	// Comment for the task group; maximum 256 characters.
	Comment *string `json:"comment,omitempty"`

	// Indicates if all zones need to be saved into a single view.
	ConsolidateZones bool `json:"consolidate_zones,omitempty"`

	// The name of the DNS view for consolidating zones.
	ConsolidatedView string `json:"consolidated_view,omitempty"`

	// Indicates if the task group is enabled or disabled.
	Disabled *bool `json:"disabled,omitempty"`

	// Member on which the tasks in this task group will be run.
	GridMember *string `json:"grid_member,omitempty"`

	// The name of this AWS Route53 sync task group.
	Name *string `json:"name,omitempty"`

	// The name of the tenant's network view.
	NetworkView string `json:"network_view,omitempty"`

	// The network view mapping policy.
	NetworkViewMappingPolicy string `json:"network_view_mapping_policy,omitempty"`

	// Indicate the overall sync status of this task group.
	SyncStatus string `json:"sync_status,omitempty"`

	// List of AWS Route53 tasks in this group.
	TaskList []*Awsrte53task `json:"task_list,omitempty"`
}

func (Awsrte53taskgroup) ObjectType() string {
	return "awsrte53taskgroup"
}

func (obj Awsrte53taskgroup) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"account_id", "comment", "disabled", "name", "sync_status"}
	}
	return obj.returnFields
}

// Awsuser represents Infoblox object awsuser.
// An AWS user object represents a specific access key and secret key pair
// credentials of an AWS user.
type Awsuser struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The unique Access Key ID of this AWS user. Maximum 255 characters.
	AccessKeyId *string `json:"access_key_id,omitempty"`

	// The AWS Account ID of this AWS user. Maximum 64 characters.
	AccountId *string `json:"account_id,omitempty"`

	// The timestamp when this AWS user credentials was last used.
	LastUsed *UnixTime `json:"last_used,omitempty"`

	// The AWS user name. Maximum 64 characters.
	Name *string `json:"name,omitempty"`

	// The NIOS user name mapped to this AWS user. Maximum 64 characters.
	NiosUserName *string `json:"nios_user_name,omitempty"`

	// The Secret Access Key for the Access Key ID of this user. Maximum 255
	// characters.
	SecretAccessKey *string `json:"secret_access_key,omitempty"`

	// Indicate the validity status of this AWS user.
	Status string `json:"status,omitempty"`
}

func (Awsuser) ObjectType() string {
	return "awsuser"
}

func (obj Awsuser) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"access_key_id", "account_id", "name"}
	}
	return obj.returnFields
}

// Bfdtemplate represents Infoblox object bfdtemplate.
// The Bidirectional Forwarding Detection (BFD) template contains a
// configuration of advanced BFD settings such as authentication and timer
// intervals.
type Bfdtemplate struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The authentication key for BFD protocol message-digest authentication.
	AuthenticationKey *string `json:"authentication_key,omitempty"`

	// The authentication key identifier for BFD protocol authentication. Valid
	// values are between 1 and 255.
	AuthenticationKeyId *uint32 `json:"authentication_key_id,omitempty"`

	// The authentication type for BFD protocol.
	AuthenticationType string `json:"authentication_type,omitempty"`

	// The detection time multiplier value for BFD protocol. The negotiated
	// transmit interval, multiplied by this value, provides the detection time for
	// the receiving system in asynchronous BFD mode. Valid values are between 3
	// and 50.
	DetectionMultiplier *uint32 `json:"detection_multiplier,omitempty"`

	// The minimum receive time (in seconds) for BFD protocol. Valid values are
	// between 50 and 9999.
	MinRxInterval *uint32 `json:"min_rx_interval,omitempty"`

	// The minimum transmission time (in seconds) for BFD protocol. Valid values
	// are between 50 and 9999.
	MinTxInterval *uint32 `json:"min_tx_interval,omitempty"`

	// The name of the BFD template object.
	Name *string `json:"name,omitempty"`
}

func (Bfdtemplate) ObjectType() string {
	return "bfdtemplate"
}

func (obj Bfdtemplate) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"name"}
	}
	return obj.returnFields
}

// Bulkhost represents Infoblox object bulkhost.
// If you need to add a large number of hosts, you can have the Infoblox
// appliance add them as a group and automatically assign host names based on a
// range of IP addresses and name format applied to it. This group of hosts is
// referred to as a BulkHost. The Infoblox appliance uses the name space
// bulk-xx-xx-xx-xx for bulk host, so this name should not be used for CNAMEs
// and host aliases because doing so causes conflicts. Before adding a bulk
// host, make sure that no CNAMEs or host aliases uses this name.
type Bulkhost struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The cloud API related information.
	CloudInfo *GridCloudapiInfo `json:"cloud_info,omitempty"`

	// The descriptive comment.
	Comment *string `json:"comment,omitempty"`

	// The disable flag of a DNS BulkHost record.
	Disable *bool `json:"disable,omitempty"`

	// The prefix, in punycode format, for the bulk host.
	DnsPrefix string `json:"dns_prefix,omitempty"`

	// The last IP address in the address range for the bulk host.
	EndAddr *string `json:"end_addr,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// The time of the last DNS query in Epoch seconds format.
	LastQueried *UnixTime `json:"last_queried,omitempty"`

	// The bulk host name template.
	NameTemplate *string `json:"name_template,omitempty"`

	// The network view associated with the bulk host view.
	NetworkView string `json:"network_view,omitempty"`

	// The hostname policy for records under the bulk host parent zone.
	Policy string `json:"policy,omitempty"`

	// The prefix for the bulk host. The prefix is the name (or a series of
	// characters) inserted at the beginning of each host name.
	Prefix *string `json:"prefix,omitempty"`

	// The reverse flag of the BulkHost record.
	Reverse *bool `json:"reverse,omitempty"`

	// The first IP address in the address range for the bulk host.
	StartAddr *string `json:"start_addr,omitempty"`

	// The bulk host name template format.
	TemplateFormat string `json:"template_format,omitempty"`

	// The Time to Live (TTL) value.
	Ttl *uint32 `json:"ttl,omitempty"`

	// Use flag for: name_template
	UseNameTemplate *bool `json:"use_name_template,omitempty"`

	// Use flag for: ttl
	UseTtl *bool `json:"use_ttl,omitempty"`

	// The view for the bulk host.
	View *string `json:"view,omitempty"`

	// The zone name.
	Zone *string `json:"zone,omitempty"`
}

func (Bulkhost) ObjectType() string {
	return "bulkhost"
}

func (obj Bulkhost) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"comment", "prefix"}
	}
	return obj.returnFields
}

// Bulkhostnametemplate represents Infoblox object bulkhostnametemplate.
// The object manages the DNS bulk host name formats defined at the Grid level.
type Bulkhostnametemplate struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// True if this template is Grid default.
	IsGridDefault bool `json:"is_grid_default,omitempty"`

	// True if this is a pre-defined template, False otherwise.
	PreDefined bool `json:"pre_defined,omitempty"`

	// The format of bulk host name template. It should follow certain rules
	// (please use Administration Guide as reference).
	TemplateFormat *string `json:"template_format,omitempty"`

	// The name of bulk host name template.
	TemplateName *string `json:"template_name,omitempty"`
}

func (Bulkhostnametemplate) ObjectType() string {
	return "bulkhostnametemplate"
}

func (obj Bulkhostnametemplate) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"is_grid_default", "template_format", "template_name"}
	}
	return obj.returnFields
}

// Cacertificate represents Infoblox object cacertificate.
// An CA Certificate object represents a CA certificate description.
type Cacertificate struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The certificate subject name.
	DistinguishedName string `json:"distinguished_name,omitempty"`

	// The certificate issuer subject name.
	Issuer string `json:"issuer,omitempty"`

	// The certificate serial number in hex format.
	Serial string `json:"serial,omitempty"`

	// Information about the CA certificate usage.
	UsedBy string `json:"used_by,omitempty"`

	// The date after which the certificate becomes invalid.
	ValidNotAfter *UnixTime `json:"valid_not_after,omitempty"`

	// The date before which the certificate is not valid.
	ValidNotBefore *UnixTime `json:"valid_not_before,omitempty"`
}

func (Cacertificate) ObjectType() string {
	return "cacertificate"
}

func (obj Cacertificate) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"distinguished_name", "issuer", "serial", "used_by", "valid_not_after", "valid_not_before"}
	}
	return obj.returnFields
}

// CapacityReport represents Infoblox object capacityreport.
// The capacity report object provides information about the object count,
// interface count, and other memory usage statistics for a Grid member.
type CapacityReport struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// Hardware type of a Grid member.
	HardwareType string `json:"hardware_type,omitempty"`

	// The maximum amount of capacity available for the Grid member.
	MaxCapacity uint32 `json:"max_capacity,omitempty"`

	// The Grid member name.
	Name string `json:"name,omitempty"`

	// A list of instance counts for object types created on the Grid member.
	ObjectCounts []*CapacityreportObjectcount `json:"object_counts,omitempty"`

	// The percentage of the capacity in use by the Grid member.
	PercentUsed uint32 `json:"percent_used,omitempty"`

	// The Grid member role.
	Role string `json:"role,omitempty"`

	// The total number of objects created by the Grid member.
	TotalObjects uint32 `json:"total_objects,omitempty"`
}

func (CapacityReport) ObjectType() string {
	return "capacityreport"
}

func (obj CapacityReport) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"name", "percent_used", "role"}
	}
	return obj.returnFields
}

func NewCapcityReport(capReport CapacityReport) *CapacityReport {
	res := capReport
	returnFields := []string{"name", "hardware_type", "max_capacity", "object_counts", "percent_used", "role", "total_objects"}
	res.returnFields = returnFields
	return &res
}

// Captiveportal represents Infoblox object captiveportal.
// This object represents the captive portal configuration.
type Captiveportal struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The authentication server group assigned to this captive portal.
	AuthnServerGroup *string `json:"authn_server_group,omitempty"`

	// The company name that appears in the guest registration page.
	CompanyName *string `json:"company_name,omitempty"`

	// Determines if authentication failures are logged to syslog or not.
	EnableSyslogAuthFailure *bool `json:"enable_syslog_auth_failure,omitempty"`

	// Determines if successful authentications are logged to syslog or not.
	EnableSyslogAuthSuccess *bool `json:"enable_syslog_auth_success,omitempty"`

	// The type of user to be enabled for the captive portal.
	EnableUserType string `json:"enable_user_type,omitempty"`

	// The encryption the captive portal uses.
	Encryption string `json:"encryption,omitempty"`

	// The list of files associated with the captive portal.
	Files []*CaptiveportalFile `json:"files,omitempty"`

	// The name of the custom field that you are adding to the guest registration
	// page.
	GuestCustomField1Name *string `json:"guest_custom_field1_name,omitempty"`

	// Determines if the custom field is required or not.
	GuestCustomField1Required *bool `json:"guest_custom_field1_required,omitempty"`

	// The name of the custom field that you are adding to the guest registration
	// page.
	GuestCustomField2Name *string `json:"guest_custom_field2_name,omitempty"`

	// Determines if the custom field is required or not.
	GuestCustomField2Required *bool `json:"guest_custom_field2_required,omitempty"`

	// The name of the custom field that you are adding to the guest registration
	// page.
	GuestCustomField3Name *string `json:"guest_custom_field3_name,omitempty"`

	// Determines if the custom field is required or not.
	GuestCustomField3Required *bool `json:"guest_custom_field3_required,omitempty"`

	// The name of the custom field that you are adding to the guest registration
	// page.
	GuestCustomField4Name *string `json:"guest_custom_field4_name,omitempty"`

	// Determines if the custom field is required or not.
	GuestCustomField4Required *bool `json:"guest_custom_field4_required,omitempty"`

	// Determines if the email address of the guest is required or not.
	GuestEmailRequired *bool `json:"guest_email_required,omitempty"`

	// Determines if the first name of the guest is required or not.
	GuestFirstNameRequired *bool `json:"guest_first_name_required,omitempty"`

	// Determines if the last name of the guest is required or not.
	GuestLastNameRequired *bool `json:"guest_last_name_required,omitempty"`

	// Determines if the middle name of the guest is required or not.
	GuestMiddleNameRequired *bool `json:"guest_middle_name_required,omitempty"`

	// Determines if the phone number of the guest is required or not.
	GuestPhoneRequired *bool `json:"guest_phone_required,omitempty"`

	// The helpdesk message that appears in the guest registration page.
	HelpdeskMessage *string `json:"helpdesk_message,omitempty"`

	// Determines the IP address on which the captive portal listens. Valid if
	// listen address type is 'IP'.
	ListenAddressIp *string `json:"listen_address_ip,omitempty"`

	// Determines the type of the IP address on which the captive portal listens.
	ListenAddressType string `json:"listen_address_type,omitempty"`

	// The hostname of the Grid member that hosts the captive portal.
	Name string `json:"name,omitempty"`

	// The network view of the captive portal.
	NetworkView *string `json:"network_view,omitempty"`

	// The TCP port used by the Captive Portal service. The port is required when
	// the Captive Portal service is enabled. Valid values are between 1 and 63999.
	// Please note that setting the port number to 80 or 443 might impact
	// performance.
	Port *uint32 `json:"port,omitempty"`

	// Determines if the captive portal service is enabled or not.
	ServiceEnabled *bool `json:"service_enabled,omitempty"`

	// The syslog level at which authentication failures are logged.
	SyslogAuthFailureLevel string `json:"syslog_auth_failure_level,omitempty"`

	// The syslog level at which successful authentications are logged.
	SyslogAuthSuccessLevel string `json:"syslog_auth_success_level,omitempty"`

	// The welcome message that appears in the guest registration page.
	WelcomeMessage *string `json:"welcome_message,omitempty"`
}

func (Captiveportal) ObjectType() string {
	return "captiveportal"
}

func (obj Captiveportal) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"name"}
	}
	return obj.returnFields
}

// CertificateAuthservice represents Infoblox object certificate:authservice.
// This object represents an certificate authentication service.
type CertificateAuthservice struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// Specifies the value of the client certificate for automatically populating
	// the NIOS login name.
	AutoPopulateLogin string `json:"auto_populate_login,omitempty"`

	// The list of CA certificates.
	CaCertificates []*Cacertificate `json:"ca_certificates,omitempty"`

	// The descriptive comment for the certificate authentication service.
	Comment *string `json:"comment,omitempty"`

	// Determines if this certificate authentication service is enabled or
	// disabled.
	Disabled *bool `json:"disabled,omitempty"`

	// Determines if username/password authentication together with client
	// certificate authentication is enabled or disabled.
	EnablePasswordRequest *bool `json:"enable_password_request,omitempty"`

	// Determines if the lookup for user group membership information on remote
	// services is enabled or disabled.
	EnableRemoteLookup *bool `json:"enable_remote_lookup,omitempty"`

	// The number of validation attempts before the appliance contacts the next
	// responder.
	MaxRetries *uint32 `json:"max_retries,omitempty"`

	// The name of the certificate authentication service.
	Name *string `json:"name,omitempty"`

	// Specifies the source of OCSP settings.
	OcspCheck string `json:"ocsp_check,omitempty"`

	// An ordered list of OCSP responders that are part of the certificate
	// authentication service.
	OcspResponders []*OcspResponder `json:"ocsp_responders,omitempty"`

	// The period of time the appliance waits before it attempts to contact a
	// responder that is out of service again. The value must be between 1 and 600
	// seconds.
	RecoveryInterval *uint32 `json:"recovery_interval,omitempty"`

	// The password for the service account.
	RemoteLookupPassword *string `json:"remote_lookup_password,omitempty"`

	// The service that will be used for remote lookup.
	RemoteLookupService *string `json:"remote_lookup_service,omitempty"`

	// The username for the service account.
	RemoteLookupUsername *string `json:"remote_lookup_username,omitempty"`

	// The validation timeout period in milliseconds.
	ResponseTimeout *uint32 `json:"response_timeout,omitempty"`

	// The OCSP trust model.
	TrustModel string `json:"trust_model,omitempty"`

	// Specifies how to search for a user.
	UserMatchType string `json:"user_match_type,omitempty"`
}

func (CertificateAuthservice) ObjectType() string {
	return "certificate:authservice"
}

func (obj CertificateAuthservice) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"name"}
	}
	return obj.returnFields
}

// CiscoiseEndpoint represents Infoblox object ciscoise:endpoint.
// The object contains information and configuration for third-party Cisco ISE
// servers integration, configuration for Cisco ISE publishing and
// subscription.
type CiscoiseEndpoint struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The Cisco ISE endpoint IPv4 Address or IPv6 Address or Fully-Qualified
	// Domain Name (FQDN)
	Address *string `json:"address,omitempty"`

	// The Cisco ISE bulk download certificate subject.
	BulkDownloadCertificateSubject string `json:"bulk_download_certificate_subject,omitempty"`

	// The token returned by the uploadinit function call in object fileop for
	// Cisco ISE bulk download certificate.
	BulkDownloadCertificateToken *string `json:"bulk_download_certificate_token,omitempty"`

	// The Cisco ISE bulk download certificate valid from.
	BulkDownloadCertificateValidFrom *UnixTime `json:"bulk_download_certificate_valid_from,omitempty"`

	// The Cisco ISE bulk download certificate valid to.
	BulkDownloadCertificateValidTo *UnixTime `json:"bulk_download_certificate_valid_to,omitempty"`

	// The Cisco ISE client certificate subject.
	ClientCertificateSubject string `json:"client_certificate_subject,omitempty"`

	// The token returned by the uploadinit function call in object fileop for
	// Cisco ISE client certificate.
	ClientCertificateToken *string `json:"client_certificate_token,omitempty"`

	// The Cisco ISE client certificate valid from.
	ClientCertificateValidFrom *UnixTime `json:"client_certificate_valid_from,omitempty"`

	// The Cisco ISE client certificate valid to.
	ClientCertificateValidTo *UnixTime `json:"client_certificate_valid_to,omitempty"`

	// The Cisco ISE endpoint descriptive comment.
	Comment *string `json:"comment,omitempty"`

	// The Cisco ISE connection status.
	ConnectionStatus string `json:"connection_status,omitempty"`

	// The Cisco ISE connection timeout.
	ConnectionTimeout *uint32 `json:"connection_timeout,omitempty"`

	// Determines whether a Cisco ISE endpoint is disabled or not. When this is set
	// to False, the Cisco ISE endpoint is enabled.
	Disable *bool `json:"disable,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// The Cisco ISE network view name.
	NetworkView *string `json:"network_view,omitempty"`

	// The Cisco ISE publish settings.
	PublishSettings *CiscoisePublishsetting `json:"publish_settings,omitempty"`

	// The resolved IPv4 Address or IPv6 Address of the Cisco ISE endpoint.
	ResolvedAddress string `json:"resolved_address,omitempty"`

	// The resolved IPv4 Address or IPv6 Address of the Cisco ISE endpoint.
	ResolvedSecondaryAddress string `json:"resolved_secondary_address,omitempty"`

	// The Cisco ISE endpoint secondary IPv4 Address or IPv6 Address or
	// Fully-Qualified Domain Name (FQDN)
	SecondaryAddress *string `json:"secondary_address,omitempty"`

	// The Cisco ISE subscribe settings.
	SubscribeSettings *CiscoiseSubscribesetting `json:"subscribe_settings,omitempty"`

	// The name of the Grid Member object that is serving Cisco ISE endpoint.
	SubscribingMember *string `json:"subscribing_member,omitempty"`

	// The Cisco ISE endpoint type.
	Type string `json:"type,omitempty"`

	// The Cisco ISE endpoint version.
	Version string `json:"version,omitempty"`
}

func (CiscoiseEndpoint) ObjectType() string {
	return "ciscoise:endpoint"
}

func (obj CiscoiseEndpoint) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"address", "disable", "resolved_address", "type", "version"}
	}
	return obj.returnFields
}

// Csvimporttask represents Infoblox object csvimporttask.
// This object represents a CSV import task, if the task was created but not
// started by an import operation, it can be started by modifying it and
// assigning the value ‘START’ to the ‘action’ field.
type Csvimporttask struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The action to execute.
	Action string `json:"action,omitempty"`

	// The login name of the administrator.
	AdminName string `json:"admin_name,omitempty"`

	// The end time of this import operation.
	EndTime *UnixTime `json:"end_time,omitempty"`

	// The name of the file used for the import operation.
	FileName string `json:"file_name,omitempty"`

	// The size of the file used for the import operation.
	FileSize uint32 `json:"file_size,omitempty"`

	// The ID of the current import task.
	ImportId uint32 `json:"import_id,omitempty"`

	// The number of lines that encountered an error.
	LinesFailed uint32 `json:"lines_failed,omitempty"`

	// The number of lines that have been processed.
	LinesProcessed uint32 `json:"lines_processed,omitempty"`

	// The number of lines that encountered a warning.
	LinesWarning uint32 `json:"lines_warning,omitempty"`

	// The action to take when an error is encountered.
	OnError string `json:"on_error,omitempty"`

	// The operation to execute.
	Operation string `json:"operation,omitempty"`

	// The separator to be used for the data in the CSV file.
	Separator string `json:"separator,omitempty"`

	// The start time of the import operation.
	StartTime *UnixTime `json:"start_time,omitempty"`

	// The status of the import operation
	Status string `json:"status,omitempty"`

	// The update method to be used for the operation.
	UpdateMethod string `json:"update_method,omitempty"`
}

func (Csvimporttask) ObjectType() string {
	return "csvimporttask"
}

func (obj Csvimporttask) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"action", "admin_name", "end_time", "file_name", "file_size", "import_id", "lines_failed", "lines_processed", "lines_warning", "on_error", "operation", "separator", "start_time", "status", "update_method"}
	}
	return obj.returnFields
}

// DbObjects represents Infoblox object db_objects.
// The DB Objects object is used to search for changes in objects of the
// Infoblox Grid.
type DbObjects struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The last returned sequence ID.
	LastSequenceId string `json:"last_sequence_id,omitempty"`

	// The record object when supported by WAPI. Otherwise, the value is "None".
	Object string `json:"object,omitempty"`

	// The object type. This is undefined if the object is not supported.
	ObjectTypeField string `json:"object_type,omitempty"`

	// The unique ID of the requested object.
	UniqueId string `json:"unique_id,omitempty"`
}

func (DbObjects) ObjectType() string {
	return "db_objects"
}

func (obj DbObjects) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"last_sequence_id", "object", "object_type", "unique_id"}
	}
	return obj.returnFields
}

// Dbsnapshot represents Infoblox object dbsnapshot.
// The object provides information about the OneDB snapshot, the last time it
// was taken and the descriptive comment.
type Dbsnapshot struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The descriptive comment.
	Comment string `json:"comment,omitempty"`

	// The time when the latest OneDB snapshot was taken in Epoch seconds format.
	Timestamp *UnixTime `json:"timestamp,omitempty"`
}

func (Dbsnapshot) ObjectType() string {
	return "dbsnapshot"
}

func (obj Dbsnapshot) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"comment", "timestamp"}
	}
	return obj.returnFields
}

// DdnsPrincipalcluster represents Infoblox object ddns:principalcluster.
// The DDNS Principal Cluster object represents a set of principals such that
// any principal in a DDNS Principal Cluster can update records created by any
// other principal in the same cluster.
type DdnsPrincipalcluster struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// Comment for the DDNS Principal Cluster.
	Comment *string `json:"comment,omitempty"`

	// The DDNS Principal cluster group name.
	Group *string `json:"group,omitempty"`

	// The name of this DDNS Principal Cluster.
	Name *string `json:"name,omitempty"`

	// The list of equivalent principals.
	Principals []string `json:"principals,omitempty"`
}

func (DdnsPrincipalcluster) ObjectType() string {
	return "ddns:principalcluster"
}

func (obj DdnsPrincipalcluster) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"comment", "group", "name", "principals"}
	}
	return obj.returnFields
}

// DdnsPrincipalclusterGroup represents Infoblox object ddns:principalcluster:group.
// The DDNS Principal Cluster Group object represents a set of DDNS Principal
// Clusters. A single group can be active at any time.
type DdnsPrincipalclusterGroup struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The list of equivalent DDNS principal clusters.
	Clusters []*DdnsPrincipalcluster `json:"clusters,omitempty"`

	// Comment for the DDNS Principal Cluster Group.
	Comment *string `json:"comment,omitempty"`

	// The name of this DDNS Principal Cluster Group.
	Name *string `json:"name,omitempty"`
}

func (DdnsPrincipalclusterGroup) ObjectType() string {
	return "ddns:principalcluster:group"
}

func (obj DdnsPrincipalclusterGroup) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"comment", "name"}
	}
	return obj.returnFields
}

// DeletedObjects represents Infoblox object deleted_objects.
// The Deleted Objects object is used to display information about deleted
// objects. You can retrieve it from the appliance only as a part of DB Objects
// response.
type DeletedObjects struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The object type of the deleted object. This is undefined if the object is
	// not supported.
	ObjectTypeField string `json:"object_type,omitempty"`
}

func (DeletedObjects) ObjectType() string {
	return "deleted_objects"
}

func (obj DeletedObjects) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"object_type"}
	}
	return obj.returnFields
}

// DhcpStatistics represents Infoblox object dhcp:statistics.
// DHCP Statistics object is used to display information about DHCP utilization
// status, number of static and dynamic hosts, overall DHCP utilization in
// percentage. DHCP Statistics object supports references on following objects:
// network, range, sharednetwork, msserver:dhcp, member:dhcpproperties.
type DhcpStatistics struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The percentage of the total DHCP utilization of DHCP objects multiplied by
	// 1000. This is the percentage of the total number of available IP addresses
	// belonging to the object versus the total number of all IP addresses in
	// object.
	DhcpUtilization uint32 `json:"dhcp_utilization,omitempty"`

	// A string describing the utilization level of the DHCP object.
	DhcpUtilizationStatus string `json:"dhcp_utilization_status,omitempty"`

	// The total number of DHCP leases issued for the DHCP object.
	DynamicHosts uint32 `json:"dynamic_hosts,omitempty"`

	// The number of static DHCP addresses configured in the DHCP object.
	StaticHosts uint32 `json:"static_hosts,omitempty"`

	// The total number of DHCP addresses configured in the DHCP object.
	TotalHosts uint32 `json:"total_hosts,omitempty"`
}

func (DhcpStatistics) ObjectType() string {
	return "dhcp:statistics"
}

func (obj DhcpStatistics) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"dhcp_utilization", "dhcp_utilization_status", "dynamic_hosts", "static_hosts", "total_hosts"}
	}
	return obj.returnFields
}

// Dhcpfailover represents Infoblox object dhcpfailover.
// DHCP failover is a protocol designed to allow a backup DHCP server to take
// over for a main server if the main server is taken off the network for any
// reason. DHCP failover can be used to configure two DHCP servers to operate
// as a redundant pair.
type Dhcpfailover struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The value indicating whether the failover assoctaion is Microsoft or Grid
	// based. This is a read-only attribute.
	AssociationType string `json:"association_type,omitempty"`

	// A descriptive comment about a DHCP failover object.
	Comment *string `json:"comment,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// Determines the TCP port on which the server should listen for connections
	// from its failover peer. Valid values are between 1 and 63999.
	FailoverPort *uint32 `json:"failover_port,omitempty"`

	// A load balancing split value of a DHCP failover object. Specify the value of
	// the maximum load balancing delay in a 8-bit integer format (range from 0 to
	// 256).
	LoadBalanceSplit *uint32 `json:"load_balance_split,omitempty"`

	// The maximum client lead time value of a DHCP failover object. Specify the
	// value of the maximum client lead time in a 32-bit integer format (range from
	// 0 to 4294967295) that represents the duration in seconds. Valid values are
	// between 1 and 4294967295.
	MaxClientLeadTime *uint32 `json:"max_client_lead_time,omitempty"`

	// The maximum load balancing delay value of a DHCP failover object. Specify
	// the value of the maximum load balancing delay in a 32-bit integer format
	// (range from 0 to 4294967295) that represents the duration in seconds. Valid
	// values are between 1 and 4294967295.
	MaxLoadBalanceDelay *uint32 `json:"max_load_balance_delay,omitempty"`

	// The maximum response delay value of a DHCP failover object. Specify the
	// value of the maximum response delay in a 32-bit integer format (range from 0
	// to 4294967295) that represents the duration in seconds. Valid values are
	// between 1 and 4294967295.
	MaxResponseDelay *uint32 `json:"max_response_delay,omitempty"`

	// The maximum number of unacked updates value of a DHCP failover object.
	// Specify the value of the maximum number of unacked updates in a 32-bit
	// integer format (range from 0 to 4294967295) that represents the number of
	// messages. Valid values are between 1 and 4294967295.
	MaxUnackedUpdates *uint32 `json:"max_unacked_updates,omitempty"`

	// The value that indicates whether the failover association is read-write or
	// read-only. This is a read-only attribute.
	MsAssociationMode string `json:"ms_association_mode,omitempty"`

	// Determines if the authentication for the failover association is enabled or
	// not.
	MsEnableAuthentication *bool `json:"ms_enable_authentication,omitempty"`

	// Determines if the switchover interval is enabled or not.
	MsEnableSwitchoverInterval *bool `json:"ms_enable_switchover_interval,omitempty"`

	// The mode for the failover association.
	MsFailoverMode string `json:"ms_failover_mode,omitempty"`

	// Failover partner defined in the association with the Microsoft Server.
	MsFailoverPartner string `json:"ms_failover_partner,omitempty"`

	// The partner role in the case of HotStandby.
	MsHotstandbyPartnerRole string `json:"ms_hotstandby_partner_role,omitempty"`

	// Determines if the matching Microsfot failover association (if any) is in
	// synchronization (False) or not (True). If there is no matching failover
	// association the returned values is False. This is a read-only attribute.
	MsIsConflict bool `json:"ms_is_conflict,omitempty"`

	// The previous failover association state. This is a read-only attribute.
	MsPreviousState string `json:"ms_previous_state,omitempty"`

	// The primary Microsoft Server.
	MsServer string `json:"ms_server,omitempty"`

	// The failover association authentication. This is a write-only attribute.
	MsSharedSecret *string `json:"ms_shared_secret,omitempty"`

	// The failover association state. This is a read-only attribute.
	MsState string `json:"ms_state,omitempty"`

	// The time (in seconds) that DHCPv4 server will wait before transitioning the
	// server from the COMMUNICATION-INT state to PARTNER-DOWN state.
	MsSwitchoverInterval *uint32 `json:"ms_switchover_interval,omitempty"`

	// The name of a DHCP failover object.
	Name *string `json:"name,omitempty"`

	// The primary server of a DHCP failover object.
	Primary *string `json:"primary,omitempty"`

	// The type of the primary server of DHCP Failover association object.
	PrimaryServerType string `json:"primary_server_type,omitempty"`

	// The primary server status of a DHCP failover object.
	PrimaryState string `json:"primary_state,omitempty"`

	// Determines if the leases are kept in recycle bin until one week after
	// expiration or not.
	RecycleLeases *bool `json:"recycle_leases,omitempty"`

	// The secondary server of a DHCP failover object.
	Secondary *string `json:"secondary,omitempty"`

	// The type of the secondary server of DHCP Failover association object.
	SecondaryServerType string `json:"secondary_server_type,omitempty"`

	// The secondary server status of a DHCP failover object.
	SecondaryState string `json:"secondary_state,omitempty"`

	// Use flag for: failover_port
	UseFailoverPort *bool `json:"use_failover_port,omitempty"`

	// Use flag for: ms_switchover_interval
	UseMsSwitchoverInterval *bool `json:"use_ms_switchover_interval,omitempty"`

	// Use flag for: recycle_leases
	UseRecycleLeases *bool `json:"use_recycle_leases,omitempty"`
}

func (Dhcpfailover) ObjectType() string {
	return "dhcpfailover"
}

func (obj Dhcpfailover) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"name"}
	}
	return obj.returnFields
}

// Dhcpoptiondefinition represents Infoblox object dhcpoptiondefinition.
// An option definition defines a DHCP option within a specific option space. A
// custom option can be defined in the predefined DHCP option space or in the
// user-defined vendor option space. To define an option, add the option
// definition to the required option space.
type Dhcpoptiondefinition struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The code of a DHCP option definition object. An option code number is used
	// to identify the DHCP option.
	Code *uint32 `json:"code,omitempty"`

	// The name of a DHCP option definition object.
	Name *string `json:"name,omitempty"`

	// The space of a DHCP option definition object.
	Space *string `json:"space,omitempty"`

	// The data type of the Grid DHCP option.
	Type string `json:"type,omitempty"`
}

func (Dhcpoptiondefinition) ObjectType() string {
	return "dhcpoptiondefinition"
}

func (obj Dhcpoptiondefinition) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"code", "name", "type"}
	}
	return obj.returnFields
}

// Dhcpoptionspace represents Infoblox object dhcpoptionspace.
// An Option Space defines a namespace in which vendor options can be defined.
// To define a specific vendor option space, add an option space to DHCP.
type Dhcpoptionspace struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// A descriptive comment of a DHCP option space object.
	Comment *string `json:"comment,omitempty"`

	// The name of a DHCP option space object.
	Name *string `json:"name,omitempty"`

	// The list of DHCP option definition objects.
	OptionDefinitions []string `json:"option_definitions,omitempty"`

	// The type of a DHCP option space object.
	SpaceType string `json:"space_type,omitempty"`
}

func (Dhcpoptionspace) ObjectType() string {
	return "dhcpoptionspace"
}

func (obj Dhcpoptionspace) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"comment", "name"}
	}
	return obj.returnFields
}

// Discovery represents Infoblox object discovery.
// This object can be used to control the Network Insight functionality of the
// appliance.
type Discovery struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`
}

func (Discovery) ObjectType() string {
	return "discovery"
}

func (obj Discovery) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{}
	}
	return obj.returnFields
}

// DiscoveryCredentialgroup represents Infoblox object discovery:credentialgroup.
// This object provides information about the Credential group.
type DiscoveryCredentialgroup struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The name of the Credential group.
	Name *string `json:"name,omitempty"`
}

func (DiscoveryCredentialgroup) ObjectType() string {
	return "discovery:credentialgroup"
}

func (obj DiscoveryCredentialgroup) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"name"}
	}
	return obj.returnFields
}

// DiscoveryDevice represents Infoblox object discovery:device.
// The devices discovered by Network Automation
type DiscoveryDevice struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The IPv4 Address or IPv6 Address of the device.
	Address string `json:"address,omitempty"`

	// The ref to management IP address of the device.
	AddressRef string `json:"address_ref,omitempty"`

	// The list of available management IPs for the device.
	AvailableMgmtIps []string `json:"available_mgmt_ips,omitempty"`

	// Determines whether to modify the admin status of an interface of the device.
	CapAdminStatusInd bool `json:"cap_admin_status_ind,omitempty"`

	// The reason that the edit admin status action is not available.
	CapAdminStatusNaReason string `json:"cap_admin_status_na_reason,omitempty"`

	// Determines whether to modify the description of an interface on the device.
	CapDescriptionInd bool `json:"cap_description_ind,omitempty"`

	// The reason that the edit description action is not available.
	CapDescriptionNaReason string `json:"cap_description_na_reason,omitempty"`

	// Determines whether to deprovision a network from interfaces of the device.
	CapNetDeprovisioningInd bool `json:"cap_net_deprovisioning_ind,omitempty"`

	// The reason that the deprovision a network from interfaces of this device is
	// not available.
	CapNetDeprovisioningNaReason string `json:"cap_net_deprovisioning_na_reason,omitempty"`

	// Determines whether to modify the network associated to an interface of the
	// device.
	CapNetProvisioningInd bool `json:"cap_net_provisioning_ind,omitempty"`

	// The reason that network provisioning is not available.
	CapNetProvisioningNaReason string `json:"cap_net_provisioning_na_reason,omitempty"`

	// Determines whether to create a VLAN and then provision a network to the
	// interface of the device.
	CapNetVlanProvisioningInd bool `json:"cap_net_vlan_provisioning_ind,omitempty"`

	// The reason that network provisioning on VLAN is not available.
	CapNetVlanProvisioningNaReason string `json:"cap_net_vlan_provisioning_na_reason,omitempty"`

	// Determines whether to modify the VLAN assignement of an interface of the
	// device.
	CapVlanAssignmentInd bool `json:"cap_vlan_assignment_ind,omitempty"`

	// The reason that VLAN assignment action is not available.
	CapVlanAssignmentNaReason string `json:"cap_vlan_assignment_na_reason,omitempty"`

	// Determines whether to modify the voice VLAN assignment of an interface of
	// the device.
	CapVoiceVlanInd bool `json:"cap_voice_vlan_ind,omitempty"`

	// The reason that voice VLAN assignment action is not available.
	CapVoiceVlanNaReason string `json:"cap_voice_vlan_na_reason,omitempty"`

	// The device chassis serial number.
	ChassisSerialNumber string `json:"chassis_serial_number,omitempty"`

	// The description of the device.
	Description string `json:"description,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// List of the device interfaces.
	Interfaces []*DiscoveryDeviceinterface `json:"interfaces,omitempty"`

	// The location of the device.
	Location string `json:"location,omitempty"`

	// The model name of the device.
	Model string `json:"model,omitempty"`

	// The Microsoft Active Directory user related information.
	MsAdUserData *MsserverAduserData `json:"ms_ad_user_data,omitempty"`

	// The name of the device.
	Name string `json:"name,omitempty"`

	// List of the device neighbors.
	Neighbors []*DiscoveryDeviceneighbor `json:"neighbors,omitempty"`

	// The ref to the network to which belongs the management IP address belongs.
	Network string `json:"network,omitempty"`

	// The list of networks to which the device interfaces belong.
	NetworkInfos []*DiscoveryNetworkinfo `json:"network_infos,omitempty"`

	// The name of the network view in which this device resides.
	NetworkView string `json:"network_view,omitempty"`

	// The list of networks to which the device interfaces belong.
	Networks []*Ipv4Network `json:"networks,omitempty"`

	// The Operating System version running on the device.
	OsVersion string `json:"os_version,omitempty"`

	// The port statistics of the device.
	PortStats *DiscoveryDevicePortstatistics `json:"port_stats,omitempty"`

	// A flag indicated that NI should send enable command when interacting with
	// device.
	PrivilegedPolling *bool `json:"privileged_polling,omitempty"`

	// The type of the device.
	Type string `json:"type,omitempty"`

	// User-defined management IP address of the device.
	UserDefinedMgmtIp *string `json:"user_defined_mgmt_ip,omitempty"`

	// The vendor name of the device.
	Vendor string `json:"vendor,omitempty"`

	// The list of VLAN information associated with the device.
	VlanInfos []*DiscoveryVlaninfo `json:"vlan_infos,omitempty"`
}

func (DiscoveryDevice) ObjectType() string {
	return "discovery:device"
}

func (obj DiscoveryDevice) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"address", "name", "network_view"}
	}
	return obj.returnFields
}

// DiscoveryDevicecomponent represents Infoblox object discovery:devicecomponent.
// The device components discovered by Network Automation.
type DiscoveryDevicecomponent struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The component name.
	ComponentName string `json:"component_name,omitempty"`

	// The description of the device component.
	Description string `json:"description,omitempty"`

	// A reference to a device, to which this component belongs to.
	Device string `json:"device,omitempty"`

	// The model of the device component.
	Model string `json:"model,omitempty"`

	// The serial number of the device component.
	Serial string `json:"serial,omitempty"`

	// The type of device component.
	Type string `json:"type,omitempty"`
}

func (DiscoveryDevicecomponent) ObjectType() string {
	return "discovery:devicecomponent"
}

func (obj DiscoveryDevicecomponent) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"component_name", "description", "model", "serial", "type"}
	}
	return obj.returnFields
}

// DiscoveryDeviceinterface represents Infoblox object discovery:deviceinterface.
// Interfaces on devices discovered by Network Automation
type DiscoveryDeviceinterface struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// Administrative state of the interface.
	AdminStatus string `json:"admin_status,omitempty"`

	// The configured admin status task info of the interface.
	AdminStatusTaskInfo *DiscoveryPortConfigAdminstatus `json:"admin_status_task_info,omitempty"`

	// Name of the port channel current interface belongs to.
	AggrInterfaceName string `json:"aggr_interface_name,omitempty"`

	// Determines whether to modify the admin status of the interface.
	CapIfAdminStatusInd bool `json:"cap_if_admin_status_ind,omitempty"`

	// The reason that the edit admin status action is not available.
	CapIfAdminStatusNaReason string `json:"cap_if_admin_status_na_reason,omitempty"`

	// Determines whether to modify the description of the interface.
	CapIfDescriptionInd bool `json:"cap_if_description_ind,omitempty"`

	// The reason that the edit description action is not available.
	CapIfDescriptionNaReason string `json:"cap_if_description_na_reason,omitempty"`

	// Determines whether to deprovision a IPv4 network from the interfaces.
	CapIfNetDeprovisioningIpv4Ind bool `json:"cap_if_net_deprovisioning_ipv4_ind,omitempty"`

	// The reason that the deprovision a IPv4 network from the interface.
	CapIfNetDeprovisioningIpv4NaReason string `json:"cap_if_net_deprovisioning_ipv4_na_reason,omitempty"`

	// Determines whether to deprovision a IPv6 network from the interfaces.
	CapIfNetDeprovisioningIpv6Ind bool `json:"cap_if_net_deprovisioning_ipv6_ind,omitempty"`

	// The reason that the deprovision a IPv6 network from the interface.
	CapIfNetDeprovisioningIpv6NaReason string `json:"cap_if_net_deprovisioning_ipv6_na_reason,omitempty"`

	// Determines whether to modify the IPv4 network associated to the interface.
	CapIfNetProvisioningIpv4Ind bool `json:"cap_if_net_provisioning_ipv4_ind,omitempty"`

	// The reason that IPv4 network provisioning is not available.
	CapIfNetProvisioningIpv4NaReason string `json:"cap_if_net_provisioning_ipv4_na_reason,omitempty"`

	// Determines whether to modify the IPv6 network associated to the interface.
	CapIfNetProvisioningIpv6Ind bool `json:"cap_if_net_provisioning_ipv6_ind,omitempty"`

	// The reason that IPv6 network provisioning is not available.
	CapIfNetProvisioningIpv6NaReason string `json:"cap_if_net_provisioning_ipv6_na_reason,omitempty"`

	// Determines whether to modify the VLAN assignement of the interface.
	CapIfVlanAssignmentInd bool `json:"cap_if_vlan_assignment_ind,omitempty"`

	// The reason that VLAN assignment action is not available.
	CapIfVlanAssignmentNaReason string `json:"cap_if_vlan_assignment_na_reason,omitempty"`

	// Determines whether to modify the voice VLAN assignement of the interface.
	CapIfVoiceVlanInd bool `json:"cap_if_voice_vlan_ind,omitempty"`

	// The reason that voice VLAN assignment action is not available.
	CapIfVoiceVlanNaReason string `json:"cap_if_voice_vlan_na_reason,omitempty"`

	// The description of the interface.
	Description string `json:"description,omitempty"`

	// The configured description task info of the interface.
	DescriptionTaskInfo *DiscoveryPortConfigDescription `json:"description_task_info,omitempty"`

	// The ref to the device to which the interface belongs.
	Device string `json:"device,omitempty"`

	// The duplex state of the interface.
	Duplex string `json:"duplex,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// List of IFaddr information associated with the interface.
	IfaddrInfos []*DiscoveryIfaddrinfo `json:"ifaddr_infos,omitempty"`

	// The interface index number, as reported by SNMP.
	Index int `json:"index,omitempty"`

	// Timestamp of the last interface property change detected.
	LastChange *UnixTime `json:"last_change,omitempty"`

	// This field indicates if this is a link aggregation interface.
	LinkAggregation bool `json:"link_aggregation,omitempty"`

	// The MAC address of the interface.
	Mac string `json:"mac,omitempty"`

	// The Microsoft Active Directory user related information.
	MsAdUserData *MsserverAduserData `json:"ms_ad_user_data,omitempty"`

	// The interface system name.
	Name string `json:"name,omitempty"`

	// Th name of the network view.
	NetworkView string `json:"network_view,omitempty"`

	// Operating state of the interface.
	OperStatus string `json:"oper_status,omitempty"`

	// The Port Fast status of the interface.
	PortFast string `json:"port_fast,omitempty"`

	// The reference to object(Host/FixedAddress/GridMember) to which this port is
	// reserved.
	ReservedObject string `json:"reserved_object,omitempty"`

	// The interface speed in bps.
	Speed uint32 `json:"speed,omitempty"`

	// Indicates if the interface is tagged as a VLAN trunk or not.
	TrunkStatus string `json:"trunk_status,omitempty"`

	// The type of interface.
	Type string `json:"type,omitempty"`

	// The configured VLAN status task info of the interface.
	VlanInfoTaskInfo *DiscoveryPortConfigVlaninfo `json:"vlan_info_task_info,omitempty"`

	// The list of VLAN information associated with the interface.
	VlanInfos []*DiscoveryVlaninfo `json:"vlan_infos,omitempty"`

	// Aggregated interface name of vPC peer device current port is connected to.
	VpcPeer string `json:"vpc_peer,omitempty"`

	// The reference to vPC peer device.
	VpcPeerDevice string `json:"vpc_peer_device,omitempty"`

	// The description of the Virtual Routing and Forwarding (VRF) associated with
	// the interface.
	VrfDescription string `json:"vrf_description,omitempty"`

	// The name of the Virtual Routing and Forwarding (VRF) associated with the
	// interface.
	VrfName string `json:"vrf_name,omitempty"`

	// The route distinguisher of the Virtual Routing and Forwarding (VRF)
	// associated with the interface.
	VrfRd string `json:"vrf_rd,omitempty"`
}

func (DiscoveryDeviceinterface) ObjectType() string {
	return "discovery:deviceinterface"
}

func (obj DiscoveryDeviceinterface) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"name", "type"}
	}
	return obj.returnFields
}

// DiscoveryDeviceneighbor represents Infoblox object discovery:deviceneighbor.
// The neighbor associated with the device discovered by Network Automation.
type DiscoveryDeviceneighbor struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The IPv4 Address or IPv6 Address of the device neighbor.
	Address string `json:"address,omitempty"`

	// The ref to the management IP address of the device neighbor.
	AddressRef string `json:"address_ref,omitempty"`

	// The ref to the device to which the device neighbor belongs.
	Device string `json:"device,omitempty"`

	// The ref to the interface to which the device neighbor belongs.
	Interface string `json:"interface,omitempty"`

	// The MAC address of the device neighbor.
	Mac string `json:"mac,omitempty"`

	// The name of the device neighbor.
	Name string `json:"name,omitempty"`

	// The list of VLAN information associated with the device neighbor.
	VlanInfos []*DiscoveryVlaninfo `json:"vlan_infos,omitempty"`
}

func (DiscoveryDeviceneighbor) ObjectType() string {
	return "discovery:deviceneighbor"
}

func (obj DiscoveryDeviceneighbor) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"address", "address_ref", "mac", "name"}
	}
	return obj.returnFields
}

// DiscoveryDevicesupportbundle represents Infoblox object discovery:devicesupportbundle.
// Infoblox frequently provides support files for additional network devices
// that may not have previously been supported by discovery, and updates to
// support new operating system versions of existing devices.
type DiscoveryDevicesupportbundle struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The developer of the device support bundle.
	Author string `json:"author,omitempty"`

	// Determines whether the device support bundle is integrated or imported. Note
	// that integrated support bundles cannot be removed.
	IntegratedInd bool `json:"integrated_ind,omitempty"`

	// The descriptive device name for the device support bundle.
	Name string `json:"name,omitempty"`

	// The version of the currently active device support bundle.
	Version string `json:"version,omitempty"`
}

func (DiscoveryDevicesupportbundle) ObjectType() string {
	return "discovery:devicesupportbundle"
}

func (obj DiscoveryDevicesupportbundle) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"author", "integrated_ind", "name", "version"}
	}
	return obj.returnFields
}

// DiscoveryDiagnostictask represents Infoblox object discovery:diagnostictask.
// The object provides information about the discovery diagnostic task.
type DiscoveryDiagnostictask struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The SNMP community string of the discovery diagnostic task.
	CommunityString *string `json:"community_string,omitempty"`

	// The SNMP debug flag of the discovery diagnostic task.
	DebugSnmp *bool `json:"debug_snmp,omitempty"`

	// The force test flag of the discovery diagnostic task.
	ForceTest *bool `json:"force_test,omitempty"`

	// The IP address of the discovery diagnostic task.
	IpAddress *string `json:"ip_address,omitempty"`

	// The network view name of the discovery diagnostic task.
	NetworkView *string `json:"network_view,omitempty"`

	// The time when the discovery diagnostic task was started.
	StartTime *UnixTime `json:"start_time,omitempty"`

	// The ID of the discovery diagnostic task.
	TaskId *string `json:"task_id,omitempty"`
}

func (DiscoveryDiagnostictask) ObjectType() string {
	return "discovery:diagnostictask"
}

func (obj DiscoveryDiagnostictask) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"ip_address", "network_view", "task_id"}
	}
	return obj.returnFields
}

// DiscoveryGridproperties represents Infoblox object discovery:gridproperties.
// The object provides information about the Grid discovery properties.
type DiscoveryGridproperties struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// Discovery advanced polling settings.
	AdvancedPollingSettings *DiscoveryAdvancedpollsetting `json:"advanced_polling_settings,omitempty"`

	// Discovery advanced polling settings.
	AdvancedSdnPollingSettings *DiscoveryAdvancedsdnpollsettings `json:"advanced_sdn_polling_settings,omitempty"`

	// Advisor settings.
	AdvisorSettings *DiscoveryAdvisorsetting `json:"advisor_settings,omitempty"`

	// Automatic conversion settings.
	AutoConversionSettings []*DiscoveryAutoconversionsetting `json:"auto_conversion_settings,omitempty"`

	// Discovery basic polling settings.
	BasicPollingSettings *DiscoveryBasicpollsettings `json:"basic_polling_settings,omitempty"`

	// Discovery basic polling settings.
	BasicSdnPollingSettings *DiscoveryBasicsdnpollsettings `json:"basic_sdn_polling_settings,omitempty"`

	// Discovery CLI credentials.
	CliCredentials []*DiscoveryClicredential `json:"cli_credentials,omitempty"`

	// Discovery blackout setting.
	DiscoveryBlackoutSetting *PropertiesBlackoutsetting `json:"discovery_blackout_setting,omitempty"`

	// The type of the devices the DNS processor operates on.
	DnsLookupOption string `json:"dns_lookup_option,omitempty"`

	// The percentage of available capacity the DNS processor operates at. Valid
	// values are unsigned integer between 1 and 100, inclusive.
	DnsLookupThrottle *uint32 `json:"dns_lookup_throttle,omitempty"`

	// Advisor application enabled/disabled.
	EnableAdvisor *bool `json:"enable_advisor,omitempty"`

	// The flag that enables automatic conversion of discovered data.
	EnableAutoConversion *bool `json:"enable_auto_conversion,omitempty"`

	// The flag that enables updating discovered data for managed objects.
	EnableAutoUpdates *bool `json:"enable_auto_updates,omitempty"`

	// The Grid name.
	GridName string `json:"grid_name,omitempty"`

	// Determines the timeout to ignore the discovery conflict duration (in
	// seconds).
	IgnoreConflictDuration *uint32 `json:"ignore_conflict_duration,omitempty"`

	// Port control blackout setting.
	PortControlBlackoutSetting *PropertiesBlackoutsetting `json:"port_control_blackout_setting,omitempty"`

	// Ports to scan.
	Ports []*DiscoveryPort `json:"ports,omitempty"`

	// Determines if the same port control is used for discovery blackout.
	SamePortControlDiscoveryBlackout *bool `json:"same_port_control_discovery_blackout,omitempty"`

	// Discovery SNMP v1 and v2 credentials.
	Snmpv1v2Credentials []*DiscoverySnmpcredential `json:"snmpv1v2_credentials,omitempty"`

	// Discovery SNMP v3 credentials.
	Snmpv3Credentials []*DiscoverySnmp3credential `json:"snmpv3_credentials,omitempty"`

	// Limit of discovered unmanaged IP address which determines how frequently the
	// user is notified about the new unmanaged IP address in a particular network.
	UnmanagedIpsLimit *uint32 `json:"unmanaged_ips_limit,omitempty"`

	// Determines the timeout between two notifications (in seconds) about the new
	// unmanaged IP address in a particular network. The value must be between 60
	// seconds and the number of seconds remaining to Jan 2038.
	UnmanagedIpsTimeout *uint32 `json:"unmanaged_ips_timeout,omitempty"`

	// The policy type used to define the behavior of the VRF mapping.
	VrfMappingPolicy string `json:"vrf_mapping_policy,omitempty"`

	// VRF mapping rules.
	VrfMappingRules []*DiscoveryVrfmappingrule `json:"vrf_mapping_rules,omitempty"`
}

func (DiscoveryGridproperties) ObjectType() string {
	return "discovery:gridproperties"
}

func (obj DiscoveryGridproperties) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"grid_name"}
	}
	return obj.returnFields
}

// DiscoveryMemberproperties represents Infoblox object discovery:memberproperties.
// The object provides information about the Grid member discovery properties.
type DiscoveryMemberproperties struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The Grid member address IP address.
	Address string `json:"address,omitempty"`

	// Discovery CLI credentials.
	CliCredentials []*DiscoveryClicredential `json:"cli_credentials,omitempty"`

	// Default seed routers.
	DefaultSeedRouters []*DiscoverySeedrouter `json:"default_seed_routers,omitempty"`

	// The name of the network discovery Grid member.
	DiscoveryMember string `json:"discovery_member,omitempty"`

	// Determines if the discovery service is enabled.
	EnableService *bool `json:"enable_service,omitempty"`

	// Gateway seed routers.
	GatewaySeedRouters []*DiscoverySeedrouter `json:"gateway_seed_routers,omitempty"`

	// Determines if the standalone mode for discovery network monitor is enabled
	// or not.
	IsSa *bool `json:"is_sa,omitempty"`

	// Discovery member role.
	Role string `json:"role,omitempty"`

	// Discovery networks to which the member is assigned.
	ScanInterfaces []*DiscoveryScaninterface `json:"scan_interfaces,omitempty"`

	// List of SDN/SDWAN controller configurations.
	SdnConfigs []*DiscoverySdnconfig `json:"sdn_configs,omitempty"`

	// Seed routers.
	SeedRouters []*DiscoverySeedrouter `json:"seed_routers,omitempty"`

	// Discovery SNMP v1 and v2 credentials.
	Snmpv1v2Credentials []*DiscoverySnmpcredential `json:"snmpv1v2_credentials,omitempty"`

	// Discovery SNMP v3 credentials.
	Snmpv3Credentials []*DiscoverySnmp3credential `json:"snmpv3_credentials,omitempty"`

	// Use flag for: cli_credentials
	UseCliCredentials *bool `json:"use_cli_credentials,omitempty"`

	// Use flag for: snmpv1v2_credentials
	UseSnmpv1v2Credentials *bool `json:"use_snmpv1v2_credentials,omitempty"`

	// Use flag for: snmpv3_credentials
	UseSnmpv3Credentials *bool `json:"use_snmpv3_credentials,omitempty"`
}

func (DiscoveryMemberproperties) ObjectType() string {
	return "discovery:memberproperties"
}

func (obj DiscoveryMemberproperties) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"discovery_member"}
	}
	return obj.returnFields
}

// DiscoverySdnnetwork represents Infoblox object discovery:sdnnetwork.
// This object provides information about the SDN networks. They are the
// elements of address space hierarchy discovered on SDN/SDWAN controllers
type DiscoverySdnnetwork struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// Timestamp when this SDN network was first discovered.
	FirstSeen *UnixTime `json:"first_seen,omitempty"`

	// The name of the SDN network.
	Name string `json:"name,omitempty"`

	// The name of the network view assigned to this SDN network.
	NetworkView string `json:"network_view,omitempty"`

	// Name of SDN configuration this network belongs to.
	SourceSdnConfig string `json:"source_sdn_config,omitempty"`
}

func (DiscoverySdnnetwork) ObjectType() string {
	return "discovery:sdnnetwork"
}

func (obj DiscoverySdnnetwork) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"name", "network_view", "source_sdn_config"}
	}
	return obj.returnFields
}

// DiscoveryStatus represents Infoblox object discovery:status.
// The discovery status of discovered data
type DiscoveryStatus struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The IPv4 Address or IPv6 Address of the device.
	Address string `json:"address,omitempty"`

	// Indicates if CLI collection is enabled.
	CliCollectionEnabled bool `json:"cli_collection_enabled,omitempty"`

	// The CLI credential status information of the device.
	CliCredentialInfo *DiscoveryStatusinfo `json:"cli_credential_info,omitempty"`

	// The existence status information of the device.
	ExistenceInfo *DiscoveryStatusinfo `json:"existence_info,omitempty"`

	// Indicates if DHCP finterprinting is enabled.
	FingerprintEnabled bool `json:"fingerprint_enabled,omitempty"`

	// This DHCP finterprinting status information of the device.
	FingerprintInfo *DiscoveryStatusinfo `json:"fingerprint_info,omitempty"`

	// The timestamp when the device was first discovered.
	FirstSeen *UnixTime `json:"first_seen,omitempty"`

	// The timestamp of the last detected interface property change.
	LastAction string `json:"last_action,omitempty"`

	// The timestamp when the device was last discovered.
	LastSeen *UnixTime `json:"last_seen,omitempty"`

	// The timestamp of the last executed action for the device.
	LastTimestamp *UnixTime `json:"last_timestamp,omitempty"`

	// The name of the device.
	Name string `json:"name,omitempty"`

	// The name of the network view in which this device resides.
	NetworkView string `json:"network_view,omitempty"`

	// The reachable status information of the device.
	ReachableInfo *DiscoveryStatusinfo `json:"reachable_info,omitempty"`

	// Indicate whether SDN collection enabled for the device.
	SdnCollectionEnabled bool `json:"sdn_collection_enabled,omitempty"`

	// Device SDN collection status information.
	SdnCollectionInfo *DiscoveryStatusinfo `json:"sdn_collection_info,omitempty"`

	// Indicates if SNMP collection is enabled.
	SnmpCollectionEnabled bool `json:"snmp_collection_enabled,omitempty"`

	// The SNMP collection status information of the device.
	SnmpCollectionInfo *DiscoveryStatusinfo `json:"snmp_collection_info,omitempty"`

	// The SNMP credential status information of the device.
	SnmpCredentialInfo *DiscoveryStatusinfo `json:"snmp_credential_info,omitempty"`

	// The overall status of the device.
	Status string `json:"status,omitempty"`

	// The type of device.
	Type string `json:"type,omitempty"`
}

func (DiscoveryStatus) ObjectType() string {
	return "discovery:status"
}

func (obj DiscoveryStatus) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"address", "name", "network_view", "status"}
	}
	return obj.returnFields
}

// DiscoveryVrf represents Infoblox object discovery:vrf.
// This object provides information about the virtual network membership (VRF).
type DiscoveryVrf struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// Additional information about the VRF.
	Description string `json:"description,omitempty"`

	// The device to which the VRF belongs.
	Device string `json:"device,omitempty"`

	// The name of the VRF.
	Name string `json:"name,omitempty"`

	// The name of the network view in which this VRF resides.
	NetworkView string `json:"network_view,omitempty"`

	// The route distinguisher associated with the VRF.
	RouteDistinguisher string `json:"route_distinguisher,omitempty"`
}

func (DiscoveryVrf) ObjectType() string {
	return "discovery:vrf"
}

func (obj DiscoveryVrf) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"device", "name", "network_view", "route_distinguisher"}
	}
	return obj.returnFields
}

// Discoverytask represents Infoblox object discoverytask.
// Represents the configuration of network discovery jobs. Configuration
// parameters have control over the behavior of network discovery jobs.
type Discoverytask struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The network discovery CSV file name.
	CsvFileName string `json:"csv_file_name,omitempty"`

	// Determines whether IP scanning is disabled.
	DisableIpScanning *bool `json:"disable_ip_scanning,omitempty"`

	// Determines whether VMWare scanning is disabled.
	DisableVmwareScanning *bool `json:"disable_vmware_scanning,omitempty"`

	// The discovery task identifier.
	DiscoveryTaskOid string `json:"discovery_task_oid,omitempty"`

	// The Grid member that runs the discovery.
	MemberName *string `json:"member_name,omitempty"`

	// Determines whether to replace or merge new data with existing data.
	MergeData *bool `json:"merge_data,omitempty"`

	// Network discovery scanning mode.
	Mode string `json:"mode,omitempty"`

	// Name of the network view in which target networks for network discovery
	// reside.
	NetworkView *string `json:"network_view,omitempty"`

	// The list of the networks on which the network discovery will be invoked.
	Networks []*Ipv4Network `json:"networks,omitempty"`

	// The number of times to perfrom ping for ICMP and FULL modes.
	PingRetries *uint32 `json:"ping_retries,omitempty"`

	// The ping timeout for ICMP and FULL modes.
	PingTimeout *uint32 `json:"ping_timeout,omitempty"`

	// The schedule setting for network discovery task.
	ScheduledRun *SettingSchedule `json:"scheduled_run,omitempty"`

	// The network discovery process state.
	State string `json:"state,omitempty"`

	// Time when the network discovery process state was last updated.
	StateTime *UnixTime `json:"state_time,omitempty"`

	// The network discovery process descriptive status.
	Status string `json:"status,omitempty"`

	// The time when the network discovery process status was last updated.
	StatusTime *UnixTime `json:"status_time,omitempty"`

	// The ports to scan for FULL and TCP modes.
	TcpPorts []*Discoverytaskport `json:"tcp_ports,omitempty"`

	// The TCP scan techinque for FULL and TCP modes.
	TcpScanTechnique string `json:"tcp_scan_technique,omitempty"`

	// Name of the network view in which target networks for VMWare scanning
	// reside.
	VNetworkView *string `json:"v_network_view,omitempty"`

	// The list of VMware vSphere servers for VM discovery.
	Vservers []*Discoverytaskvserver `json:"vservers,omitempty"`

	// The network discovery process warning.
	Warning string `json:"warning,omitempty"`
}

func (Discoverytask) ObjectType() string {
	return "discoverytask"
}

func (obj Discoverytask) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"discovery_task_oid", "member_name"}
	}
	return obj.returnFields
}

// Distributionschedule represents Infoblox object distributionschedule.
// Distributing the software upgrade files involves unpacking the software
// files and loading the new software. When you distribute the files, the NIOS
// appliance loads the new software code into an alternative disk partition
// that overwrites any previously saved version of existing code. Therefore,
// starting the distribution disables the appliance from reverting to a release
// prior to the current version. The Grid Master distributes the software
// upgrade to each member in the Grid including itself.
type Distributionschedule struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// Determines whether the distribution schedule is active.
	Active *bool `json:"active,omitempty"`

	// The start time of the distribution.
	StartTime *UnixTime `json:"start_time,omitempty"`

	// Time zone of the distribution start time.
	TimeZone string `json:"time_zone,omitempty"`

	// The upgrade groups scheduling settings.
	UpgradeGroups []*UpgradegroupSchedule `json:"upgrade_groups,omitempty"`
}

func (Distributionschedule) ObjectType() string {
	return "distributionschedule"
}

func (obj Distributionschedule) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"active", "start_time", "time_zone"}
	}
	return obj.returnFields
}

// Dns64group represents Infoblox object dns64group.
// To support the increasing number of IPv6 and dual-stack networks, Infoblox
// DNS servers now support DNS64, a mechanism that synthesizes AAAA records
// from A records when no AAAA records exist.
type Dns64group struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// Access Control settings that contain IPv4 and IPv6 DNS clients and networks
	// to which the DNS server is allowed to send synthesized AAAA records with the
	// specified IPv6 prefix.
	Clients []*Addressac `json:"clients,omitempty"`

	// The descriptive comment for the DNS64 synthesis group object.
	Comment *string `json:"comment,omitempty"`

	// Determines whether the DNS64 synthesis group is disabled.
	Disable *bool `json:"disable,omitempty"`

	// Determines whether the DNS64 synthesis of AAAA records is enabled for DNS64
	// synthesis groups that request DNSSEC data.
	EnableDnssecDns64 *bool `json:"enable_dnssec_dns64,omitempty"`

	// Access Control settings that contain IPv6 addresses or prefix ranges that
	// cannot be used by IPv6-only hosts, such as IP addresses in the ::ffff:0:0/96
	// network. When DNS server retrieves an AAAA record that contains an IPv6
	// address that matches an excluded address, it does not return the AAAA
	// record. Instead it synthesizes an AAAA record from the A record.
	Exclude []*Addressac `json:"exclude,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// Access Control settings that contain IPv4 addresses and networks for which
	// the DNS server can synthesize AAAA records with the specified prefix.
	Mapped []*Addressac `json:"mapped,omitempty"`

	// The name of the DNS64 synthesis group object.
	Name *string `json:"name,omitempty"`

	// The IPv6 prefix used for the synthesized AAAA records. The prefix length
	// must be /32, /40, /48, /56, /64 or /96, and all bits beyond the specified
	// length must be zero.
	Prefix *string `json:"prefix,omitempty"`
}

func (Dns64group) ObjectType() string {
	return "dns64group"
}

func (obj Dns64group) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"comment", "disable", "name"}
	}
	return obj.returnFields
}

// Dtc represents Infoblox object dtc.
// This object can be used to control the DTC functionality of the appliance.
type Dtc struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`
}

func (Dtc) ObjectType() string {
	return "dtc"
}

func (obj Dtc) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{}
	}
	return obj.returnFields
}

// DtcAllrecords represents Infoblox object dtc:allrecords.
// The DTC AllRecords object is a read-only synthetic object used to retrieve
// records that belong to a particular DTC server.
type DtcAllrecords struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The record comment.
	Comment string `json:"comment,omitempty"`

	// The disable value determines if the record is disabled or not. "False" means
	// the record is enabled.
	Disable bool `json:"disable,omitempty"`

	// The name of the DTC Server object with which the record is associated.
	DtcServer string `json:"dtc_server,omitempty"`

	// The record object, if supported by the WAPI. Otherwise, the value is "None".
	Record string `json:"record,omitempty"`

	// The TTL value of the record associated with the DTC AllRecords object.
	Ttl *uint32 `json:"ttl,omitempty"`

	// The record type. When searching for an unspecified record type, the search
	// is performed for all records. On retrieval, the appliance returns
	// "UNSUPPORTED" for unsupported records.
	Type string `json:"type,omitempty"`
}

func (DtcAllrecords) ObjectType() string {
	return "dtc:allrecords"
}

func (obj DtcAllrecords) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"comment", "dtc_server", "type"}
	}
	return obj.returnFields
}

// DtcCertificate represents Infoblox object dtc:certificate.
// These are DTC health monitor certificates.
type DtcCertificate struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// Reference to underlying X509Certificate.
	Certificate string `json:"certificate,omitempty"`

	// Determines whether the certificate is in use or not.
	InUse bool `json:"in_use,omitempty"`
}

func (DtcCertificate) ObjectType() string {
	return "dtc:certificate"
}

func (obj DtcCertificate) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{}
	}
	return obj.returnFields
}

// DtcLbdn represents Infoblox object dtc:lbdn.
// Load Balanced Domain Name (LBDN) is a Load balanced domain name record type,
// which is served by Infoblox Name Servers. LBDN is a qualified domain name
// associated with a specific service such as ftp.abc.com or www.abc.com.
type DtcLbdn struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// List of linked auth zones.
	AuthZones []*ZoneAuth `json:"auth_zones,omitempty"`

	// Flag for enabling auto managing DTC Consolidated Monitors on related DTC
	// Pools.
	AutoConsolidatedMonitors *bool `json:"auto_consolidated_monitors,omitempty"`

	// Comment for the DTC LBDN; maximum 256 characters.
	Comment *string `json:"comment,omitempty"`

	// Determines whether the DTC LBDN is disabled or not. When this is set to
	// False, the fixed address is enabled.
	Disable *bool `json:"disable,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// The LBDN health information.
	Health *DtcHealth `json:"health,omitempty"`

	// The load balancing method. Used to select pool.
	LbMethod string `json:"lb_method,omitempty"`

	// The display name of the DTC LBDN, not DNS related.
	Name *string `json:"name,omitempty"`

	// LBDN wildcards for pattern match.
	Patterns []string `json:"patterns,omitempty"`

	// Maximum time, in seconds, for which client specific LBDN responses will be
	// cached. Zero specifies no caching.
	Persistence *uint32 `json:"persistence,omitempty"`

	// The maximum time, in seconds, for which client specific LBDN responses will
	// be cached. Zero specifies no caching.
	Pools []*DtcPoolLink `json:"pools,omitempty"`

	// The LBDN pattern match priority for "overlapping" DTC LBDN objects. LBDNs
	// are "overlapping" if they are simultaneously assigned to a zone and have
	// patterns that can match the same FQDN. The matching LBDN with highest
	// priority (lowest ordinal) will be used.
	Priority *uint32 `json:"priority,omitempty"`

	// The topology rules for TOPOLOGY method.
	Topology *string `json:"topology,omitempty"`

	// The Time To Live (TTL) value for the DTC LBDN. A 32-bit unsigned integer
	// that represents the duration, in seconds, for which the record is valid
	// (cached). Zero indicates that the record should not be cached.
	Ttl *uint32 `json:"ttl,omitempty"`

	// The list of resource record types supported by LBDN.
	Types []string `json:"types,omitempty"`

	// Use flag for: ttl
	UseTtl *bool `json:"use_ttl,omitempty"`
}

func (DtcLbdn) ObjectType() string {
	return "dtc:lbdn"
}

func (obj DtcLbdn) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"comment", "name"}
	}
	return obj.returnFields
}

// DtcMonitor represents Infoblox object dtc:monitor.
// The DTC Monitor object is used to determine the health of a server by
// evaluating the response to a health request.
type DtcMonitor struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// Comment for this DTC monitor; maximum 256 characters.
	Comment *string `json:"comment,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// The interval for a health check.
	Interval *uint32 `json:"interval,omitempty"`

	// The actual monitor object.
	Monitor *string `json:"monitor,omitempty"`

	// The display name for this DTC monitor.
	Name *string `json:"name,omitempty"`

	// The health monitor port value.
	Port *uint32 `json:"port,omitempty"`

	// The number of how many times the server should appear as "DOWN" to be
	// treated as dead after it was alive.
	RetryDown *uint32 `json:"retry_down,omitempty"`

	// The number of many times the server should appear as "UP" to be treated as
	// alive after it was dead.
	RetryUp *uint32 `json:"retry_up,omitempty"`

	// The timeout for a health check.
	Timeout *uint32 `json:"timeout,omitempty"`

	// The request transport type.
	Type string `json:"type,omitempty"`
}

func (DtcMonitor) ObjectType() string {
	return "dtc:monitor"
}

func (obj DtcMonitor) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"comment", "name", "type"}
	}
	return obj.returnFields
}

// DtcMonitorHttp represents Infoblox object dtc:monitor:http.
// The DTC HTTP monitor object is used to determine the health of a HTTP
// service by first sending a specific http message to a server and then
// examining the response received from the server. The validation is
// successful if the received response matches the expected message.
type DtcMonitorHttp struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// An optional cipher list for a secure HTTP/S connection.
	Ciphers *string `json:"ciphers,omitempty"`

	// An optional client certificate, supplied in a secure HTTP/S mode if present.
	ClientCert *string `json:"client_cert,omitempty"`

	// Comment for this DTC monitor; maximum 256 characters.
	Comment *string `json:"comment,omitempty"`

	// The content check type.
	ContentCheck string `json:"content_check,omitempty"`

	// A portion of response to use as input for content check.
	ContentCheckInput string `json:"content_check_input,omitempty"`

	// A content check success criteria operator.
	ContentCheckOp string `json:"content_check_op,omitempty"`

	// A content check regular expression.
	ContentCheckRegex *string `json:"content_check_regex,omitempty"`

	// A content extraction sub-expression to extract.
	ContentExtractGroup *uint32 `json:"content_extract_group,omitempty"`

	// A content extraction expected type for the extracted data.
	ContentExtractType string `json:"content_extract_type,omitempty"`

	// A content extraction value to compare with extracted result.
	ContentExtractValue *string `json:"content_extract_value,omitempty"`

	// Determines whether the Server Name Indication (SNI) for HTTPS monitor is
	// enabled.
	EnableSni *bool `json:"enable_sni,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// The interval for TCP health check.
	Interval *uint32 `json:"interval,omitempty"`

	// The display name for this DTC monitor.
	Name *string `json:"name,omitempty"`

	// Port for TCP requests.
	Port *uint32 `json:"port,omitempty"`

	// An HTTP request to send.
	Request *string `json:"request,omitempty"`

	// The type of an expected result.
	Result string `json:"result,omitempty"`

	// The expected return code.
	ResultCode *uint32 `json:"result_code,omitempty"`

	// The value of how many times the server should appear as down to be treated
	// as dead after it was alive.
	RetryDown *uint32 `json:"retry_down,omitempty"`

	// The value of how many times the server should appear as up to be treated as
	// alive after it was dead.
	RetryUp *uint32 `json:"retry_up,omitempty"`

	// The connection security status.
	Secure *bool `json:"secure,omitempty"`

	// The timeout for TCP health check in seconds.
	Timeout *uint32 `json:"timeout,omitempty"`

	// Determines whether the validation of the remote server's certificate is
	// enabled.
	ValidateCert *bool `json:"validate_cert,omitempty"`
}

func (DtcMonitorHttp) ObjectType() string {
	return "dtc:monitor:http"
}

func (obj DtcMonitorHttp) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"comment", "name"}
	}
	return obj.returnFields
}

// DtcMonitorIcmp represents Infoblox object dtc:monitor:icmp.
// The DTC ICMP monitor object is used to determine the health of a server by
// monitoring the response to an ICMP ping.
type DtcMonitorIcmp struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// Comment for this DTC monitor; maximum 256 characters.
	Comment *string `json:"comment,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// The interval for TCP health check.
	Interval *uint32 `json:"interval,omitempty"`

	// The display name for this DTC monitor.
	Name *string `json:"name,omitempty"`

	// The value of how many times the server should appear as down to be treated
	// as dead after it was alive.
	RetryDown *uint32 `json:"retry_down,omitempty"`

	// The value of how many times the server should appear as up to be treated as
	// alive after it was dead.
	RetryUp *uint32 `json:"retry_up,omitempty"`

	// The timeout for TCP health check in seconds.
	Timeout *uint32 `json:"timeout,omitempty"`
}

func (DtcMonitorIcmp) ObjectType() string {
	return "dtc:monitor:icmp"
}

func (obj DtcMonitorIcmp) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"comment", "name"}
	}
	return obj.returnFields
}

// DtcMonitorPdp represents Infoblox object dtc:monitor:pdp.
// The DTC PDP monitor object is used to determine the health of a server by
// sending a PDP ECHO and considering a valid reply to mean that service is
// available.
type DtcMonitorPdp struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// Comment for this DTC monitor; maximum 256 characters.
	Comment *string `json:"comment,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// The interval for TCP health check.
	Interval *uint32 `json:"interval,omitempty"`

	// The display name for this DTC monitor.
	Name *string `json:"name,omitempty"`

	// The port value for PDP requests.
	Port *uint32 `json:"port,omitempty"`

	// The value of how many times the server should appear as down to be treated
	// as dead after it was alive.
	RetryDown *uint32 `json:"retry_down,omitempty"`

	// The value of how many times the server should appear as up to be treated as
	// alive after it was dead.
	RetryUp *uint32 `json:"retry_up,omitempty"`

	// The timeout for TCP health check in seconds.
	Timeout *uint32 `json:"timeout,omitempty"`
}

func (DtcMonitorPdp) ObjectType() string {
	return "dtc:monitor:pdp"
}

func (obj DtcMonitorPdp) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"comment", "name"}
	}
	return obj.returnFields
}

// DtcMonitorSip represents Infoblox object dtc:monitor:sip.
// The DTC SIP monitor object is used to determine the health of a SIP server
// such as SIP Proxies and Session Border Controllers, and SIP gateways by
// issuing SIP options to a server and examining the response provided by the
// server. The service is considered available If the received response matches
// the expected response.
type DtcMonitorSip struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// An optional cipher list for secure TLS/SIPS connection.
	Ciphers *string `json:"ciphers,omitempty"`

	// An optional client certificate, supplied in TLS and SIPS mode if present.
	ClientCert *string `json:"client_cert,omitempty"`

	// Comment for this DTC monitor; maximum 256 characters.
	Comment *string `json:"comment,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// The interval for TCP health check.
	Interval *uint32 `json:"interval,omitempty"`

	// The display name for this DTC monitor.
	Name *string `json:"name,omitempty"`

	// The port value for SIP requests.
	Port *uint32 `json:"port,omitempty"`

	// A SIP request to send
	Request *string `json:"request,omitempty"`

	// The type of an expected result.
	Result string `json:"result,omitempty"`

	// The expected return code value.
	ResultCode *uint32 `json:"result_code,omitempty"`

	// The value of how many times the server should appear as down to be treated
	// as dead after it was alive.
	RetryDown *uint32 `json:"retry_down,omitempty"`

	// The value of how many times the server should appear as up to be treated as
	// alive after it was dead.
	RetryUp *uint32 `json:"retry_up,omitempty"`

	// The timeout for TCP health check in seconds.
	Timeout *uint32 `json:"timeout,omitempty"`

	// The transport layer protocol to use for SIP check.
	Transport string `json:"transport,omitempty"`

	// Determines whether the validation of the remote server's certificate is
	// enabled.
	ValidateCert *bool `json:"validate_cert,omitempty"`
}

func (DtcMonitorSip) ObjectType() string {
	return "dtc:monitor:sip"
}

func (obj DtcMonitorSip) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"comment", "name"}
	}
	return obj.returnFields
}

// DtcMonitorSnmp represents Infoblox object dtc:monitor:snmp.
// The DTC SNMP Health Monitor determines the health of SNMP servers, such as
// SNMP Proxies and Session Border Controllers, and SNMP gateways by issuing
// SNMP options to a server and examining the response sent by the server. The
// service is considered available if the returned response matches the
// expected response.
type DtcMonitorSnmp struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// Comment for this DTC monitor; maximum 256 characters.
	Comment *string `json:"comment,omitempty"`

	// The SNMP community string for SNMP authentication.
	Community *string `json:"community,omitempty"`

	// The SNMPv3 context.
	Context *string `json:"context,omitempty"`

	// The SNMPv3 engine identifier.
	EngineId *string `json:"engine_id,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// The interval for TCP health check.
	Interval *uint32 `json:"interval,omitempty"`

	// The display name for this DTC monitor.
	Name *string `json:"name,omitempty"`

	// A list of OIDs for SNMP monitoring.
	Oids []*DtcMonitorSnmpOid `json:"oids,omitempty"`

	// The port value for SNMP requests.
	Port *uint32 `json:"port,omitempty"`

	// The value of how many times the server should appear as down to be treated
	// as dead after it was alive.
	RetryDown *uint32 `json:"retry_down,omitempty"`

	// The value of how many times the server should appear as up to be treated as
	// alive after it was dead.
	RetryUp *uint32 `json:"retry_up,omitempty"`

	// The timeout for TCP health check in seconds.
	Timeout *uint32 `json:"timeout,omitempty"`

	// The SNMPv3 user setting.
	User *string `json:"user,omitempty"`

	// The SNMP protocol version for the SNMP health check.
	Version string `json:"version,omitempty"`
}

func (DtcMonitorSnmp) ObjectType() string {
	return "dtc:monitor:snmp"
}

func (obj DtcMonitorSnmp) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"comment", "name"}
	}
	return obj.returnFields
}

// DtcMonitorTcp represents Infoblox object dtc:monitor:tcp.
// The DTC TCP monitor object is used to determine the health of a server by
// evaluating the response to a TCP request.
type DtcMonitorTcp struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// Comment for this DTC monitor; maximum 256 characters.
	Comment *string `json:"comment,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// The interval for TCP health check.
	Interval *uint32 `json:"interval,omitempty"`

	// The display name for this DTC monitor.
	Name *string `json:"name,omitempty"`

	// The port value for TCP requests.
	Port *uint32 `json:"port,omitempty"`

	// The value of how many times the server should appear as down to be treated
	// as dead after it was alive.
	RetryDown *uint32 `json:"retry_down,omitempty"`

	// The value of how many times the server should appear as up to be treated as
	// alive after it was dead.
	RetryUp *uint32 `json:"retry_up,omitempty"`

	// The timeout for TCP health check in seconds.
	Timeout *uint32 `json:"timeout,omitempty"`
}

func (DtcMonitorTcp) ObjectType() string {
	return "dtc:monitor:tcp"
}

func (obj DtcMonitorTcp) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"comment", "name"}
	}
	return obj.returnFields
}

// DtcObject represents Infoblox object dtc:object.
// An object for all load balancer managed DTC objects.
type DtcObject struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The abstract object type.
	AbstractType string `json:"abstract_type,omitempty"`

	// The comment for the DTC object; maximum 256 characters.
	Comment string `json:"comment,omitempty"`

	// The display object type.
	DisplayType string `json:"display_type,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// The list of IPv4 addresses.
	Ipv4AddressList []string `json:"ipv4_address_list,omitempty"`

	// The list of IPv6 addresses.
	Ipv6AddressList []string `json:"ipv6_address_list,omitempty"`

	// The display name of the DTC object.
	Name string `json:"name,omitempty"`

	// The specific DTC object.
	Object string `json:"object,omitempty"`

	// The availability color status.
	Status string `json:"status,omitempty"`

	// The timestamp when status or health was last determined.
	StatusTime *UnixTime `json:"status_time,omitempty"`
}

func (DtcObject) ObjectType() string {
	return "dtc:object"
}

func (obj DtcObject) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"abstract_type", "comment", "display_type", "name", "status"}
	}
	return obj.returnFields
}

// DtcPool represents Infoblox object dtc:pool.
// The collection of IDNS resources (virtual servers).
type DtcPool struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// Flag for enabling auto managing DTC Consolidated Monitors in DTC Pool.
	AutoConsolidatedMonitors *bool `json:"auto_consolidated_monitors,omitempty"`

	// A resource in the pool is available if ANY, at least QUORUM, or ALL monitors
	// for the pool say that it is up.
	Availability string `json:"availability,omitempty"`

	// The comment for the DTC Pool; maximum 256 characters.
	Comment *string `json:"comment,omitempty"`

	// List of monitors and associated members statuses of which are shared across
	// members and consolidated in server availability determination.
	ConsolidatedMonitors []*DtcPoolConsolidatedMonitorHealth `json:"consolidated_monitors,omitempty"`

	// Determines whether the DTC Pool is disabled or not. When this is set to
	// False, the fixed address is enabled.
	Disable *bool `json:"disable,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// The health status.
	Health *DtcHealth `json:"health,omitempty"`

	// The alternate load balancing method. Use this to select a method type from
	// the pool if the preferred method does not return any results.
	LbAlternateMethod string `json:"lb_alternate_method,omitempty"`

	// The alternate topology for load balancing.
	LbAlternateTopology *string `json:"lb_alternate_topology,omitempty"`

	// The DTC Pool settings for dynamic ratio when it's selected as alternate
	// method.
	LbDynamicRatioAlternate *SettingDynamicratio `json:"lb_dynamic_ratio_alternate,omitempty"`

	// The DTC Pool settings for dynamic ratio when it's selected as preferred
	// method.
	LbDynamicRatioPreferred *SettingDynamicratio `json:"lb_dynamic_ratio_preferred,omitempty"`

	// The preferred load balancing method. Use this to select a method type from
	// the pool.
	LbPreferredMethod string `json:"lb_preferred_method,omitempty"`

	// The preferred topology for load balancing.
	LbPreferredTopology *string `json:"lb_preferred_topology,omitempty"`

	// The monitors related to pool.
	Monitors []*DtcMonitorHttp `json:"monitors,omitempty"`

	// The DTC Pool display name.
	Name *string `json:"name,omitempty"`

	// For availability mode QUORUM, at least this many monitors must report the
	// resource as up for it to be available
	Quorum *uint32 `json:"quorum,omitempty"`

	// The servers related to the pool.
	Servers []*DtcServerLink `json:"servers,omitempty"`

	// The Time To Live (TTL) value for the DTC Pool. A 32-bit unsigned integer
	// that represents the duration, in seconds, for which the record is valid
	// (cached). Zero indicates that the record should not be cached.
	Ttl *uint32 `json:"ttl,omitempty"`

	// Use flag for: ttl
	UseTtl *bool `json:"use_ttl,omitempty"`
}

func (DtcPool) ObjectType() string {
	return "dtc:pool"
}

func (obj DtcPool) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"comment", "name"}
	}
	return obj.returnFields
}

// DtcRecordA represents Infoblox object dtc:record:a.
// A DTC A object represents a DNS Traffic Control Address (DTC A) resource
// record. This resource record specifies mapping from domain name to IPv4
// address.
type DtcRecordA struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// Flag that indicates whether this record was automatically created by NIOS.
	AutoCreated string `json:"auto_created,omitempty"`

	// Comment for the record; maximum 256 characters.
	Comment *string `json:"comment,omitempty"`

	// Determines if the record is disabled or not. False means that the record is
	// enabled.
	Disable *bool `json:"disable,omitempty"`

	// The name of the DTC Server object with which the DTC record is associated.
	DtcServer string `json:"dtc_server,omitempty"`

	// The IPv4 Address of the domain name.
	Ipv4Addr *string `json:"ipv4addr,omitempty"`

	// The Time to Live (TTL) value.
	Ttl *uint32 `json:"ttl,omitempty"`

	// Use flag for: ttl
	UseTtl *bool `json:"use_ttl,omitempty"`
}

func (DtcRecordA) ObjectType() string {
	return "dtc:record:a"
}

func (obj DtcRecordA) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"dtc_server", "ipv4addr"}
	}
	return obj.returnFields
}

// DtcRecordAaaa represents Infoblox object dtc:record:aaaa.
// A DTC AAAA object represents a DNS Traffic Control IPv6 Address (DTC AAAA)
// resource record. This resource record specifies mapping from domain name to
// IPv6 address.
type DtcRecordAaaa struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// Flag that indicates whether this record was automatically created by NIOS.
	AutoCreated string `json:"auto_created,omitempty"`

	// Comment for the record; maximum 256 characters.
	Comment *string `json:"comment,omitempty"`

	// Determines if the record is disabled or not. False means that the record is
	// enabled.
	Disable *bool `json:"disable,omitempty"`

	// The name of the DTC Server object with which the DTC record is associated.
	DtcServer string `json:"dtc_server,omitempty"`

	// The IPv6 Address of the domain name.
	Ipv6Addr *string `json:"ipv6addr,omitempty"`

	// The Time to Live (TTL) value.
	Ttl *uint32 `json:"ttl,omitempty"`

	// Use flag for: ttl
	UseTtl *bool `json:"use_ttl,omitempty"`
}

func (DtcRecordAaaa) ObjectType() string {
	return "dtc:record:aaaa"
}

func (obj DtcRecordAaaa) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"dtc_server", "ipv6addr"}
	}
	return obj.returnFields
}

// DtcRecordCname represents Infoblox object dtc:record:cname.
// A DTC CNAME object represents a DNS Traffic Control Canonical name (DTC
// CNAME) resource record. DTC CNAME record maps domain name alias to its
// canonical domain name.
type DtcRecordCname struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// Flag that indicates whether this record was automatically created by NIOS.
	AutoCreated string `json:"auto_created,omitempty"`

	// The canonical name of the host.
	Canonical *string `json:"canonical,omitempty"`

	// Comment for the record; maximum 256 characters.
	Comment *string `json:"comment,omitempty"`

	// Determines if the record is disabled or not. False means that the record is
	// enabled.
	Disable *bool `json:"disable,omitempty"`

	// The canonical name as server by DNS protocol.
	DnsCanonical string `json:"dns_canonical,omitempty"`

	// The name of the DTC Server object with which the DTC record is associated.
	DtcServer string `json:"dtc_server,omitempty"`

	// The Time to Live (TTL) value.
	Ttl *uint32 `json:"ttl,omitempty"`

	// Use flag for: ttl
	UseTtl *bool `json:"use_ttl,omitempty"`
}

func (DtcRecordCname) ObjectType() string {
	return "dtc:record:cname"
}

func (obj DtcRecordCname) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"canonical", "dtc_server"}
	}
	return obj.returnFields
}

// DtcRecordNaptr represents Infoblox object dtc:record:naptr.
// A DTC NAPTR object represents a DNS Traffic Control Naming Authority Pointer
// (DTC NAPTR) resource record. This resource record specifies a regular
// expression-based rewrite rule that, when applied to an existing string,
// produces a new domain name or URI.
type DtcRecordNaptr struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// Comment for the record; maximum 256 characters.
	Comment *string `json:"comment,omitempty"`

	// Determines if the record is disabled or not. False means that the record is
	// enabled.
	Disable *bool `json:"disable,omitempty"`

	// The name of the DTC Server object with which the DTC record is associated.
	DtcServer string `json:"dtc_server,omitempty"`

	// The flags used to control the interpretation of the fields for an NAPTR
	// record object. Supported values for the flags field are "U", "S", "P" and
	// "A".
	Flags *string `json:"flags,omitempty"`

	// The order parameter of the NAPTR records. This parameter specifies the order
	// in which the NAPTR rules are applied when multiple rules are present. Valid
	// values are from 0 to 65535 (inclusive), in 32-bit unsigned integer format.
	Order *uint32 `json:"order,omitempty"`

	// The preference of the NAPTR record. The preference field determines the
	// order the NAPTR records are processed when multiple records with the same
	// order parameter are present. Valid values are from 0 to 65535 (inclusive),
	// in 32-bit unsigned integer format.
	Preference *uint32 `json:"preference,omitempty"`

	// The regular expression-based rewriting rule of the NAPTR record. This should
	// be a POSIX compliant regular expression, including the substitution rule and
	// flags. Refer to RFC 2915 for the field syntax details.
	Regexp *string `json:"regexp,omitempty"`

	// The replacement field of the NAPTR record object. For nonterminal NAPTR
	// records, this field specifies the next domain name to look up. This value
	// can be in unicode format.
	Replacement *string `json:"replacement,omitempty"`

	// The services field of the NAPTR record object; maximum 128 characters. The
	// services field contains protocol and service identifiers, such as "http+E2U"
	// or "SIPS+D2T".
	Services *string `json:"services,omitempty"`

	// The Time to Live (TTL) value.
	Ttl *uint32 `json:"ttl,omitempty"`

	// Use flag for: ttl
	UseTtl *bool `json:"use_ttl,omitempty"`
}

func (DtcRecordNaptr) ObjectType() string {
	return "dtc:record:naptr"
}

func (obj DtcRecordNaptr) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"dtc_server", "order", "preference", "regexp", "replacement", "services"}
	}
	return obj.returnFields
}

// DtcRecordSrv represents Infoblox object dtc:record:srv.
// A DTC SRV object represents a DNS Traffic Control (DTC SRV) resource record.
// This resource record provides information on available services.
type DtcRecordSrv struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// Comment for the record; maximum 256 characters.
	Comment *string `json:"comment,omitempty"`

	// Determines if the record is disabled or not. False means that the record is
	// enabled.
	Disable *bool `json:"disable,omitempty"`

	// The name of the DTC Server object with which the DTC record is associated.
	DtcServer string `json:"dtc_server,omitempty"`

	// The name for an SRV record in unicode format.
	Name *string `json:"name,omitempty"`

	// The port of the SRV record. Valid values are from 0 to 65535 (inclusive), in
	// 32-bit unsigned integer format.
	Port *uint32 `json:"port,omitempty"`

	// The priority of the SRV record. Valid values are from 0 to 65535
	// (inclusive), in 32-bit unsigned integer format.
	Priority *uint32 `json:"priority,omitempty"`

	// The target of the SRV record in FQDN format. This value can be in unicode
	// format.
	Target *string `json:"target,omitempty"`

	// The Time to Live (TTL) value.
	Ttl *uint32 `json:"ttl,omitempty"`

	// Use flag for: ttl
	UseTtl *bool `json:"use_ttl,omitempty"`

	// The weight of the SRV record. Valid values are from 0 to 65535 (inclusive),
	// in 32-bit unsigned integer format.
	Weight *uint32 `json:"weight,omitempty"`
}

func (DtcRecordSrv) ObjectType() string {
	return "dtc:record:srv"
}

func (obj DtcRecordSrv) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"dtc_server", "name", "port", "priority", "target", "weight"}
	}
	return obj.returnFields
}

// DtcServer represents Infoblox object dtc:server.
// This is a DTC Server. Aka resource, virtual server or pool member.
type DtcServer struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// Enabling this option will auto-create a single read-only A/AAAA/CNAME record
	// corresponding to the configured hostname and update it if the hostname
	// changes.
	AutoCreateHostRecord *bool `json:"auto_create_host_record,omitempty"`

	// Comment for the DTC Server; maximum 256 characters.
	Comment *string `json:"comment,omitempty"`

	// Determines whether the DTC Server is disabled or not. When this is set to
	// False, the fixed address is enabled.
	Disable *bool `json:"disable,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// The health status.
	Health *DtcHealth `json:"health,omitempty"`

	// The address or FQDN of the server.
	Host *string `json:"host,omitempty"`

	// List of IP/FQDN and monitor pairs to be used for additional monitoring.
	Monitors []*DtcServerMonitor `json:"monitors,omitempty"`

	// The DTC Server display name.
	Name *string `json:"name,omitempty"`

	// The hostname for Server Name Indication (SNI) in FQDN format.
	SniHostname *string `json:"sni_hostname,omitempty"`

	// Use flag for: sni_hostname
	UseSniHostname *bool `json:"use_sni_hostname,omitempty"`
}

func (DtcServer) ObjectType() string {
	return "dtc:server"
}

func (obj DtcServer) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"comment", "host", "name"}
	}
	return obj.returnFields
}

// DtcTopology represents Infoblox object dtc:topology.
// A topology is a named list of ordered topology rules. Topology rules map
// client IPs to pools or resources. They require the Topology DB and named
// labels refer to it.
type DtcTopology struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The comment for the DTC TOPOLOGY monitor object; maximum 256 characters.
	Comment *string `json:"comment,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// Display name of the DTC Topology.
	Name *string `json:"name,omitempty"`

	// Topology rules.
	Rules []*DtcTopologyRule `json:"rules,omitempty"`
}

func (DtcTopology) ObjectType() string {
	return "dtc:topology"
}

func (obj DtcTopology) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"comment", "name"}
	}
	return obj.returnFields
}

// DtcTopologyLabel represents Infoblox object dtc:topology:label.
// This is the label of the field in the Topology database.
type DtcTopologyLabel struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The name of the field in the Topology database the label was obtained from.
	Field string `json:"field,omitempty"`

	// The DTC Topology label name.
	Label string `json:"label,omitempty"`
}

func (DtcTopologyLabel) ObjectType() string {
	return "dtc:topology:label"
}

func (obj DtcTopologyLabel) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"field", "label"}
	}
	return obj.returnFields
}

// DtcTopologyRule represents Infoblox object dtc:topology:rule.
// Topology rules map client IPs to pools or resources. They require the
// Topology DB and named labels refer to it. Can be created only as part of
// topology.
type DtcTopologyRule struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The type of the destination for this DTC Topology rule.
	DestType string `json:"dest_type,omitempty"`

	// The reference to the destination DTC pool or DTC server.
	DestinationLink *string `json:"destination_link,omitempty"`

	// Type of the DNS response for rule.
	ReturnType string `json:"return_type,omitempty"`

	// The conditions for matching sources. Should be empty to set rule as default
	// destination.
	Sources []*DtcTopologyRuleSource `json:"sources,omitempty"`

	// The DTC Topology the rule belongs to.
	Topology string `json:"topology,omitempty"`

	// True if the label in the rule exists in the current Topology DB. Always true
	// for SUBNET rules. Rules with non-existent labels may be configured but will
	// never match.
	Valid bool `json:"valid,omitempty"`
}

func (DtcTopologyRule) ObjectType() string {
	return "dtc:topology:rule"
}

func (obj DtcTopologyRule) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{}
	}
	return obj.returnFields
}

// DxlEndpoint represents Infoblox object dxl:endpoint.
// The DXL endpoint object represents the settings of a particular DXL
// endpoint.
type DxlEndpoint struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The list of DXL endpoint brokers. Note that you cannot specify brokers and
	// brokers_import_token at the same time.
	Brokers []*DxlEndpointBroker `json:"brokers,omitempty"`

	// The token returned by the uploadinit function call in object fileop for a
	// DXL broker configuration file. Note that you cannot specify brokers and
	// brokers_import_token at the same time.
	BrokersImportToken *string `json:"brokers_import_token,omitempty"`

	// The client certificate subject of a DXL endpoint.
	ClientCertificateSubject string `json:"client_certificate_subject,omitempty"`

	// The token returned by the uploadinit function call in object fileop for a
	// DXL endpoint client certificate.
	ClientCertificateToken *string `json:"client_certificate_token,omitempty"`

	// The timestamp when client certificate for a DXL endpoint was created.
	ClientCertificateValidFrom *UnixTime `json:"client_certificate_valid_from,omitempty"`

	// The timestamp when the client certificate for a DXL endpoint expires.
	ClientCertificateValidTo *UnixTime `json:"client_certificate_valid_to,omitempty"`

	// The comment of a DXL endpoint.
	Comment *string `json:"comment,omitempty"`

	// Determines whether a DXL endpoint is disabled.
	Disable *bool `json:"disable,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// The log level for a DXL endpoint.
	LogLevel string `json:"log_level,omitempty"`

	// The name of a DXL endpoint.
	Name *string `json:"name,omitempty"`

	// The outbound member that will generate events.
	OutboundMemberType string `json:"outbound_member_type,omitempty"`

	// The list of members for outbound events.
	OutboundMembers []string `json:"outbound_members,omitempty"`

	// The DXL template instance. You cannot change the parameters of the DXL
	// endpoint template instance.
	TemplateInstance *NotificationRestTemplateinstance `json:"template_instance,omitempty"`

	// The timeout of session management (in seconds).
	Timeout *uint32 `json:"timeout,omitempty"`

	// DXL topics
	Topics []string `json:"topics,omitempty"`

	// The vendor identifier.
	VendorIdentifier *string `json:"vendor_identifier,omitempty"`

	// The user name for WAPI integration.
	WapiUserName *string `json:"wapi_user_name,omitempty"`

	// The user password for WAPI integration.
	WapiUserPassword *string `json:"wapi_user_password,omitempty"`
}

func (DxlEndpoint) ObjectType() string {
	return "dxl:endpoint"
}

func (obj DxlEndpoint) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"disable", "name", "outbound_member_type"}
	}
	return obj.returnFields
}

// EADefinition represents Infoblox object extensibleattributedef.
// The Extensible Attribute Definition object is used to retrieve the
// definition of an extensible attribute.
type EADefinition struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The object types this extensible attribute is allowed to associate with.
	AllowedObjectTypes []string `json:"allowed_object_types,omitempty"`

	// Comment for the Extensible Attribute Definition; maximum 256 characters.
	Comment *string `json:"comment,omitempty"`

	// Default value used to pre-populate the attribute value in the GUI. For
	// email, URL, and string types, the value is a string with a maximum of 256
	// characters. For an integer, the value is an integer from -2147483648 through
	// 2147483647. For a date, the value is the number of seconds that have elapsed
	// since January 1st, 1970 UTC.
	DefaultValue *string `json:"default_value,omitempty"`

	// This option describes the action that must be taken on the extensible
	// attribute by its descendant in case the 'Inheritable' flag is set.
	DescendantsAction *ExtensibleattributedefDescendants `json:"descendants_action,omitempty"`

	// This field contains extensible attribute flags. Possible values: (A)udited,
	// (C)loud API, Cloud (G)master, (I)nheritable, (L)isted, (M)andatory value,
	// MGM (P)rivate, (R)ead Only, (S)ort enum values, Multiple (V)alues If there
	// are two or more flags in the field, you must list them according to the
	// order they are listed above. For example, 'CR' is a valid value for the
	// 'flags' field because C = Cloud API is listed before R = Read only. However,
	// the value 'RC' is invalid because the order for the 'flags' field is broken.
	Flags *string `json:"flags,omitempty"`

	// List of Values. Applicable if the extensible attribute type is ENUM.
	ListValues []*EADefListValue `json:"list_values,omitempty"`

	// Maximum allowed value of extensible attribute. Applicable if the extensible
	// attribute type is INTEGER.
	Max *uint32 `json:"max,omitempty"`

	// Minimum allowed value of extensible attribute. Applicable if the extensible
	// attribute type is INTEGER.
	Min *uint32 `json:"min,omitempty"`

	// The name of the Extensible Attribute Definition.
	Name *string `json:"name,omitempty"`

	// Namespace for the Extensible Attribute Definition.
	Namespace string `json:"namespace,omitempty"`

	// Type for the Extensible Attribute Definition.
	Type string `json:"type,omitempty"`
}

func (EADefinition) ObjectType() string {
	return "extensibleattributedef"
}

func (obj EADefinition) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"comment", "default_value", "name", "type"}
	}
	return obj.returnFields
}

func NewEADefinition(eadef EADefinition) *EADefinition {
	res := eadef
	res.returnFields = []string{"allowed_object_types", "comment", "flags", "list_values", "name", "type"}

	return &res
}

// Fileop represents Infoblox object fileop.
// This object controls uploading and downloading data from the appliance.
type Fileop struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`
}

func (Fileop) ObjectType() string {
	return "fileop"
}

func (obj Fileop) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{}
	}
	return obj.returnFields
}

// Filterfingerprint represents Infoblox object filterfingerprint.
// The appliance can filter an address request by the DHCP fingerprint of a
// requesting client. Depending on how you apply DHCP fingerprint filters, the
// appliance can grant or deny the address request if the requesting client
// matches the filter criteria.
type Filterfingerprint struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The descriptive comment.
	Comment *string `json:"comment,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// The list of DHCP Fingerprint objects.
	Fingerprint []string `json:"fingerprint,omitempty"`

	// The name of a DHCP Fingerprint Filter object.
	Name *string `json:"name,omitempty"`
}

func (Filterfingerprint) ObjectType() string {
	return "filterfingerprint"
}

func (obj Filterfingerprint) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"comment", "name"}
	}
	return obj.returnFields
}

// Filtermac represents Infoblox object filtermac.
// An Infoblox appliance can filter address requests by the MAC address and/or
// vendor prefix (i.e., the first 6 hexadecimal characters of the MAC address)
// of a requesting host. The filter instructs the appliance to either grant or
// deny an address request if the requesting host matches the filter.
type Filtermac struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The descriptive comment of a DHCP MAC Filter object.
	Comment *string `json:"comment,omitempty"`

	// The default MAC expiration time of the DHCP MAC Address Filter object. By
	// default, the MAC address filter never expires; otherwise, it is the absolute
	// interval when the MAC address filter expires. The maximum value can extend
	// up to 4294967295 secs. The minimum value is 60 secs (1 min).
	DefaultMacAddressExpiration *uint32 `json:"default_mac_address_expiration,omitempty"`

	// Determines if the DHCP Fingerprint object is disabled or not.
	Disable *bool `json:"disable,omitempty"`

	// The flag to enforce MAC address expiration of the DHCP MAC Address Filter
	// object.
	EnforceExpirationTimes *bool `json:"enforce_expiration_times,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// The length of time the DHCP server leases an IP address to a client. The
	// lease time applies to hosts that meet the filter criteria.
	LeaseTime *uint32 `json:"lease_time,omitempty"`

	// The name of a DHCP MAC Filter object.
	Name *string `json:"name,omitempty"`

	// Determines if DHCP MAC Filter never expires or automatically expires.
	NeverExpires *bool `json:"never_expires,omitempty"`

	// An array of DHCP option dhcpoption structs that lists the DHCP options
	// associated with the object.
	Options []*Dhcpoption `json:"options,omitempty"`

	// This is reserved for writing comments related to the particular MAC address
	// filter. The length of comment cannot exceed 1024 bytes.
	ReservedForInfoblox *string `json:"reserved_for_infoblox,omitempty"`
}

func (Filtermac) ObjectType() string {
	return "filtermac"
}

func (obj Filtermac) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"comment", "name"}
	}
	return obj.returnFields
}

// Filternac represents Infoblox object filternac.
// If NAC authentication is configured, the appliance receives authentication
// responses from NAC authentication servers, and it grants or denies a lease
// request if the authentication response matches conditions defined by the NAC
// filters.
type Filternac struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The descriptive comment of a DHCP NAC Filter object.
	Comment *string `json:"comment,omitempty"`

	// The conditional expression of a DHCP NAC Filter object.
	Expression *string `json:"expression,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// The length of time the DHCP server leases an IP address to a client. The
	// lease time applies to hosts that meet the filter criteria.
	LeaseTime *uint32 `json:"lease_time,omitempty"`

	// The name of a DHCP NAC Filter object.
	Name *string `json:"name,omitempty"`

	// An array of DHCP option dhcpoption structs that lists the DHCP options
	// associated with the object.
	Options []*Dhcpoption `json:"options,omitempty"`
}

func (Filternac) ObjectType() string {
	return "filternac"
}

func (obj Filternac) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"comment", "name"}
	}
	return obj.returnFields
}

// Filteroption represents Infoblox object filteroption.
// In the ISC DHCP terms, it defines a class of clients that match a particular
// (option, value) pair. To define an option filter, add Option to the DHCP
// Filter object.
type Filteroption struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// Determines if apply as class is enabled or not. If this flag is set to
	// "true" the filter is treated as global DHCP class, e.g it is written to
	// dhcpd config file even if it is not present in any DHCP range.
	ApplyAsClass *bool `json:"apply_as_class,omitempty"`

	// A name of boot file of a DHCP filter option object.
	Bootfile *string `json:"bootfile,omitempty"`

	// Determines the boot server of a DHCP filter option object. You can specify
	// the name and/or IP address of the boot server that host needs to boot.
	Bootserver *string `json:"bootserver,omitempty"`

	// The descriptive comment of a DHCP filter option object.
	Comment *string `json:"comment,omitempty"`

	// The conditional expression of a DHCP filter option object.
	Expression *string `json:"expression,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// Determines the lease time of a DHCP filter option object.
	LeaseTime *uint32 `json:"lease_time,omitempty"`

	// The name of a DHCP option filter object.
	Name *string `json:"name,omitempty"`

	// Determines the next server of a DHCP filter option object. You can specify
	// the name and/or IP address of the next server that the host needs to boot.
	NextServer *string `json:"next_server,omitempty"`

	// An array of DHCP option dhcpoption structs that lists the DHCP options
	// associated with the object.
	OptionList []*Dhcpoption `json:"option_list,omitempty"`

	// The option space of a DHCP filter option object.
	OptionSpace *string `json:"option_space,omitempty"`

	// Determines the PXE (Preboot Execution Environment) lease time of a DHCP
	// filter option object. To specify the duration of time it takes a host to
	// connect to a boot server, such as a TFTP server, and download the file it
	// needs to boot.
	PxeLeaseTime *uint32 `json:"pxe_lease_time,omitempty"`
}

func (Filteroption) ObjectType() string {
	return "filteroption"
}

func (obj Filteroption) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"comment", "name"}
	}
	return obj.returnFields
}

// Filterrelayagent represents Infoblox object filterrelayagent.
// The Infoblox appliance can screen address requests through relay agent
// filters (DHCP option 82) that assist the agents in forwarding address
// assignments across the proper circuit. When a relay agent receives the
// DHCPDISCOVER message, it can add one or two agent IDs in the DHCP option 82
// suboption fields to the message. If the agent ID strings match those defined
// in a relay agent filter applied to a DHCP address range, the Infoblox
// appliance either assigns addresses from that range or denies the request
// (based on previously configured parameters; that is, the Grant lease and
// Deny lease parameters).
type Filterrelayagent struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The circuit_id_name of a DHCP relay agent filter object. This filter
	// identifies the circuit between the remote host and the relay agent. For
	// example, the identifier can be the ingress interface number of the circuit
	// access unit, perhaps concatenated with the unit ID number and slot number.
	// Also, the circuit ID can be an ATM virtual circuit ID or cable data virtual
	// circuit ID.
	CircuitIdName *string `json:"circuit_id_name,omitempty"`

	// The circuit ID substring length.
	CircuitIdSubstringLength *uint32 `json:"circuit_id_substring_length,omitempty"`

	// The circuit ID substring offset.
	CircuitIdSubstringOffset *uint32 `json:"circuit_id_substring_offset,omitempty"`

	// A descriptive comment of a DHCP relay agent filter object.
	Comment *string `json:"comment,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// The circuit ID matching rule of a DHCP relay agent filter object. The
	// circuit_id value takes effect only if the value is "MATCHES_VALUE".
	IsCircuitId string `json:"is_circuit_id,omitempty"`

	// Determines if the substring of circuit ID, instead of the full circuit ID,
	// is matched.
	IsCircuitIdSubstring *bool `json:"is_circuit_id_substring,omitempty"`

	// The remote ID matching rule of a DHCP relay agent filter object. The
	// remote_id value takes effect only if the value is Matches_Value.
	IsRemoteId string `json:"is_remote_id,omitempty"`

	// Determines if the substring of remote ID, instead of the full remote ID, is
	// matched.
	IsRemoteIdSubstring *bool `json:"is_remote_id_substring,omitempty"`

	// The name of a DHCP relay agent filter object.
	Name *string `json:"name,omitempty"`

	// The remote ID name attribute of a relay agent filter object. This filter
	// identifies the remote host. The remote ID name can represent many different
	// things such as the caller ID telephone number for a dial-up connection, a
	// user name for logging in to the ISP, a modem ID, etc. When the remote ID
	// name is defined on the relay agent, the DHCP server will have a trusted
	// relationship to identify the remote host. The remote ID name is considered
	// as a trusted identifier.
	RemoteIdName *string `json:"remote_id_name,omitempty"`

	// The remote ID substring length.
	RemoteIdSubstringLength *uint32 `json:"remote_id_substring_length,omitempty"`

	// The remote ID substring offset.
	RemoteIdSubstringOffset *uint32 `json:"remote_id_substring_offset,omitempty"`
}

func (Filterrelayagent) ObjectType() string {
	return "filterrelayagent"
}

func (obj Filterrelayagent) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"comment", "name"}
	}
	return obj.returnFields
}

// Fingerprint represents Infoblox object fingerprint.
// The DHCP Fingerprint object is part of the Fingerprint filter.
type Fingerprint struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// Comment for the Fingerprint; maximum 256 characters.
	Comment *string `json:"comment,omitempty"`

	// A class of DHCP Fingerprint object; maximum 256 characters.
	DeviceClass *string `json:"device_class,omitempty"`

	// Determines if the DHCP Fingerprint object is disabled or not.
	Disable *bool `json:"disable,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// A list (comma separated list) of IPv6 option number sequences of the device
	// or operating system.
	Ipv6OptionSequence []string `json:"ipv6_option_sequence,omitempty"`

	// Name of the DHCP Fingerprint object.
	Name *string `json:"name,omitempty"`

	// A list (comma separated list) of IPv4 option number sequences of the device
	// or operating system.
	OptionSequence []string `json:"option_sequence,omitempty"`

	// The type of the DHCP Fingerprint object.
	Type string `json:"type,omitempty"`

	// A list of vendor IDs of the device or operating system.
	VendorId []string `json:"vendor_id,omitempty"`
}

func (Fingerprint) ObjectType() string {
	return "fingerprint"
}

func (obj Fingerprint) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"comment", "device_class", "name"}
	}
	return obj.returnFields
}

// Ipv4FixedAddress represents Infoblox object fixedaddress.
// A fixed address is a specific IP address that a DHCP server always assigns
// when a lease request comes from a particular MAC address of the client.
type Ipv4FixedAddress struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The agent circuit ID for the fixed address.
	AgentCircuitId *string `json:"agent_circuit_id,omitempty"`

	// The agent remote ID for the fixed address.
	AgentRemoteId *string `json:"agent_remote_id,omitempty"`

	// This field controls whether the credential is used for both the Telnet and
	// SSH credentials. If set to False, the credential is used only for SSH.
	AllowTelnet *bool `json:"allow_telnet,omitempty"`

	// This field controls whether only the DHCP server is allowed to update DNS,
	// regardless of the DHCP client requests.
	AlwaysUpdateDns *bool `json:"always_update_dns,omitempty"`

	// The bootfile name for the fixed address. You can configure the DHCP server
	// to support clients that use the boot file name option in their DHCPREQUEST
	// messages.
	Bootfile *string `json:"bootfile,omitempty"`

	// The bootserver address for the fixed address. You can specify the name
	// and/or IP address of the boot server that the host needs to boot. The boot
	// server IPv4 Address or name in FQDN format.
	Bootserver *string `json:"bootserver,omitempty"`

	// The CLI credentials for the fixed address.
	CliCredentials []*DiscoveryClicredential `json:"cli_credentials,omitempty"`

	// This field controls whether there is a prepend for the
	// dhcp-client-identifier of a fixed address.
	ClientIdentifierPrependZero *bool `json:"client_identifier_prepend_zero,omitempty"`

	// Structure containing all cloud API related information for this object.
	CloudInfo *GridCloudapiInfo `json:"cloud_info,omitempty"`

	// Comment for the fixed address; maximum 256 characters.
	Comment *string `json:"comment,omitempty"`

	// The dynamic DNS domain name the appliance uses specifically for DDNS updates
	// for this fixed address.
	DdnsDomainname *string `json:"ddns_domainname,omitempty"`

	// The DDNS host name for this fixed address.
	DdnsHostname *string `json:"ddns_hostname,omitempty"`

	// If set to true, BOOTP settings are disabled and BOOTP requests will be
	// denied.
	DenyBootp *bool `json:"deny_bootp,omitempty"`

	// The description of the device.
	DeviceDescription *string `json:"device_description,omitempty"`

	// The location of the device.
	DeviceLocation *string `json:"device_location,omitempty"`

	// The type of the device.
	DeviceType *string `json:"device_type,omitempty"`

	// The vendor of the device.
	DeviceVendor *string `json:"device_vendor,omitempty"`

	// The DHCP client ID for the fixed address.
	DhcpClientIdentifier *string `json:"dhcp_client_identifier,omitempty"`

	// Determines whether a fixed address is disabled or not. When this is set to
	// False, the fixed address is enabled.
	Disable *bool `json:"disable,omitempty"`

	// Determines if the discovery for this fixed address is disabled or not. False
	// means that the discovery is enabled.
	DisableDiscovery *bool `json:"disable_discovery,omitempty"`

	// The discovery status of this fixed address.
	DiscoverNowStatus string `json:"discover_now_status,omitempty"`

	// The discovered data for this fixed address.
	DiscoveredData *Discoverydata `json:"discovered_data,omitempty"`

	// The dynamic DNS updates flag of a DHCP Fixed Address object. If set to True,
	// the DHCP server sends DDNS updates to DNS servers in the same Grid, and to
	// external DNS servers.
	EnableDdns *bool `json:"enable_ddns,omitempty"`

	// Determines if the discovery for the fixed address should be immediately
	// enabled.
	EnableImmediateDiscovery *bool `json:"enable_immediate_discovery,omitempty"`

	// Set this to True if you want the DHCP server to use a different lease time
	// for PXE clients.
	EnablePxeLeaseTime *bool `json:"enable_pxe_lease_time,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// If this field is set to False, the appliance returns all DHCP options the
	// client is eligible to receive, rather than only the list of options the
	// client has requested.
	IgnoreDhcpOptionListRequest *bool `json:"ignore_dhcp_option_list_request,omitempty"`

	// The IPv4 Address of the fixed address.
	Ipv4Addr *string `json:"ipv4addr,omitempty"`

	// This flag reflects whether the MAC address for this fixed address is
	// invalid.
	IsInvalidMac bool `json:"is_invalid_mac,omitempty"`

	// This field contains the logic filters to be applied on the this fixed
	// address. This list corresponds to the match rules that are written to the
	// dhcpd configuration file.
	LogicFilterRules []*Logicfilterrule `json:"logic_filter_rules,omitempty"`

	// The MAC address value for this fixed address.
	Mac *string `json:"mac,omitempty"`

	// The match_client value for this fixed address. Valid values are:
	// "MAC_ADDRESS": The fixed IP address is leased to the matching MAC address.
	// "CLIENT_ID": The fixed IP address is leased to the matching DHCP client
	// identifier. "RESERVED": The fixed IP address is reserved for later use with
	// a MAC address that only has zeros. "CIRCUIT_ID": The fixed IP address is
	// leased to the DHCP client with a matching circuit ID. Note that the
	// "agent_circuit_id" field must be set in this case. "REMOTE_ID": The fixed IP
	// address is leased to the DHCP client with a matching remote ID. Note that
	// the "agent_remote_id" field must be set in this case.
	MatchClient string `json:"match_client,omitempty"`

	// The Microsoft Active Directory user related information.
	MsAdUserData *MsserverAduserData `json:"ms_ad_user_data,omitempty"`

	// This field contains the Microsoft DHCP options for this fixed address.
	MsOptions []*Msdhcpoption `json:"ms_options,omitempty"`

	// The Microsoft server associated with this fixed address.
	MsServer *Msdhcpserver `json:"ms_server,omitempty"`

	// This field contains the name of this fixed address.
	Name *string `json:"name,omitempty"`

	// The network to which this fixed address belongs, in IPv4 Address/CIDR
	// format.
	Network *string `json:"network,omitempty"`

	// The name of the network view in which this fixed address resides.
	NetworkView *string `json:"network_view,omitempty"`

	// The name in FQDN and/or IPv4 Address format of the next server that the host
	// needs to boot.
	Nextserver *string `json:"nextserver,omitempty"`

	// An array of DHCP option dhcpoption structs that lists the DHCP options
	// associated with the object.
	Options []*Dhcpoption `json:"options,omitempty"`

	// The PXE lease time value for a DHCP Fixed Address object. Some hosts use PXE
	// (Preboot Execution Environment) to boot remotely from a server. To better
	// manage your IP resources, set a different lease time for PXE boot requests.
	// You can configure the DHCP server to allocate an IP address with a shorter
	// lease time to hosts that send PXE boot requests, so IP addresses are not
	// leased longer than necessary. A 32-bit unsigned integer that represents the
	// duration, in seconds, for which the update is cached. Zero indicates that
	// the update is not cached.
	PxeLeaseTime *uint32 `json:"pxe_lease_time,omitempty"`

	// The ref to the reserved interface to which the device belongs.
	ReservedInterface *string `json:"reserved_interface,omitempty"`

	// Restarts the member service. The restart_if_needed flag can trigger a
	// restart on DHCP services only when it is enabled on CP member.
	RestartIfNeeded *bool `json:"restart_if_needed,omitempty"`

	// The SNMPv3 credential for this fixed address.
	Snmp3Credential *DiscoverySnmp3credential `json:"snmp3_credential,omitempty"`

	// The SNMPv1 or SNMPv2 credential for this fixed address.
	SnmpCredential *DiscoverySnmpcredential `json:"snmp_credential,omitempty"`

	// If set on creation, the fixed address will be created according to the
	// values specified in the named template.
	Template string `json:"template,omitempty"`

	// Use flag for: bootfile
	UseBootfile *bool `json:"use_bootfile,omitempty"`

	// Use flag for: bootserver
	UseBootserver *bool `json:"use_bootserver,omitempty"`

	// If set to true, the CLI credential will override member-level settings.
	UseCliCredentials *bool `json:"use_cli_credentials,omitempty"`

	// Use flag for: ddns_domainname
	UseDdnsDomainname *bool `json:"use_ddns_domainname,omitempty"`

	// Use flag for: deny_bootp
	UseDenyBootp *bool `json:"use_deny_bootp,omitempty"`

	// Use flag for: enable_ddns
	UseEnableDdns *bool `json:"use_enable_ddns,omitempty"`

	// Use flag for: ignore_dhcp_option_list_request
	UseIgnoreDhcpOptionListRequest *bool `json:"use_ignore_dhcp_option_list_request,omitempty"`

	// Use flag for: logic_filter_rules
	UseLogicFilterRules *bool `json:"use_logic_filter_rules,omitempty"`

	// Use flag for: ms_options
	UseMsOptions *bool `json:"use_ms_options,omitempty"`

	// Use flag for: nextserver
	UseNextserver *bool `json:"use_nextserver,omitempty"`

	// Use flag for: options
	UseOptions *bool `json:"use_options,omitempty"`

	// Use flag for: pxe_lease_time
	UsePxeLeaseTime *bool `json:"use_pxe_lease_time,omitempty"`

	// Determines if the SNMPv3 credential should be used for the fixed address.
	UseSnmp3Credential *bool `json:"use_snmp3_credential,omitempty"`

	// If set to true, the SNMP credential will override member-level settings.
	UseSnmpCredential *bool `json:"use_snmp_credential,omitempty"`
}

func (Ipv4FixedAddress) ObjectType() string {
	return "fixedaddress"
}

func (obj Ipv4FixedAddress) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"ipv4addr", "network_view"}
	}
	return obj.returnFields
}

// Fixedaddresstemplate represents Infoblox object fixedaddresstemplate.
// The fixed address template used to create a fixed address objects in a quick
// and consistent way. Fixed address object created from a fixed address
// template will inherit most properties defined in fixed address template
// object so most of the fixed address template properties are the same as the
// fixed address object properties.
type Fixedaddresstemplate struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The boot file name for the fixed address. You can configure the DHCP server
	// to support clients that use the boot file name option in their DHCPREQUEST
	// messages.
	Bootfile *string `json:"bootfile,omitempty"`

	// The boot server address for the fixed address. You can specify the name
	// and/or IP address of the boot server that the host needs to boot. The boot
	// server IPv4 Address or name in FQDN format.
	Bootserver *string `json:"bootserver,omitempty"`

	// A descriptive comment of a fixed address template object.
	Comment *string `json:"comment,omitempty"`

	// The dynamic DNS domain name the appliance uses specifically for DDNS updates
	// for this fixed address.
	DdnsDomainname *string `json:"ddns_domainname,omitempty"`

	// The DDNS host name for this fixed address.
	DdnsHostname *string `json:"ddns_hostname,omitempty"`

	// Determines if BOOTP settings are disabled and BOOTP requests will be denied.
	DenyBootp *bool `json:"deny_bootp,omitempty"`

	// Determines if the DHCP server sends DDNS updates to DNS servers in the same
	// Grid, and to external DNS servers.
	EnableDdns *bool `json:"enable_ddns,omitempty"`

	// Set this to True if you want the DHCP server to use a different lease time
	// for PXE clients.
	EnablePxeLeaseTime *bool `json:"enable_pxe_lease_time,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// If this field is set to False, the appliance returns all DHCP options the
	// client is eligible to receive, rather than only the list of options the
	// client has requested.
	IgnoreDhcpOptionListRequest *bool `json:"ignore_dhcp_option_list_request,omitempty"`

	// This field contains the logic filters to be applied on this fixed address.
	// This list corresponds to the match rules that are written to the dhcpd
	// configuration file.
	LogicFilterRules []*Logicfilterrule `json:"logic_filter_rules,omitempty"`

	// The name of a fixed address template object.
	Name *string `json:"name,omitempty"`

	// The name in FQDN and/or IPv4 Address format of the next server that the host
	// needs to boot.
	Nextserver *string `json:"nextserver,omitempty"`

	// The number of addresses for this fixed address.
	NumberOfAddresses *uint32 `json:"number_of_addresses,omitempty"`

	// The start address offset for this fixed address.
	Offset *uint32 `json:"offset,omitempty"`

	// An array of DHCP option dhcpoption structs that lists the DHCP options
	// associated with the object.
	Options []*Dhcpoption `json:"options,omitempty"`

	// The PXE lease time value for a DHCP Fixed Address object. Some hosts use PXE
	// (Preboot Execution Environment) to boot remotely from a server. To better
	// manage your IP resources, set a different lease time for PXE boot requests.
	// You can configure the DHCP server to allocate an IP address with a shorter
	// lease time to hosts that send PXE boot requests, so IP addresses are not
	// leased longer than necessary. A 32-bit unsigned integer that represents the
	// duration, in seconds, for which the update is cached. Zero indicates that
	// the update is not cached.
	PxeLeaseTime *uint32 `json:"pxe_lease_time,omitempty"`

	// Use flag for: bootfile
	UseBootfile *bool `json:"use_bootfile,omitempty"`

	// Use flag for: bootserver
	UseBootserver *bool `json:"use_bootserver,omitempty"`

	// Use flag for: ddns_domainname
	UseDdnsDomainname *bool `json:"use_ddns_domainname,omitempty"`

	// Use flag for: deny_bootp
	UseDenyBootp *bool `json:"use_deny_bootp,omitempty"`

	// Use flag for: enable_ddns
	UseEnableDdns *bool `json:"use_enable_ddns,omitempty"`

	// Use flag for: ignore_dhcp_option_list_request
	UseIgnoreDhcpOptionListRequest *bool `json:"use_ignore_dhcp_option_list_request,omitempty"`

	// Use flag for: logic_filter_rules
	UseLogicFilterRules *bool `json:"use_logic_filter_rules,omitempty"`

	// Use flag for: nextserver
	UseNextserver *bool `json:"use_nextserver,omitempty"`

	// Use flag for: options
	UseOptions *bool `json:"use_options,omitempty"`

	// Use flag for: pxe_lease_time
	UsePxeLeaseTime *bool `json:"use_pxe_lease_time,omitempty"`
}

func (Fixedaddresstemplate) ObjectType() string {
	return "fixedaddresstemplate"
}

func (obj Fixedaddresstemplate) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"comment", "name"}
	}
	return obj.returnFields
}

// Ftpuser represents Infoblox object ftpuser.
// The FTP user represents the user accounts to be used with the FTP client.
type Ftpuser struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// Determines whether to create the home directory with the user name or to use
	// the existing directory as the home directory.
	CreateHomeDir bool `json:"create_home_dir,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// The absolute path of the FTP user's home directory.
	HomeDir string `json:"home_dir,omitempty"`

	// The FTP user password.
	Password *string `json:"password,omitempty"`

	// The FTP user permission.
	Permission string `json:"permission,omitempty"`

	// The FTP user name.
	Username string `json:"username,omitempty"`
}

func (Ftpuser) ObjectType() string {
	return "ftpuser"
}

func (obj Ftpuser) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"username"}
	}
	return obj.returnFields
}

// Grid represents Infoblox object grid.
// This object represents the Infoblox Grid.
type Grid struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The property to allow recursive deletion. Determines the users who can
	// choose to perform recursive deletion on networks or zones from the GUI only.
	AllowRecursiveDeletion string `json:"allow_recursive_deletion,omitempty"`

	// Determines the audit log format.
	AuditLogFormat string `json:"audit_log_format,omitempty"`

	// If set to True, audit log messages are also copied to the syslog.
	AuditToSyslogEnable *bool `json:"audit_to_syslog_enable,omitempty"`

	// The grid level settings for automated traffic capture.
	AutomatedTrafficCaptureSetting *SettingAutomatedtrafficcapture `json:"automated_traffic_capture_setting,omitempty"`

	// The Grid consent banner settings.
	ConsentBannerSetting *GridConsentbannersetting `json:"consent_banner_setting,omitempty"`

	// The Grid csp api config settings.
	CspApiConfig *GridCspapiconfig `json:"csp_api_config,omitempty"`

	// CSP settings at grid level
	CspGridSetting *GridCspgridsetting `json:"csp_grid_setting,omitempty"`

	// If set to True, the managed Grid will not send snapshots to the Multi-Grid
	// Master.
	DenyMgmSnapshots *bool `json:"deny_mgm_snapshots,omitempty"`

	// The default actions for extensbile attributes that exist on descendants.
	DescendantsAction *ExtensibleattributedefDescendants `json:"descendants_action,omitempty"`

	// The DNS resolver setting.
	DnsResolverSetting *SettingDnsresolver `json:"dns_resolver_setting,omitempty"`

	// The DSCP value. Valid values are integers between 0 and 63 inclusive.
	Dscp *uint32 `json:"dscp,omitempty"`

	// The e-mail settings for the Grid.
	EmailSetting *SettingEmail `json:"email_setting,omitempty"`

	// If set to True, GUI and API access are enabled on the LAN/VIP port and MGMT
	// port (if configured).
	EnableGuiApiForLanVip *bool `json:"enable_gui_api_for_lan_vip,omitempty"`

	// Determines if the LOM functionality is enabled or not.
	EnableLom *bool `json:"enable_lom,omitempty"`

	// Determines redirections is enabled or not for members.
	EnableMemberRedirect *bool `json:"enable_member_redirect,omitempty"`

	// Determines if the Recycle Bin is enabled or not.
	EnableRecycleBin *bool `json:"enable_recycle_bin,omitempty"`

	// Determines if the RIR/SWIP support is enabled or not.
	EnableRirSwip *bool `json:"enable_rir_swip,omitempty"`

	// The list of external backup syslog servers.
	ExternalSyslogBackupServers []*Extsyslogbackupserver `json:"external_syslog_backup_servers,omitempty"`

	// If set to True, external syslog servers are enabled.
	ExternalSyslogServerEnable *bool `json:"external_syslog_server_enable,omitempty"`

	// The Grid HTTP proxy server settings.
	HttpProxyServerSetting *SettingHttpproxyserver `json:"http_proxy_server_setting,omitempty"`

	// The Grid informational level banner settings.
	InformationalBannerSetting *GridInformationalbannersetting `json:"informational_banner_setting,omitempty"`

	// If set to True, graphical visualization of the Grid is enabled.
	IsGridVisualizationVisible *bool `json:"is_grid_visualization_visible,omitempty"`

	// Security Setting for Account lockout.
	LockoutSetting *GridLockoutsetting `json:"lockout_setting,omitempty"`

	// The list of LOM users.
	LomUsers []*Lomuser `json:"lom_users,omitempty"`

	// Determines if strict delegate mode for the Grid managed by the Master Grid
	// is enabled or not.
	MgmStrictDelegateMode *bool `json:"mgm_strict_delegate_mode,omitempty"`

	// The settings for all Microsoft servers in the Grid.
	MsSetting *SettingMsserver `json:"ms_setting,omitempty"`

	// The grid name.
	Name *string `json:"name,omitempty"`

	// The list of all Network Address Translation (NAT) groups configured on the
	// Grid.
	NatGroups []string `json:"nat_groups,omitempty"`

	// The Grid Network Time Protocol (NTP) settings.
	NTPSetting *NTPSetting `json:"ntp_setting,omitempty"`

	// Determines the object changes tracking settings.
	ObjectsChangesTrackingSetting *Objectschangestrackingsetting `json:"objects_changes_tracking_setting,omitempty"`

	// The Grid password settings.
	PasswordSetting *SettingPassword `json:"password_setting,omitempty"`

	// The setting for the Restart Banner.
	RestartBannerSetting *GridRestartbannersetting `json:"restart_banner_setting,omitempty"`

	// The restart status for the Grid.
	RestartStatus string `json:"restart_status,omitempty"`

	// The time interval (in seconds) that determines how often the appliance
	// calculates the RPZ hit rate.
	RpzHitRateInterval *uint32 `json:"rpz_hit_rate_interval,omitempty"`

	// The maximum number of incoming queries between the RPZ hit rate checks.
	RpzHitRateMaxQuery *uint32 `json:"rpz_hit_rate_max_query,omitempty"`

	// The minimum number of incoming queries between the RPZ hit rate checks.
	RpzHitRateMinQuery *uint32 `json:"rpz_hit_rate_min_query,omitempty"`

	// The scheduled backup configuration.
	ScheduledBackup *Scheduledbackup `json:"scheduled_backup,omitempty"`

	// The shared secret of the Grid. This is a write-only attribute.
	Secret *string `json:"secret,omitempty"`

	// The Grid security banner settings.
	SecurityBannerSetting *SettingSecuritybanner `json:"security_banner_setting,omitempty"`

	// The Grid security settings.
	SecuritySetting *SettingSecurity `json:"security_setting,omitempty"`

	// Determines overall service status of the Grid.
	ServiceStatus string `json:"service_status,omitempty"`

	// The Grid SNMP settings.
	SnmpSetting *SettingSnmp `json:"snmp_setting,omitempty"`

	// Support bundle download timeout in seconds.
	SupportBundleDownloadTimeout *uint32 `json:"support_bundle_download_timeout,omitempty"`

	// If 'audit_to_syslog_enable' is set to True, the facility that determines the
	// processes and daemons from which the log messages are generated.
	SyslogFacility string `json:"syslog_facility,omitempty"`

	// The list of external syslog servers.
	SyslogServers []*Syslogserver `json:"syslog_servers,omitempty"`

	// The maximum size for the syslog file expressed in megabytes.
	SyslogSize *uint32 `json:"syslog_size,omitempty"`

	// Determines the list of threshold traps. The user can only change the values
	// for each trap or remove traps.
	ThresholdTraps []*Thresholdtrap `json:"threshold_traps,omitempty"`

	// The time zone of the Grid. The UTC string that represents the time zone,
	// such as "(UTC - 5:00) Eastern Time (US and Canada)".
	TimeZone *string `json:"time_zone,omitempty"`

	// The delayed usage (in minutes) of a permission token.
	TokenUsageDelay *uint32 `json:"token_usage_delay,omitempty"`

	// Grid level settings for enabling authoritative DNS latency thresholds for
	// automated traffic capture.
	TrafficCaptureAuthDnsSetting *SettingTriggeruthdnslatency `json:"traffic_capture_auth_dns_setting,omitempty"`

	// Grid level settings for enabling DNS cache hit ratio threshold for automated
	// traffic capture.
	TrafficCaptureChrSetting *SettingTrafficcapturechr `json:"traffic_capture_chr_setting,omitempty"`

	// Grid level settings for enabling DNS query per second threshold for
	// automated traffic capture.
	TrafficCaptureQpsSetting *SettingTrafficcaptureqps `json:"traffic_capture_qps_setting,omitempty"`

	// Grid level settings for enabling recursive DNS latency thresholds for
	// automated traffic capture.
	TrafficCaptureRecDnsSetting *SettingTriggerrecdnslatency `json:"traffic_capture_rec_dns_setting,omitempty"`

	// Grid level settings for enabling count for concurrent outgoing recursive
	// queries for automated traffic capture.
	TrafficCaptureRecQueriesSetting *SettingTriggerrecqueries `json:"traffic_capture_rec_queries_setting,omitempty"`

	// Determines configuration of the trap notifications.
	TrapNotifications []*Trapnotification `json:"trap_notifications,omitempty"`

	// The list of member configuration structures, which provides information and
	// settings for configuring the member that is responsible for downloading
	// updates.
	UpdatesDownloadMemberConfig []*Updatesdownloadmemberconfig `json:"updates_download_member_config,omitempty"`

	// The VPN port.
	VpnPort *uint32 `json:"vpn_port,omitempty"`
}

func (Grid) ObjectType() string {
	return "grid"
}

func (obj Grid) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{}
	}
	return obj.returnFields
}

func NewGrid(grid Grid) *Grid {
	result := grid
	returnFields := []string{"name", "ntp_setting"}
	result.returnFields = returnFields
	return &result
}

// GridCloudapi represents Infoblox object grid:cloudapi.
// This object represents the Cloud Grid.
type GridCloudapi struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// Defines administrators who can perform cloud API requests on the Grid
	// Master. The valid value is NONE (no administrator), ALL (all
	// administrators), or LIST (administrators on the ACL).
	AllowApiAdmins string `json:"allow_api_admins,omitempty"`

	// The list of administrators who can perform cloud API requests on the Cloud
	// Platform Appliance.
	AllowedApiAdmins []*GridCloudapiUser `json:"allowed_api_admins,omitempty"`

	// Determines whether the recycle bin for deleted cloud objects is enabled or
	// not on the Grid Master.
	EnableRecycleBin *bool `json:"enable_recycle_bin,omitempty"`

	// Structure containing all the information related to Gateway configuration
	// for the Grid Master
	GatewayConfig *GridCloudapiGatewayConfig `json:"gateway_config,omitempty"`
}

func (GridCloudapi) ObjectType() string {
	return "grid:cloudapi"
}

func (obj GridCloudapi) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"allow_api_admins", "allowed_api_admins", "enable_recycle_bin"}
	}
	return obj.returnFields
}

// GridCloudapiCloudstatistics represents Infoblox object grid:cloudapi:cloudstatistics.
// Represents the cloud statistics data.
type GridCloudapiCloudstatistics struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// Ratio of allocated vs. available IPs
	AllocatedAvailableRatio uint32 `json:"allocated_available_ratio,omitempty"`

	// Total number of IPs allocated by tenants.
	AllocatedIpCount uint32 `json:"allocated_ip_count,omitempty"`

	// The total number of IP addresses available to tenants. Only IP addresses in
	// networks that are within a delegation scope are counted.
	AvailableIpCount string `json:"available_ip_count,omitempty"`

	// The total number of fixed IP addresses currently in use by all tenants in
	// the system.
	FixedIpCount uint32 `json:"fixed_ip_count,omitempty"`

	// The total number of floating IP addresses currently in use by all tenants in
	// the system.
	FloatingIpCount uint32 `json:"floating_ip_count,omitempty"`

	// Total number of tenant currently in the system.
	TenantCount uint32 `json:"tenant_count,omitempty"`

	// The total number of IP addresses currently in use by all tenants in the
	// system.
	TenantIpCount uint32 `json:"tenant_ip_count,omitempty"`

	// The total number of VMs currently in use by all tenants in the system.
	TenantVmCount uint32 `json:"tenant_vm_count,omitempty"`
}

func (GridCloudapiCloudstatistics) ObjectType() string {
	return "grid:cloudapi:cloudstatistics"
}

func (obj GridCloudapiCloudstatistics) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"allocated_available_ratio", "allocated_ip_count", "available_ip_count", "fixed_ip_count", "floating_ip_count", "tenant_count", "tenant_ip_count", "tenant_vm_count"}
	}
	return obj.returnFields
}

// GridCloudapiTenant represents Infoblox object grid:cloudapi:tenant.
// A Tenant object represents an abstract administrative concept in Cloud
// Management Platforms, which encompasses all network elements such as
// networks, zones, VMs, IP addresses (fixed and floating), network views,
// default DNS view, and all related extensive attributes.
type GridCloudapiTenant struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// Structure containing all cloud API related information for this object.
	CloudInfo *GridCloudapiInfo `json:"cloud_info,omitempty"`

	// Comment for the Grid Cloud API Tenant object; maximum 256 characters.
	Comment *string `json:"comment,omitempty"`

	// The timestamp when the tenant was first created in the system.
	CreatedTs *UnixTime `json:"created_ts,omitempty"`

	// Unique ID associated with the tenant. This is set only when the tenant is
	// first created.
	Id string `json:"id,omitempty"`

	// The timestamp when the last event associated with the tenant happened.
	LastEventTs *UnixTime `json:"last_event_ts,omitempty"`

	// Name of the tenant.
	Name *string `json:"name,omitempty"`

	// Number of Networks associated with the tenant.
	NetworkCount uint32 `json:"network_count,omitempty"`

	// Number of VMs associated with the tenant.
	VmCount uint32 `json:"vm_count,omitempty"`
}

func (GridCloudapiTenant) ObjectType() string {
	return "grid:cloudapi:tenant"
}

func (obj GridCloudapiTenant) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"comment", "id", "name"}
	}
	return obj.returnFields
}

// GridCloudapiVm represents Infoblox object grid:cloudapi:vm.
// A vm object represents a virtual machine which encompasses network elements
// such as IP addresses (fixed and floating, private and public), DNS names and
// all related extensive attributes.
type GridCloudapiVm struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// Availability zone of the VM.
	AvailabilityZone string `json:"availability_zone,omitempty"`

	// Structure containing all the cloud API related information for this object.
	CloudInfo *GridCloudapiInfo `json:"cloud_info,omitempty"`

	// Comment for the vm object; maximum 1024 characters.
	Comment *string `json:"comment,omitempty"`

	// Elastic IP address associated with the VM's primary interface.
	ElasticIpAddress string `json:"elastic_ip_address,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// The timestamp when the VM was first seen in the system.
	FirstSeen *UnixTime `json:"first_seen,omitempty"`

	// Hostname part of the FQDN for the address associated with the VM's primary
	// interface.
	Hostname string `json:"hostname,omitempty"`

	// Unique ID associated with the VM. This is set only when the VM is first
	// created.
	Id string `json:"id,omitempty"`

	// Identifier of the kernel that this VM is running; maximum 128 characters.
	KernelId *string `json:"kernel_id,omitempty"`

	// The timestamp when the last event associated with the VM happened.
	LastSeen *UnixTime `json:"last_seen,omitempty"`

	// Name of the VM.
	Name *string `json:"name,omitempty"`

	// Number of Networks containing any address associated with this VM.
	NetworkCount uint32 `json:"network_count,omitempty"`

	// Guest Operating system that this VM is running; maximum 128 characters.
	OperatingSystem *string `json:"operating_system,omitempty"`

	// MAC address associated with the VM's primary interface.
	PrimaryMacAddress string `json:"primary_mac_address,omitempty"`

	// Address of the network that is the container of the address associated with
	// the VM's primary interface.
	SubnetAddress string `json:"subnet_address,omitempty"`

	// CIDR of the network that is the container of the address associated with the
	// VM's primary interface.
	SubnetCidr uint32 `json:"subnet_cidr,omitempty"`

	// Subnet ID of the network that is the container of the address associated
	// with the VM's primary interface.
	SubnetId string `json:"subnet_id,omitempty"`

	// Name of the tenant associated with the VM.
	TenantName string `json:"tenant_name,omitempty"`

	// VM type; maximum 64 characters.
	VmType *string `json:"vm_type,omitempty"`

	// Network address of the parent VPC.
	VpcAddress string `json:"vpc_address,omitempty"`

	// Network CIDR of the parent VPC.
	VpcCidr uint32 `json:"vpc_cidr,omitempty"`

	// Identifier of the parent VPC.
	VpcId string `json:"vpc_id,omitempty"`

	// Name of the parent VPC.
	VpcName string `json:"vpc_name,omitempty"`
}

func (GridCloudapiVm) ObjectType() string {
	return "grid:cloudapi:vm"
}

func (obj GridCloudapiVm) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"comment", "id", "name"}
	}
	return obj.returnFields
}

// GridCloudapiVmaddress represents Infoblox object grid:cloudapi:vmaddress.
// VM address is an abstract object that represents a virtual machine running
// on the Cloud Management Platform.
type GridCloudapiVmaddress struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The IP address of the interface.
	Address string `json:"address,omitempty"`

	// IP address type (Public, Private, Elastic, Floating, ...).
	AddressType string `json:"address_type,omitempty"`

	// Reference to associated IPv4 or IPv6 address.
	AssociatedIp string `json:"associated_ip,omitempty"`

	// Array of string denoting the types of underlying objects IPv4/IPv6 - "A",
	// "AAAA", "PTR", "HOST", "FA", "RESERVATION", "UNMANAGED" + ("BULKHOST",
	// "DHCP_RANGE", "RESERVED_RANGE", "LEASE", "NETWORK", "BROADCAST", "PENDING"),
	AssociatedObjectTypes []string `json:"associated_object_types,omitempty"`

	// The list of references to the object (Host, Fixed Address, RR, ...) that
	// defines this IP.
	AssociatedObjects []*Ipv4FixedAddress `json:"associated_objects,omitempty"`

	// Structure containing all the cloud API related information. Only management
	// platform "mgmt_platform" is updated for this object.
	CloudInfo *GridCloudapiInfo `json:"cloud_info,omitempty"`

	// The list of all FQDNs associated with the IP address.
	DnsNames []string `json:"dns_names,omitempty"`

	// Elastic IP address associated with this private address, if this address is
	// a private address; otherwise empty.
	ElasticAddress string `json:"elastic_address,omitempty"`

	// Name of the interface associated with this IP address.
	InterfaceName string `json:"interface_name,omitempty"`

	// Indicates whether the address is IPv4 or IPv6.
	IsIpv4 bool `json:"is_ipv4,omitempty"`

	// The MAC address of the interface.
	MacAddress string `json:"mac_address,omitempty"`

	// The Microsoft Active Directory user related information.
	MsAdUserData *MsserverAduserData `json:"ms_ad_user_data,omitempty"`

	// The network to which this address belongs, in IPv4 Address/CIDR format.
	Network string `json:"network,omitempty"`

	// Network view name of the delegated object.
	NetworkView string `json:"network_view,omitempty"`

	// Port identifier of the interface.
	PortId uint32 `json:"port_id,omitempty"`

	// Private IP address associated with this public (or elastic or floating)
	// address, if this address is a public address; otherwise empty.
	PrivateAddress string `json:"private_address,omitempty"`

	// Host part of the FQDN of this address if this address is a private address;
	// otherwise empty
	PrivateHostname string `json:"private_hostname,omitempty"`

	// Public IP address associated with this private address, if this address is a
	// private address; otherwise empty.
	PublicAddress string `json:"public_address,omitempty"`

	// Host part of the FQDN of this address if this address is a public (or
	// elastic or floating) address; otherwise empty
	PublicHostname string `json:"public_hostname,omitempty"`

	// Network address of the subnet that is the container of this address.
	SubnetAddress string `json:"subnet_address,omitempty"`

	// CIDR of the subnet that is the container of this address.
	SubnetCidr uint32 `json:"subnet_cidr,omitempty"`

	// Subnet ID that is the container of this address.
	SubnetId string `json:"subnet_id,omitempty"`

	// The Cloud API Tenant object.
	Tenant string `json:"tenant,omitempty"`

	// Availability zone of the VM.
	VmAvailabilityZone string `json:"vm_availability_zone,omitempty"`

	// VM comment.
	VmComment string `json:"vm_comment,omitempty"`

	// Date/time the VM was first created as NIOS object.
	VmCreationTime *UnixTime `json:"vm_creation_time,omitempty"`

	// Host part of the FQDN of the address attached to the primary interface.
	VmHostname string `json:"vm_hostname,omitempty"`

	// The UUID of the Virtual Machine.
	VmId string `json:"vm_id,omitempty"`

	// Kernel ID of the VM that this address is associated with.
	VmKernelId string `json:"vm_kernel_id,omitempty"`

	// Last time the VM was updated.
	VmLastUpdateTime *UnixTime `json:"vm_last_update_time,omitempty"`

	// The name of the Virtual Machine.
	VmName string `json:"vm_name,omitempty"`

	// Count of networks containing all the addresses of the VM.
	VmNetworkCount uint32 `json:"vm_network_count,omitempty"`

	// Operating system that the VM is running.
	VmOperatingSystem string `json:"vm_operating_system,omitempty"`

	// Type of the VM this address is associated with.
	VmType string `json:"vm_type,omitempty"`

	// Network address of the VPC of the VM that this address is associated with.
	VmVpcAddress string `json:"vm_vpc_address,omitempty"`

	// CIDR of the VPC of the VM that this address is associated with.
	VmVpcCidr uint32 `json:"vm_vpc_cidr,omitempty"`

	// Identifier of the VPC where the VM is defined.
	VmVpcId string `json:"vm_vpc_id,omitempty"`

	// Name of the VPC where the VM is defined.
	VmVpcName string `json:"vm_vpc_name,omitempty"`

	// Reference to the VPC where the VM is defined.
	VmVpcRef string `json:"vm_vpc_ref,omitempty"`
}

func (GridCloudapiVmaddress) ObjectType() string {
	return "grid:cloudapi:vmaddress"
}

func (obj GridCloudapiVmaddress) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"address", "is_ipv4", "network_view", "port_id", "vm_name"}
	}
	return obj.returnFields
}

// GridDashboard represents Infoblox object grid:dashboard.
// The Grid Dashboard object provides a configuration interface for threshold
// values that are used to warn about critical ATP, RPZ and Analytics events.
// These threshold values are used to calculate the security status for ATP,
// RPZ, and Analytics.
type GridDashboard struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The Grid Dashboard critical threshold for Analytics tunneling events.
	AnalyticsTunnelingEventCriticalThreshold *uint32 `json:"analytics_tunneling_event_critical_threshold,omitempty"`

	// The Grid Dashboard warning threshold for Analytics tunneling events.
	AnalyticsTunnelingEventWarningThreshold *uint32 `json:"analytics_tunneling_event_warning_threshold,omitempty"`

	// The Grid Dashboard critical threshold for ATP critical events.
	AtpCriticalEventCriticalThreshold *uint32 `json:"atp_critical_event_critical_threshold,omitempty"`

	// The Grid Dashboard warning threshold for ATP critical events.
	AtpCriticalEventWarningThreshold *uint32 `json:"atp_critical_event_warning_threshold,omitempty"`

	// The Grid Dashboard critical threshold for ATP major events.
	AtpMajorEventCriticalThreshold *uint32 `json:"atp_major_event_critical_threshold,omitempty"`

	// The Grid Dashboard warning threshold for ATP major events.
	AtpMajorEventWarningThreshold *uint32 `json:"atp_major_event_warning_threshold,omitempty"`

	// The Grid Dashboard critical threshold for ATP warning events.
	AtpWarningEventCriticalThreshold *uint32 `json:"atp_warning_event_critical_threshold,omitempty"`

	// The Grid Dashboard warning threshold for ATP warning events.
	AtpWarningEventWarningThreshold *uint32 `json:"atp_warning_event_warning_threshold,omitempty"`

	// The critical threshold value for blocked RPZ hits in the Grid dashboard.
	RpzBlockedHitCriticalThreshold *uint32 `json:"rpz_blocked_hit_critical_threshold,omitempty"`

	// The warning threshold value for blocked RPZ hits in the Grid dashboard.
	RpzBlockedHitWarningThreshold *uint32 `json:"rpz_blocked_hit_warning_threshold,omitempty"`

	// The Grid Dashboard critical threshold for RPZ passthru events.
	RpzPassthruEventCriticalThreshold *uint32 `json:"rpz_passthru_event_critical_threshold,omitempty"`

	// The Grid Dashboard warning threshold for RPZ passthru events.
	RpzPassthruEventWarningThreshold *uint32 `json:"rpz_passthru_event_warning_threshold,omitempty"`

	// The critical threshold value for substituted RPZ hits in the Grid dashboard.
	RpzSubstitutedHitCriticalThreshold *uint32 `json:"rpz_substituted_hit_critical_threshold,omitempty"`

	// The warning threshold value for substituted RPZ hits in the Grid dashboard.
	RpzSubstitutedHitWarningThreshold *uint32 `json:"rpz_substituted_hit_warning_threshold,omitempty"`
}

func (GridDashboard) ObjectType() string {
	return "grid:dashboard"
}

func (obj GridDashboard) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"analytics_tunneling_event_critical_threshold", "analytics_tunneling_event_warning_threshold", "atp_critical_event_critical_threshold", "atp_critical_event_warning_threshold", "atp_major_event_critical_threshold", "atp_major_event_warning_threshold", "atp_warning_event_critical_threshold", "atp_warning_event_warning_threshold", "rpz_blocked_hit_critical_threshold", "rpz_blocked_hit_warning_threshold", "rpz_passthru_event_critical_threshold", "rpz_passthru_event_warning_threshold", "rpz_substituted_hit_critical_threshold", "rpz_substituted_hit_warning_threshold"}
	}
	return obj.returnFields
}

// GridDhcpproperties represents Infoblox object grid:dhcpproperties.
// This object represents a subset of the Infoblox Grid DHCP properties.
type GridDhcpproperties struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The Grid-level authority flag. This flag specifies whether a DHCP server is
	// authoritative for a domain.
	Authority *bool `json:"authority,omitempty"`

	// The name of a file that DHCP clients need to boot. Some DHCP clients use
	// BOOTP (bootstrap protocol) or include the boot file name option in their
	// DHCPREQUEST messages.
	Bootfile *string `json:"bootfile,omitempty"`

	// The name of the server on which a boot file is stored.
	Bootserver *string `json:"bootserver,omitempty"`

	// The Grid-level capture hostname flag. Set this flag to capture the hostname
	// and lease time when assigning a fixed address.
	CaptureHostname *bool `json:"capture_hostname,omitempty"`

	// The member DDNS domain name value.
	DdnsDomainname *string `json:"ddns_domainname,omitempty"`

	// Determines if the ability of a DHCP server to generate a host name and
	// update DNS with this host name when it receives a DHCP REQUEST message that
	// does not include a host name is enabled or not.
	DdnsGenerateHostname *bool `json:"ddns_generate_hostname,omitempty"`

	// Determines the retry interval when the DHCP server makes repeated attempts
	// to send DDNS updates to a DNS server.
	DdnsRetryInterval *uint32 `json:"ddns_retry_interval,omitempty"`

	// Determines that only the DHCP server is allowed to update DNS, regardless of
	// the requests from the DHCP clients.
	DdnsServerAlwaysUpdates *bool `json:"ddns_server_always_updates,omitempty"`

	// The DDNS TTL (Dynamic DNS Time To Live) value specifies the number of
	// seconds an IP address for the name is cached.
	DdnsTtl *uint32 `json:"ddns_ttl,omitempty"`

	// Determines if the Grid DHCP server's ability to update the A and PTR records
	// with a fixed address is enabled or not.
	DdnsUpdateFixedAddresses *bool `json:"ddns_update_fixed_addresses,omitempty"`

	// Determines if support for option 81 is enabled or not.
	DdnsUseOption81 *bool `json:"ddns_use_option81,omitempty"`

	// Determines if deny BOOTP is enabled or not.
	DenyBootp *bool `json:"deny_bootp,omitempty"`

	// If set to True, NAC filters will be disabled on the Infoblox Grid.
	DisableAllNacFilters *bool `json:"disable_all_nac_filters,omitempty"`

	// The update style for dynamic DNS updates.
	DnsUpdateStyle string `json:"dns_update_style,omitempty"`

	// The Grid-level email_list value. Specify an e-mail address to which you want
	// the Infoblox appliance to send e-mail notifications when the DHCP address
	// usage for the grid crosses a threshold. You can create a list of several
	// e-mail addresses.
	EmailList []string `json:"email_list,omitempty"`

	// Determines if the member DHCP server's ability to send DDNS updates is
	// enabled or not.
	EnableDdns *bool `json:"enable_ddns,omitempty"`

	// Represents the watermarks above or below which address usage in a network is
	// unexpected and might warrant your attention.
	EnableDhcpThresholds *bool `json:"enable_dhcp_thresholds,omitempty"`

	// Determines if e-mail warnings are enabled or disabled. When DHCP threshold
	// is enabled and DHCP address usage crosses a watermark threshold, the
	// appliance sends an e-mail notification to an administrator.
	EnableEmailWarnings *bool `json:"enable_email_warnings,omitempty"`

	// Determines if the fingerprint feature is enabled or not. If you enable this
	// feature, the server will match a fingerprint for incoming lease requests.
	EnableFingerprint *bool `json:"enable_fingerprint,omitempty"`

	// Determines whether all appliances are enabled to receive GSS-TSIG
	// authenticated updates from DHCP clients.
	EnableGssTsig *bool `json:"enable_gss_tsig,omitempty"`

	// Determines if the Grid-level host name rewrite feature is enabled or not.
	EnableHostnameRewrite *bool `json:"enable_hostname_rewrite,omitempty"`

	// Determines if lease query is allowed or not.
	EnableLeasequery *bool `json:"enable_leasequery,omitempty"`

	// Determines if DHCP servers in a Grid support roaming hosts or not.
	EnableRoamingHosts *bool `json:"enable_roaming_hosts,omitempty"`

	// Determined if the SNMP warnings on Grid-level are enabled or not. When DHCP
	// threshold is enabled and DHCP address usage crosses a watermark threshold,
	// the appliance sends an SNMP trap to the trap receiver that you defined you
	// defined at the Grid member level.
	EnableSnmpWarnings *bool `json:"enable_snmp_warnings,omitempty"`

	// The format option for Option 82 logging.
	FormatLogOption82 string `json:"format_log_option_82,omitempty"`

	// Determines the Grid that serves DHCP. This specifies a group of Infoblox
	// appliances that are connected together to provide a single point of device
	// administration and service configuration in a secure, highly available
	// environment.
	Grid string `json:"grid,omitempty"`

	// The list of GSS-TSIG keys for a Grid DHCP object.
	GssTsigKeys []*Kerberoskey `json:"gss_tsig_keys,omitempty"`

	// Determines the high watermark value of a Grid DHCP server. If the percentage
	// of allocated addresses exceeds this watermark, the appliance makes a syslog
	// entry and sends an e-mail notification (if enabled). Specifies the
	// percentage of allocated addresses. The range is from 1 to 100.
	HighWaterMark *uint32 `json:"high_water_mark,omitempty"`

	// Determines the high watermark reset value of a member DHCP server. If the
	// percentage of allocated addresses drops below this value, a corresponding
	// SNMP trap is reset. Specifies the percentage of allocated addresses. The
	// range is from 1 to 100. The high watermark reset value must be lower than
	// the high watermark value.
	HighWaterMarkReset *uint32 `json:"high_water_mark_reset,omitempty"`

	// The name of the default hostname rewrite policy, which is also in the
	// protocol_hostname_rewrite_policies array.
	HostnameRewritePolicy *string `json:"hostname_rewrite_policy,omitempty"`

	// Determines if the ignore DHCP option list request flag of a Grid DHCP is
	// enabled or not. If this flag is set to true all available DHCP options will
	// be returned to the client.
	IgnoreDhcpOptionListRequest *bool `json:"ignore_dhcp_option_list_request,omitempty"`

	// Indicates whether the appliance will ignore DHCP client IDs or MAC
	// addresses. Valid values are "NONE", "CLIENT", or "MACADDR". The default is
	// "NONE".
	IgnoreId string `json:"ignore_id,omitempty"`

	// A list of MAC addresses the appliance will ignore.
	IgnoreMacAddresses []string `json:"ignore_mac_addresses,omitempty"`

	// Determines if the fixed address configuration takes effect immediately
	// without DHCP service restart or not.
	ImmediateFaConfiguration *bool `json:"immediate_fa_configuration,omitempty"`

	// Determines if the IPv6 host name and lease time is captured or not while
	// assigning a fixed address.
	Ipv6CaptureHostname *bool `json:"ipv6_capture_hostname,omitempty"`

	// The Grid-level DDNS domain name value.
	Ipv6DdnsDomainname *string `json:"ipv6_ddns_domainname,omitempty"`

	// Controls whether the FQDN option sent by the client is to be used, or if the
	// server can automatically generate the FQDN.
	Ipv6DdnsEnableOptionFqdn *bool `json:"ipv6_ddns_enable_option_fqdn,omitempty"`

	// Determines if the server always updates DNS or updates only if requested by
	// the client.
	Ipv6DdnsServerAlwaysUpdates *bool `json:"ipv6_ddns_server_always_updates,omitempty"`

	// The Grid-level IPv6 DDNS TTL value.
	Ipv6DdnsTtl *uint32 `json:"ipv6_ddns_ttl,omitempty"`

	// The Grid-level IPv6 default prefix.
	Ipv6DefaultPrefix *string `json:"ipv6_default_prefix,omitempty"`

	// The update style for dynamic DHCPv6 DNS updates.
	Ipv6DnsUpdateStyle string `json:"ipv6_dns_update_style,omitempty"`

	// The IPv6 domain name.
	Ipv6DomainName *string `json:"ipv6_domain_name,omitempty"`

	// The comma separated list of domain name server addresses in IPv6 address
	// format.
	Ipv6DomainNameServers []string `json:"ipv6_domain_name_servers,omitempty"`

	// Determines if sending DDNS updates by the DHCPv6 server is enabled or not.
	Ipv6EnableDdns *bool `json:"ipv6_enable_ddns,omitempty"`

	// Determines whether the all appliances are enabled to receive GSS-TSIG
	// authenticated updates from DHCPv6 clients.
	Ipv6EnableGssTsig *bool `json:"ipv6_enable_gss_tsig,omitempty"`

	// Indicates whether DHCPv6 lease scavenging is enabled or disabled.
	Ipv6EnableLeaseScavenging *bool `json:"ipv6_enable_lease_scavenging,omitempty"`

	// Determines if the DHCPv6 server retries failed dynamic DNS updates or not.
	Ipv6EnableRetryUpdates *bool `json:"ipv6_enable_retry_updates,omitempty"`

	// Determines if the server generates the hostname if it is not sent by the
	// client.
	Ipv6GenerateHostname *bool `json:"ipv6_generate_hostname,omitempty"`

	// The list of GSS-TSIG keys for a Grid DHCPv6 object.
	Ipv6GssTsigKeys []*Kerberoskey `json:"ipv6_gss_tsig_keys,omitempty"`

	// The IPv6 address or FQDN of the Kerberos server for DHCPv6 GSS-TSIG
	// authentication.
	Ipv6KdcServer *string `json:"ipv6_kdc_server,omitempty"`

	// The Grid-level grace period (in seconds) to keep an expired lease before it
	// is deleted by the scavenging process.
	Ipv6LeaseScavengingTime *uint32 `json:"ipv6_lease_scavenging_time,omitempty"`

	// The Grid-level Microsoft client DHCP IPv6 code page value. This value is the
	// hostname translation code page for Microsoft DHCP IPv6 clients.
	Ipv6MicrosoftCodePage string `json:"ipv6_microsoft_code_page,omitempty"`

	// An array of DHCP option dhcpoption structs that lists the DHCPv6 options
	// associated with the object.
	Ipv6Options []*Dhcpoption `json:"ipv6_options,omitempty"`

	// The Grid-level list of IPv6 prefixes.
	Ipv6Prefixes []string `json:"ipv6_prefixes,omitempty"`

	// Determines if the IPv6 recycle leases feature is enabled or not. If the
	// feature is enabled, leases are kept in the Recycle Bin until one week after
	// expiration. When the feature is disabled, the leases are irrecoverably
	// deleted.
	Ipv6RecycleLeases *bool `json:"ipv6_recycle_leases,omitempty"`

	// Enable binding for expired DHCPv6 leases.
	Ipv6RememberExpiredClientAssociation *bool `json:"ipv6_remember_expired_client_association,omitempty"`

	// Determines the retry interval when the member DHCPv6 server makes repeated
	// attempts to send DDNS updates to a DNS server.
	Ipv6RetryUpdatesInterval *uint32 `json:"ipv6_retry_updates_interval,omitempty"`

	// The Grid-level TXT record handling value. This value specifies how DHCPv6
	// should treat the TXT records when performing DNS updates.
	Ipv6TxtRecordHandling string `json:"ipv6_txt_record_handling,omitempty"`

	// Controls whether the DHCPv6 server updates DNS when an IPv6 DHCP lease is
	// renewed.
	Ipv6UpdateDnsOnLeaseRenewal *bool `json:"ipv6_update_dns_on_lease_renewal,omitempty"`

	// The IPv4 address or FQDN of the Kerberos server for DHCPv4 GSS-TSIG
	// authentication.
	KdcServer *string `json:"kdc_server,omitempty"`

	// The Grid member on which you want to store the DHCP lease history log.
	// Infoblox recommends that you dedicate a member other than the master as a
	// logging member. If possible, use this member solely for storing the DHCP
	// lease history log. If you do not select a member, no logging can occur.
	LeaseLoggingMember *string `json:"lease_logging_member,omitempty"`

	// Defines how the appliance releases DHCP leases. Valid values are
	// "RELEASE_MACHING_ID", "NEVER_RELEASE", or "ONE_LEASE_PER_CLIENT". The
	// default is "RELEASE_MATCHING_ID".
	LeasePerClientSettings string `json:"lease_per_client_settings,omitempty"`

	// Determines the lease scavenging time value. When this field is set, the
	// appliance permanently deletes the free and backup leases, that remain in the
	// database beyond a specified period of time. To disable lease scavenging, set
	// the parameter to -1. The minimum positive value must be greater than 86400
	// seconds (1 day).
	LeaseScavengeTime int `json:"lease_scavenge_time,omitempty"`

	// This value specifies whether the Grid DHCP members log lease events is
	// enabled or not.
	LogLeaseEvents *bool `json:"log_lease_events,omitempty"`

	// This field contains the logic filters to be applied on the Infoblox Grid.
	// This list corresponds to the match rules that are written to the dhcpd
	// configuration file.
	LogicFilterRules []*Logicfilterrule `json:"logic_filter_rules,omitempty"`

	// Determines the low watermark value. If the percent of allocated addresses
	// drops below this watermark, the appliance makes a syslog entry and if
	// enabled, sends an e-mail notification.
	LowWaterMark *uint32 `json:"low_water_mark,omitempty"`

	// Determines the low watermark reset value.If the percentage of allocated
	// addresses exceeds this value, a corresponding SNMP trap is reset. A number
	// that specifies the percentage of allocated addresses. The range is from 1 to
	// 100. The low watermark reset value must be higher than the low watermark
	// value.
	LowWaterMarkReset *uint32 `json:"low_water_mark_reset,omitempty"`

	// The Microsoft client DHCP IPv4 code page value of a Grid. This value is the
	// hostname translation code page for Microsoft DHCP IPv4 clients.
	MicrosoftCodePage string `json:"microsoft_code_page,omitempty"`

	// The next server value of a DHCP server. This value is the IP address or name
	// of the boot file server on which the boot file is stored.
	Nextserver *string `json:"nextserver,omitempty"`

	// The list of option 60 match rules.
	Option60MatchRules []*Option60matchrule `json:"option60_match_rules,omitempty"`

	// An array of DHCP option dhcpoption structs that lists the DHCP options
	// associated with the object. Note that WAPI does not return special options
	// 'routers', 'domain-name-servers', 'domain-name' and 'broadcast-address' with
	// empty values for this object.
	Options []*Dhcpoption `json:"options,omitempty"`

	// Specifies the number of pings that the Infoblox appliance sends to an IP
	// address to verify that it is not in use. Values are range is from 0 to 10,
	// where 0 disables pings.
	PingCount *uint32 `json:"ping_count,omitempty"`

	// Indicates the number of milliseconds the appliance waits for a response to
	// its ping. Valid values are 100, 500, 1000, 2000, 3000, 4000 and 5000
	// milliseconds.
	PingTimeout *uint32 `json:"ping_timeout,omitempty"`

	// The preferred lifetime value.
	PreferredLifetime *uint32 `json:"preferred_lifetime,omitempty"`

	// The Prefix length mode for DHCPv6.
	PrefixLengthMode string `json:"prefix_length_mode,omitempty"`

	// The list of hostname rewrite policies.
	ProtocolHostnameRewritePolicies []*Hostnamerewritepolicy `json:"protocol_hostname_rewrite_policies,omitempty"`

	// Specifies the duration of time it takes a host to connect to a boot server,
	// such as a TFTP server, and download the file it needs to boot. A 32-bit
	// unsigned integer that represents the duration, in seconds, for which the
	// update is cached. Zero indicates that the update is not cached.
	PxeLeaseTime *uint32 `json:"pxe_lease_time,omitempty"`

	// Determines if the recycle leases feature is enabled or not. If you enabled
	// this feature, and then delete a DHCP range, the appliance stores active
	// leases from this range up to one week after the leases expires.
	RecycleLeases *bool `json:"recycle_leases,omitempty"`

	// The restart setting.
	RestartSetting *GridServicerestart `json:"restart_setting,omitempty"`

	// Indicates whether the DHCP server makes repeated attempts to send DDNS
	// updates to a DNS server.
	RetryDdnsUpdates *bool `json:"retry_ddns_updates,omitempty"`

	// The syslog facility is the location on the syslog server to which you want
	// to sort the syslog messages.
	SyslogFacility string `json:"syslog_facility,omitempty"`

	// The Grid-level TXT record handling value. This value specifies how DHCP
	// should treat the TXT records when performing DNS updates.
	TxtRecordHandling string `json:"txt_record_handling,omitempty"`

	// Controls whether the DHCP server updates DNS when a DHCP lease is renewed.
	UpdateDnsOnLeaseRenewal *bool `json:"update_dns_on_lease_renewal,omitempty"`

	// The valid lifetime for the Grid members.
	ValidLifetime *uint32 `json:"valid_lifetime,omitempty"`
}

func (GridDhcpproperties) ObjectType() string {
	return "grid:dhcpproperties"
}

func (obj GridDhcpproperties) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"disable_all_nac_filters", "grid"}
	}
	return obj.returnFields
}

// GridDns represents Infoblox object grid:dns.
// This object supports DNS service management and configuration such as
// time-to-live (TTL) settings, zone transfers, queries, root name servers,
// dynamic updates, sort lists, Transaction Signatures (TSIG) for DNS and
// others, all at the grid level. The service configurations of a grid are
// inherited by all members, zones, and networks unless you specifically
// override them for selected members, zones, and networks. For this reason, it
// is recommended that you configure services at the grid level before
// configuring member, zone and network services.
type GridDns struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// Add custom IP, MAC and DNS View name ENDS0 options to outgoing recursive
	// queries.
	AddClientIpMacOptions *bool `json:"add_client_ip_mac_options,omitempty"`

	// Determines if DDNS bulk host is allowed or not.
	AllowBulkhostDdns string `json:"allow_bulkhost_ddns,omitempty"`

	// Determines whether GSS-TSIG zone update is enabled for all Grid members.
	AllowGssTsigZoneUpdates *bool `json:"allow_gss_tsig_zone_updates,omitempty"`

	// Determines if queries from the specified IPv4 or IPv6 addresses and networks
	// are allowed or not. The appliance can also use Transaction Signature (TSIG)
	// keys to authenticate the queries.
	AllowQuery []*Addressac `json:"allow_query,omitempty"`

	// Determines if the responses to recursive queries are enabled or not.
	AllowRecursiveQuery *bool `json:"allow_recursive_query,omitempty"`

	// Determines if zone transfers from specified IPv4 or IPv6 addresses and
	// networks or transfers from hosts authenticated by Transaction signature
	// (TSIG) key are allowed or not.
	AllowTransfer []*Addressac `json:"allow_transfer,omitempty"`

	// Determines if dynamic updates from specified IPv4 or IPv6 addresses,
	// networks or from host authenticated by TSIG key are allowed or not.
	AllowUpdate []*Addressac `json:"allow_update,omitempty"`

	// Determines if the anonymization of captured DNS responses is enabled or
	// disabled.
	AnonymizeResponseLogging *bool `json:"anonymize_response_logging,omitempty"`

	// Mitigation settings for DNS attacks.
	AttackMitigation *GridAttackmitigation `json:"attack_mitigation,omitempty"`

	// The auto blackhole settings.
	AutoBlackhole *GridAutoblackhole `json:"auto_blackhole,omitempty"`

	// The BIND check names policy, which indicates the action the appliance takes
	// when it encounters host names that do not comply with the Strict Hostname
	// Checking policy. This method applies only if the host name restriction
	// policy is set to "Strict Hostname Checking".
	BindCheckNamesPolicy string `json:"bind_check_names_policy,omitempty"`

	// The value of the hostname directive for BIND.
	BindHostnameDirective string `json:"bind_hostname_directive,omitempty"`

	// The list of IPv4 or IPv6 addresses and networks from which DNS queries are
	// blocked.
	BlackholeList []*Addressac `json:"blackhole_list,omitempty"`

	// The action to perform when a domain name matches the pattern defined in a
	// rule that is specified by the blacklist ruleset.
	BlacklistAction string `json:"blacklist_action,omitempty"`

	// Determines if blacklist redirection queries are logged or not.
	BlacklistLogQuery *bool `json:"blacklist_log_query,omitempty"`

	// The IP addresses the appliance includes in the response it sends in place of
	// a blacklisted IP address.
	BlacklistRedirectAddresses []string `json:"blacklist_redirect_addresses,omitempty"`

	// The TTL value (in seconds) of the synthetic DNS responses that result from
	// blacklist redirection.
	BlacklistRedirectTtl *uint32 `json:"blacklist_redirect_ttl,omitempty"`

	// The DNS Ruleset object names assigned at the Grid level for blacklist
	// redirection.
	BlacklistRulesets []string `json:"blacklist_rulesets,omitempty"`

	// The list of bulk host name templates. There are four Infoblox predefined
	// bulk host name templates. Template Name Template Format "Four Octets"
	// -$1-$2-$3-$4 "Three Octets" -$2-$3-$4 "Two Octets" -$3-$4 "One Octet" -$4
	BulkHostNameTemplates []*Bulkhostnametemplate `json:"bulk_host_name_templates,omitempty"`

	// Determines if the capture of DNS queries for all domains is enabled or
	// disabled.
	CaptureDnsQueriesOnAllDomains *bool `json:"capture_dns_queries_on_all_domains,omitempty"`

	// Determines whether the application of BIND check-names for zone transfers
	// and DDNS updates are enabled.
	CheckNamesForDdnsAndZoneTransfer *bool `json:"check_names_for_ddns_and_zone_transfer,omitempty"`

	// The list of zone domain names that are allowed or forbidden for EDNS client
	// subnet (ECS) recursion.
	ClientSubnetDomains []*Clientsubnetdomain `json:"client_subnet_domains,omitempty"`

	// Default IPv4 Source Prefix-Length used when sending queries with EDNS client
	// subnet option.
	ClientSubnetIpv4PrefixLength *uint32 `json:"client_subnet_ipv4_prefix_length,omitempty"`

	// Default IPv6 Source Prefix-Length used when sending queries with EDNS client
	// subnet option.
	ClientSubnetIpv6PrefixLength *uint32 `json:"client_subnet_ipv6_prefix_length,omitempty"`

	// Copy custom IP, MAC and DNS View name ENDS0 options from incoming to
	// outgoing recursive queries.
	CopyClientIpMacOptions *bool `json:"copy_client_ip_mac_options,omitempty"`

	// The allowed IPs, from the zone transfer list, added to the also-notify
	// statement in the named.conf file.
	CopyXferToNotify *bool `json:"copy_xfer_to_notify,omitempty"`

	// The list of customized root nameserver(s). You can use Internet root name
	// servers or specify host names and IP addresses of custom root name servers.
	CustomRootNameServers []NameServer `json:"custom_root_name_servers,omitempty"`

	// Defines whether creation timestamp of RR should be updated ' when DDNS
	// update happens even if there is no change to ' the RR.
	DdnsForceCreationTimestampUpdate *bool `json:"ddns_force_creation_timestamp_update,omitempty"`

	// The DDNS Principal cluster group name.
	DdnsPrincipalGroup *string `json:"ddns_principal_group,omitempty"`

	// Determines if the DDNS principal track is enabled or disabled.
	DdnsPrincipalTracking *bool `json:"ddns_principal_tracking,omitempty"`

	// Determines if an option to restrict DDNS update request based on FQDN
	// patterns is enabled or disabled.
	DdnsRestrictPatterns *bool `json:"ddns_restrict_patterns,omitempty"`

	// The unordered list of restriction patterns for an option of to restrict DDNS
	// updates based on FQDN patterns.
	DdnsRestrictPatternsList []string `json:"ddns_restrict_patterns_list,omitempty"`

	// Determines if an option to restrict DDNS update request to protected
	// resource records is enabled or disabled.
	DdnsRestrictProtected *bool `json:"ddns_restrict_protected,omitempty"`

	// Determines if DDNS update request for principal other than target resource
	// record's principal is restricted.
	DdnsRestrictSecure *bool `json:"ddns_restrict_secure,omitempty"`

	// Determines if an option to restrict DDNS update request to resource records
	// which are marked as 'STATIC' is enabled or disabled.
	DdnsRestrictStatic *bool `json:"ddns_restrict_static,omitempty"`

	// Default bulk host name of a Grid DNS.
	DefaultBulkHostNameTemplate *string `json:"default_bulk_host_name_template,omitempty"`

	// The default TTL value of a Grid DNS object. This interval tells the
	// secondary how long the data can be cached.
	DefaultTtl *uint32 `json:"default_ttl,omitempty"`

	// Determines if the EDNS0 support for queries that require recursive
	// resolution on Grid members is enabled or not.
	DisableEdns *bool `json:"disable_edns,omitempty"`

	// The list of DNS64 synthesis groups associated with this Grid DNS object.
	Dns64Groups []string `json:"dns64_groups,omitempty"`

	// The minimum TTL value, in seconds, that a DNS record must have in order for
	// it to be cached by the DNS Cache Acceleration service. An integer from 1 to
	// 65000 that represents the TTL in seconds.
	DnsCacheAccelerationTtl *uint32 `json:"dns_cache_acceleration_ttl,omitempty"`

	// Determines if the anycast failure (BFD session down) is enabled on member
	// failure or not.
	DnsHealthCheckAnycastControl *bool `json:"dns_health_check_anycast_control,omitempty"`

	// The list of domain names for the DNS health check.
	DnsHealthCheckDomainList []string `json:"dns_health_check_domain_list,omitempty"`

	// The time interval (in seconds) for DNS health check.
	DnsHealthCheckInterval *uint32 `json:"dns_health_check_interval,omitempty"`

	// Determines if the recursive DNS health check is enabled or not.
	DnsHealthCheckRecursionFlag *bool `json:"dns_health_check_recursion_flag,omitempty"`

	// The number of DNS health check retries.
	DnsHealthCheckRetries *uint32 `json:"dns_health_check_retries,omitempty"`

	// The DNS health check timeout interval (in seconds).
	DnsHealthCheckTimeout *uint32 `json:"dns_health_check_timeout,omitempty"`

	// The time limit (in minutes) for the DNS query capture file.
	DnsQueryCaptureFileTimeLimit *uint32 `json:"dns_query_capture_file_time_limit,omitempty"`

	// Determines if the blacklist rules for DNSSEC-enabled clients are enabled or
	// not.
	DnssecBlacklistEnabled *bool `json:"dnssec_blacklist_enabled,omitempty"`

	// Determines if the DNS64 groups for DNSSEC-enabled clients are enabled or
	// not.
	DnssecDns64Enabled *bool `json:"dnssec_dns64_enabled,omitempty"`

	// Determines if the DNS security extension is enabled or not.
	DnssecEnabled *bool `json:"dnssec_enabled,omitempty"`

	// Determines when the DNS member accepts expired signatures.
	DnssecExpiredSignaturesEnabled *bool `json:"dnssec_expired_signatures_enabled,omitempty"`

	// This structure contains the DNSSEC key parameters for this zone.
	DnssecKeyParams *Dnsseckeyparams `json:"dnssec_key_params,omitempty"`

	// A list of zones for which the server does not perform DNSSEC validation.
	DnssecNegativeTrustAnchors []string `json:"dnssec_negative_trust_anchors,omitempty"`

	// Determines if the NXDOMAIN rules for DNSSEC-enabled clients are enabled or
	// not.
	DnssecNxdomainEnabled *bool `json:"dnssec_nxdomain_enabled,omitempty"`

	// Determines if the RPZ policies for DNSSEC-enabled clients are enabled or
	// not.
	DnssecRpzEnabled *bool `json:"dnssec_rpz_enabled,omitempty"`

	// The list of trusted keys for the DNSSEC feature.
	DnssecTrustedKeys []*Dnssectrustedkey `json:"dnssec_trusted_keys,omitempty"`

	// Determines if the DNS security validation is enabled or not.
	DnssecValidationEnabled *bool `json:"dnssec_validation_enabled,omitempty"`

	// The DNSTAP settings.
	DnstapSetting *Dnstapsetting `json:"dnstap_setting,omitempty"`

	// The list of domains for DNS query capture.
	DomainsToCaptureDnsQueries []string `json:"domains_to_capture_dns_queries,omitempty"`

	// Setting to control specific behavior for DTC DNS responses for incoming lbdn
	// matched queries.
	DtcDnsQueriesSpecificBehavior string `json:"dtc_dns_queries_specific_behavior,omitempty"`

	// DTC DNSSEC operation mode.
	DtcDnssecMode string `json:"dtc_dnssec_mode,omitempty"`

	// Determines whether to prefer the client address from the edns-client-subnet
	// option for DTC or not.
	DtcEdnsPreferClientSubnet *bool `json:"dtc_edns_prefer_client_subnet,omitempty"`

	// The scheduled backup configuration.
	DtcScheduledBackup *Scheduledbackup `json:"dtc_scheduled_backup,omitempty"`

	// The DTC topology extensible attribute definition list. When configuring a
	// DTC topology, users may configure classification as either "Geographic" or
	// "Extensible Attributes". Selecting extensible attributes will replace
	// supported Topology database labels (Continent, Country, Subdivision, City)
	// with the names of the selection EA types and provide values extracted from
	// DHCP Network Container, Network and Range objects with those extensible
	// attributes.
	DtcTopologyEaList []string `json:"dtc_topology_ea_list,omitempty"`

	// Advertises the EDNS0 buffer size to the upstream server. The value should be
	// between 512 and 4096 bytes. The recommended value is between 512 and 1220
	// bytes.
	EdnsUdpSize *uint32 `json:"edns_udp_size,omitempty"`

	// The email address of a Grid DNS object.
	Email *string `json:"email,omitempty"`

	// Determines if the blocking of DNS queries is enabled or not.
	EnableBlackhole *bool `json:"enable_blackhole,omitempty"`

	// Determines if a blacklist is enabled or not.
	EnableBlacklist *bool `json:"enable_blacklist,omitempty"`

	// Determines if the capture of DNS queries is enabled or disabled.
	EnableCaptureDnsQueries *bool `json:"enable_capture_dns_queries,omitempty"`

	// Determines if the capture of DNS responses is enabled or disabled.
	EnableCaptureDnsResponses *bool `json:"enable_capture_dns_responses,omitempty"`

	// Determines whether to enable forwarding EDNS client subnet options to
	// upstream servers.
	EnableClientSubnetForwarding *bool `json:"enable_client_subnet_forwarding,omitempty"`

	// Determines whether to enable adding EDNS client subnet options in recursive
	// resolution.
	EnableClientSubnetRecursive *bool `json:"enable_client_subnet_recursive,omitempty"`

	// Determines if the ability to automatically remove associated PTR records
	// while deleting A or AAAA records is enabled or not.
	EnableDeleteAssociatedPtr *bool `json:"enable_delete_associated_ptr,omitempty"`

	// Determines if the DNS64 support is enabled or not.
	EnableDns64 *bool `json:"enable_dns64,omitempty"`

	// Determines if the DNS health check is enabled or not.
	EnableDnsHealthCheck *bool `json:"enable_dns_health_check,omitempty"`

	// Determines whether the query messages need to be forwarded to DNSTAP or not.
	EnableDnstapQueries *bool `json:"enable_dnstap_queries,omitempty"`

	// Determines whether the response messages need to be forwarded to DNSTAP or
	// not.
	EnableDnstapResponses *bool `json:"enable_dnstap_responses,omitempty"`

	// Determines if excluding domain names from captured DNS queries and responses
	// is enabled or disabled.
	EnableExcludedDomainNames *bool `json:"enable_excluded_domain_names,omitempty"`

	// Determines if the fixed RRset order FQDN is enabled or not.
	EnableFixedRrsetOrderFqdns *bool `json:"enable_fixed_rrset_order_fqdns,omitempty"`

	// Determines whether Fault Tolerant Caching (FTC) is enabled.
	EnableFtc *bool `json:"enable_ftc,omitempty"`

	// Determines whether all appliances in the Grid are enabled to receive
	// GSS-TSIG authenticated updates from DNS clients.
	EnableGssTsig *bool `json:"enable_gss_tsig,omitempty"`

	// Determines if the host RRset order is enabled or not.
	EnableHostRrsetOrder *bool `json:"enable_host_rrset_order,omitempty"`

	// Determines whether Hardware Security Modules (HSMs) are enabled for key
	// generation and signing. Note, that you must configure the HSM group with at
	// least one enabled HSM.
	EnableHsmSigning *bool `json:"enable_hsm_signing,omitempty"`

	// Determines if the notify source port at the Grid Level is enabled or not.
	EnableNotifySourcePort *bool `json:"enable_notify_source_port,omitempty"`

	// Determines if the DNS query rewrite is enabled or not.
	EnableQueryRewrite *bool `json:"enable_query_rewrite,omitempty"`

	// Determines if the query source port at the Grid Level is enabled or not.
	EnableQuerySourcePort *bool `json:"enable_query_source_port,omitempty"`

	// The list of domains that are excluded from DNS query and response capture.
	ExcludedDomainNames []string `json:"excluded_domain_names,omitempty"`

	// The expiration time of a Grid DNS object. If the secondary DNS server fails
	// to contact the primary server for the specified interval, the secondary
	// server stops giving out answers about the zone because the zone data is too
	// old to be useful.
	ExpireAfter *uint32 `json:"expire_after,omitempty"`

	// The DNS capture file transfer settings.Include the specified parameter to
	// set the attribute value. Omit the parameter to retrieve the attribute value.
	FileTransferSetting *Filetransfersetting `json:"file_transfer_setting,omitempty"`

	// The type of AAAA filtering for this member DNS object.
	FilterAaaa string `json:"filter_aaaa,omitempty"`

	// The list of IPv4 addresses and networks from which queries are received.
	// AAAA filtering is applied to these addresses.
	FilterAaaaList []*Addressac `json:"filter_aaaa_list,omitempty"`

	// The fixed RRset order FQDN. If this field does not contain an empty value,
	// the appliance will automatically set the enable_fixed_rrset_order_fqdns
	// field to 'true', unless the same request sets the enable field to 'false'.
	FixedRrsetOrderFqdns []*GridDnsFixedrrsetorderfqdn `json:"fixed_rrset_order_fqdns,omitempty"`

	// Determines if member sends queries to forwarders only. When the value is
	// "true", the member sends queries to forwarders only, and not to other
	// internal or Internet root servers.
	ForwardOnly *bool `json:"forward_only,omitempty"`

	// Determines if secondary servers is allowed to forward updates to the DNS
	// server or not.
	ForwardUpdates *bool `json:"forward_updates,omitempty"`

	// The forwarders for the member. A forwarder is essentially a name server to
	// which other name servers first send all of their off-site queries. The
	// forwarder builds up a cache of information, avoiding the need for the other
	// name servers to send queries off-site.
	Forwarders []string `json:"forwarders,omitempty"`

	// The timeout interval (in seconds) after which the expired Fault Tolerant
	// Caching (FTC)record is stale and no longer valid.
	FtcExpiredRecordTimeout *uint32 `json:"ftc_expired_record_timeout,omitempty"`

	// The TTL value (in seconds) of the expired Fault Tolerant Caching (FTC)
	// record in DNS responses.
	FtcExpiredRecordTtl *uint32 `json:"ftc_expired_record_ttl,omitempty"`

	// Flag for taking EA values from IPAM Hosts into consideration for the DTC
	// topology EA database.
	GenEadbFromHosts *bool `json:"gen_eadb_from_hosts,omitempty"`

	// Flag for taking EA values from IPAM Network Containers into consideration
	// for the DTC topology EA database.
	GenEadbFromNetworkContainers *bool `json:"gen_eadb_from_network_containers,omitempty"`

	// Flag for taking EA values from IPAM Network into consideration for the DTC
	// topology EA database.
	GenEadbFromNetworks *bool `json:"gen_eadb_from_networks,omitempty"`

	// Flag for taking EA values from IPAM Ranges into consideration for the DTC
	// topology EA database.
	GenEadbFromRanges *bool `json:"gen_eadb_from_ranges,omitempty"`

	// The list of GSS-TSIG keys for a Grid DNS object.
	GssTsigKeys []*Kerberoskey `json:"gss_tsig_keys,omitempty"`

	// The number of seconds to cache lame delegations or lame servers.
	LameTtl *uint32 `json:"lame_ttl,omitempty"`

	// Determines last queried ACL for the specified IPv4 or IPv6 addresses and
	// networks in scavenging settings.
	LastQueriedAcl []*Addressac `json:"last_queried_acl,omitempty"`

	// The logging categories.
	LoggingCategories *GridLoggingcategories `json:"logging_categories,omitempty"`

	// The maximum time (in seconds) for which the server will cache positive
	// answers.
	MaxCacheTtl *uint32 `json:"max_cache_ttl,omitempty"`

	// The maximum time (in seconds) a DNS response can be stored in the hardware
	// acceleration cache. Valid values are unsigned integer between 60 and 86400,
	// inclusive.
	MaxCachedLifetime *uint32 `json:"max_cached_lifetime,omitempty"`

	// The maximum time (in seconds) for which the server will cache negative
	// (NXDOMAIN) responses. The maximum allowed value is 604800.
	MaxNcacheTtl *uint32 `json:"max_ncache_ttl,omitempty"`

	// The value is used by authoritative DNS servers to never send DNS responses
	// larger than the configured value. The value should be between 512 and 4096
	// bytes. The recommended value is between 512 and 1220 bytes.
	MaxUdpSize *uint32 `json:"max_udp_size,omitempty"`

	// Determines if Grid members that are authoritative secondary servers are
	// allowed to send notification messages to external name servers, if the Grid
	// member that is primary for a zone fails or loses connectivity.
	MemberSecondaryNotify *bool `json:"member_secondary_notify,omitempty"`

	// The negative TTL value of a Grid DNS object. This interval tells the
	// secondary how long data can be cached for "Does Not Respond" responses.
	NegativeTtl *uint32 `json:"negative_ttl,omitempty"`

	// Specifies with how many seconds of delay the notify messages are sent to
	// secondaries.
	NotifyDelay *uint32 `json:"notify_delay,omitempty"`

	// The source port for notify messages. When requesting zone transfers from the
	// primary server, some secondary DNS servers use the source port number (the
	// primary server used to send the notify message) as the destination port
	// number in the zone transfer request. Valid values are between 1 and 63999.
	// The default is picked by BIND.
	NotifySourcePort *uint32 `json:"notify_source_port,omitempty"`

	// The default nameserver group.
	NsgroupDefault *string `json:"nsgroup_default,omitempty"`

	// A name server group is a collection of one primary DNS server and one or
	// more secondary DNS servers.
	Nsgroups []string `json:"nsgroups,omitempty"`

	// Determines if NXDOMAIN redirection queries are logged or not.
	NxdomainLogQuery *bool `json:"nxdomain_log_query,omitempty"`

	// Determines if NXDOMAIN redirection is enabled or not.
	NxdomainRedirect *bool `json:"nxdomain_redirect,omitempty"`

	// The list of IPv4 NXDOMAIN redirection addresses.
	NxdomainRedirectAddresses []string `json:"nxdomain_redirect_addresses,omitempty"`

	// The list of IPv6 NXDOMAIN redirection addresses.
	NxdomainRedirectAddressesV6 []string `json:"nxdomain_redirect_addresses_v6,omitempty"`

	// The TTL value (in seconds) of synthetic DNS responses that result from
	// NXDOMAIN redirection.
	NxdomainRedirectTtl *uint32 `json:"nxdomain_redirect_ttl,omitempty"`

	// The Ruleset object names assigned at the Grid level for NXDOMAIN
	// redirection.
	NxdomainRulesets []string `json:"nxdomain_rulesets,omitempty"`

	// Determines if the host RRset order on secondaries is preserved or not.
	PreserveHostRrsetOrderOnSecondaries *bool `json:"preserve_host_rrset_order_on_secondaries,omitempty"`

	// The list of record name policies.
	ProtocolRecordNamePolicies []*Recordnamepolicy `json:"protocol_record_name_policies,omitempty"`

	// The list of domain names that trigger DNS query rewrite.
	QueryRewriteDomainNames []string `json:"query_rewrite_domain_names,omitempty"`

	// The domain name prefix for DNS query rewrite.
	QueryRewritePrefix *string `json:"query_rewrite_prefix,omitempty"`

	// The source port for queries. Specifying a source port number for recursive
	// queries ensures that a firewall will allow the response. Valid values are
	// between 1 and 63999. The default is picked by BIND.
	QuerySourcePort *uint32 `json:"query_source_port,omitempty"`

	// The list of IPv4 or IPv6 addresses, networks or hosts authenticated by
	// Transaction signature (TSIG) key from which recursive queries are allowed or
	// denied.
	RecursiveQueryList []*Addressac `json:"recursive_query_list,omitempty"`

	// The refresh time. This interval tells the secondary how often to send a
	// message to the primary for a zone to check that its data is current, and
	// retrieve fresh data if it is not.
	RefreshTimer *uint32 `json:"refresh_timer,omitempty"`

	// The recursive query timeout for the member.
	ResolverQueryTimeout *uint32 `json:"resolver_query_timeout,omitempty"`

	// The response rate limiting settings for the member.
	ResponseRateLimiting *GridResponseratelimiting `json:"response_rate_limiting,omitempty"`

	// The restart setting.
	RestartSetting *GridServicerestart `json:"restart_setting,omitempty"`

	// The retry time. This interval tells the secondary how long to wait before
	// attempting to recontact the primary after a connection failure occurs
	// between the two servers.
	RetryTimer *uint32 `json:"retry_timer,omitempty"`

	// Determines the type of root name servers.
	RootNameServerType string `json:"root_name_server_type,omitempty"`

	// Determines if NSDNAME and NSIP resource records from RPZ feeds are enabled
	// or not.
	RpzDisableNsdnameNsip *bool `json:"rpz_disable_nsdname_nsip,omitempty"`

	// Enables the appliance to ignore RPZ-IP triggers with prefix lengths less
	// than the specified minimum prefix length.
	RpzDropIpRuleEnabled *bool `json:"rpz_drop_ip_rule_enabled,omitempty"`

	// The minimum prefix length for IPv4 RPZ-IP triggers. The appliance ignores
	// RPZ-IP triggers with prefix lengths less than the specified minimum IPv4
	// prefix length.
	RpzDropIpRuleMinPrefixLengthIpv4 *uint32 `json:"rpz_drop_ip_rule_min_prefix_length_ipv4,omitempty"`

	// The minimum prefix length for IPv6 RPZ-IP triggers. The appliance ignores
	// RPZ-IP triggers with prefix lengths less than the specified minimum IPv6
	// prefix length.
	RpzDropIpRuleMinPrefixLengthIpv6 *uint32 `json:"rpz_drop_ip_rule_min_prefix_length_ipv6,omitempty"`

	// Determines if recursive RPZ lookups are enabled.
	RpzQnameWaitRecurse *bool `json:"rpz_qname_wait_recurse,omitempty"`

	// The Grid level scavenging settings.
	ScavengingSettings *SettingScavenging `json:"scavenging_settings,omitempty"`

	// The number of maximum concurrent SOA queries per second. Valid values are
	// unsigned integer between 20 and 1000, inclusive.
	SerialQueryRate *uint32 `json:"serial_query_rate,omitempty"`

	// The value of the server-id directive for BIND and Unbound DNS.
	ServerIdDirective string `json:"server_id_directive,omitempty"`

	// A sort list determines the order of addresses in responses made to DNS
	// queries.
	Sortlist []*Sortlist `json:"sortlist,omitempty"`

	// Determines if the storage of query capture reports on the appliance is
	// enabled or disabled.
	StoreLocally *bool `json:"store_locally,omitempty"`

	// The syslog facility. This is the location on the syslog server to which you
	// want to sort the DNS logging messages.
	SyslogFacility string `json:"syslog_facility,omitempty"`

	// The list of excluded DNS servers during zone transfers.
	TransferExcludedServers []string `json:"transfer_excluded_servers,omitempty"`

	// The BIND format for a zone transfer. This provides tracking capabilities for
	// single or multiple transfers and their associated servers.
	TransferFormat string `json:"transfer_format,omitempty"`

	// The number of maximum concurrent transfers for the Grid. Valid values are
	// unsigned integer between 10 and 10000, inclusive.
	TransfersIn *uint32 `json:"transfers_in,omitempty"`

	// The number of maximum outbound concurrent zone transfers. Valid values are
	// unsigned integer between 10 and 10000, inclusive.
	TransfersOut *uint32 `json:"transfers_out,omitempty"`

	// The number of maximum concurrent transfers per member. Valid values are
	// unsigned integer between 2 and 10000, inclusive.
	TransfersPerNs *uint32 `json:"transfers_per_ns,omitempty"`

	// Determines if the double confirmation during zone deletion is enabled or
	// not.
	ZoneDeletionDoubleConfirm *bool `json:"zone_deletion_double_confirm,omitempty"`
}

func (GridDns) ObjectType() string {
	return "grid:dns"
}

func (obj GridDns) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{}
	}
	return obj.returnFields
}

// GridFiledistribution represents Infoblox object grid:filedistribution.
// The Grid file distribution object represents the file distribution storage
// limit configuration and global file distribution statistics.
type GridFiledistribution struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// Determines whether the uploads to Grid members are allowed.
	AllowUploads *bool `json:"allow_uploads,omitempty"`

	// Determines whether to include distributed files in the backup.
	BackupStorage *bool `json:"backup_storage,omitempty"`

	// The value is the percentage of the allocated TFTP storage space that is
	// used, expressed in tenth of a percent. Valid values are from 0 to 1000.
	CurrentUsage uint32 `json:"current_usage,omitempty"`

	// Determines whether the FTP anonymous login is enabled.
	EnableAnonymousFtp *bool `json:"enable_anonymous_ftp,omitempty"`

	// The Grid file distribution global status.
	GlobalStatus string `json:"global_status,omitempty"`

	// The Grid name.
	Name string `json:"name,omitempty"`

	// Maximum storage in megabytes allowed on the Grid. The maximum storage space
	// allowed for all file distribution services on a Grid is equal to the storage
	// space allowed to the Grid member with the smallest amount of space allowed.
	StorageLimit *uint32 `json:"storage_limit,omitempty"`
}

func (GridFiledistribution) ObjectType() string {
	return "grid:filedistribution"
}

func (obj GridFiledistribution) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"allow_uploads", "current_usage", "global_status", "name", "storage_limit"}
	}
	return obj.returnFields
}

// GridLicensePool represents Infoblox object grid:license_pool.
// This object represents the Grid license pool.
type GridLicensePool struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The number of dynamic licenses allocated to vNIOS appliances.
	Assigned uint32 `json:"assigned,omitempty"`

	// The license expiration status.
	ExpirationStatus string `json:"expiration_status,omitempty"`

	// The expiration timestamp of the license.
	ExpiryDate *UnixTime `json:"expiry_date,omitempty"`

	// The total number of dynamic licenses allowed for this license pool.
	Installed uint32 `json:"installed,omitempty"`

	// The license string for the license pool.
	Key string `json:"key,omitempty"`

	// The limitation of dynamic license that can be allocated from the license
	// pool.
	Limit string `json:"limit,omitempty"`

	// The license limit context.
	LimitContext string `json:"limit_context,omitempty"`

	// The supported vNIOS virtual appliance model.
	Model string `json:"model,omitempty"`

	// The license pool subpools.
	Subpools []*GridLicensesubpool `json:"subpools,omitempty"`

	// The total number of temporary dynamic licenses allocated to vNIOS
	// appliances.
	TempAssigned uint32 `json:"temp_assigned,omitempty"`

	// The license type.
	Type string `json:"type,omitempty"`
}

func (GridLicensePool) ObjectType() string {
	return "grid:license_pool"
}

func (obj GridLicensePool) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"type"}
	}
	return obj.returnFields
}

// GridLicensePoolContainer represents Infoblox object grid:license_pool_container.
// This object represents the Grid license pool container.
type GridLicensePoolContainer struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The timestamp when the last pool licenses were updated.
	LastEntitlementUpdate *UnixTime `json:"last_entitlement_update,omitempty"`

	// The world-wide unique ID for the license pool container.
	LpcUid string `json:"lpc_uid,omitempty"`
}

func (GridLicensePoolContainer) ObjectType() string {
	return "grid:license_pool_container"
}

func (obj GridLicensePoolContainer) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{}
	}
	return obj.returnFields
}

// GridMaxminddbinfo represents Infoblox object grid:maxminddbinfo.
// The information about Topology DB.
type GridMaxminddbinfo struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The major version of DB binary format.
	BinaryMajorVersion uint32 `json:"binary_major_version,omitempty"`

	// The minor version of DB binary format.
	BinaryMinorVersion uint32 `json:"binary_minor_version,omitempty"`

	// The time at which the DB was built.
	BuildTime *UnixTime `json:"build_time,omitempty"`

	// The structure of data records ("GeoLite2-Country", GeoLite2-City", etc.).
	DatabaseType string `json:"database_type,omitempty"`

	// The time at which the current Topology DB was deployed.
	DeploymentTime *UnixTime `json:"deployment_time,omitempty"`

	// The member for testing the connection.
	Member string `json:"member,omitempty"`

	// The topology type.
	TopologyType string `json:"topology_type,omitempty"`
}

func (GridMaxminddbinfo) ObjectType() string {
	return "grid:maxminddbinfo"
}

func (obj GridMaxminddbinfo) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"binary_major_version", "binary_minor_version", "build_time", "database_type", "deployment_time", "member", "topology_type"}
	}
	return obj.returnFields
}

// GridMemberCloudapi represents Infoblox object grid:member:cloudapi.
// Class that represents member Cloud configuration settings.
type GridMemberCloudapi struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// Defines which administrators are allowed to perform Cloud API request on the
	// Grid Member: no administrators (NONE), any administrators (ALL) or
	// administrators in the ACL list (LIST). Default is ALL.
	AllowApiAdmins string `json:"allow_api_admins,omitempty"`

	// List of administrators allowed to perform Cloud Platform API requests on
	// that member.
	AllowedApiAdmins []*GridCloudapiUser `json:"allowed_api_admins,omitempty"`

	// Controls whether the Cloud API service runs on the member or not.
	EnableService *bool `json:"enable_service,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// Structure containing all the information related to Gateway configuration
	// for the member
	GatewayConfig *GridCloudapiGatewayConfig `json:"gateway_config,omitempty"`

	// The related Grid Member.
	Member *Dhcpmember `json:"member,omitempty"`

	// Status of Cloud API service on the member.
	Status string `json:"status,omitempty"`
}

func (GridMemberCloudapi) ObjectType() string {
	return "grid:member:cloudapi"
}

func (obj GridMemberCloudapi) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"allow_api_admins", "allowed_api_admins", "enable_service", "member", "status"}
	}
	return obj.returnFields
}

// GridServicerestartGroup represents Infoblox object grid:servicerestart:group.
// The Grid Service Restart Group object provides the following information
// about the restart: applicable services, members, restart order, and
// periodicity.
type GridServicerestartGroup struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// Comment for the Restart Group; maximum 256 characters.
	Comment *string `json:"comment,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// Determines if this Restart Group is the default group.
	IsDefault bool `json:"is_default,omitempty"`

	// The timestamp when the status of the latest request has changed.
	LastUpdatedTime *UnixTime `json:"last_updated_time,omitempty"`

	// The list of members belonging to the group.
	Members []string `json:"members,omitempty"`

	// The default restart method for this Restart Group.
	Mode string `json:"mode,omitempty"`

	// The name of this Restart Group.
	Name *string `json:"name,omitempty"`

	// The order to restart.
	Position uint32 `json:"position,omitempty"`

	// The recurring schedule for restart of a group.
	RecurringSchedule *GridServicerestartGroupSchedule `json:"recurring_schedule,omitempty"`

	// The list of requests associated with a restart group.
	Requests []*GridServicerestartRequest `json:"requests,omitempty"`

	// The applicable service for this Restart Group.
	Service string `json:"service,omitempty"`

	// The restart status for a restart group.
	Status string `json:"status,omitempty"`
}

func (GridServicerestartGroup) ObjectType() string {
	return "grid:servicerestart:group"
}

func (obj GridServicerestartGroup) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"comment", "name", "service"}
	}
	return obj.returnFields
}

// GridServicerestartGroupOrder represents Infoblox object grid:servicerestart:group:order.
// The Grid Service Restart Group Order Setting is used to set the restart
// order for particular services and members.
type GridServicerestartGroupOrder struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The ordered list of the Service Restart Group.
	Groups []string `json:"groups,omitempty"`
}

func (GridServicerestartGroupOrder) ObjectType() string {
	return "grid:servicerestart:group:order"
}

func (obj GridServicerestartGroupOrder) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{}
	}
	return obj.returnFields
}

// GridServicerestartRequest represents Infoblox object grid:servicerestart:request.
// The Restart Request object provides information and statistics about the
// service restart routine for the Service Restart Group.
type GridServicerestartRequest struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The error message if restart has failed.
	Error string `json:"error,omitempty"`

	// Indicates if this is a force restart.
	Forced bool `json:"forced,omitempty"`

	// The name of the Restart Group associated with the request.
	Group string `json:"group,omitempty"`

	// The timestamp when the status of the request has changed.
	LastUpdatedTime *UnixTime `json:"last_updated_time,omitempty"`

	// The member to restart.
	Member string `json:"member,omitempty"`

	// Indicates if restart is needed.
	Needed string `json:"needed,omitempty"`

	// The order to restart.
	Order int `json:"order,omitempty"`

	// The result of the restart operation.
	Result string `json:"result,omitempty"`

	// The service to restart.
	Service string `json:"service,omitempty"`

	// The state of the request.
	State string `json:"state,omitempty"`
}

func (GridServicerestartRequest) ObjectType() string {
	return "grid:servicerestart:request"
}

func (obj GridServicerestartRequest) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"error", "group", "result", "state"}
	}
	return obj.returnFields
}

// GridServicerestartRequestChangedobject represents Infoblox object grid:servicerestart:request:changedobject.
// The Grid service restart request changed object provides information about
// changes that are waiting for the restart.
type GridServicerestartRequestChangedobject struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The operation on the changed object.
	Action string `json:"action,omitempty"`

	// The list of changed properties in the object.
	ChangedProperties []string `json:"changed_properties,omitempty"`

	// The time when the object was changed.
	ChangedTime *UnixTime `json:"changed_time,omitempty"`

	// The name of the changed object.
	ObjectName string `json:"object_name,omitempty"`

	// The type of the changed object. This is undefined if the object is not
	// supported.
	ObjectTypeField string `json:"object_type,omitempty"`

	// The name of the user who changed the object properties.
	UserName string `json:"user_name,omitempty"`
}

func (GridServicerestartRequestChangedobject) ObjectType() string {
	return "grid:servicerestart:request:changedobject"
}

func (obj GridServicerestartRequestChangedobject) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"action", "changed_properties", "changed_time", "object_name", "object_type", "user_name"}
	}
	return obj.returnFields
}

// GridServicerestartStatus represents Infoblox object grid:servicerestart:status.
// The Restart Status object provides information and statistics about service
// restart routine for the Grid or Service Restart Group.
type GridServicerestartStatus struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The number of failed requests.
	Failures uint32 `json:"failures,omitempty"`

	// The number of finished requests.
	Finished uint32 `json:"finished,omitempty"`

	// The type of grouping.
	Grouped string `json:"grouped,omitempty"`

	// The number of created yet unprocessed requests for restart.
	NeededRestart uint32 `json:"needed_restart,omitempty"`

	// The number of requests that did not require a restart.
	NoRestart uint32 `json:"no_restart,omitempty"`

	// A reference to the grid or grid:servicerestart:group object associated with
	// the request.
	Parent string `json:"parent,omitempty"`

	// The number of requests that are pending a restart.
	Pending uint32 `json:"pending,omitempty"`

	// The number of forced or needed requests pending for restart.
	PendingRestart uint32 `json:"pending_restart,omitempty"`

	// The number of not forced and not needed requests pending for restart.
	Processing uint32 `json:"processing,omitempty"`

	// The number of service restarts for corresponding members.
	Restarting uint32 `json:"restarting,omitempty"`

	// The number of requests associated with successful restarts.
	Success uint32 `json:"success,omitempty"`

	// The number of timeout requests.
	Timeouts uint32 `json:"timeouts,omitempty"`
}

func (GridServicerestartStatus) ObjectType() string {
	return "grid:servicerestart:status"
}

func (obj GridServicerestartStatus) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"failures", "finished", "grouped", "needed_restart", "no_restart", "parent", "pending", "pending_restart", "processing", "restarting", "success", "timeouts"}
	}
	return obj.returnFields
}

// GridThreatanalytics represents Infoblox object grid:threatanalytics.
// To mitigate DNS data exfiltration, Infoblox DNS threat analytics employs
// analytics algorithms that analyze incoming DNS queries and responses to
// detect DNS tunneling traffic.
type GridThreatanalytics struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// Disable domain collapsing at grid level
	ConfigureDomainCollapsing *bool `json:"configure_domain_collapsing,omitempty"`

	// The current threat analytics module set.
	CurrentModuleset string `json:"current_moduleset,omitempty"`

	// The Grid whitelist.
	CurrentWhitelist string `json:"current_whitelist,omitempty"`

	// The list of response policy zones for DNS tunnelling requests.
	DnsTunnelBlackListRpzZones []*ZoneRp `json:"dns_tunnel_black_list_rpz_zones,omitempty"`

	// Level of domain collapsing
	DomainCollapsingLevel *uint32 `json:"domain_collapsing_level,omitempty"`

	// Determines whether the automatic threat analytics module set download is
	// enabled.
	EnableAutoDownload *bool `json:"enable_auto_download,omitempty"`

	// Determines whether the scheduled download of the threat analytics module set
	// is enabled.
	EnableScheduledDownload *bool `json:"enable_scheduled_download,omitempty"`

	// Indicates whether auto download service is enabled
	EnableWhitelistAutoDownload *bool `json:"enable_whitelist_auto_download,omitempty"`

	// Indicates whether the custom scheduled settings for auto download is
	// enabled. If false then default frequency is once per 24 hours
	EnableWhitelistScheduledDownload *bool `json:"enable_whitelist_scheduled_download,omitempty"`

	// The last time when the threat analytics module set was checked for the
	// update.
	LastCheckedForUpdate *UnixTime `json:"last_checked_for_update,omitempty"`

	// Timestamp of last checked whitelist
	LastCheckedForWhitelistUpdate *UnixTime `json:"last_checked_for_whitelist_update,omitempty"`

	// The last update time for the threat analytics module set.
	LastModuleUpdateTime *UnixTime `json:"last_module_update_time,omitempty"`

	// The version number of the last updated threat analytics module set.
	LastModuleUpdateVersion string `json:"last_module_update_version,omitempty"`

	// The last update time for the threat analytics whitelist.
	LastWhitelistUpdateTime *UnixTime `json:"last_whitelist_update_time,omitempty"`

	// The version number of the last updated threat analytics whitelist.
	LastWhitelistUpdateVersion string `json:"last_whitelist_update_version,omitempty"`

	// The update policy for the threat analytics module set.
	ModuleUpdatePolicy string `json:"module_update_policy,omitempty"`

	// The Grid name.
	Name string `json:"name,omitempty"`

	// The schedule settings for the threat analytics module set download.
	ScheduledDownload *SettingSchedule `json:"scheduled_download,omitempty"`

	// Schedule setting for automatic whitelist update run
	ScheduledWhitelistDownload *SettingSchedule `json:"scheduled_whitelist_download,omitempty"`

	// whitelist update policy (manual or automatic)
	WhitelistUpdatePolicy string `json:"whitelist_update_policy,omitempty"`
}

func (GridThreatanalytics) ObjectType() string {
	return "grid:threatanalytics"
}

func (obj GridThreatanalytics) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"enable_auto_download", "enable_scheduled_download", "module_update_policy", "name"}
	}
	return obj.returnFields
}

// GridThreatprotection represents Infoblox object grid:threatprotection.
// The Grid threat protection settings.
type GridThreatprotection struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The current Grid ruleset.
	CurrentRuleset *string `json:"current_ruleset,omitempty"`

	// Determines if multiple BIND responses via TCP connection are disabled.
	DisableMultipleDnsTcpRequest *bool `json:"disable_multiple_dns_tcp_request,omitempty"`

	// Determines if DNS responses are sent from acceleration cache before applying
	// Threat Protection rules. Recommended for better performance when using DNS
	// Cache Acceleration.
	EnableAccelRespBeforeThreatProtection *bool `json:"enable_accel_resp_before_threat_protection,omitempty"`

	// Determines if auto download service is enabled.
	EnableAutoDownload *bool `json:"enable_auto_download,omitempty"`

	// Determines if NAT (Network Address Translation) mapping for threat
	// protection is enabled or not.
	EnableNatRules *bool `json:"enable_nat_rules,omitempty"`

	// Determines if scheduled download is enabled. The default frequency is once
	// in every 24 hours if it is disabled.
	EnableScheduledDownload *bool `json:"enable_scheduled_download,omitempty"`

	// The number of events logged per second per rule.
	EventsPerSecondPerRule *uint32 `json:"events_per_second_per_rule,omitempty"`

	// The Grid name.
	GridName string `json:"grid_name,omitempty"`

	// The time when the Grid last checked for updates.
	LastCheckedForUpdate *UnixTime `json:"last_checked_for_update,omitempty"`

	// The last rule update timestamp.
	LastRuleUpdateTimestamp *UnixTime `json:"last_rule_update_timestamp,omitempty"`

	// The version of last rule update.
	LastRuleUpdateVersion string `json:"last_rule_update_version,omitempty"`

	// The list of NAT mapping rules for threat protection.
	NatRules []*ThreatprotectionNatrule `json:"nat_rules,omitempty"`

	// Outbound settings for ATP events.
	OutboundSettings *SettingAtpoutbound `json:"outbound_settings,omitempty"`

	// The update rule policy.
	RuleUpdatePolicy string `json:"rule_update_policy,omitempty"`

	// The schedule setting for automatic rule update.
	ScheduledDownload *SettingSchedule `json:"scheduled_download,omitempty"`
}

func (GridThreatprotection) ObjectType() string {
	return "grid:threatprotection"
}

func (obj GridThreatprotection) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"grid_name"}
	}
	return obj.returnFields
}

// GridX509certificate represents Infoblox object grid:x509certificate.
// In the X.509 system, a certification authority issues a certificate binding
// a public key to a particular distinguished name in the X.500 tradition, or
// to an alternative name such as an e-mail address or a DNS entry.
type GridX509certificate struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// Certificate issuer.
	Issuer string `json:"issuer,omitempty"`

	// X509Certificate serial number.
	Serial string `json:"serial,omitempty"`

	// A Distinguished Name that is made of multiple relative distinguished names
	// (RDNs).
	Subject string `json:"subject,omitempty"`

	// Certificate expiry date.
	ValidNotAfter *UnixTime `json:"valid_not_after,omitempty"`

	// Certificate validity start date.
	ValidNotBefore *UnixTime `json:"valid_not_before,omitempty"`
}

func (GridX509certificate) ObjectType() string {
	return "grid:x509certificate"
}

func (obj GridX509certificate) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"issuer", "serial", "subject"}
	}
	return obj.returnFields
}

// Hostnamerewritepolicy represents Infoblox object hostnamerewritepolicy.
// A hostname rewrite policy object represents the set of valid characters as
// well as replacement characters for names that do not conform to the policy.
type Hostnamerewritepolicy struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// True if the policy is the Grid default.
	IsDefault bool `json:"is_default,omitempty"`

	// The name of a hostname rewrite policy object.
	Name *string `json:"name,omitempty"`

	// Determines whether the policy is a predefined one.
	PreDefined bool `json:"pre_defined,omitempty"`

	// The replacement character for symbols in hostnames that do not conform to
	// the hostname policy.
	ReplacementCharacter *string `json:"replacement_character,omitempty"`

	// The set of valid characters represented in string format.
	ValidCharacters *string `json:"valid_characters,omitempty"`
}

func (Hostnamerewritepolicy) ObjectType() string {
	return "hostnamerewritepolicy"
}

func (obj Hostnamerewritepolicy) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"name", "replacement_character", "valid_characters"}
	}
	return obj.returnFields
}

// HsmAllgroups represents Infoblox object hsm:allgroups.
// The All Hardware Security Module (HSM) groups object is used to retrieve all
// HSM groups configured on the appliance.
type HsmAllgroups struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The list of HSM groups configured on the appliance.
	Groups []*HsmSafenetgroup `json:"groups,omitempty"`
}

func (HsmAllgroups) ObjectType() string {
	return "hsm:allgroups"
}

func (obj HsmAllgroups) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"groups"}
	}
	return obj.returnFields
}

// HsmSafenetgroup represents Infoblox object hsm:safenetgroup.
// You can integrate a Grid with a third-party, network-attached Hardware
// Security Modules (HSMs) for secure private key storage and generation, and
// zone-signing offloading. Infoblox appliances support integration with either
// SafeNet HSMs or Thales HSMs. When using a network-attached HSM, you can
// provide tight physical access control, allowing only selected security
// personnel to physically access the HSM that stores the DNSSEC keys.
type HsmSafenetgroup struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The HSM SafeNet group comment.
	Comment *string `json:"comment,omitempty"`

	// The HSM SafeNet group serial number.
	GroupSn string `json:"group_sn,omitempty"`

	// The list of HSM SafeNet devices.
	HsmSafenet []*HsmSafenet `json:"hsm_safenet,omitempty"`

	// The HSM SafeNet version.
	HsmVersion string `json:"hsm_version,omitempty"`

	// The HSM SafeNet group name.
	Name *string `json:"name,omitempty"`

	// The pass phrase used to unlock the HSM SafeNet keystore.
	PassPhrase *string `json:"pass_phrase,omitempty"`

	// The status of all HSM SafeNet devices in the group.
	Status string `json:"status,omitempty"`
}

func (HsmSafenetgroup) ObjectType() string {
	return "hsm:safenetgroup"
}

func (obj HsmSafenetgroup) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"comment", "hsm_version", "name"}
	}
	return obj.returnFields
}

// HsmThalesgroup represents Infoblox object hsm:thalesgroup.
// You can integrate a Grid with a third-party, network-attached Hardware
// Security Modules (HSMs) for secure private key storage and generation, and
// zone-signing offloading. Infoblox appliances support integration with either
// SafeNet HSMs or Thales HSMs. When using a network-attached HSM, you can
// provide tight physical access control, allowing only selected security
// personnel to physically access the HSM that stores the DNSSEC keys.
type HsmThalesgroup struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The Thales HSM softcard name.
	CardName *string `json:"card_name,omitempty"`

	// The Thales HSM group comment.
	Comment *string `json:"comment,omitempty"`

	// The remote file server (RFS) IPv4 Address.
	KeyServerIp *string `json:"key_server_ip,omitempty"`

	// The remote file server (RFS) port.
	KeyServerPort *uint32 `json:"key_server_port,omitempty"`

	// The Thales HSM group name.
	Name *string `json:"name,omitempty"`

	// The password phrase used to unlock the Thales HSM keystore.
	PassPhrase *string `json:"pass_phrase,omitempty"`

	// The level of protection that the HSM group uses for the DNSSEC key data.
	Protection string `json:"protection,omitempty"`

	// The status of all Thales HSM devices in the group.
	Status string `json:"status,omitempty"`

	// The list of Thales HSM devices.
	ThalesHsm []*HsmThales `json:"thales_hsm,omitempty"`
}

func (HsmThalesgroup) ObjectType() string {
	return "hsm:thalesgroup"
}

func (obj HsmThalesgroup) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"comment", "key_server_ip", "name"}
	}
	return obj.returnFields
}

// IpamStatistics represents Infoblox object ipam:statistics.
// A synthetic object used to view the IPAM statistics of the network or
// network container in an Infoblox appliance
type IpamStatistics struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The network CIDR.
	Cidr uint32 `json:"cidr,omitempty"`

	// The number of conflicts discovered via network discovery. This attribute is
	// only valid for a Network object.
	ConflictCount uint32 `json:"conflict_count,omitempty"`

	// The Microsoft Active Directory user related information.
	MsAdUserData *MsserverAduserData `json:"ms_ad_user_data,omitempty"`

	// The network address.
	Network string `json:"network,omitempty"`

	// The network view.
	NetworkView string `json:"network_view,omitempty"`

	// The number of unmanaged IP addresses as discovered by network discovery.
	// This attribute is only valid for a Network object.
	UnmanagedCount uint32 `json:"unmanaged_count,omitempty"`

	// The network utilization in percentage.
	Utilization uint32 `json:"utilization,omitempty"`

	// The time that the utilization statistics were updated last. This attribute
	// is only valid for a Network object. For a Network Container object, the
	// return value is undefined.
	UtilizationUpdate *UnixTime `json:"utilization_update,omitempty"`
}

func (IpamStatistics) ObjectType() string {
	return "ipam:statistics"
}

func (obj IpamStatistics) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"cidr", "network", "network_view"}
	}
	return obj.returnFields
}

// IPv4Address represents Infoblox object ipv4address.
// This object is created only as part of the record.host object, it cannot be
// created directly.
type IPv4Address struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// Comment for the address; maximum 256 characters.
	Comment string `json:"comment,omitempty"`

	// Types of the conflict.
	ConflictTypes []string `json:"conflict_types,omitempty"`

	// The client unique identifier.
	DhcpClientIdentifier string `json:"dhcp_client_identifier,omitempty"`

	// Discover now status for this address.
	DiscoverNowStatus string `json:"discover_now_status,omitempty"`

	// The discovered data for this address.
	DiscoveredData *Discoverydata `json:"discovered_data,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// DHCP fingerprint for the address.
	Fingerprint string `json:"fingerprint,omitempty"`

	// The IP address.
	IpAddress string `json:"ip_address,omitempty"`

	// If set to True, the IP address has either a MAC address conflict or a DHCP
	// lease conflict detected through a network discovery.
	IsConflict bool `json:"is_conflict,omitempty"`

	// This flag reflects whether the MAC address for this address is invalid.
	IsInvalidMac bool `json:"is_invalid_mac,omitempty"`

	// The lease state of the address.
	LeaseState string `json:"lease_state,omitempty"`

	// The MAC address.
	MacAddress string `json:"mac_address,omitempty"`

	// The Microsoft Active Directory user related information.
	MsAdUserData *MsserverAduserData `json:"ms_ad_user_data,omitempty"`

	// The DNS names. For example, if the IP address belongs to a host record, this
	// field contains the hostname. This field supports both single and array
	// search.
	Names []string `json:"names,omitempty"`

	// The network to which this address belongs, in FQDN/CIDR format.
	Network string `json:"network,omitempty"`

	// The name of the network view.
	NetworkView string `json:"network_view,omitempty"`

	// The objects associated with the IP address.
	Objects []string `json:"objects,omitempty"`

	// The reserved port for the address.
	ReservedPort string `json:"reserved_port,omitempty"`

	// The current status of the address.
	Status string `json:"status,omitempty"`

	// The types of associated objects. This field supports both single and array
	// search.
	Types []string `json:"types,omitempty"`

	// Indicates whether the IP address is configured for DNS or DHCP. This field
	// supports both single and array search.
	Usage []string `json:"usage,omitempty"`

	// The name of the user who created or modified the record.
	Username string `json:"username,omitempty"`
}

func (IPv4Address) ObjectType() string {
	return "ipv4address"
}

func (obj IPv4Address) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"dhcp_client_identifier", "ip_address", "is_conflict", "lease_state", "mac_address", "names", "network", "network_view", "objects", "status", "types", "usage", "username"}
	}
	return obj.returnFields
}

// IPv6Address represents Infoblox object ipv6address.
// This object is created only as part of the record.host object, it cannot be
// created directly.
type IPv6Address struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// Comment for the address; maximum 256 characters.
	Comment string `json:"comment,omitempty"`

	// Types of the conflict.
	ConflictTypes []string `json:"conflict_types,omitempty"`

	// Discover now status for this address.
	DiscoverNowStatus string `json:"discover_now_status,omitempty"`

	// The discovered data for this address.
	DiscoveredData *Discoverydata `json:"discovered_data,omitempty"`

	// DHCPv6 Unique Identifier (DUID) of the address object.
	Duid string `json:"duid,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// DHCP fingerprint for the address.
	Fingerprint string `json:"fingerprint,omitempty"`

	// IPv6 addresses of the address object.
	IpAddress string `json:"ip_address,omitempty"`

	// IP address has either a duid conflict or a DHCP lease conflict detected
	// through a network discovery.
	IsConflict bool `json:"is_conflict,omitempty"`

	// The lease state of the address.
	LeaseState string `json:"lease_state,omitempty"`

	// The Microsoft Active Directory user related information.
	MsAdUserData *MsserverAduserData `json:"ms_ad_user_data,omitempty"`

	// The DNS names. For example, if the IP address belongs to a host record, this
	// field contains the hostname. This field supports both single and array
	// search.
	Names []string `json:"names,omitempty"`

	// The network to which this address belongs, in FQDN/CIDR format.
	Network string `json:"network,omitempty"`

	// The name of the network view.
	NetworkView string `json:"network_view,omitempty"`

	// The objects associated with the IP address.
	Objects []string `json:"objects,omitempty"`

	// The reserved port for the address.
	ReservedPort string `json:"reserved_port,omitempty"`

	// The current status of the address.
	Status string `json:"status,omitempty"`

	// The types of associated objects. This field supports both single and array
	// search.
	Types []string `json:"types,omitempty"`

	// Indicates whether the IP address is configured for DNS or DHCP. This field
	// supports both single and array search.
	Usage []string `json:"usage,omitempty"`
}

func (IPv6Address) ObjectType() string {
	return "ipv6address"
}

func (obj IPv6Address) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"duid", "ip_address", "is_conflict", "lease_state", "names", "network", "network_view", "objects", "status", "types", "usage"}
	}
	return obj.returnFields
}

// Ipv6dhcpoptiondefinition represents Infoblox object ipv6dhcpoptiondefinition.
// An IPv6 option definition defines a DHCP IPv6 option within a specific IPv6
// option space. A custom IPv6 option can be defined in the predefined DHCP
// IPv6 option space or in the user-defined vendor IPv6 option space. To define
// an IPv6 option, add the IPv6 option definition to the required IPv6 option
// space.
type Ipv6dhcpoptiondefinition struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The code of a DHCP IPv6 option definition object. An option code number is
	// used to identify the DHCP option.
	Code *uint32 `json:"code,omitempty"`

	// The name of a DHCP IPv6 option definition object.
	Name *string `json:"name,omitempty"`

	// The space of a DHCP option definition object.
	Space *string `json:"space,omitempty"`

	// The data type of the Grid DHCP IPv6 option.
	Type string `json:"type,omitempty"`
}

func (Ipv6dhcpoptiondefinition) ObjectType() string {
	return "ipv6dhcpoptiondefinition"
}

func (obj Ipv6dhcpoptiondefinition) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"code", "name", "type"}
	}
	return obj.returnFields
}

// Ipv6dhcpoptionspace represents Infoblox object ipv6dhcpoptionspace.
// An IPv6 option space defines a namespace in which vendor IPv6 options can be
// defined. To define a specific vendor IPv6 option space, add an IPv6 option
// space to DHCP.
type Ipv6dhcpoptionspace struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// A descriptive comment of a DHCP IPv6 option space object.
	Comment *string `json:"comment,omitempty"`

	// The enterprise number of a DHCP IPv6 option space object.
	EnterpriseNumber *uint32 `json:"enterprise_number,omitempty"`

	// The name of a DHCP IPv6 option space object.
	Name *string `json:"name,omitempty"`

	// The list of DHCP IPv6 option definition objects.
	OptionDefinitions []string `json:"option_definitions,omitempty"`
}

func (Ipv6dhcpoptionspace) ObjectType() string {
	return "ipv6dhcpoptionspace"
}

func (obj Ipv6dhcpoptionspace) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"comment", "enterprise_number", "name"}
	}
	return obj.returnFields
}

// Ipv6filteroption represents Infoblox object ipv6filteroption.
// In the ISC DHCP terms, it defines a class of clients that match a particular
// (option, value) pair. To define an option filter, add an Option to the IPv6
// DHCP Filter object.
type Ipv6filteroption struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// Determines if apply as class is enabled or not. If this flag is set to
	// "true" the filter is treated as global DHCP class, e.g it is written to
	// DHCPv6 configuration file even if it is not present in any DHCP range.
	ApplyAsClass *bool `json:"apply_as_class,omitempty"`

	// The descriptive comment of a DHCP IPv6 filter option object.
	Comment *string `json:"comment,omitempty"`

	// The conditional expression of a DHCP IPv6 filter option object.
	Expression *string `json:"expression,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// Determines the lease time of a DHCP IPv6 filter option object.
	LeaseTime *uint32 `json:"lease_time,omitempty"`

	// The name of a DHCP IPv6 option filter object.
	Name *string `json:"name,omitempty"`

	// An array of DHCP option dhcpoption structs that lists the DHCP options
	// associated with the object.
	OptionList []*Dhcpoption `json:"option_list,omitempty"`

	// The option space of a DHCP IPv6 filter option object.
	OptionSpace *string `json:"option_space,omitempty"`
}

func (Ipv6filteroption) ObjectType() string {
	return "ipv6filteroption"
}

func (obj Ipv6filteroption) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"comment", "name"}
	}
	return obj.returnFields
}

// Ipv6FixedAddress represents Infoblox object ipv6fixedaddress.
// A IPv6 fixed address is a specific IP address that a DHCP server always
// assigns when a lease request comes from a particular DUID of the client.
type Ipv6FixedAddress struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The address type value for this IPv6 fixed address. When the address type is
	// "ADDRESS", a value for the 'ipv6addr' member is required. When the address
	// type is "PREFIX", values for 'ipv6prefix' and 'ipv6prefix_bits' are
	// required. When the address type is "BOTH", values for 'ipv6addr',
	// 'ipv6prefix', and 'ipv6prefix_bits' are all required.
	AddressType string `json:"address_type,omitempty"`

	// This field controls whether the credential is used for both the Telnet and
	// SSH credentials. If set to False, the credential is used only for SSH.
	AllowTelnet *bool `json:"allow_telnet,omitempty"`

	// The CLI credentials for the IPv6 fixed address.
	CliCredentials []*DiscoveryClicredential `json:"cli_credentials,omitempty"`

	// Structure containing all cloud API related information for this object.
	CloudInfo *GridCloudapiInfo `json:"cloud_info,omitempty"`

	// Comment for the fixed address; maximum 256 characters.
	Comment *string `json:"comment,omitempty"`

	// The description of the device.
	DeviceDescription *string `json:"device_description,omitempty"`

	// The location of the device.
	DeviceLocation *string `json:"device_location,omitempty"`

	// The type of the device.
	DeviceType *string `json:"device_type,omitempty"`

	// The vendor of the device.
	DeviceVendor *string `json:"device_vendor,omitempty"`

	// Determines whether a fixed address is disabled or not. When this is set to
	// False, the IPv6 fixed address is enabled.
	Disable *bool `json:"disable,omitempty"`

	// Determines if the discovery for this IPv6 fixed address is disabled or not.
	// False means that the discovery is enabled.
	DisableDiscovery *bool `json:"disable_discovery,omitempty"`

	// The discovery status of this IPv6 fixed address.
	DiscoverNowStatus string `json:"discover_now_status,omitempty"`

	// The discovered data for this IPv6 fixed address.
	DiscoveredData *Discoverydata `json:"discovered_data,omitempty"`

	// The domain name for this IPv6 fixed address.
	DomainName *string `json:"domain_name,omitempty"`

	// The IPv6 addresses of DNS recursive name servers to which the DHCP client
	// can send name resolution requests. The DHCP server includes this information
	// in the DNS Recursive Name Server option in Advertise, Rebind,
	// Information-Request, and Reply messages.
	DomainNameServers []string `json:"domain_name_servers,omitempty"`

	// The DUID value for this IPv6 fixed address.
	Duid *string `json:"duid,omitempty"`

	// Determines if the discovery for the IPv6 fixed address should be immediately
	// enabled.
	EnableImmediateDiscovery *bool `json:"enable_immediate_discovery,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// The IPv6 Address of the DHCP IPv6 fixed address.
	Ipv6Addr *string `json:"ipv6addr,omitempty"`

	// The IPv6 Address prefix of the DHCP IPv6 fixed address.
	Ipv6prefix *string `json:"ipv6prefix,omitempty"`

	// Prefix bits of the DHCP IPv6 fixed address.
	Ipv6prefixBits *uint32 `json:"ipv6prefix_bits,omitempty"`

	// This field contains the logic filters to be applied to this IPv6 fixed
	// address. This list corresponds to the match rules that are written to the
	// DHCPv6 configuration file.
	LogicFilterRules []*Logicfilterrule `json:"logic_filter_rules,omitempty"`

	// The Microsoft Active Directory user related information.
	MsAdUserData *MsserverAduserData `json:"ms_ad_user_data,omitempty"`

	// This field contains the name of this IPv6 fixed address.
	Name *string `json:"name,omitempty"`

	// The network to which this IPv6 fixed address belongs, in IPv6 Address/CIDR
	// format.
	Network *string `json:"network,omitempty"`

	// The name of the network view in which this IPv6 fixed address resides.
	NetworkView *string `json:"network_view,omitempty"`

	// An array of DHCP option dhcpoption structs that lists the DHCP options
	// associated with the object.
	Options []*Dhcpoption `json:"options,omitempty"`

	// The preferred lifetime value for this DHCP IPv6 fixed address object.
	PreferredLifetime *uint32 `json:"preferred_lifetime,omitempty"`

	// The reference to the reserved interface to which the device belongs.
	ReservedInterface *string `json:"reserved_interface,omitempty"`

	// Restarts the member service. The restart_if_needed flag can trigger a
	// restart on DHCP services only when it is enabled on CP member.
	RestartIfNeeded *bool `json:"restart_if_needed,omitempty"`

	// The SNMPv3 credential for this IPv6 fixed address.
	Snmp3Credential *DiscoverySnmp3credential `json:"snmp3_credential,omitempty"`

	// The SNMPv1 or SNMPv2 credential for this IPv6 fixed address.
	SnmpCredential *DiscoverySnmpcredential `json:"snmp_credential,omitempty"`

	// If set on creation, the IPv6 fixed address will be created according to the
	// values specified in the named template.
	Template string `json:"template,omitempty"`

	// If set to true, the CLI credential will override member-level settings.
	UseCliCredentials *bool `json:"use_cli_credentials,omitempty"`

	// Use flag for: domain_name
	UseDomainName *bool `json:"use_domain_name,omitempty"`

	// Use flag for: domain_name_servers
	UseDomainNameServers *bool `json:"use_domain_name_servers,omitempty"`

	// Use flag for: logic_filter_rules
	UseLogicFilterRules *bool `json:"use_logic_filter_rules,omitempty"`

	// Use flag for: options
	UseOptions *bool `json:"use_options,omitempty"`

	// Use flag for: preferred_lifetime
	UsePreferredLifetime *bool `json:"use_preferred_lifetime,omitempty"`

	// Determines if the SNMPv3 credential should be used for the IPv6 fixed
	// address.
	UseSnmp3Credential *bool `json:"use_snmp3_credential,omitempty"`

	// If set to true, SNMP credential will override member level settings.
	UseSnmpCredential *bool `json:"use_snmp_credential,omitempty"`

	// Use flag for: valid_lifetime
	UseValidLifetime *bool `json:"use_valid_lifetime,omitempty"`

	// The valid lifetime value for this DHCP IPv6 Fixed Address object.
	ValidLifetime *uint32 `json:"valid_lifetime,omitempty"`
}

func (Ipv6FixedAddress) ObjectType() string {
	return "ipv6fixedaddress"
}

func (obj Ipv6FixedAddress) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"duid", "ipv6addr", "network_view"}
	}
	return obj.returnFields
}

// Ipv6fixedaddresstemplate represents Infoblox object ipv6fixedaddresstemplate.
// The IPv6 fixed address template used to create IPv6 fixed address objects in
// a quick and consistent way. An IPv6 fixed address object created from an
// IPv6 fixed address template will inherit most properties defined in the IPv6
// fixed address template object; therefor, most of the IPv6 fixed address
// template properties are the same as the fixed address object properties.
type Ipv6fixedaddresstemplate struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// A descriptive comment of an IPv6 fixed address template object.
	Comment *string `json:"comment,omitempty"`

	// Domain name of the IPv6 fixed address template object.
	DomainName *string `json:"domain_name,omitempty"`

	// The IPv6 addresses of DNS recursive name servers to which the DHCP client
	// can send name resolution requests. The DHCP server includes this information
	// in the DNS Recursive Name Server option in Advertise, Rebind,
	// Information-Request, and Reply messages.
	DomainNameServers []string `json:"domain_name_servers,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// This field contains the logic filters to be applied to this IPv6 fixed
	// address. This list corresponds to the match rules that are written to the
	// DHCPv6 configuration file.
	LogicFilterRules []*Logicfilterrule `json:"logic_filter_rules,omitempty"`

	// Name of an IPv6 fixed address template object.
	Name *string `json:"name,omitempty"`

	// The number of IPv6 addresses for this fixed address.
	NumberOfAddresses *uint32 `json:"number_of_addresses,omitempty"`

	// The start address offset for this IPv6 fixed address.
	Offset *uint32 `json:"offset,omitempty"`

	// An array of DHCP option dhcpoption structs that lists the DHCP options
	// associated with the object.
	Options []*Dhcpoption `json:"options,omitempty"`

	// The preferred lifetime value for this DHCP IPv6 fixed address template
	// object.
	PreferredLifetime *uint32 `json:"preferred_lifetime,omitempty"`

	// Use flag for: domain_name
	UseDomainName *bool `json:"use_domain_name,omitempty"`

	// Use flag for: domain_name_servers
	UseDomainNameServers *bool `json:"use_domain_name_servers,omitempty"`

	// Use flag for: logic_filter_rules
	UseLogicFilterRules *bool `json:"use_logic_filter_rules,omitempty"`

	// Use flag for: options
	UseOptions *bool `json:"use_options,omitempty"`

	// Use flag for: preferred_lifetime
	UsePreferredLifetime *bool `json:"use_preferred_lifetime,omitempty"`

	// Use flag for: valid_lifetime
	UseValidLifetime *bool `json:"use_valid_lifetime,omitempty"`

	// The valid lifetime value for this DHCP IPv6 fixed address template object.
	ValidLifetime *uint32 `json:"valid_lifetime,omitempty"`
}

func (Ipv6fixedaddresstemplate) ObjectType() string {
	return "ipv6fixedaddresstemplate"
}

func (obj Ipv6fixedaddresstemplate) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"comment", "name"}
	}
	return obj.returnFields
}

// Ipv6Network represents Infoblox object ipv6network.
// When DHCP services are configured on an appliance, the network that it
// serves must be defined. After a network is created, you can either create
// all the subnets individually, or create a parent network that encompasses
// the subnets.
type Ipv6Network struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// This flag controls whether reverse zones are automatically created when the
	// network is added.
	AutoCreateReversezone bool `json:"auto_create_reversezone,omitempty"`

	// Structure containing all cloud API related information for this object.
	CloudInfo *GridCloudapiInfo `json:"cloud_info,omitempty"`

	// Comment for the network; maximum 256 characters.
	Comment *string `json:"comment,omitempty"`

	// The dynamic DNS domain name the appliance uses specifically for DDNS updates
	// for this network.
	DdnsDomainname *string `json:"ddns_domainname,omitempty"`

	// Use this method to set or retrieve the ddns_enable_option_fqdn flag of a
	// DHCP IPv6 Network object. This method controls whether the FQDN option sent
	// by the client is to be used, or if the server can automatically generate the
	// FQDN. This setting overrides the upper-level settings.
	DdnsEnableOptionFqdn *bool `json:"ddns_enable_option_fqdn,omitempty"`

	// If this field is set to True, the DHCP server generates a hostname and
	// updates DNS with it when the DHCP client request does not contain a
	// hostname.
	DdnsGenerateHostname *bool `json:"ddns_generate_hostname,omitempty"`

	// This field controls whether only the DHCP server is allowed to update DNS,
	// regardless of the DHCP clients requests. Note that changes for this field
	// take effect only if ddns_enable_option_fqdn is True.
	DdnsServerAlwaysUpdates *bool `json:"ddns_server_always_updates,omitempty"`

	// The DNS update Time to Live (TTL) value of a DHCP network object. The TTL is
	// a 32-bit unsigned integer that represents the duration, in seconds, for
	// which the update is cached. Zero indicates that the update is not cached.
	DdnsTtl *uint32 `json:"ddns_ttl,omitempty"`

	// The reason for deleting the RIR registration request.
	DeleteReason *string `json:"delete_reason,omitempty"`

	// Determines whether a network is disabled or not. When this is set to False,
	// the network is enabled.
	Disable *bool `json:"disable,omitempty"`

	// Discover now status for this network.
	DiscoverNowStatus string `json:"discover_now_status,omitempty"`

	// Number of the discovered BGP AS. When multiple BGP autonomous systems are
	// discovered in the network, this field displays "Multiple".
	DiscoveredBgpAs string `json:"discovered_bgp_as,omitempty"`

	// Discovered bridge domain.
	DiscoveredBridgeDomain *string `json:"discovered_bridge_domain,omitempty"`

	// Discovered tenant.
	DiscoveredTenant *string `json:"discovered_tenant,omitempty"`

	// The identifier of the discovered VLAN. When multiple VLANs are discovered in
	// the network, this field displays "Multiple".
	DiscoveredVlanId string `json:"discovered_vlan_id,omitempty"`

	// The name of the discovered VLAN. When multiple VLANs are discovered in the
	// network, this field displays "Multiple".
	DiscoveredVlanName string `json:"discovered_vlan_name,omitempty"`

	// Description of the discovered VRF. When multiple VRFs are discovered in the
	// network, this field displays "Multiple".
	DiscoveredVrfDescription string `json:"discovered_vrf_description,omitempty"`

	// The name of the discovered VRF. When multiple VRFs are discovered in the
	// network, this field displays "Multiple".
	DiscoveredVrfName string `json:"discovered_vrf_name,omitempty"`

	// Route distinguisher of the discovered VRF. When multiple VRFs are discovered
	// in the network, this field displays "Multiple".
	DiscoveredVrfRd string `json:"discovered_vrf_rd,omitempty"`

	// The discovery basic poll settings for this network.
	DiscoveryBasicPollSettings *DiscoveryBasicpollsettings `json:"discovery_basic_poll_settings,omitempty"`

	// The discovery blackout setting for this network.
	DiscoveryBlackoutSetting *PropertiesBlackoutsetting `json:"discovery_blackout_setting,omitempty"`

	// The network discovery engine type.
	DiscoveryEngineType string `json:"discovery_engine_type,omitempty"`

	// The member that will run discovery for this network.
	DiscoveryMember *string `json:"discovery_member,omitempty"`

	// Use this method to set or retrieve the domain_name value of a DHCP IPv6
	// Network object.
	DomainName *string `json:"domain_name,omitempty"`

	// Use this method to set or retrieve the dynamic DNS updates flag of a DHCP
	// IPv6 Network object. The DHCP server can send DDNS updates to DNS servers in
	// the same Grid and to external DNS servers. This setting overrides the member
	// level settings.
	DomainNameServers []string `json:"domain_name_servers,omitempty"`

	// The dynamic DNS updates flag of a DHCP IPv6 network object. If set to True,
	// the DHCP server sends DDNS updates to DNS servers in the same Grid, and to
	// external DNS servers.
	EnableDdns *bool `json:"enable_ddns,omitempty"`

	// Determines whether a discovery is enabled or not for this network. When this
	// is set to False, the network discovery is disabled.
	EnableDiscovery *bool `json:"enable_discovery,omitempty"`

	// Determines if IFMAP publishing is enabled for the network.
	EnableIfmapPublishing *bool `json:"enable_ifmap_publishing,omitempty"`

	// Determines if the discovery for the network should be immediately enabled.
	EnableImmediateDiscovery *bool `json:"enable_immediate_discovery,omitempty"`

	// The endpoints that provides data for the DHCP IPv6 Network object.
	EndpointSources []*CiscoiseEndpoint `json:"endpoint_sources,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// The timestamp when the last RIR registration update was sent.
	LastRirRegistrationUpdateSent *UnixTime `json:"last_rir_registration_update_sent,omitempty"`

	// Last RIR registration update status.
	LastRirRegistrationUpdateStatus string `json:"last_rir_registration_update_status,omitempty"`

	// This field contains the logic filters to be applied on this IPv6 network.
	// This list corresponds to the match rules that are written to the DHCPv6
	// configuration file.
	LogicFilterRules []*Logicfilterrule `json:"logic_filter_rules,omitempty"`

	// A list of members servers that serve DHCP for the network. All members in
	// the array must be of the same type. The struct type must be indicated in
	// each element, by setting the "_struct" member to the struct type.
	Members []*Dhcpmember `json:"members,omitempty"`

	// This field controls whether this object is synchronized with the Multi-Grid
	// Master. If this field is set to True, objects are not synchronized.
	MgmPrivate *bool `json:"mgm_private,omitempty"`

	// This field is assumed to be True unless filled by any conforming objects,
	// such as Network, IPv6 Network, Network Container, IPv6 Network Container,
	// and Network View. This value is set to False if mgm_private is set to True
	// in the parent object.
	MgmPrivateOverridable bool `json:"mgm_private_overridable,omitempty"`

	// The Microsoft Active Directory user related information.
	MsAdUserData *MsserverAduserData `json:"ms_ad_user_data,omitempty"`

	// The network address in IPv6 Address/CIDR format. For regular expression
	// searches, only the IPv6 Address portion is supported. Searches for the CIDR
	// portion is always an exact match. For example, both network containers
	// 16::0/28 and 26::0/24 are matched by expression '.6' and only 26::0/24 is
	// matched by '.6/24'.
	Network *string `json:"network,omitempty"`

	// The network container to which this network belongs, if any.
	NetworkContainer string `json:"network_container,omitempty"`

	// The name of the network view in which this network resides.
	NetworkView *string `json:"network_view,omitempty"`

	// An array of DHCP option dhcpoption structs that lists the DHCP options
	// associated with the object.
	Options []*Dhcpoption `json:"options,omitempty"`

	// The port control blackout setting for this network.
	PortControlBlackoutSetting *PropertiesBlackoutsetting `json:"port_control_blackout_setting,omitempty"`

	// Use this method to set or retrieve the preferred lifetime value of a DHCP
	// IPv6 Network object.
	PreferredLifetime *uint32 `json:"preferred_lifetime,omitempty"`

	// If the field is set to True, the leases are kept in the Recycle Bin until
	// one week after expiration. Otherwise, the leases are permanently deleted.
	RecycleLeases *bool `json:"recycle_leases,omitempty"`

	// Restarts the member service.
	RestartIfNeeded *bool `json:"restart_if_needed,omitempty"`

	// The registry (RIR) that allocated the IPv6 network address space.
	Rir string `json:"rir,omitempty"`

	// The RIR organization associated with the IPv6 network.
	RirOrganization *string `json:"rir_organization,omitempty"`

	// The RIR registration action.
	RirRegistrationAction string `json:"rir_registration_action,omitempty"`

	// The registration status of the IPv6 network in RIR.
	RirRegistrationStatus string `json:"rir_registration_status,omitempty"`

	// If the field is set to True, the discovery blackout setting will be used for
	// port control blackout setting.
	SamePortControlDiscoveryBlackout *bool `json:"same_port_control_discovery_blackout,omitempty"`

	// Determines whether to send the RIR registration request.
	SendRirRequest *bool `json:"send_rir_request,omitempty"`

	// The DHCP IPv6 Network Cisco ISE subscribe settings.
	SubscribeSettings *CiscoiseSubscribesetting `json:"subscribe_settings,omitempty"`

	// If set on creation, the network is created according to the values specified
	// in the selected template.
	Template string `json:"template,omitempty"`

	// Determines whether the DHCP IPv6 Network is unmanaged or not.
	Unmanaged *bool `json:"unmanaged,omitempty"`

	// The number of unmanaged IP addresses as discovered by network discovery.
	UnmanagedCount uint32 `json:"unmanaged_count,omitempty"`

	// This field controls whether the DHCP server updates DNS when a DHCP lease is
	// renewed.
	UpdateDnsOnLeaseRenewal *bool `json:"update_dns_on_lease_renewal,omitempty"`

	// Use flag for: discovery_blackout_setting , port_control_blackout_setting,
	// same_port_control_discovery_blackout
	UseBlackoutSetting *bool `json:"use_blackout_setting,omitempty"`

	// Use flag for: ddns_domainname
	UseDdnsDomainname *bool `json:"use_ddns_domainname,omitempty"`

	// Use flag for: ddns_enable_option_fqdn
	UseDdnsEnableOptionFqdn *bool `json:"use_ddns_enable_option_fqdn,omitempty"`

	// Use flag for: ddns_generate_hostname
	UseDdnsGenerateHostname *bool `json:"use_ddns_generate_hostname,omitempty"`

	// Use flag for: ddns_ttl
	UseDdnsTtl *bool `json:"use_ddns_ttl,omitempty"`

	// Use flag for: discovery_basic_poll_settings
	UseDiscoveryBasicPollingSettings *bool `json:"use_discovery_basic_polling_settings,omitempty"`

	// Use flag for: domain_name
	UseDomainName *bool `json:"use_domain_name,omitempty"`

	// Use flag for: domain_name_servers
	UseDomainNameServers *bool `json:"use_domain_name_servers,omitempty"`

	// Use flag for: enable_ddns
	UseEnableDdns *bool `json:"use_enable_ddns,omitempty"`

	// Use flag for: discovery_member , enable_discovery
	UseEnableDiscovery *bool `json:"use_enable_discovery,omitempty"`

	// Use flag for: enable_ifmap_publishing
	UseEnableIfmapPublishing *bool `json:"use_enable_ifmap_publishing,omitempty"`

	// Use flag for: logic_filter_rules
	UseLogicFilterRules *bool `json:"use_logic_filter_rules,omitempty"`

	// Use flag for: mgm_private
	UseMgmPrivate *bool `json:"use_mgm_private,omitempty"`

	// Use flag for: options
	UseOptions *bool `json:"use_options,omitempty"`

	// Use flag for: preferred_lifetime
	UsePreferredLifetime *bool `json:"use_preferred_lifetime,omitempty"`

	// Use flag for: recycle_leases
	UseRecycleLeases *bool `json:"use_recycle_leases,omitempty"`

	// Use flag for: subscribe_settings
	UseSubscribeSettings *bool `json:"use_subscribe_settings,omitempty"`

	// Use flag for: update_dns_on_lease_renewal
	UseUpdateDnsOnLeaseRenewal *bool `json:"use_update_dns_on_lease_renewal,omitempty"`

	// Use flag for: valid_lifetime
	UseValidLifetime *bool `json:"use_valid_lifetime,omitempty"`

	// Use flag for: zone_associations
	UseZoneAssociations *bool `json:"use_zone_associations,omitempty"`

	// Use this method to set or retrieve the valid lifetime value of a DHCP IPv6
	// Network object.
	ValidLifetime *uint32 `json:"valid_lifetime,omitempty"`

	// List of VLANs assigned to Network.
	Vlans []*Vlanlink `json:"vlans,omitempty"`

	// The list of zones associated with this network.
	ZoneAssociations []*Zoneassociation `json:"zone_associations,omitempty"`
}

func (Ipv6Network) ObjectType() string {
	return "ipv6network"
}

func (obj Ipv6Network) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"comment", "network", "network_view"}
	}
	return obj.returnFields
}

// Ipv6NetworkContainer represents Infoblox object ipv6networkcontainer.
// A network can contain child networks. The network that contains child
// networks is called a network container. This object encapsulates an IPv6
// network container object.
type Ipv6NetworkContainer struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// This flag controls whether reverse zones are automatically created when the
	// network is added.
	AutoCreateReversezone bool `json:"auto_create_reversezone,omitempty"`

	// Structure containing all cloud API related information for this object.
	CloudInfo *GridCloudapiInfo `json:"cloud_info,omitempty"`

	// Comment for the network; maximum 256 characters.
	Comment *string `json:"comment,omitempty"`

	// The dynamic DNS domain name the appliance uses specifically for DDNS updates
	// for this network container.
	DdnsDomainname *string `json:"ddns_domainname,omitempty"`

	// Use this method to set or retrieve the ddns_enable_option_fqdn flag of a
	// DHCP IPv6 Network Container object. This method controls whether the FQDN
	// option sent by the client is to be used, or if the server can automatically
	// generate the FQDN. This setting overrides the upper-level settings.
	DdnsEnableOptionFqdn *bool `json:"ddns_enable_option_fqdn,omitempty"`

	// If this field is set to True, the DHCP server generates a hostname and
	// updates DNS with it when the DHCP client request does not contain a
	// hostname.
	DdnsGenerateHostname *bool `json:"ddns_generate_hostname,omitempty"`

	// This field controls whether the DHCP server is allowed to update DNS,
	// regardless of the DHCP client requests. Note that changes for this field
	// take effect only if ddns_enable_option_fqdn is True.
	DdnsServerAlwaysUpdates *bool `json:"ddns_server_always_updates,omitempty"`

	// The DNS update Time to Live (TTL) value of a DHCP network container object.
	// The TTL is a 32-bit unsigned integer that represents the duration, in
	// seconds, for which the update is cached. Zero indicates that the update is
	// not cached.
	DdnsTtl *uint32 `json:"ddns_ttl,omitempty"`

	// The reason for deleting the RIR registration request.
	DeleteReason *string `json:"delete_reason,omitempty"`

	// Discover now status for this network container.
	DiscoverNowStatus string `json:"discover_now_status,omitempty"`

	// The discovery basic poll settings for this network container.
	DiscoveryBasicPollSettings *DiscoveryBasicpollsettings `json:"discovery_basic_poll_settings,omitempty"`

	// The discovery blackout setting for this network container.
	DiscoveryBlackoutSetting *PropertiesBlackoutsetting `json:"discovery_blackout_setting,omitempty"`

	// The network discovery engine type.
	DiscoveryEngineType string `json:"discovery_engine_type,omitempty"`

	// The member that will run discovery for this network container.
	DiscoveryMember *string `json:"discovery_member,omitempty"`

	// Use this method to set or retrieve the dynamic DNS updates flag of a DHCP
	// IPv6 Network Container object. The DHCP server can send DDNS updates to DNS
	// servers in the same Grid and to external DNS servers. This setting overrides
	// the member level settings.
	DomainNameServers []string `json:"domain_name_servers,omitempty"`

	// The dynamic DNS updates flag of a DHCP IPv6 network container object. If set
	// to True, the DHCP server sends DDNS updates to DNS servers in the same Grid,
	// and to external DNS servers.
	EnableDdns *bool `json:"enable_ddns,omitempty"`

	// Determines whether a discovery is enabled or not for this network container.
	// When this is set to False, the network container discovery is disabled.
	EnableDiscovery *bool `json:"enable_discovery,omitempty"`

	// Determines if the discovery for the network container should be immediately
	// enabled.
	EnableImmediateDiscovery *bool `json:"enable_immediate_discovery,omitempty"`

	// The endpoints that provides data for the DHCP IPv6 Network Container.
	EndpointSources []*CiscoiseEndpoint `json:"endpoint_sources,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// The timestamp when the last RIR registration update was sent.
	LastRirRegistrationUpdateSent *UnixTime `json:"last_rir_registration_update_sent,omitempty"`

	// Last RIR registration update status.
	LastRirRegistrationUpdateStatus string `json:"last_rir_registration_update_status,omitempty"`

	// This field contains the logic filters to be applied on the this network
	// container. This list corresponds to the match rules that are written to the
	// dhcpd configuration file.
	LogicFilterRules []*Logicfilterrule `json:"logic_filter_rules,omitempty"`

	// This field controls whether this object is synchronized with the Multi-Grid
	// Master. If this field is set to True, objects are not synchronized.
	MgmPrivate *bool `json:"mgm_private,omitempty"`

	// This field is assumed to be True unless filled by any conforming objects,
	// such as Network, IPv6 Network, Network Container, IPv6 Network Container,
	// and Network View. This value is set to False if mgm_private is set to True
	// in the parent object.
	MgmPrivateOverridable bool `json:"mgm_private_overridable,omitempty"`

	// The Microsoft Active Directory user related information.
	MsAdUserData *MsserverAduserData `json:"ms_ad_user_data,omitempty"`

	// The network address in IPv6 Address/CIDR format. For regular expression
	// searches, only the IPv6 Address portion is supported. Searches for the CIDR
	// portion is always an exact match. For example, both network containers
	// 16::0/28 and 26::0/24 are matched by expression '.6' and only 26::0/24 is
	// matched by '.6/24'.
	Network string `json:"network,omitempty"`

	// The network container to which this network belongs, if any.
	NetworkContainer string `json:"network_container,omitempty"`

	// The name of the network view in which this network resides.
	NetworkView *string `json:"network_view,omitempty"`

	// An array of DHCP option dhcpoption structs that lists the DHCP options
	// associated with the object.
	Options []*Dhcpoption `json:"options,omitempty"`

	// The port control blackout setting for this network container.
	PortControlBlackoutSetting *PropertiesBlackoutsetting `json:"port_control_blackout_setting,omitempty"`

	// Use this method to set or retrieve the preferred lifetime value of a DHCP
	// IPv6 Network Container object.
	PreferredLifetime *uint32 `json:"preferred_lifetime,omitempty"`

	// Remove subnets delete option. Determines whether all child objects should be
	// removed alongside with the IPv6 network container or child objects should be
	// assigned to another parental container. By default child objects are deleted
	// with this network container.
	RemoveSubnets bool `json:"remove_subnets,omitempty"`

	// Restarts the member service.
	RestartIfNeeded *bool `json:"restart_if_needed,omitempty"`

	// The registry (RIR) that allocated the IPv6 network container address space.
	Rir string `json:"rir,omitempty"`

	// The RIR organization associated with the IPv6 network container.
	RirOrganization *string `json:"rir_organization,omitempty"`

	// The RIR registration action.
	RirRegistrationAction string `json:"rir_registration_action,omitempty"`

	// The registration status of the IPv6 network container in RIR.
	RirRegistrationStatus string `json:"rir_registration_status,omitempty"`

	// If the field is set to True, the discovery blackout setting will be used for
	// port control blackout setting.
	SamePortControlDiscoveryBlackout *bool `json:"same_port_control_discovery_blackout,omitempty"`

	// Determines whether to send the RIR registration request.
	SendRirRequest *bool `json:"send_rir_request,omitempty"`

	// The DHCP IPv6 Network Container Cisco ISE subscribe settings.
	SubscribeSettings *CiscoiseSubscribesetting `json:"subscribe_settings,omitempty"`

	// Determines whether the network container is unmanaged or not.
	Unmanaged *bool `json:"unmanaged,omitempty"`

	// This field controls whether the DHCP server updates DNS when a DHCP lease is
	// renewed.
	UpdateDnsOnLeaseRenewal *bool `json:"update_dns_on_lease_renewal,omitempty"`

	// Use flag for: discovery_blackout_setting , port_control_blackout_setting,
	// same_port_control_discovery_blackout
	UseBlackoutSetting *bool `json:"use_blackout_setting,omitempty"`

	// Use flag for: ddns_domainname
	UseDdnsDomainname *bool `json:"use_ddns_domainname,omitempty"`

	// Use flag for: ddns_enable_option_fqdn
	UseDdnsEnableOptionFqdn *bool `json:"use_ddns_enable_option_fqdn,omitempty"`

	// Use flag for: ddns_generate_hostname
	UseDdnsGenerateHostname *bool `json:"use_ddns_generate_hostname,omitempty"`

	// Use flag for: ddns_ttl
	UseDdnsTtl *bool `json:"use_ddns_ttl,omitempty"`

	// Use flag for: discovery_basic_poll_settings
	UseDiscoveryBasicPollingSettings *bool `json:"use_discovery_basic_polling_settings,omitempty"`

	// Use flag for: domain_name_servers
	UseDomainNameServers *bool `json:"use_domain_name_servers,omitempty"`

	// Use flag for: enable_ddns
	UseEnableDdns *bool `json:"use_enable_ddns,omitempty"`

	// Use flag for: discovery_member , enable_discovery
	UseEnableDiscovery *bool `json:"use_enable_discovery,omitempty"`

	// Use flag for: logic_filter_rules
	UseLogicFilterRules *bool `json:"use_logic_filter_rules,omitempty"`

	// Use flag for: mgm_private
	UseMgmPrivate *bool `json:"use_mgm_private,omitempty"`

	// Use flag for: options
	UseOptions *bool `json:"use_options,omitempty"`

	// Use flag for: preferred_lifetime
	UsePreferredLifetime *bool `json:"use_preferred_lifetime,omitempty"`

	// Use flag for: subscribe_settings
	UseSubscribeSettings *bool `json:"use_subscribe_settings,omitempty"`

	// Use flag for: update_dns_on_lease_renewal
	UseUpdateDnsOnLeaseRenewal *bool `json:"use_update_dns_on_lease_renewal,omitempty"`

	// Use flag for: valid_lifetime
	UseValidLifetime *bool `json:"use_valid_lifetime,omitempty"`

	// Use flag for: zone_associations
	UseZoneAssociations *bool `json:"use_zone_associations,omitempty"`

	// The network container utilization in percentage.
	Utilization uint32 `json:"utilization,omitempty"`

	// Use this method to set or retrieve the valid lifetime value of a DHCP IPv6
	// Network Container object.
	ValidLifetime *uint32 `json:"valid_lifetime,omitempty"`

	// The list of zones associated with this network container.
	ZoneAssociations []*Zoneassociation `json:"zone_associations,omitempty"`
}

func (Ipv6NetworkContainer) ObjectType() string {
	return "ipv6networkcontainer"
}

func (obj Ipv6NetworkContainer) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"comment", "network", "network_view"}
	}
	return obj.returnFields
}

// IPv6NetworkTemplate represents Infoblox object ipv6networktemplate.
// The IPv6 network template used to create IPv6 networks in a quick and
// consistent way. IPv6 networks created from an IPv6 network template inherit
// all the properties defined in the IPv6 network template, except for the
// comment and CIDR that can be defined in the IPv6 network.
type IPv6NetworkTemplate struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// This flag controls whether the template allows any netmask. You must specify
	// a netmask when creating a network using this template. If you set this
	// parameter to False, you must specify the "cidr" field for the network
	// template object.
	AllowAnyNetmask *bool `json:"allow_any_netmask,omitempty"`

	// This flag controls whether reverse zones are automatically created when the
	// network is added.
	AutoCreateReversezone *bool `json:"auto_create_reversezone,omitempty"`

	// The CIDR of the network in CIDR format.
	Cidr *uint32 `json:"cidr,omitempty"`

	// This flag controls whether this template can be used to create network
	// objects in a cloud-computing deployment.
	CloudApiCompatible *bool `json:"cloud_api_compatible,omitempty"`

	// Comment for the network; maximum 256 characters.
	Comment *string `json:"comment,omitempty"`

	// The dynamic DNS domain name the appliance uses specifically for DDNS updates
	// for this network.
	DdnsDomainname *string `json:"ddns_domainname,omitempty"`

	// Use this method to set or retrieve the ddns_enable_option_fqdn flag of a
	// DHCP IPv6 Network object. This method controls whether the FQDN option sent
	// by the client is to be used, or if the server can automatically generate the
	// FQDN. This setting overrides the upper-level settings.
	DdnsEnableOptionFqdn *bool `json:"ddns_enable_option_fqdn,omitempty"`

	// If this field is set to True, the DHCP server generates a hostname and
	// updates DNS with it when the DHCP client request does not contain a
	// hostname.
	DdnsGenerateHostname *bool `json:"ddns_generate_hostname,omitempty"`

	// This field controls whether the DHCP server is allowed to update DNS,
	// regardless of the DHCP client requests. Note that changes for this field
	// take effect only if ddns_enable_option_fqdn is True.
	DdnsServerAlwaysUpdates *bool `json:"ddns_server_always_updates,omitempty"`

	// The DNS update Time to Live (TTL) value of a DHCP network object. The TTL is
	// a 32-bit unsigned integer that represents the duration, in seconds, for
	// which the update is cached. Zero indicates that the update is not cached.
	DdnsTtl *uint32 `json:"ddns_ttl,omitempty"`

	// Reference the Cloud Platform Appliance to which authority of the object
	// should be delegated when the object is created using the template.
	DelegatedMember *Dhcpmember `json:"delegated_member,omitempty"`

	// Use this method to set or retrieve the domain_name value of a DHCP IPv6
	// Network object.
	DomainName *string `json:"domain_name,omitempty"`

	// Use this method to set or retrieve the dynamic DNS updates flag of a DHCP
	// IPv6 Network object. The DHCP server can send DDNS updates to DNS servers in
	// the same Grid and to external DNS servers. This setting overrides the member
	// level settings.
	DomainNameServers []string `json:"domain_name_servers,omitempty"`

	// The dynamic DNS updates flag of a DHCP IPv6 network object. If set to True,
	// the DHCP server sends DDNS updates to DNS servers in the same Grid, and to
	// external DNS servers.
	EnableDdns *bool `json:"enable_ddns,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// The list of IPv6 fixed address templates assigned to this IPv6 network
	// template object. When you create an IPv6 network based on an IPv6 network
	// template object that contains IPv6 fixed address templates, the IPv6 fixed
	// addresses are created based on the associated IPv6 fixed address templates.
	FixedAddressTemplates []string `json:"fixed_address_templates,omitempty"`

	// The IPv6 Address prefix of the DHCP IPv6 network.
	Ipv6prefix *string `json:"ipv6prefix,omitempty"`

	// This field contains the logic filters to be applied on this IPv6 network
	// template. This list corresponds to the match rules that are written to the
	// DHCPv6 configuration file.
	LogicFilterRules []*Logicfilterrule `json:"logic_filter_rules,omitempty"`

	// A list of members that serve DHCP for the network. All members in the array
	// must be of the same type. The struct type must be indicated in each element,
	// by setting the "_struct" member to the struct type.
	Members []*Dhcpmember `json:"members,omitempty"`

	// The name of this IPv6 network template.
	Name *string `json:"name,omitempty"`

	// An array of DHCP option dhcpoption structs that lists the DHCP options
	// associated with the object.
	Options []*Dhcpoption `json:"options,omitempty"`

	// Use this method to set or retrieve the preferred lifetime value of a DHCP
	// IPv6 Network object.
	PreferredLifetime *uint32 `json:"preferred_lifetime,omitempty"`

	// The list of IPv6 address range templates assigned to this IPv6 network
	// template object. When you create an IPv6 network based on an IPv6 network
	// template object that contains IPv6 range templates, the IPv6 address ranges
	// are created based on the associated IPv6 address range templates.
	RangeTemplates []string `json:"range_templates,omitempty"`

	// If the field is set to True, the leases are kept in the Recycle Bin until
	// one week after expiration. Otherwise, the leases are permanently deleted.
	RecycleLeases *bool `json:"recycle_leases,omitempty"`

	// The registry (RIR) that allocated the IPv6 network address space.
	Rir string `json:"rir,omitempty"`

	// The RIR organization associated with the IPv6 network.
	RirOrganization *string `json:"rir_organization,omitempty"`

	// The action for the RIR registration.
	RirRegistrationAction string `json:"rir_registration_action,omitempty"`

	// The registration status of the IPv6 network in RIR.
	RirRegistrationStatus string `json:"rir_registration_status,omitempty"`

	// Determines whether to send the RIR registration request.
	SendRirRequest *bool `json:"send_rir_request,omitempty"`

	// This field controls whether the DHCP server updates DNS when a DHCP lease is
	// renewed.
	UpdateDnsOnLeaseRenewal *bool `json:"update_dns_on_lease_renewal,omitempty"`

	// Use flag for: ddns_domainname
	UseDdnsDomainname *bool `json:"use_ddns_domainname,omitempty"`

	// Use flag for: ddns_enable_option_fqdn
	UseDdnsEnableOptionFqdn *bool `json:"use_ddns_enable_option_fqdn,omitempty"`

	// Use flag for: ddns_generate_hostname
	UseDdnsGenerateHostname *bool `json:"use_ddns_generate_hostname,omitempty"`

	// Use flag for: ddns_ttl
	UseDdnsTtl *bool `json:"use_ddns_ttl,omitempty"`

	// Use flag for: domain_name
	UseDomainName *bool `json:"use_domain_name,omitempty"`

	// Use flag for: domain_name_servers
	UseDomainNameServers *bool `json:"use_domain_name_servers,omitempty"`

	// Use flag for: enable_ddns
	UseEnableDdns *bool `json:"use_enable_ddns,omitempty"`

	// Use flag for: logic_filter_rules
	UseLogicFilterRules *bool `json:"use_logic_filter_rules,omitempty"`

	// Use flag for: options
	UseOptions *bool `json:"use_options,omitempty"`

	// Use flag for: preferred_lifetime
	UsePreferredLifetime *bool `json:"use_preferred_lifetime,omitempty"`

	// Use flag for: recycle_leases
	UseRecycleLeases *bool `json:"use_recycle_leases,omitempty"`

	// Use flag for: update_dns_on_lease_renewal
	UseUpdateDnsOnLeaseRenewal *bool `json:"use_update_dns_on_lease_renewal,omitempty"`

	// Use flag for: valid_lifetime
	UseValidLifetime *bool `json:"use_valid_lifetime,omitempty"`

	// Use this method to set or retrieve the valid lifetime value of a DHCP IPv6
	// Network object.
	ValidLifetime *uint32 `json:"valid_lifetime,omitempty"`
}

func (IPv6NetworkTemplate) ObjectType() string {
	return "ipv6networktemplate"
}

func (obj IPv6NetworkTemplate) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"comment", "name"}
	}
	return obj.returnFields
}

// IPv6Range represents Infoblox object ipv6range.
// A DHCP IPv6 range defines the specified range of IP addresses in an IPv6
// network. A DHCP IPv6 range should be added for an IPv6 network so the
// Infoblox appliance can assign IP addresses within that specified range to
// DHCP clients. If the client is on an IPv6 network that is assigned a DHCP
// IPv6 range, the device distributes an available IP address from that range
// to the DHCP client, or to a DHCP relay agent if the request came through an
// agent. The DHCP IPv6 range should also be assigned with a device. If devices
// are in a grid, the particular member serving DHCP for the DHCP IPv6 range
// must be specified. If the server is an independent device, this device must
// be specified as the member that serves the DHCP IPv6 range.
type IPv6Range struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// Type of a DHCP IPv6 Range object. Valid values are "ADDRESS", "PREFIX", or
	// "BOTH". When the address type is "ADDRESS", values for the 'start_addr' and
	// 'end_addr' members are required. When the address type is "PREFIX", values
	// for 'ipv6_start_prefix', 'ipv6_end_prefix', and 'ipv6_prefix_bits' are
	// required. When the address type is "BOTH", values for 'start_addr',
	// 'end_addr', 'ipv6_start_prefix', 'ipv6_end_prefix', and 'ipv6_prefix_bits'
	// are all required.
	AddressType *string `json:"address_type,omitempty"`

	// Structure containing all cloud API related information for this object.
	CloudInfo *GridCloudapiInfo `json:"cloud_info,omitempty"`

	// Comment for the range; maximum 256 characters.
	Comment *string `json:"comment,omitempty"`

	// Determines whether a range is disabled or not. When this is set to False,
	// the range is enabled.
	Disable *bool `json:"disable,omitempty"`

	// Discover now status for this range.
	DiscoverNowStatus string `json:"discover_now_status,omitempty"`

	// The discovery basic poll settings for this range.
	DiscoveryBasicPollSettings *DiscoveryBasicpollsettings `json:"discovery_basic_poll_settings,omitempty"`

	// The discovery blackout setting for this range.
	DiscoveryBlackoutSetting *PropertiesBlackoutsetting `json:"discovery_blackout_setting,omitempty"`

	// The member that will run discovery for this range.
	DiscoveryMember *string `json:"discovery_member,omitempty"`

	// Determines whether a discovery is enabled or not for this range. When this
	// is set to False, the discovery for this range is disabled.
	EnableDiscovery *bool `json:"enable_discovery,omitempty"`

	// Determines if the discovery for the range should be immediately enabled.
	EnableImmediateDiscovery *bool `json:"enable_immediate_discovery,omitempty"`

	// The IPv6 Address end address of the DHCP IPv6 range.
	EndAddr *string `json:"end_addr,omitempty"`

	// The endpoints that provides data for the DHCP IPv6 Range object.
	EndpointSources []*CiscoiseEndpoint `json:"endpoint_sources,omitempty"`

	// These are ranges of IP addresses that the appliance does not use to assign
	// to clients. You can use these exclusion addresses as static IP addresses.
	// They contain the start and end addresses of the exclusion range, and
	// optionally,information about this exclusion range.
	Exclude []*Exclusionrange `json:"exclude,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// The IPv6 Address end prefix of the DHCP IPv6 range.
	Ipv6EndPrefix *string `json:"ipv6_end_prefix,omitempty"`

	// Prefix bits of the DHCP IPv6 range.
	Ipv6PrefixBits *uint32 `json:"ipv6_prefix_bits,omitempty"`

	// The IPv6 Address starting prefix of the DHCP IPv6 range.
	Ipv6StartPrefix *string `json:"ipv6_start_prefix,omitempty"`

	// This field contains the logic filters to be applied to this IPv6 range. This
	// list corresponds to the match rules that are written to the DHCPv6
	// configuration file.
	LogicFilterRules []*Logicfilterrule `json:"logic_filter_rules,omitempty"`

	// The member that will provide service for this range. {ipv6range:ipv6range}
	// needs to be set to 'MEMBER' if you want the server specified here to serve
	// the range. For searching by this field you should use a HTTP method that
	// contains a body (POST or PUT) with Dhcp Member structure dhcpmember and the
	// request should have option _method=GET.
	Member *Dhcpmember `json:"member,omitempty"`

	// This field contains the name of the Microsoft scope.
	Name *string `json:"name,omitempty"`

	// The network this range belongs to, in IPv6 Address/CIDR format.
	Network *string `json:"network,omitempty"`

	// The name of the network view in which this range resides.
	NetworkView *string `json:"network_view,omitempty"`

	// This field contains the Option filters to be applied to this IPv6 range. The
	// appliance uses the matching rules of these filters to select the address
	// range from which it assigns a lease.
	OptionFilterRules []*Filterrule `json:"option_filter_rules,omitempty"`

	// The port control blackout setting for this range.
	PortControlBlackoutSetting *PropertiesBlackoutsetting `json:"port_control_blackout_setting,omitempty"`

	// If the field is set to True, the leases are kept in the Recycle Bin until
	// one week after expiration. Otherwise, the leases are permanently deleted.
	RecycleLeases *bool `json:"recycle_leases,omitempty"`

	// Restarts the member service.
	RestartIfNeeded *bool `json:"restart_if_needed,omitempty"`

	// If the field is set to True, the discovery blackout setting will be used for
	// port control blackout setting.
	SamePortControlDiscoveryBlackout *bool `json:"same_port_control_discovery_blackout,omitempty"`

	// The type of server that is going to serve the range. Valid values are: *
	// MEMBER * NONE
	ServerAssociationType *string `json:"server_association_type,omitempty"`

	// The IPv6 Address starting address of the DHCP IPv6 range.
	StartAddr *string `json:"start_addr,omitempty"`

	// The DHCP IPv6 Range Cisco ISE subscribe settings.
	SubscribeSettings *CiscoiseSubscribesetting `json:"subscribe_settings,omitempty"`

	// If set on creation, the range will be created according to the values
	// specified in the named template.
	Template string `json:"template,omitempty"`

	// Use flag for: discovery_blackout_setting , port_control_blackout_setting,
	// same_port_control_discovery_blackout
	UseBlackoutSetting *bool `json:"use_blackout_setting,omitempty"`

	// Use flag for: discovery_basic_poll_settings
	UseDiscoveryBasicPollingSettings *bool `json:"use_discovery_basic_polling_settings,omitempty"`

	// Use flag for: discovery_member , enable_discovery
	UseEnableDiscovery *bool `json:"use_enable_discovery,omitempty"`

	// Use flag for: logic_filter_rules
	UseLogicFilterRules *bool `json:"use_logic_filter_rules,omitempty"`

	// Use flag for: recycle_leases
	UseRecycleLeases *bool `json:"use_recycle_leases,omitempty"`

	// Use flag for: subscribe_settings
	UseSubscribeSettings *bool `json:"use_subscribe_settings,omitempty"`
}

func (IPv6Range) ObjectType() string {
	return "ipv6range"
}

func (obj IPv6Range) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"comment", "end_addr", "network", "network_view", "start_addr"}
	}
	return obj.returnFields
}

// Ipv6rangetemplate represents Infoblox object ipv6rangetemplate.
// The IPv6 range template used to create an IPv6 range object in a quick and
// consistent way. The DHCP IPv6 range created from the DHCP IPv6 range
// template will inherit the properties defined in this template.
type Ipv6rangetemplate struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// Determines whether the IPv6 DHCP range template can be used to create
	// network objects in a cloud-computing deployment.
	CloudApiCompatible *bool `json:"cloud_api_compatible,omitempty"`

	// The IPv6 DHCP range template descriptive comment.
	Comment *string `json:"comment,omitempty"`

	// The vConnector member that the object should be delegated to when created
	// from the IPv6 DHCP range template. I assume that vConnector refers to VMware
	// vConnector.
	DelegatedMember *Dhcpmember `json:"delegated_member,omitempty"`

	// These are ranges of IPv6 addresses that the appliance does not use to assign
	// to clients. You can use these excluded addresses as static IPv6 addresses.
	// They contain the start and end addresses of the excluded range, and
	// optionally, information about this excluded range.
	Exclude []*Exclusionrangetemplate `json:"exclude,omitempty"`

	// This field contains the logic filters to be applied on this IPv6 range. This
	// list corresponds to the match rules that are written to the DHCPv6
	// configuration file.
	LogicFilterRules []*Logicfilterrule `json:"logic_filter_rules,omitempty"`

	// The member that will provide service for the IPv6 DHCP range. Set
	// {ipv6rangetemplate:ipv6rangetemplate} to 'MEMBER' if you want the server
	// specified here to serve the range. For searching by this field, use an HTTP
	// method that contains a body (POST or PUT) with MS DHCP server structure
	// msdhcpserver and the request should have option _method=GET.
	Member *Dhcpmember `json:"member,omitempty"`

	// Name of the IPv6 DHCP range template.
	Name *string `json:"name,omitempty"`

	// The number of addresses for the IPv6 DHCP range.
	NumberOfAddresses *uint32 `json:"number_of_addresses,omitempty"`

	// The start address offset for the IPv6 DHCP range.
	Offset *uint32 `json:"offset,omitempty"`

	// This field contains the Option filters to be applied to this IPv6 range. The
	// appliance uses the matching rules of these filters to select the address
	// range from which it assigns a lease.
	OptionFilterRules []*Filterrule `json:"option_filter_rules,omitempty"`

	// Determines whether the leases are kept in Recycle Bin until one week after
	// expiry. If this is set to False, the leases are permanently deleted.
	RecycleLeases *bool `json:"recycle_leases,omitempty"`

	// The type of server that is going to serve the IPv6 DHCP range.
	ServerAssociationType string `json:"server_association_type,omitempty"`

	// Use flag for: logic_filter_rules
	UseLogicFilterRules *bool `json:"use_logic_filter_rules,omitempty"`

	// Use flag for: recycle_leases
	UseRecycleLeases *bool `json:"use_recycle_leases,omitempty"`
}

func (Ipv6rangetemplate) ObjectType() string {
	return "ipv6rangetemplate"
}

func (obj Ipv6rangetemplate) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"comment", "name", "number_of_addresses", "offset"}
	}
	return obj.returnFields
}

// IPv6SharedNetwork represents Infoblox object ipv6sharednetwork.
// A shared network is a network segment to which you assign two or more
// subnets. When subnets in a shared network contain IP addresses that are
// available for dynamic allocation, the addresses are put into a common pool
// for allocation when client requests arise. When you create a shared network,
// the DHCP server can assign IP addresses to client requests from any subnet
// (that resides on the same network interface) in the shared network.
type IPv6SharedNetwork struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// Comment for the IPv6 shared network, maximum 256 characters.
	Comment *string `json:"comment,omitempty"`

	// The dynamic DNS domain name the appliance uses specifically for DDNS updates
	// for this network.
	DdnsDomainname *string `json:"ddns_domainname,omitempty"`

	// If this field is set to True, the DHCP server generates a hostname and
	// updates DNS with it when the DHCP client request does not contain a
	// hostname.
	DdnsGenerateHostname *bool `json:"ddns_generate_hostname,omitempty"`

	// This field controls whether only the DHCP server is allowed to update DNS,
	// regardless of the DHCP clients requests. Note that changes for this field
	// take effect only if ddns_use_option81 is True.
	DdnsServerAlwaysUpdates *bool `json:"ddns_server_always_updates,omitempty"`

	// The DNS update Time to Live (TTL) value of an IPv6 shared network object.
	// The TTL is a 32-bit unsigned integer that represents the duration, in
	// seconds, for which the update is cached. Zero indicates that the update is
	// not cached.
	DdnsTtl *uint32 `json:"ddns_ttl,omitempty"`

	// The support for DHCP Option 81 at the IPv6 shared network level.
	DdnsUseOption81 *bool `json:"ddns_use_option81,omitempty"`

	// Determines whether an IPv6 shared network is disabled or not. When this is
	// set to False, the IPv6 shared network is enabled.
	Disable *bool `json:"disable,omitempty"`

	// Use this method to set or retrieve the domain_name value of a DHCP IPv6
	// Shared Network object.
	DomainName *string `json:"domain_name,omitempty"`

	// Use this method to set or retrieve the dynamic DNS updates flag of a DHCP
	// IPv6 Shared Network object. The DHCP server can send DDNS updates to DNS
	// servers in the same Grid and to external DNS servers. This setting overrides
	// the member level settings.
	DomainNameServers []string `json:"domain_name_servers,omitempty"`

	// The dynamic DNS updates flag of an IPv6 shared network object. If set to
	// True, the DHCP server sends DDNS updates to DNS servers in the same Grid,
	// and to external DNS servers.
	EnableDdns *bool `json:"enable_ddns,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// This field contains the logic filters to be applied on the this IPv6 shared
	// network. This list corresponds to the match rules that are written to the
	// DHCPv6 configuration file.
	LogicFilterRules []*Logicfilterrule `json:"logic_filter_rules,omitempty"`

	// The name of the IPv6 Shared Network.
	Name *string `json:"name,omitempty"`

	// The name of the network view in which this IPv6 shared network resides.
	NetworkView string `json:"network_view,omitempty"`

	// A list of IPv6 networks belonging to the shared network Each individual list
	// item must be specified as an object containing a '_ref' parameter to a
	// network reference, for example:: [{ "_ref":
	// "ipv6network/ZG5zdHdvcmskMTAuAvMTYvMA", }] if the reference of the wanted
	// network is not known, it is possible to specify search parameters for the
	// network instead in the following way:: [{ "_ref": { 'network': 'aabb::/64',
	// } }] note that in this case the search must match exactly one network for
	// the assignment to be successful.
	Networks []*Ipv6Network `json:"networks,omitempty"`

	// An array of DHCP option dhcpoption structs that lists the DHCP options
	// associated with the object.
	Options []*Dhcpoption `json:"options,omitempty"`

	// Use this method to set or retrieve the preferred lifetime value of a DHCP
	// IPv6 Shared Network object.
	PreferredLifetime *uint32 `json:"preferred_lifetime,omitempty"`

	// This field controls whether the DHCP server updates DNS when a DHCP lease is
	// renewed.
	UpdateDnsOnLeaseRenewal *bool `json:"update_dns_on_lease_renewal,omitempty"`

	// Use flag for: ddns_domainname
	UseDdnsDomainname *bool `json:"use_ddns_domainname,omitempty"`

	// Use flag for: ddns_generate_hostname
	UseDdnsGenerateHostname *bool `json:"use_ddns_generate_hostname,omitempty"`

	// Use flag for: ddns_ttl
	UseDdnsTtl *bool `json:"use_ddns_ttl,omitempty"`

	// Use flag for: ddns_use_option81
	UseDdnsUseOption81 *bool `json:"use_ddns_use_option81,omitempty"`

	// Use flag for: domain_name
	UseDomainName *bool `json:"use_domain_name,omitempty"`

	// Use flag for: domain_name_servers
	UseDomainNameServers *bool `json:"use_domain_name_servers,omitempty"`

	// Use flag for: enable_ddns
	UseEnableDdns *bool `json:"use_enable_ddns,omitempty"`

	// Use flag for: logic_filter_rules
	UseLogicFilterRules *bool `json:"use_logic_filter_rules,omitempty"`

	// Use flag for: options
	UseOptions *bool `json:"use_options,omitempty"`

	// Use flag for: preferred_lifetime
	UsePreferredLifetime *bool `json:"use_preferred_lifetime,omitempty"`

	// Use flag for: update_dns_on_lease_renewal
	UseUpdateDnsOnLeaseRenewal *bool `json:"use_update_dns_on_lease_renewal,omitempty"`

	// Use flag for: valid_lifetime
	UseValidLifetime *bool `json:"use_valid_lifetime,omitempty"`

	// Use this method to set or retrieve the valid lifetime value of a DHCP IPv6
	// Shared Network object.
	ValidLifetime *uint32 `json:"valid_lifetime,omitempty"`
}

func (IPv6SharedNetwork) ObjectType() string {
	return "ipv6sharednetwork"
}

func (obj IPv6SharedNetwork) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"comment", "name", "network_view", "networks"}
	}
	return obj.returnFields
}

// Kerberoskey represents Infoblox object kerberoskey.
// GSS-TSIG (Generic Security Service Algorithm for Secret Key Transaction) is
// used to authenticate DDNS updates. It is a modified form of TSIG
// authentication that uses Kerberos v5 authentication system.
type Kerberoskey struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The Kerberos domain name.
	Domain string `json:"domain,omitempty"`

	// The Kerberos key encryption type.
	Enctype string `json:"enctype,omitempty"`

	// Determines whether the Kerberos key is assigned to the Grid or Grid member.
	InUse bool `json:"in_use,omitempty"`

	// The list of hostnames and services of Grid members where the key is assigned
	// or Grid/DHCP4 or Grid/DHCP6 or Grid/DNS.
	Members []string `json:"members,omitempty"`

	// The principal of the Kerberos key object.
	Principal string `json:"principal,omitempty"`

	// The timestamp of the Kerberos key upload operation.
	UploadTimestamp *UnixTime `json:"upload_timestamp,omitempty"`

	// The Kerberos key version number (KVNO).
	Version uint32 `json:"version,omitempty"`
}

func (Kerberoskey) ObjectType() string {
	return "kerberoskey"
}

func (obj Kerberoskey) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"domain", "enctype", "in_use", "principal", "version"}
	}
	return obj.returnFields
}

// LdapAuthService represents Infoblox object ldap_auth_service.
// LDAP (Lightweight Directory Access Protocol) is an internet protocol for
// accessing distributed directory services. The appliance can authenticate
// admin accounts by verifying user names and passwords against LDAP. This
// object is used to configure the LDAP authentication service.
type LdapAuthService struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The LDAP descriptive comment.
	Comment *string `json:"comment,omitempty"`

	// Determines if the LDAP authentication service is disabled.
	Disable *bool `json:"disable,omitempty"`

	// The mapping LDAP fields to extensible attributes.
	EaMapping []*LdapEamapping `json:"ea_mapping,omitempty"`

	// The name of the LDAP attribute that defines group membership.
	LdapGroupAttribute *string `json:"ldap_group_attribute,omitempty"`

	// The LDAP group authentication type.
	LdapGroupAuthenticationType string `json:"ldap_group_authentication_type,omitempty"`

	// The LDAP userid attribute that is used for search.
	LdapUserAttribute *string `json:"ldap_user_attribute,omitempty"`

	// The LDAP authentication mode.
	Mode string `json:"mode,omitempty"`

	// The LDAP authentication service name.
	Name *string `json:"name,omitempty"`

	// The period of time in seconds to wait before trying to contact a LDAP server
	// that has been marked as 'DOWN'.
	RecoveryInterval *uint32 `json:"recovery_interval,omitempty"`

	// The maximum number of LDAP authentication attempts.
	Retries *uint32 `json:"retries,omitempty"`

	// The starting point of the LDAP search.
	SearchScope string `json:"search_scope,omitempty"`

	// The list of LDAP servers used for authentication.
	Servers []*LdapServer `json:"servers,omitempty"`

	// The LDAP authentication timeout in seconds.
	Timeout *uint32 `json:"timeout,omitempty"`
}

func (LdapAuthService) ObjectType() string {
	return "ldap_auth_service"
}

func (obj LdapAuthService) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"comment", "disable", "ldap_user_attribute", "mode", "name"}
	}
	return obj.returnFields
}

// Lease represents Infoblox object lease.
// A DHCP lease is an IP address that the Infoblox appliance assigns to a DHCP
// client for a certain amount of time. When the appliance assigns a lease, it
// also assignes other information, such as the time when the appliance issued
// or freed an IP address, the MAC address and host name of the client that
// received the IP address, and the Grid member that supplied the lease. The
// DHCP Lease object allows the appliance to store and correlate DHCP lease
// information over the lifetime of a lease.
type Lease struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The IPv4 Address or IPv6 Address of the lease.
	Address string `json:"address,omitempty"`

	// The billing_class value of a DHCP Lease object. This field specifies the
	// class to which this lease is currently billed. This field is for IPv4 leases
	// only.
	BillingClass string `json:"billing_class,omitempty"`

	// The binding state for the current lease. Following are some of the values
	// this field can be set to: * ABANDONED: The Infoblox appliance cannot lease
	// this IP address because the appliance received a response when it pinged the
	// address. * ACTIVE: The lease is currently in use by a DHCP client. *
	// EXPIRED: The lease was in use, but the DHCP client never renewed it, so it
	// is no longer valid. * FREE: The lease is available for clients to use. *
	// RELEASED: The DHCP client returned the lease to the appliance.
	BindingState string `json:"binding_state,omitempty"`

	// The client_hostname of a DHCP Lease object. This field specifies the host
	// name that the DHCP client sends to the Infoblox appliance using DHCP option
	// 12.
	ClientHostname string `json:"client_hostname,omitempty"`

	// The CLTT (Client Last Transaction Time) value of a DHCP Lease object. This
	// field specifies the time of the last transaction with the DHCP client for
	// this lease.
	Cltt *UnixTime `json:"cltt,omitempty"`

	// The discovered data for this lease.
	DiscoveredData *Discoverydata `json:"discovered_data,omitempty"`

	// The end time value of a DHCP Lease object. This field specifies the time
	// when a lease ended.
	Ends *UnixTime `json:"ends,omitempty"`

	// DHCP fingerprint for the lease.
	Fingerprint string `json:"fingerprint,omitempty"`

	// The hardware type of a DHCP Lease object. This field specifies the MAC
	// address of the network interface on which the lease will be used. This field
	// is for IPv4 leases only.
	Hardware string `json:"hardware,omitempty"`

	// The DUID value for this lease. This field is only applicable for IPv6
	// leases.
	Ipv6Duid string `json:"ipv6_duid,omitempty"`

	// The interface ID of an IPv6 address that the Infoblox appliance leased to
	// the DHCP client. This field is for IPv6 leases only.
	Ipv6Iaid string `json:"ipv6_iaid,omitempty"`

	// The preferred lifetime value of an IPv6 address that the Infoblox appliance
	// leased to the DHCP client. This field is for IPv6 leases only.
	Ipv6PreferredLifetime uint32 `json:"ipv6_preferred_lifetime,omitempty"`

	// Prefix bits for this lease. This field is for IPv6 leases only.
	Ipv6PrefixBits uint32 `json:"ipv6_prefix_bits,omitempty"`

	// This flag reflects whether the MAC address for this lease is invalid.
	IsInvalidMac bool `json:"is_invalid_mac,omitempty"`

	// The Microsoft Active Directory user related information.
	MsAdUserData *MsserverAduserData `json:"ms_ad_user_data,omitempty"`

	// The network, in "network/netmask" format, with which this lease is
	// associated.
	Network string `json:"network,omitempty"`

	// The name of the network view in which this lease resides.
	NetworkView string `json:"network_view,omitempty"`

	// If this field is set to True, the lease does not have an end time.
	NeverEnds bool `json:"never_ends,omitempty"`

	// If this field is set to True, the lease does not have a start time.
	NeverStarts bool `json:"never_starts,omitempty"`

	// The subsequent binding state when the current lease expires. This field is
	// for IPv4 leases only. Following are some of the values this field can be set
	// to: * ABANDONED: The Infoblox appliance cannot lease this IP address because
	// the appliance received a response when it pinged the address. * ACTIVE: The
	// lease is currently in use by a DHCP client. * EXPIRED: The lease was in use,
	// but the DHCP client never renewed it, so it is no longer valid. * FREE: The
	// lease is available for clients to use. * RELEASED: The DHCP client returned
	// the lease to the appliance.
	NextBindingState string `json:"next_binding_state,omitempty"`

	// The list of commands to be executed when the lease is granted.
	OnCommit string `json:"on_commit,omitempty"`

	// The list of commands to be executed when the lease expires.
	OnExpiry string `json:"on_expiry,omitempty"`

	// The list of commands to be executed when the lease is released.
	OnRelease string `json:"on_release,omitempty"`

	// The option value of a DHCP Lease object. This field specifies the agent
	// circuit ID and remote ID sent by a DHCP relay agent in DHCP option 82. This
	// field is for IPv4 leases only.
	Option string `json:"option,omitempty"`

	// This field determines whether the lease is an IPv4 or IPv6 address.
	Protocol string `json:"protocol,omitempty"`

	// This field represents the "Remote ID" sub-option of DHCP option 82. Remote
	// ID can be in ASCII form (e.g. ``"abcd"``) or in colon-separated HEX form
	// (e.g. ``1:2:ab:cd``). HEX representation is used only when the sub-option
	// value contains unprintable characters. If a remote ID sub-option value is in
	// ASCII form, it is always enclosed in quotes to prevent ambiguous values
	// (e.g. ``"10:20"`` - ASCII 5-byte string; ``10:20`` - HEX 2-byte value). *
	// ASCII representation is used if the remote ID sub-option contains only
	// printable ASCII characters (ASCII characters in range ``x20-0x7E``). * The
	// backslash symbol (``\``) is used as an escape symbol to escape the quote
	// symbol (``"``) in an ASCII string. * Double backslashes (``\\``) are used to
	// represent the backslash symbol (``\``) in an ASCII string. * HEX
	// representation is used only when the remote ID sub-option value contains
	// unprintable characters and is normalized as follows: * starting zero is
	// removed from digits: ``1``, ``a`` - Valid; ``01``, ``0a`` - Invalid; *
	// lowercase characters are used for symbols: ``fa`` - Valid; ``FA`` - Invalid.
	// NIOS does not support the convertion between HEX and ASCII formats. Searches
	// are performed using the exact same format and value as the sub-option is
	// represented. Query examples assume the following leases are stored in the
	// database: .. tabularcolumns:: |p{1in}|p{3in}|p{2in}| =========
	// ========================== ============================ Number Option field
	// Extracted remote ID field ========= ==========================
	// ============================ Lease01 agent.remote-id= "00152654358700"
	// "00152654358700" agent.circuit-id= "BX1-PORT-003" Lease02
	// agent.remote-id="Dhcp "Dhcp Relay 10" Relay 10" agent.circuit-id="Port008"
	// Lease03 agent.remote-id="00:01:02" "00:01:02" Lease04 agent.remote-id=0:1:2
	// 0:1:2 Lease05 agent.remote-id=02:03 2:3 Lease06 agent.remote-id=10:20 10:20
	// Lease07 agent.circuit-id= "no-remote-id" =========
	// ========================== ============================ Expected results: ..
	// tabularcolumns:: |p{1.5in}|p{1.5in}|p{3in}| =========================
	// ==================== ============================= Query Returned leases
	// Comments ========================= ====================
	// ============================= remote_id=01:02 None EXACT query. No results
	// are expected. remote_id="Dhcp Relay 10" Lease02 EXACT query for an ASCII
	// value. remote_id=0:1:2 Lease04 EXACT query for a HEX value.
	// remote_id=00:01:02 None EXACT query for a HEX value. No results are expected
	// as the search value is not normalized to the same format used in the
	// database. remote_id~=10 Lease02, Lease06 REGEX query. remote_id~=^".*1
	// Lease01, Lease02, REGEX query. Only ASCII Lease03 values are expected due to
	// the starting quote (``"``) in the search value. remote_id~=^[^"]*2 Lease04,
	// Lease05, REGEX query. Only HEX values Lease06 are expected as the starting
	// quote (``"``) is excluded from the search value. remote_id="" None EXACT
	// query. No results are expected as no leases that contain an empty remote ID
	// value exist in the database. ID value in the database. remote_id~=""
	// Lease01, Lease02, REGEX query. This query is Lease03, Lease04, expected to
	// match any Lease05, Lease06 lease that contain remote ID set to any value.
	// ========================= ==================== =============================
	// **NOTE:** Lease07 is not expected to be returned when searching for the
	// remote ID sub-option.
	RemoteId string `json:"remote_id,omitempty"`

	// The IP address of the server that sends an active lease to a client.
	ServedBy string `json:"served_by,omitempty"`

	// The host name of the Grid member or Microsoft DHCP server that issues the
	// lease.
	ServerHostName string `json:"server_host_name,omitempty"`

	// The start time of a DHCP Lease object. This field specifies the time when
	// the lease starts.
	Starts *UnixTime `json:"starts,omitempty"`

	// The TSFP (Time Sent From Partner) value of a DHCP Lease object. This field
	// specifies the time that the current lease state ends, from the point of view
	// of a remote DHCP failover peer. This field is for IPv4 leases only.
	Tsfp *UnixTime `json:"tsfp,omitempty"`

	// The TSTP (Time Sent To Partner) value of a DHCP Lease object. This field
	// specifies the time that the current lease state ends, from the point of view
	// of a local DHCP failover peer. This field is for IPv4 leases only.
	Tstp *UnixTime `json:"tstp,omitempty"`

	// The UID (User ID) value of a DHCP Lease object. This field specifies the
	// client identifier that the DHCP client sends the Infoblox appliance (in DHCP
	// option 61) when it acquires the lease. Not all DHCP clients send a UID. This
	// field is for IPv4 leases only.
	Uid string `json:"uid,omitempty"`

	// The user name that the server has associated with a DHCP Lease object.
	Username string `json:"username,omitempty"`

	// The variable value of a DHCP Lease object. This field keeps all variables
	// related to the DDNS update of the DHCP lease. The variables related to the
	// DDNS updates of the DHCP lease. The variables can be one of the following:
	// ddns-text: The ddns-text variable is used to record the value of the
	// client's TXT identification record when the interim DDNS update style has
	// been used to update the DNS service for a particular lease. ddns-fwd-name:
	// When a DDNS update was successfully completed, the ddns-fwd-name variable
	// records the value of the name used when the client's A record was updated.
	// The server may have used this name when it updated the client's PTR record.
	// ddns-client-fqdn: If the server is configured to use the interim DDNS update
	// style and is also configured to allow clients to update their own FQDNs, the
	// ddns-client-fqdn variable records the name that the client used when it
	// updated its own FQDN. This is also the name that the server used to update
	// the client's PTR record. ddns-rev-name: If the server successfully updates
	// the client's PTR record, this variable will record the name that the DHCP
	// server used for the PTR record. The name to which the PTR record points will
	// be either the ddns-fwd-name or the ddns-client-fqdn.
	Variable string `json:"variable,omitempty"`
}

func (Lease) ObjectType() string {
	return "lease"
}

func (obj Lease) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"address", "network_view"}
	}
	return obj.returnFields
}

// LicenseGridwide represents Infoblox object license:gridwide.
// This object represents the Grid-wide license.
type LicenseGridwide struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The license expiration status.
	ExpirationStatus string `json:"expiration_status,omitempty"`

	// The expiration timestamp of the license.
	ExpiryDate *UnixTime `json:"expiry_date,omitempty"`

	// The license string.
	Key string `json:"key,omitempty"`

	// The license limit value.
	Limit string `json:"limit,omitempty"`

	// The license limit context.
	LimitContext string `json:"limit_context,omitempty"`

	// The license type.
	Type string `json:"type,omitempty"`
}

func (LicenseGridwide) ObjectType() string {
	return "license:gridwide"
}

func (obj LicenseGridwide) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"type"}
	}
	return obj.returnFields
}

// LocaluserAuthservice represents Infoblox object localuser:authservice.
// The object represents a local authentication service for authenticating
// users against the local database.
type LocaluserAuthservice struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The local user authentication service comment.
	Comment string `json:"comment,omitempty"`

	// Flag that indicates whether the local user authentication service is enabled
	// or not.
	Disabled bool `json:"disabled,omitempty"`

	// The name of the local user authentication service.
	Name string `json:"name,omitempty"`
}

func (LocaluserAuthservice) ObjectType() string {
	return "localuser:authservice"
}

func (obj LocaluserAuthservice) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"comment", "disabled", "name"}
	}
	return obj.returnFields
}

// MACFilterAddress represents Infoblox object macfilteraddress.
// MAC filter address is part of the MAC filter.
type MACFilterAddress struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The absolute UNIX time (in seconds) since the address was last
	// authenticated.
	AuthenticationTime *UnixTime `json:"authentication_time,omitempty"`

	// Comment for the MAC filter address; maximum 256 characters.
	Comment *string `json:"comment,omitempty"`

	// The absolute UNIX time (in seconds) until the address expires.
	ExpirationTime *UnixTime `json:"expiration_time,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// Name of the MAC filter to which this address belongs.
	Filter *string `json:"filter,omitempty"`

	// DHCP fingerprint for the address.
	Fingerprint string `json:"fingerprint,omitempty"`

	// Guest custom field 1.
	GuestCustomField1 *string `json:"guest_custom_field1,omitempty"`

	// Guest custom field 2.
	GuestCustomField2 *string `json:"guest_custom_field2,omitempty"`

	// Guest custom field 3.
	GuestCustomField3 *string `json:"guest_custom_field3,omitempty"`

	// Guest custom field 4.
	GuestCustomField4 *string `json:"guest_custom_field4,omitempty"`

	// Guest e-mail.
	GuestEmail *string `json:"guest_email,omitempty"`

	// Guest first name.
	GuestFirstName *string `json:"guest_first_name,omitempty"`

	// Guest last name.
	GuestLastName *string `json:"guest_last_name,omitempty"`

	// Guest middle name.
	GuestMiddleName *string `json:"guest_middle_name,omitempty"`

	// Guest phone number.
	GuestPhone *string `json:"guest_phone,omitempty"`

	// Determines if the user has been authenticated or not.
	IsRegisteredUser bool `json:"is_registered_user,omitempty"`

	// MAC Address.
	Mac *string `json:"mac,omitempty"`

	// Determines if MAC address expiration is enabled or disabled.
	NeverExpires *bool `json:"never_expires,omitempty"`

	// Reserved for future use.
	ReservedForInfoblox *string `json:"reserved_for_infoblox,omitempty"`

	// Username for authenticated DHCP purposes.
	Username *string `json:"username,omitempty"`
}

func (MACFilterAddress) ObjectType() string {
	return "macfilteraddress"
}

func (obj MACFilterAddress) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"authentication_time", "comment", "expiration_time", "filter", "guest_custom_field1", "guest_custom_field2", "guest_custom_field3", "guest_custom_field4", "guest_email", "guest_first_name", "guest_last_name", "guest_middle_name", "guest_phone", "is_registered_user", "mac", "never_expires", "reserved_for_infoblox", "username"}
	}
	return obj.returnFields
}

// Mastergrid represents Infoblox object mastergrid.
// This object represents the Master Grid. The Master Grid object is
// automatically generated when a Grid successfully joins the Master Grid.
type Mastergrid struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The domain name or IP address for the Master Grid.
	Address *string `json:"address,omitempty"`

	// Determines if the sub-grid is currently disabled.
	ConnectionDisabled bool `json:"connection_disabled,omitempty"`

	// The timestamp that indicates when the connection to the Master Grid was
	// established.
	ConnectionTimestamp *UnixTime `json:"connection_timestamp,omitempty"`

	// The detached flag for the Master Grid.
	Detached bool `json:"detached,omitempty"`

	// Determines if the Master Grid is enabled.
	Enable *bool `json:"enable,omitempty"`

	// The flag shows if the Grid has joined the Master Grid.
	Joined bool `json:"joined,omitempty"`

	// The Master Grid's last event.
	LastEvent string `json:"last_event,omitempty"`

	// The details of the Master Grid's last event.
	LastEventDetails string `json:"last_event_details,omitempty"`

	// The timestamp or the last synchronization operation with the Master Grid.
	LastSyncTimestamp *UnixTime `json:"last_sync_timestamp,omitempty"`

	// The Master Grid port to which the Grid connects.
	Port *uint32 `json:"port,omitempty"`

	// The Master Grid's status.
	Status string `json:"status,omitempty"`

	// The flag shows if the MGMT port was used to join the Grid.
	UseMgmtPort bool `json:"use_mgmt_port,omitempty"`
}

func (Mastergrid) ObjectType() string {
	return "mastergrid"
}

func (obj Mastergrid) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"address", "enable", "port"}
	}
	return obj.returnFields
}

// Member represents Infoblox object member.
// This object represents the Infoblox Grid Member.
type Member struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The active server of a Grid member.
	ActivePosition string `json:"active_position,omitempty"`

	// The additional IP list of a Grid member. This list contains additional
	// interface information that can be used at the member level. Note that
	// interface structure(s) with interface type set to 'MGMT' are not supported.
	AdditionalIpList []*Interface `json:"additional_ip_list,omitempty"`

	// Member level settings for automated traffic capture.
	AutomatedTrafficCaptureSetting *SettingAutomatedtrafficcapture `json:"automated_traffic_capture_setting,omitempty"`

	// The BGP configuration for anycast for a Grid member.
	BgpAs []*Bgpas `json:"bgp_as,omitempty"`

	// A descriptive comment of the Grid member.
	Comment *string `json:"comment,omitempty"`

	// Address configuration type.
	ConfigAddrType string `json:"config_addr_type,omitempty"`

	// CSP portal on-prem host access key
	CspAccessKey []string `json:"csp_access_key,omitempty"`

	// csp setting at member level
	CspMemberSetting *MemberCspmembersetting `json:"csp_member_setting,omitempty"`

	// DNS resolver setting for member.
	DnsResolverSetting *SettingDnsresolver `json:"dns_resolver_setting,omitempty"`

	// The DSCP (Differentiated Services Code Point) value.
	Dscp *uint32 `json:"dscp,omitempty"`

	// The email setting for member.
	EmailSetting *SettingEmail `json:"email_setting,omitempty"`

	// If set to True, the member has two physical nodes (HA pair).
	EnableHa *bool `json:"enable_ha,omitempty"`

	// Determines if the LOM functionality is enabled or not.
	EnableLom *bool `json:"enable_lom,omitempty"`

	// Determines if the member will redirect GUI connections to the Grid Master or
	// not.
	EnableMemberRedirect *bool `json:"enable_member_redirect,omitempty"`

	// If set to True and the member object is a Grid Master Candidate, then
	// read-only API access is enabled.
	EnableRoApiAccess *bool `json:"enable_ro_api_access,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// The list of external syslog backup servers.
	ExternalSyslogBackupServers []*Extsyslogbackupserver `json:"external_syslog_backup_servers,omitempty"`

	// Determines if external syslog servers should be enabled.
	ExternalSyslogServerEnable *bool `json:"external_syslog_server_enable,omitempty"`

	// The host name of the Grid member.
	HostName *string `json:"host_name,omitempty"`

	// IPV6 setting for member.
	Ipv6Setting *Ipv6setting `json:"ipv6_setting,omitempty"`

	// List of IPv6 static routes.
	Ipv6StaticRoutes []*Ipv6networksetting `json:"ipv6_static_routes,omitempty"`

	// Determines if a Grid member supports DSCP (Differentiated Services Code
	// Point).
	IsDscpCapable bool `json:"is_dscp_capable,omitempty"`

	// If this is set to "true", the LAN2 port is enabled as an independent port or
	// as a port for failover purposes.
	Lan2Enabled *bool `json:"lan2_enabled,omitempty"`

	// Settings for the Grid member LAN2 port if 'lan2_enabled' is set to "true".
	Lan2PortSetting *Lan2portsetting `json:"lan2_port_setting,omitempty"`

	// Determines if the Liquid Crystal Display (LCD) input buttons on the front
	// panel of the appliance are enabled or not.
	LcdInput *bool `json:"lcd_input,omitempty"`

	// The Network configurations for LOM.
	LomNetworkConfig []*Lomnetworkconfig `json:"lom_network_config,omitempty"`

	// The list of LOM users.
	LomUsers []*Lomuser `json:"lom_users,omitempty"`

	// Determines if a Grid member is a Grid Master Candidate or not. This flag
	// enables the Grid member to assume the role of the Grid Master as a disaster
	// recovery measure.
	MasterCandidate *bool `json:"master_candidate,omitempty"`

	// Configure communication type for various services.
	MemberServiceCommunication []*Memberservicecommunication `json:"member_service_communication,omitempty"`

	// Settings for the member MGMT port.
	MgmtPortSetting *Mgmtportsetting `json:"mgmt_port_setting,omitempty"`

	// Extensible attributes Topology database build time.
	MmdbEaBuildTime *UnixTime `json:"mmdb_ea_build_time,omitempty"`

	// GeoIP Topology database build time.
	MmdbGeoipBuildTime *UnixTime `json:"mmdb_geoip_build_time,omitempty"`

	// NAT settings for the member.
	NatSetting *Natsetting `json:"nat_setting,omitempty"`

	// The node information list with detailed status report on the operations of
	// the Grid Member.
	NodeInfo []*Nodeinfo `json:"node_info,omitempty"`

	// The member Network Time Protocol (NTP) settings.
	NTPSetting *MemberNtp `json:"ntp_setting,omitempty"`

	// The OSPF area configuration (for anycast) list for a Grid member.
	OspfList []*Ospf `json:"ospf_list,omitempty"`

	// The ARP protocol setting on the passive node of an HA pair. If you do not
	// specify a value, the default value is "false". You can only set this value
	// to "true" if the member is an HA pair.
	PassiveHaArpEnabled *bool `json:"passive_ha_arp_enabled,omitempty"`

	// Hardware Platform.
	Platform string `json:"platform,omitempty"`

	// Pre-provisioning information.
	PreProvisioning *Preprovision `json:"pre_provisioning,omitempty"`

	// Set this flag to "true" to prevent the deletion of the member if any
	// delegated object remains attached to it.
	PreserveIfOwnsDelegation *bool `json:"preserve_if_owns_delegation,omitempty"`

	// If set to True, superuser admins can access the Infoblox CLI from a remote
	// location using an SSH (Secure Shell) v2 client.
	RemoteConsoleAccessEnable *bool `json:"remote_console_access_enable,omitempty"`

	// Virutal router identifier. Provide this ID if "ha_enabled" is set to "true".
	// This is a unique VRID number (from 1 to 255) for the local subnet.
	RouterId *uint32 `json:"router_id,omitempty"`

	// The service status list of a grid member.
	ServiceStatus []*Memberservicestatus `json:"service_status,omitempty"`

	// Configure all services to the given type.
	ServiceTypeConfiguration string `json:"service_type_configuration,omitempty"`

	// The Grid Member SNMP settings.
	SnmpSetting *SettingSnmp `json:"snmp_setting,omitempty"`

	// List of static routes.
	StaticRoutes []*SettingNetwork `json:"static_routes,omitempty"`

	// Determines if support access for the Grid member should be enabled.
	SupportAccessEnable *bool `json:"support_access_enable,omitempty"`

	// The information string for support access.
	SupportAccessInfo string `json:"support_access_info,omitempty"`

	// The Grid Member syslog proxy settings.
	SyslogProxySetting *SettingSyslogproxy `json:"syslog_proxy_setting,omitempty"`

	// The list of external syslog servers.
	SyslogServers []*Syslogserver `json:"syslog_servers,omitempty"`

	// The maximum size for the syslog file expressed in megabytes.
	SyslogSize *uint32 `json:"syslog_size,omitempty"`

	// Determines the list of threshold traps. The user can only change the values
	// for each trap or remove traps.
	ThresholdTraps []*Thresholdtrap `json:"threshold_traps,omitempty"`

	// The time zone of the Grid member. The UTC string that represents the time
	// zone, such as "(UTC - 5:00) Eastern Time (US and Canada)".
	TimeZone *string `json:"time_zone,omitempty"`

	// Grid level settings for enabling authoritative DNS latency thresholds for
	// automated traffic capture.
	TrafficCaptureAuthDnsSetting *SettingTriggeruthdnslatency `json:"traffic_capture_auth_dns_setting,omitempty"`

	// Member level settings for enabling DNS cache hit ratio threshold for
	// automated traffic capture.
	TrafficCaptureChrSetting *SettingTrafficcapturechr `json:"traffic_capture_chr_setting,omitempty"`

	// Member level settings for enabling DNS query per second threshold for
	// automated traffic capture.
	TrafficCaptureQpsSetting *SettingTrafficcaptureqps `json:"traffic_capture_qps_setting,omitempty"`

	// Grid level settings for enabling recursive DNS latency thresholds for
	// automated traffic capture.
	TrafficCaptureRecDnsSetting *SettingTriggerrecdnslatency `json:"traffic_capture_rec_dns_setting,omitempty"`

	// Grid level settings for enabling count for concurrent outgoing recursive
	// queries for automated traffic capture.
	TrafficCaptureRecQueriesSetting *SettingTriggerrecqueries `json:"traffic_capture_rec_queries_setting,omitempty"`

	// Determines configuration of the trap notifications.
	TrapNotifications []*Trapnotification `json:"trap_notifications,omitempty"`

	// The name of the upgrade group to which this Grid member belongs.
	UpgradeGroup *string `json:"upgrade_group,omitempty"`

	// This flag is the use flag for enabling automated traffic capture based on
	// DNS cache ratio thresholds.
	UseAutomatedTrafficCapture *bool `json:"use_automated_traffic_capture,omitempty"`

	// Use flag for: dns_resolver_setting
	UseDnsResolverSetting *bool `json:"use_dns_resolver_setting,omitempty"`

	// Use flag for: dscp
	UseDscp *bool `json:"use_dscp,omitempty"`

	// Use flag for: email_setting
	UseEmailSetting *bool `json:"use_email_setting,omitempty"`

	// Use flag for: enable_lom
	UseEnableLom *bool `json:"use_enable_lom,omitempty"`

	// Use flag for: enable_member_redirect
	UseEnableMemberRedirect *bool `json:"use_enable_member_redirect,omitempty"`

	// Use flag for: external_syslog_backup_servers
	UseExternalSyslogBackupServers *bool `json:"use_external_syslog_backup_servers,omitempty"`

	// Use flag for: lcd_input
	UseLcdInput *bool `json:"use_lcd_input,omitempty"`

	// Use flag for: remote_console_access_enable
	UseRemoteConsoleAccessEnable *bool `json:"use_remote_console_access_enable,omitempty"`

	// Use flag for: snmp_setting
	UseSnmpSetting *bool `json:"use_snmp_setting,omitempty"`

	// Use flag for: support_access_enable
	UseSupportAccessEnable *bool `json:"use_support_access_enable,omitempty"`

	// Use flag for: external_syslog_server_enable , syslog_servers,
	// syslog_proxy_setting, syslog_size
	UseSyslogProxySetting *bool `json:"use_syslog_proxy_setting,omitempty"`

	// Use flag for: threshold_traps
	UseThresholdTraps *bool `json:"use_threshold_traps,omitempty"`

	// Use flag for: time_zone
	UseTimeZone *bool `json:"use_time_zone,omitempty"`

	// This flag is the use flag for enabling automated traffic capture based on
	// authorative DNS latency.
	UseTrafficCaptureAuthDns *bool `json:"use_traffic_capture_auth_dns,omitempty"`

	// This flag is the use flag for automated traffic capture settings at member
	// level.
	UseTrafficCaptureChr *bool `json:"use_traffic_capture_chr,omitempty"`

	// This flag is the use flag for enabling automated traffic capture based on
	// DNS querie per second thresholds.
	UseTrafficCaptureQps *bool `json:"use_traffic_capture_qps,omitempty"`

	// This flag is the use flag for enabling automated traffic capture based on
	// recursive DNS latency.
	UseTrafficCaptureRecDns *bool `json:"use_traffic_capture_rec_dns,omitempty"`

	// This flag is the use flag for enabling automated traffic capture based on
	// outgoing recursive queries.
	UseTrafficCaptureRecQueries *bool `json:"use_traffic_capture_rec_queries,omitempty"`

	// Use flag for: trap_notifications
	UseTrapNotifications *bool `json:"use_trap_notifications,omitempty"`

	// Specify "true" to use VRRPv4 or "false" to use VRRPv6.
	UseV4Vrrp *bool `json:"use_v4_vrrp,omitempty"`

	// The network settings for the Grid member.
	VipSetting *SettingNetwork `json:"vip_setting,omitempty"`

	// The VPN maximum transmission unit (MTU).
	VpnMtu *uint32 `json:"vpn_mtu,omitempty"`
}

func (Member) ObjectType() string {
	return "member"
}

func (obj Member) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"config_addr_type", "host_name", "platform", "service_type_configuration"}
	}
	return obj.returnFields
}

func NewMember(member Member) *Member {
	res := member
	returnFields := []string{"host_name", "node_info", "time_zone"}
	res.returnFields = returnFields
	return &res
}

// MemberDHCPProperties represents Infoblox object member:dhcpproperties.
// This object represents a subset of the Infoblox Member DHCP properties.
type MemberDHCPProperties struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The Authentication Server Group object associated with this member.
	AuthServerGroup *string `json:"auth_server_group,omitempty"`

	// The captive portal responsible for authenticating this DHCP member.
	AuthnCaptivePortal *string `json:"authn_captive_portal,omitempty"`

	// The MAC filter representing the authenticated range.
	AuthnCaptivePortalAuthenticatedFilter *string `json:"authn_captive_portal_authenticated_filter,omitempty"`

	// The flag that controls if this DHCP member is enabled for captive portal
	// authentication.
	AuthnCaptivePortalEnabled *bool `json:"authn_captive_portal_enabled,omitempty"`

	// The MAC filter representing the guest range.
	AuthnCaptivePortalGuestFilter *string `json:"authn_captive_portal_guest_filter,omitempty"`

	// The flag that controls if this DHCP member can send authentication requests
	// to an authentication server group.
	AuthnServerGroupEnabled *bool `json:"authn_server_group_enabled,omitempty"`

	// The authority flag of a Grid member. This flag specifies if a DHCP server is
	// authoritative for a domain.
	Authority *bool `json:"authority,omitempty"`

	// The name of a file that DHCP clients need to boot. This setting overrides
	// the Grid level setting.
	Bootfile *string `json:"bootfile,omitempty"`

	// The name of the server on which a boot file is stored. This setting
	// overrides the Grid level setting.
	Bootserver *string `json:"bootserver,omitempty"`

	// The member DDNS domain name value.
	DdnsDomainname *string `json:"ddns_domainname,omitempty"`

	// Determines the ability of a member DHCP server to generate a host name and
	// update DNS with this host name when it receives a DHCP REQUEST message that
	// does not include a host name.
	DdnsGenerateHostname *bool `json:"ddns_generate_hostname,omitempty"`

	// Determines the retry interval when the member DHCP server makes repeated
	// attempts to send DDNS updates to a DNS server.
	DdnsRetryInterval *uint32 `json:"ddns_retry_interval,omitempty"`

	// Determines that only the DHCP server is allowed to update DNS, regardless of
	// the requests from the DHCP clients. This setting overrides the Grid level
	// setting.
	DdnsServerAlwaysUpdates *bool `json:"ddns_server_always_updates,omitempty"`

	// The DDNS TTL (Dynamic DNS Time To Live) value specifies the number of
	// seconds an IP address for the name is cached.
	DdnsTtl *uint32 `json:"ddns_ttl,omitempty"`

	// Determines if the member DHCP server's ability to update the A and PTR
	// records with a fixed address is enabled or not.
	DdnsUpdateFixedAddresses *bool `json:"ddns_update_fixed_addresses,omitempty"`

	// Determines if support for option 81 is enabled or not.
	DdnsUseOption81 *bool `json:"ddns_use_option81,omitempty"`

	// An ordered list of zone primaries that will receive DDNS updates.
	DdnsZonePrimaries []*Dhcpddns `json:"ddns_zone_primaries,omitempty"`

	// Determines if a BOOTP server denies BOOTP request or not. This setting
	// overrides the Grid level setting.
	DenyBootp *bool `json:"deny_bootp,omitempty"`

	// The percentage of the total DHCP utilization of DHCP objects belonging to
	// the Grid Member multiplied by 1000. This is the percentage of the total
	// number of available IP addresses from all the DHCP objects belonging to the
	// Grid Member versus the total number of all IP addresses in all of the DHCP
	// objects on the Grid Member.
	DhcpUtilization uint32 `json:"dhcp_utilization,omitempty"`

	// A string describing the utilization level of DHCP objects that belong to the
	// Grid Member.
	DhcpUtilizationStatus string `json:"dhcp_utilization_status,omitempty"`

	// The update style for dynamic DNS updates.
	DnsUpdateStyle string `json:"dns_update_style,omitempty"`

	// The total number of DHCP leases issued for the DHCP objects on the Grid
	// Member.
	DynamicHosts uint32 `json:"dynamic_hosts,omitempty"`

	// The email_list value of a member DHCP server.
	EmailList []string `json:"email_list,omitempty"`

	// Determines if the member DHCP server's ability to send DDNS updates is
	// enabled or not.
	EnableDdns *bool `json:"enable_ddns,omitempty"`

	// Determines if the DHCP service of a member is enabled or not.
	EnableDhcp *bool `json:"enable_dhcp,omitempty"`

	// Determines if the DHCP service on the IPv6 LAN2 interface is enabled or not.
	EnableDhcpOnIpv6Lan2 *bool `json:"enable_dhcp_on_ipv6_lan2,omitempty"`

	// Determines if the DHCP service on the LAN2 interface is enabled or not.
	EnableDhcpOnLan2 *bool `json:"enable_dhcp_on_lan2,omitempty"`

	// Represents the watermarks above or below which address usage in a network is
	// unexpected and might warrant your attention. This setting overrides the Grid
	// level setting.
	EnableDhcpThresholds *bool `json:"enable_dhcp_thresholds,omitempty"`

	// Determines if DHCPv6 service for the member is enabled or not.
	EnableDhcpv6Service *bool `json:"enable_dhcpv6_service,omitempty"`

	// Determines if e-mail warnings are enabled or disabled. When DHCP threshold
	// is enabled and DHCP address usage crosses a watermark threshold, the
	// appliance sends an e-mail notification to an administrator.
	EnableEmailWarnings *bool `json:"enable_email_warnings,omitempty"`

	// Determines if fingerprint feature is enabled on this member. If you enable
	// this feature, the server will match a fingerprint for incoming lease
	// requests.
	EnableFingerprint *bool `json:"enable_fingerprint,omitempty"`

	// Determines whether the appliance is enabled to receive GSS-TSIG
	// authenticated updates from DHCP clients.
	EnableGssTsig *bool `json:"enable_gss_tsig,omitempty"`

	// Determines if the Grid member's host name rewrite feature is enabled or not.
	EnableHostnameRewrite *bool `json:"enable_hostname_rewrite,omitempty"`

	// Determines if lease query is allowed or not. This setting overrides the
	// Grid-level setting.
	EnableLeasequery *bool `json:"enable_leasequery,omitempty"`

	// Determines if SNMP warnings are enabled or disabled on this DHCP member.
	// When DHCP threshold is enabled and DHCP address usage crosses a watermark
	// threshold, the appliance sends an SNMP trap to the trap receiver that was
	// defined for the Grid member level.
	EnableSnmpWarnings *bool `json:"enable_snmp_warnings,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// The list of GSS-TSIG keys for a member DHCP object.
	GssTsigKeys []*Kerberoskey `json:"gss_tsig_keys,omitempty"`

	// Determines the high watermark value of a member DHCP server. If the
	// percentage of allocated addresses exceeds this watermark, the appliance
	// makes a syslog entry and sends an e-mail notification (if enabled).
	// Specifies the percentage of allocated addresses. The range is from 1 to 100.
	HighWaterMark *uint32 `json:"high_water_mark,omitempty"`

	// Determines the high watermark reset value of a member DHCP server. If the
	// percentage of allocated addresses drops below this value, a corresponding
	// SNMP trap is reset. Specifies the percentage of allocated addresses. The
	// range is from 1 to 100. The high watermark reset value must be lower than
	// the high watermark value.
	HighWaterMarkReset *uint32 `json:"high_water_mark_reset,omitempty"`

	// Host name of the Grid member.
	HostName string `json:"host_name,omitempty"`

	// The hostname rewrite policy that is in the protocol hostname rewrite
	// policies array of the Grid DHCP object. This attribute is mandatory if
	// enable_hostname_rewrite is "true".
	HostnameRewritePolicy *string `json:"hostname_rewrite_policy,omitempty"`

	// Determines if the ignore DHCP option list request flag of a Grid member DHCP
	// is enabled or not. If this flag is set to true all available DHCP options
	// will be returned to the client.
	IgnoreDhcpOptionListRequest *bool `json:"ignore_dhcp_option_list_request,omitempty"`

	// Indicates whether the appliance will ignore DHCP client IDs or MAC
	// addresses. Valid values are "NONE", "CLIENT", or "MACADDR". The default is
	// "NONE".
	IgnoreId string `json:"ignore_id,omitempty"`

	// A list of MAC addresses the appliance will ignore.
	IgnoreMacAddresses []string `json:"ignore_mac_addresses,omitempty"`

	// Determines if the Immediate Fixed address configuration apply feature for
	// the DHCP member is enabled or not.
	ImmediateFaConfiguration *bool `json:"immediate_fa_configuration,omitempty"`

	// The IPv4 Address of the Grid member.
	Ipv4Addr string `json:"ipv4addr,omitempty"`

	// The member DDNS IPv6 domain name value.
	Ipv6DdnsDomainname *string `json:"ipv6_ddns_domainname,omitempty"`

	// Controls whether the FQDN option sent by the DHCPv6 client is to be used, or
	// if the server can automatically generate the FQDN.
	Ipv6DdnsEnableOptionFqdn *bool `json:"ipv6_ddns_enable_option_fqdn,omitempty"`

	// The member IPv6 DDNS hostname value.
	Ipv6DdnsHostname *string `json:"ipv6_ddns_hostname,omitempty"`

	// Determines if the server always updates DNS or updates only if requested by
	// the client.
	Ipv6DdnsServerAlwaysUpdates *bool `json:"ipv6_ddns_server_always_updates,omitempty"`

	// The member IPv6 DDNS TTL value.
	Ipv6DdnsTtl *uint32 `json:"ipv6_ddns_ttl,omitempty"`

	// The update style for dynamic DHCPv6 DNS updates.
	Ipv6DnsUpdateStyle string `json:"ipv6_dns_update_style,omitempty"`

	// The IPv6 domain name.
	Ipv6DomainName *string `json:"ipv6_domain_name,omitempty"`

	// The comma separated list of domain name server addresses in IPv6 address
	// format.
	Ipv6DomainNameServers []string `json:"ipv6_domain_name_servers,omitempty"`

	// Determines if sending DDNS updates by the member DHCPv6 server is enabled or
	// not.
	Ipv6EnableDdns *bool `json:"ipv6_enable_ddns,omitempty"`

	// Determines whether the appliance is enabled to receive GSS-TSIG
	// authenticated updates from DHCPv6 clients.
	Ipv6EnableGssTsig *bool `json:"ipv6_enable_gss_tsig,omitempty"`

	// Indicates whether DHCPv6 lease scavenging is enabled or disabled.
	Ipv6EnableLeaseScavenging *bool `json:"ipv6_enable_lease_scavenging,omitempty"`

	// Determines if the DHCPv6 server retries failed dynamic DNS updates or not.
	Ipv6EnableRetryUpdates *bool `json:"ipv6_enable_retry_updates,omitempty"`

	// Determines if the server generates the hostname if it is not sent by the
	// client.
	Ipv6GenerateHostname *bool `json:"ipv6_generate_hostname,omitempty"`

	// The list of GSS-TSIG keys for a member DHCPv6 object.
	Ipv6GssTsigKeys []*Kerberoskey `json:"ipv6_gss_tsig_keys,omitempty"`

	// Determines the IPv6 address or FQDN of the Kerberos server for DHCPv6
	// GSS-TSIG authentication. This setting overrides the Grid level setting.
	Ipv6KdcServer *string `json:"ipv6_kdc_server,omitempty"`

	// The member-level grace period (in seconds) to keep an expired lease before
	// it is deleted by the scavenging process.
	Ipv6LeaseScavengingTime *uint32 `json:"ipv6_lease_scavenging_time,omitempty"`

	// The Microsoft client DHCP IPv6 code page value of a Grid member. This value
	// is the hostname translation code page for Microsoft DHCP IPv6 clients and
	// overrides the Grid level Microsoft DHCP IPv6 client code page.
	Ipv6MicrosoftCodePage string `json:"ipv6_microsoft_code_page,omitempty"`

	// An array of DHCP option dhcpoption structs that lists the DHCPv6 options
	// associated with the object.
	Ipv6Options []*Dhcpoption `json:"ipv6_options,omitempty"`

	// Determines if the IPv6 recycle leases feature is enabled or not. If the
	// feature is enabled, leases are kept in the Recycle Bin until one week after
	// lease expiration. When the feature is disabled, the leases are irrecoverably
	// deleted.
	Ipv6RecycleLeases *bool `json:"ipv6_recycle_leases,omitempty"`

	// Enable binding for expired DHCPv6 leases.
	Ipv6RememberExpiredClientAssociation *bool `json:"ipv6_remember_expired_client_association,omitempty"`

	// Determines the retry interval when the member DHCPv6 server makes repeated
	// attempts to send DDNS updates to a DNS server.
	Ipv6RetryUpdatesInterval *uint32 `json:"ipv6_retry_updates_interval,omitempty"`

	// The server DHCPv6 unique identifier (DUID) for the Grid member.
	Ipv6ServerDuid *string `json:"ipv6_server_duid,omitempty"`

	// Controls whether the DHCPv6 server updates DNS when an IPv6 DHCP lease is
	// renewed.
	Ipv6UpdateDnsOnLeaseRenewal *bool `json:"ipv6_update_dns_on_lease_renewal,omitempty"`

	// The IPv6 Address of the Grid member.
	Ipv6Addr string `json:"ipv6addr,omitempty"`

	// The IPv4 address or FQDN of the Kerberos server for DHCPv4 GSS-TSIG
	// authentication. This setting overrides the Grid level setting.
	KdcServer *string `json:"kdc_server,omitempty"`

	// Defines how the appliance releases DHCP leases. Valid values are
	// "RELEASE_MACHING_ID", "NEVER_RELEASE", or "ONE_LEASE_PER_CLIENT". The
	// default is "RELEASE_MATCHING_ID".
	LeasePerClientSettings string `json:"lease_per_client_settings,omitempty"`

	// Determines the lease scavenging time value. When this field is set, the
	// appliance permanently deletes the free and backup leases that remain in the
	// database beyond a specified period of time. To disable lease scavenging, set
	// the parameter to -1. The minimum positive value must be greater than 86400
	// seconds (1 day).
	LeaseScavengeTime int `json:"lease_scavenge_time,omitempty"`

	// This value specifies whether the grid member logs lease events. This setting
	// overrides the Grid level setting.
	LogLeaseEvents *bool `json:"log_lease_events,omitempty"`

	// This field contains the logic filters to be applied on the Grid member. This
	// list corresponds to the match rules that are written to the dhcpd
	// configuration file.
	LogicFilterRules []*Logicfilterrule `json:"logic_filter_rules,omitempty"`

	// Determines the low watermark value. If the percent of allocated addresses
	// drops below this watermark, the appliance makes a syslog entry and sends an
	// e-mail notification (if enabled).
	LowWaterMark *uint32 `json:"low_water_mark,omitempty"`

	// Determines the low watermark reset value. If the percentage of allocated
	// addresses exceeds this value, a corresponding SNMP trap is reset. A number
	// that specifies the percentage of allocated addresses. The range is from 1 to
	// 100. The low watermark reset value must be higher than the low watermark
	// value.
	LowWaterMarkReset *uint32 `json:"low_water_mark_reset,omitempty"`

	// The Microsoft client DHCP IPv4 code page value of a grid member. This value
	// is the hostname translation code page for Microsoft DHCP IPv4 clients and
	// overrides the Grid level Microsoft DHCP IPv4 client code page.
	MicrosoftCodePage string `json:"microsoft_code_page,omitempty"`

	// The next server value of a member DHCP server. This value is the IP address
	// or name of the boot file server on which the boot file is stored.
	Nextserver *string `json:"nextserver,omitempty"`

	// The list of option 60 match rules.
	Option60MatchRules []*Option60matchrule `json:"option60_match_rules,omitempty"`

	// An array of DHCP option dhcpoption structs that lists the DHCP options
	// associated with the object.
	Options []*Dhcpoption `json:"options,omitempty"`

	// Specifies the number of pings that the Infoblox appliance sends to an IP
	// address to verify that it is not in use. Values are from 0 to 10, where 0
	// disables pings.
	PingCount *uint32 `json:"ping_count,omitempty"`

	// Indicates the number of milliseconds the appliance waits for a response to
	// its ping. Valid values are 100, 500, 1000, 2000, 3000, 4000 and 5000
	// milliseconds.
	PingTimeout *uint32 `json:"ping_timeout,omitempty"`

	// The preferred lifetime value.
	PreferredLifetime *uint32 `json:"preferred_lifetime,omitempty"`

	// The Prefix length mode for DHCPv6.
	PrefixLengthMode string `json:"prefix_length_mode,omitempty"`

	// Specifies the duration of time it takes a host to connect to a boot server,
	// such as a TFTP server, and download the file it needs to boot. A 32-bit
	// unsigned integer that represents the duration, in seconds, for which the
	// update is cached. Zero indicates that the update is not cached.
	PxeLeaseTime *uint32 `json:"pxe_lease_time,omitempty"`

	// Determines if the recycle leases feature is enabled or not. If you enabled
	// this feature and then delete a DHCP range, the appliance stores active
	// leases from this range up to one week after the leases expires.
	RecycleLeases *bool `json:"recycle_leases,omitempty"`

	// Indicates whether the DHCP server makes repeated attempts to send DDNS
	// updates to a DNS server.
	RetryDdnsUpdates *bool `json:"retry_ddns_updates,omitempty"`

	// The number of static DHCP addresses configured in DHCP objects that belong
	// to the Grid Member.
	StaticHosts uint32 `json:"static_hosts,omitempty"`

	// The syslog facility is the location on the syslog server to which you want
	// to sort the syslog messages.
	SyslogFacility string `json:"syslog_facility,omitempty"`

	// The total number of DHCP addresses configured in DHCP objects that belong to
	// the Grid Member.
	TotalHosts uint32 `json:"total_hosts,omitempty"`

	// Controls whether the DHCP server updates DNS when a DHCP lease is renewed.
	UpdateDnsOnLeaseRenewal *bool `json:"update_dns_on_lease_renewal,omitempty"`

	// Use flag for: authority
	UseAuthority *bool `json:"use_authority,omitempty"`

	// Use flag for: bootfile
	UseBootfile *bool `json:"use_bootfile,omitempty"`

	// Use flag for: bootserver
	UseBootserver *bool `json:"use_bootserver,omitempty"`

	// Use flag for: ddns_domainname
	UseDdnsDomainname *bool `json:"use_ddns_domainname,omitempty"`

	// Use flag for: ddns_generate_hostname
	UseDdnsGenerateHostname *bool `json:"use_ddns_generate_hostname,omitempty"`

	// Use flag for: ddns_ttl
	UseDdnsTtl *bool `json:"use_ddns_ttl,omitempty"`

	// Use flag for: ddns_update_fixed_addresses
	UseDdnsUpdateFixedAddresses *bool `json:"use_ddns_update_fixed_addresses,omitempty"`

	// Use flag for: ddns_use_option81
	UseDdnsUseOption81 *bool `json:"use_ddns_use_option81,omitempty"`

	// Use flag for: deny_bootp
	UseDenyBootp *bool `json:"use_deny_bootp,omitempty"`

	// Use flag for: dns_update_style
	UseDnsUpdateStyle *bool `json:"use_dns_update_style,omitempty"`

	// Use flag for: email_list
	UseEmailList *bool `json:"use_email_list,omitempty"`

	// Use flag for: enable_ddns
	UseEnableDdns *bool `json:"use_enable_ddns,omitempty"`

	// Use flag for: enable_dhcp_thresholds , high_water_mark,
	// high_water_mark_reset, low_water_mark, low_water_mark_reset
	UseEnableDhcpThresholds *bool `json:"use_enable_dhcp_thresholds,omitempty"`

	// Use flag for: enable_fingerprint
	UseEnableFingerprint *bool `json:"use_enable_fingerprint,omitempty"`

	// Use flag for: kdc_server , enable_gss_tsig
	UseEnableGssTsig *bool `json:"use_enable_gss_tsig,omitempty"`

	// Use flag for: enable_hostname_rewrite , hostname_rewrite_policy
	UseEnableHostnameRewrite *bool `json:"use_enable_hostname_rewrite,omitempty"`

	// Use flag for: enable_leasequery
	UseEnableLeasequery *bool `json:"use_enable_leasequery,omitempty"`

	// Use flag for: enable_one_lease_per_client
	UseEnableOneLeasePerClient *bool `json:"use_enable_one_lease_per_client,omitempty"`

	// Use flag for: gss_tsig_keys
	UseGssTsigKeys *bool `json:"use_gss_tsig_keys,omitempty"`

	// Use flag for: ignore_dhcp_option_list_request
	UseIgnoreDhcpOptionListRequest *bool `json:"use_ignore_dhcp_option_list_request,omitempty"`

	// Use flag for: ignore_id
	UseIgnoreId *bool `json:"use_ignore_id,omitempty"`

	// Use flag for: immediate_fa_configuration
	UseImmediateFaConfiguration *bool `json:"use_immediate_fa_configuration,omitempty"`

	// Use flag for: ipv6_ddns_domainname
	UseIpv6DdnsDomainname *bool `json:"use_ipv6_ddns_domainname,omitempty"`

	// Use flag for: ipv6_ddns_enable_option_fqdn
	UseIpv6DdnsEnableOptionFqdn *bool `json:"use_ipv6_ddns_enable_option_fqdn,omitempty"`

	// Use flag for: ipv6_ddns_hostname
	UseIpv6DdnsHostname *bool `json:"use_ipv6_ddns_hostname,omitempty"`

	// Use flag for: ipv6_ddns_ttl
	UseIpv6DdnsTtl *bool `json:"use_ipv6_ddns_ttl,omitempty"`

	// Use flag for: ipv6_dns_update_style
	UseIpv6DnsUpdateStyle *bool `json:"use_ipv6_dns_update_style,omitempty"`

	// Use flag for: ipv6_domain_name
	UseIpv6DomainName *bool `json:"use_ipv6_domain_name,omitempty"`

	// Use flag for: ipv6_domain_name_servers
	UseIpv6DomainNameServers *bool `json:"use_ipv6_domain_name_servers,omitempty"`

	// Use flag for: ipv6_enable_ddns
	UseIpv6EnableDdns *bool `json:"use_ipv6_enable_ddns,omitempty"`

	// Use flag for: ipv6_kdc_server , ipv6_enable_gss_tsig
	UseIpv6EnableGssTsig *bool `json:"use_ipv6_enable_gss_tsig,omitempty"`

	// Use flag for: ipv6_enable_retry_updates , ipv6_retry_updates_interval
	UseIpv6EnableRetryUpdates *bool `json:"use_ipv6_enable_retry_updates,omitempty"`

	// Use flag for: ipv6_generate_hostname
	UseIpv6GenerateHostname *bool `json:"use_ipv6_generate_hostname,omitempty"`

	// Use flag for: ipv6_gss_tsig_keys
	UseIpv6GssTsigKeys *bool `json:"use_ipv6_gss_tsig_keys,omitempty"`

	// Use flag for: ipv6_enable_lease_scavenging , ipv6_lease_scavenging_time,
	// ipv6_remember_expired_client_association
	UseIpv6LeaseScavenging *bool `json:"use_ipv6_lease_scavenging,omitempty"`

	// Use flag for: ipv6_microsoft_code_page
	UseIpv6MicrosoftCodePage *bool `json:"use_ipv6_microsoft_code_page,omitempty"`

	// Use flag for: ipv6_options
	UseIpv6Options *bool `json:"use_ipv6_options,omitempty"`

	// Use flag for: ipv6_recycle_leases
	UseIpv6RecycleLeases *bool `json:"use_ipv6_recycle_leases,omitempty"`

	// Use flag for: ipv6_update_dns_on_lease_renewal
	UseIpv6UpdateDnsOnLeaseRenewal *bool `json:"use_ipv6_update_dns_on_lease_renewal,omitempty"`

	// Use flag for: lease_per_client_settings
	UseLeasePerClientSettings *bool `json:"use_lease_per_client_settings,omitempty"`

	// Use flag for: lease_scavenge_time
	UseLeaseScavengeTime *bool `json:"use_lease_scavenge_time,omitempty"`

	// Use flag for: log_lease_events
	UseLogLeaseEvents *bool `json:"use_log_lease_events,omitempty"`

	// Use flag for: logic_filter_rules
	UseLogicFilterRules *bool `json:"use_logic_filter_rules,omitempty"`

	// Use flag for: microsoft_code_page
	UseMicrosoftCodePage *bool `json:"use_microsoft_code_page,omitempty"`

	// Use flag for: nextserver
	UseNextserver *bool `json:"use_nextserver,omitempty"`

	// Use flag for: options
	UseOptions *bool `json:"use_options,omitempty"`

	// Use flag for: ping_count
	UsePingCount *bool `json:"use_ping_count,omitempty"`

	// Use flag for: ping_timeout
	UsePingTimeout *bool `json:"use_ping_timeout,omitempty"`

	// Use flag for: preferred_lifetime
	UsePreferredLifetime *bool `json:"use_preferred_lifetime,omitempty"`

	// Use flag for: prefix_length_mode
	UsePrefixLengthMode *bool `json:"use_prefix_length_mode,omitempty"`

	// Use flag for: pxe_lease_time
	UsePxeLeaseTime *bool `json:"use_pxe_lease_time,omitempty"`

	// Use flag for: recycle_leases
	UseRecycleLeases *bool `json:"use_recycle_leases,omitempty"`

	// Use flag for: ddns_retry_interval , retry_ddns_updates
	UseRetryDdnsUpdates *bool `json:"use_retry_ddns_updates,omitempty"`

	// Use flag for: syslog_facility
	UseSyslogFacility *bool `json:"use_syslog_facility,omitempty"`

	// Use flag for: update_dns_on_lease_renewal
	UseUpdateDnsOnLeaseRenewal *bool `json:"use_update_dns_on_lease_renewal,omitempty"`

	// Use flag for: valid_lifetime
	UseValidLifetime *bool `json:"use_valid_lifetime,omitempty"`

	// The valid lifetime for Grid Member DHCP. Specifies the length of time
	// addresses that are assigned to DHCPv6 clients remain in the valid state.
	ValidLifetime *uint32 `json:"valid_lifetime,omitempty"`
}

func (MemberDHCPProperties) ObjectType() string {
	return "member:dhcpproperties"
}

func (obj MemberDHCPProperties) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"host_name", "ipv4addr", "ipv6addr"}
	}
	return obj.returnFields
}

// MemberDns represents Infoblox object member:dns.
// The Grid Member DNS object can be used to configure DNS properties for a
// Grid member, including enabling or disabling DNS services and other DNS
// service related parameters. Grid service configurations are inherited by all
// members.
type MemberDns struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// Add custom IP, MAC and DNS View name ENDS0 options to outgoing recursive
	// queries.
	AddClientIpMacOptions *bool `json:"add_client_ip_mac_options,omitempty"`

	// The list of additional IP addresses on which DNS is enabled for a Grid
	// member. Only one of "additional_ip_list" or "additional_ip_list_struct"
	// should be set when modifying the object.
	AdditionalIpList []string `json:"additional_ip_list,omitempty"`

	// The list of additional IP addresses and IP Space Discriminator short names
	// on which DNS is enabled for a Grid member. Only one of "additional_ip_list"
	// or "additional_ip_list_struct" should be set when modifying the object.
	AdditionalIpListStruct []*MemberDnsip `json:"additional_ip_list_struct,omitempty"`

	// Determines whether the GSS-TSIG zone updates is enabled for the Grid member.
	AllowGssTsigZoneUpdates *bool `json:"allow_gss_tsig_zone_updates,omitempty"`

	// Determines if queries from specified IPv4 or IPv6 addresses and networks are
	// enabled or not. The appliance can also use Transaction Signature (TSIG) keys
	// to authenticate the queries. This setting overrides the Grid query settings.
	AllowQuery []*Addressac `json:"allow_query,omitempty"`

	// Determines if the responses to recursive queries is enabled or not. This
	// setting overrides Grid recursive query settings.
	AllowRecursiveQuery *bool `json:"allow_recursive_query,omitempty"`

	// Allows or rejects zone transfers from specified IPv4 or IPv6 addresses and
	// networks or allows transfers from hosts authenticated by Transaction
	// signature (TSIG) key. This setting overrides the Grid zone transfer
	// settings.
	AllowTransfer []*Addressac `json:"allow_transfer,omitempty"`

	// Allows or rejects dynamic updates from specified IPv4 or IPv6 addresses,
	// networks or from host authenticated by TSIG key. This setting overrides Grid
	// update settings.
	AllowUpdate []*Addressac `json:"allow_update,omitempty"`

	// The flag that indicates whether the anonymization of captured DNS responses
	// is enabled or disabled.
	AnonymizeResponseLogging *bool `json:"anonymize_response_logging,omitempty"`

	// Enable DNS recursive query forwarding to Active Trust Cloud.
	AtcFwdEnable *bool `json:"atc_fwd_enable,omitempty"`

	// Mitigation settings for DNS attacks.
	AttackMitigation *GridAttackmitigation `json:"attack_mitigation,omitempty"`

	// The auto blackhole settings.
	AutoBlackhole *GridAutoblackhole `json:"auto_blackhole,omitempty"`

	// Determines if the auto-generation of A and PTR records for the LAN2 IP
	// address is enabled or not, if DNS service is enabled on LAN2.
	AutoCreateAAndPtrForLan2 *bool `json:"auto_create_a_and_ptr_for_lan2,omitempty"`

	// Determines if auto-generation of AAAA and IPv6 PTR records for LAN2 IPv6
	// address is enabled or not.
	AutoCreateAaaaAndIpv6ptrForLan2 *bool `json:"auto_create_aaaa_and_ipv6ptr_for_lan2,omitempty"`

	// Determines if a Grid member to automatically sort DNS views is enabled or
	// not. The order of the DNS views determines the order in which the appliance
	// checks the match lists.
	AutoSortViews *bool `json:"auto_sort_views,omitempty"`

	// The BIND check names policy, which indicates the action the appliance takes
	// when it encounters host names that do not comply with the Strict Hostname
	// Checking policy. This method applies only if the host name restriction
	// policy is set to 'Strict Hostname Checking'.
	BindCheckNamesPolicy string `json:"bind_check_names_policy,omitempty"`

	// The value of the hostname directive for BIND.
	BindHostnameDirective string `json:"bind_hostname_directive,omitempty"`

	// The value of the user-defined hostname directive for BIND. To enable
	// user-defined hostname directive, you must set the bind_hostname_directive to
	// "USER_DEFINED".
	BindHostnameDirectiveFqdn *string `json:"bind_hostname_directive_fqdn,omitempty"`

	// The list of IPv4 or IPv6 addresses and networks from which DNS queries are
	// blocked. This setting overrides the Grid blackhole_list.
	BlackholeList []*Addressac `json:"blackhole_list,omitempty"`

	// The action to perform when a domain name matches the pattern defined in a
	// rule that is specified by the blacklist_ruleset method.
	BlacklistAction string `json:"blacklist_action,omitempty"`

	// Determines if blacklist redirection queries are logged or not.
	BlacklistLogQuery *bool `json:"blacklist_log_query,omitempty"`

	// The IP addresses the appliance includes in the response it sends in place of
	// a blacklisted IP address.
	BlacklistRedirectAddresses []string `json:"blacklist_redirect_addresses,omitempty"`

	// The TTL value of the synthetic DNS responses that result from blacklist
	// redirection.
	BlacklistRedirectTtl *uint32 `json:"blacklist_redirect_ttl,omitempty"`

	// The DNS Ruleset object names assigned at the Grid level for blacklist
	// redirection.
	BlacklistRulesets []string `json:"blacklist_rulesets,omitempty"`

	// The flag that indicates whether the capture of DNS queries for all domains
	// is enabled or disabled.
	CaptureDnsQueriesOnAllDomains *bool `json:"capture_dns_queries_on_all_domains,omitempty"`

	// Determines whether the application of BIND check-names for zone transfers
	// and DDNS updates are enabled.
	CheckNamesForDdnsAndZoneTransfer *bool `json:"check_names_for_ddns_and_zone_transfer,omitempty"`

	// Copy custom IP, MAC and DNS View name ENDS0 options from incoming to
	// outgoing recursive queries.
	CopyClientIpMacOptions *bool `json:"copy_client_ip_mac_options,omitempty"`

	// Copies the allowed IPs from the zone transfer list into the also-notify
	// statement in the named.conf file.
	CopyXferToNotify *bool `json:"copy_xfer_to_notify,omitempty"`

	// The list of custom root name servers. You can either select and use Internet
	// root name servers or specify custom root name servers by providing a host
	// name and IP address to which the Infoblox appliance can send queries.
	CustomRootNameServers []NameServer `json:"custom_root_name_servers,omitempty"`

	// The EDNS0 support for queries that require recursive resolution on Grid
	// members.
	DisableEdns *bool `json:"disable_edns,omitempty"`

	// The list of DNS64 synthesis groups associated with this member.
	Dns64Groups []string `json:"dns64_groups,omitempty"`

	// The DNS cache acceleration status.
	DnsCacheAccelerationStatus string `json:"dns_cache_acceleration_status,omitempty"`

	// The minimum TTL value, in seconds, that a DNS record must have in order for
	// it to be cached by the DNS Cache Acceleration service. An integer from 1 to
	// 65000 that represents the TTL in seconds.
	DnsCacheAccelerationTtl *uint32 `json:"dns_cache_acceleration_ttl,omitempty"`

	// The flag that indicates whether the anycast failure (BFD session down) is
	// enabled on member failure or not.
	DnsHealthCheckAnycastControl *bool `json:"dns_health_check_anycast_control,omitempty"`

	// The list of domain names for the DNS health check.
	DnsHealthCheckDomainList []string `json:"dns_health_check_domain_list,omitempty"`

	// The time interval (in seconds) for DNS health check.
	DnsHealthCheckInterval *uint32 `json:"dns_health_check_interval,omitempty"`

	// The flag that indicates whether the recursive DNS health check is enabled or
	// not.
	DnsHealthCheckRecursionFlag *bool `json:"dns_health_check_recursion_flag,omitempty"`

	// The number of DNS health check retries.
	DnsHealthCheckRetries *uint32 `json:"dns_health_check_retries,omitempty"`

	// The DNS health check timeout interval (in seconds).
	DnsHealthCheckTimeout *uint32 `json:"dns_health_check_timeout,omitempty"`

	// Determines which IP address is used as the source for DDNS notify and
	// transfer operations.
	DnsNotifyTransferSource string `json:"dns_notify_transfer_source,omitempty"`

	// The source address used if dns_notify_transfer_source type is "IP".
	DnsNotifyTransferSourceAddress *string `json:"dns_notify_transfer_source_address,omitempty"`

	// Enables DNS over TLS service.
	DnsOverTlsService *bool `json:"dns_over_tls_service,omitempty"`

	// The time limit (in minutes) for the DNS query capture file.
	DnsQueryCaptureFileTimeLimit *uint32 `json:"dns_query_capture_file_time_limit,omitempty"`

	// The source address used if dns_query_source_interface type is "IP".
	DnsQuerySourceAddress *string `json:"dns_query_source_address,omitempty"`

	// Determines which IP address is used as the source for DDNS query operations.
	DnsQuerySourceInterface string `json:"dns_query_source_interface,omitempty"`

	// Array of notify/query source settings for views.
	DnsViewAddressSettings []*SettingViewaddress `json:"dns_view_address_settings,omitempty"`

	// Determines if the blacklist rules for DNSSEC-enabled clients are enabled or
	// not.
	DnssecBlacklistEnabled *bool `json:"dnssec_blacklist_enabled,omitempty"`

	// Determines if the DNS64 groups for DNSSEC-enabled clients are enabled or
	// not.
	DnssecDns64Enabled *bool `json:"dnssec_dns64_enabled,omitempty"`

	// Determines if the DNS security extension is enabled or not.
	DnssecEnabled *bool `json:"dnssec_enabled,omitempty"`

	// Determines when the DNS member accepts expired signatures.
	DnssecExpiredSignaturesEnabled *bool `json:"dnssec_expired_signatures_enabled,omitempty"`

	// A list of zones for which the server does not perform DNSSEC validation.
	DnssecNegativeTrustAnchors []string `json:"dnssec_negative_trust_anchors,omitempty"`

	// Determines if the NXDOMAIN rules for DNSSEC-enabled clients are enabled or
	// not.
	DnssecNxdomainEnabled *bool `json:"dnssec_nxdomain_enabled,omitempty"`

	// Determines if the RPZ policies for DNSSEC-enabled clients are enabled or
	// not.
	DnssecRpzEnabled *bool `json:"dnssec_rpz_enabled,omitempty"`

	// The list of trusted keys for the DNSSEC feature.
	DnssecTrustedKeys []*Dnssectrustedkey `json:"dnssec_trusted_keys,omitempty"`

	// Determines if the DNS security validation is enabled or not.
	DnssecValidationEnabled *bool `json:"dnssec_validation_enabled,omitempty"`

	// The DNSTAP settings.
	DnstapSetting *Dnstapsetting `json:"dnstap_setting,omitempty"`

	// DNS over HTTPS sessions duration.
	DohHttpsSessionDuration *uint32 `json:"doh_https_session_duration,omitempty"`

	// Enables DNS over HTTPS service.
	DohService *bool `json:"doh_service,omitempty"`

	// The list of domains for DNS query capture.
	DomainsToCaptureDnsQueries []string `json:"domains_to_capture_dns_queries,omitempty"`

	// Setting to control specific behavior for DTC DNS responses for incoming lbdn
	// matched queries.
	DtcDnsQueriesSpecificBehavior string `json:"dtc_dns_queries_specific_behavior,omitempty"`

	// Determines whether to prefer the client address from the edns-client-subnet
	// option for DTC or not.
	DtcEdnsPreferClientSubnet *bool `json:"dtc_edns_prefer_client_subnet,omitempty"`

	// The health check source type.
	DtcHealthSource string `json:"dtc_health_source,omitempty"`

	// The source address used if dtc_health_source type is "IP".
	DtcHealthSourceAddress *string `json:"dtc_health_source_address,omitempty"`

	// Advertises the EDNS0 buffer size to the upstream server. The value should be
	// between 512 and 4096 bytes. The recommended value is between 512 and 1220
	// bytes.
	EdnsUdpSize *uint32 `json:"edns_udp_size,omitempty"`

	// Determines if the blocking of DNS queries is enabled or not. This setting
	// overrides the Grid enable_blackhole settings.
	EnableBlackhole *bool `json:"enable_blackhole,omitempty"`

	// Determines if a blacklist is enabled or not on the Grid member.
	EnableBlacklist *bool `json:"enable_blacklist,omitempty"`

	// The flag that indicates whether the capture of DNS queries is enabled or
	// disabled.
	EnableCaptureDnsQueries *bool `json:"enable_capture_dns_queries,omitempty"`

	// The flag that indicates whether the capture of DNS responses is enabled or
	// disabled.
	EnableCaptureDnsResponses *bool `json:"enable_capture_dns_responses,omitempty"`

	// Determines if the DNS service of a member is enabled or not.
	EnableDns *bool `json:"enable_dns,omitempty"`

	// Determines if the DNS64 support is enabled or not for this member.
	EnableDns64 *bool `json:"enable_dns64,omitempty"`

	// Determines if the DNS Cache Acceleration service is enabled or not for a
	// member.
	EnableDnsCacheAcceleration *bool `json:"enable_dns_cache_acceleration,omitempty"`

	// The flag that indicates whether the DNS health check is enabled or not.
	EnableDnsHealthCheck *bool `json:"enable_dns_health_check,omitempty"`

	// Determines whether the query messages need to be forwarded to DNSTAP or not.
	EnableDnstapQueries *bool `json:"enable_dnstap_queries,omitempty"`

	// Determines whether the response messages need to be forwarded to DNSTAP or
	// not.
	EnableDnstapResponses *bool `json:"enable_dnstap_responses,omitempty"`

	// The flag that indicates whether excluding domain names from captured DNS
	// queries and responses is enabled or disabled.
	EnableExcludedDomainNames *bool `json:"enable_excluded_domain_names,omitempty"`

	// Determines if the fixed RRset order FQDN is enabled or not.
	EnableFixedRrsetOrderFqdns *bool `json:"enable_fixed_rrset_order_fqdns,omitempty"`

	// Determines whether Fault Tolerant Caching (FTC) is enabled.
	EnableFtc *bool `json:"enable_ftc,omitempty"`

	// Determines whether the appliance is enabled to receive GSS-TSIG
	// authenticated updates from DHCP clients.
	EnableGssTsig *bool `json:"enable_gss_tsig,omitempty"`

	// Determines if the notify source port for a member is enabled or not.
	EnableNotifySourcePort *bool `json:"enable_notify_source_port,omitempty"`

	// Determines if the DNS query rewrite is enabled or not for this member.
	EnableQueryRewrite *bool `json:"enable_query_rewrite,omitempty"`

	// Determines if the query source port for a memer is enabled or not.
	EnableQuerySourcePort *bool `json:"enable_query_source_port,omitempty"`

	// The list of domains that are excluded from DNS query and response capture.
	ExcludedDomainNames []string `json:"excluded_domain_names,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// The DNS capture file transfer settings. Include the specified parameter to
	// set the attribute value. Omit the parameter to retrieve the attribute value.
	FileTransferSetting *Filetransfersetting `json:"file_transfer_setting,omitempty"`

	// The type of AAAA filtering for this member DNS object.
	FilterAaaa string `json:"filter_aaaa,omitempty"`

	// The list of IPv4 addresses and networks from which queries are received.
	// AAAA filtering is applied to these addresses.
	FilterAaaaList []*Addressac `json:"filter_aaaa_list,omitempty"`

	// The fixed RRset order FQDN. If this field does not contain an empty value,
	// the appliance will automatically set the enable_fixed_rrset_order_fqdns
	// field to 'true', unless the same request sets the enable field to 'false'.
	FixedRrsetOrderFqdns []*GridDnsFixedrrsetorderfqdn `json:"fixed_rrset_order_fqdns,omitempty"`

	// Permits this member to send queries to forwarders only. When the value is
	// "true", the member sends queries to forwarders only, and not to other
	// internal or Internet root servers.
	ForwardOnly *bool `json:"forward_only,omitempty"`

	// Allows secondary servers to forward updates to the DNS server. This setting
	// overrides grid update settings.
	ForwardUpdates *bool `json:"forward_updates,omitempty"`

	// The forwarders for the member. A forwarder is essentially a name server to
	// which other name servers first send all of their off-site queries. The
	// forwarder builds up a cache of information, avoiding the need for the other
	// name servers to send queries off-site. This setting overrides the Grid level
	// setting.
	Forwarders []string `json:"forwarders,omitempty"`

	// The timeout interval (in seconds) after which the expired Fault Tolerant
	// Caching (FTC)record is stale and no longer valid.
	FtcExpiredRecordTimeout *uint32 `json:"ftc_expired_record_timeout,omitempty"`

	// The TTL value (in seconds) of the expired Fault Tolerant Caching (FTC)
	// record in DNS responses.
	FtcExpiredRecordTtl *uint32 `json:"ftc_expired_record_ttl,omitempty"`

	// The list of glue record addresses.
	GlueRecordAddresses []*MemberDnsgluerecordaddr `json:"glue_record_addresses,omitempty"`

	// The list of GSS-TSIG keys for a member DNS object.
	GssTsigKeys []*Kerberoskey `json:"gss_tsig_keys,omitempty"`

	// The host name of the Grid member.
	HostName string `json:"host_name,omitempty"`

	// The IPv4 Address of the Grid member.
	Ipv4Addr string `json:"ipv4addr,omitempty"`

	// The list of IPv6 glue record addresses.
	Ipv6GlueRecordAddresses []*MemberDnsgluerecordaddr `json:"ipv6_glue_record_addresses,omitempty"`

	// The IPv6 Address of the Grid member.
	Ipv6Addr string `json:"ipv6addr,omitempty"`

	// The flag that indicates whether member DNS supports Unbound as the recursive
	// resolver or not.
	IsUnboundCapable bool `json:"is_unbound_capable,omitempty"`

	// The number of seconds to cache lame delegations or lame servers.
	LameTtl *uint32 `json:"lame_ttl,omitempty"`

	// The logging categories for this DNS member.
	LoggingCategories *GridLoggingcategories `json:"logging_categories,omitempty"`

	// The maximum time (in seconds) for which the server will cache positive
	// answers.
	MaxCacheTtl *uint32 `json:"max_cache_ttl,omitempty"`

	// The maximum time in seconds a DNS response can be stored in the hardware
	// acceleration cache. Valid values are unsigned integer between 60 and 86400,
	// inclusive.
	MaxCachedLifetime *uint32 `json:"max_cached_lifetime,omitempty"`

	// The maximum time (in seconds) for which the server will cache negative
	// (NXDOMAIN) responses. The maximum allowed value is 604800.
	MaxNcacheTtl *uint32 `json:"max_ncache_ttl,omitempty"`

	// The value is used by authoritative DNS servers to never send DNS responses
	// larger than the configured value. The value should be between 512 and 4096
	// bytes. The recommended value is between 512 and 1220 bytes.
	MaxUdpSize *uint32 `json:"max_udp_size,omitempty"`

	// Enables the ability to return a minimal amount of data in response to a
	// query. This capability speeds up the DNS services provided by the appliance.
	MinimalResp *bool `json:"minimal_resp,omitempty"`

	// Specifies the number of seconds of delay the notify messages are sent to
	// secondaries.
	NotifyDelay *uint32 `json:"notify_delay,omitempty"`

	// The source port for notify messages. When requesting zone transfers from the
	// primary server, some secondary DNS servers use the source port number (the
	// primary server used to send the notify message) as the destination port
	// number in the zone transfer request. This setting overrides Grid static
	// source port settings. Valid values are between 1 and 63999. The default is
	// selected by BIND.
	NotifySourcePort *uint32 `json:"notify_source_port,omitempty"`

	// Determines if NXDOMAIN redirection queries are logged or not.
	NxdomainLogQuery *bool `json:"nxdomain_log_query,omitempty"`

	// Enables NXDOMAIN redirection.
	NxdomainRedirect *bool `json:"nxdomain_redirect,omitempty"`

	// The IPv4 NXDOMAIN redirection addresses.
	NxdomainRedirectAddresses []string `json:"nxdomain_redirect_addresses,omitempty"`

	// The IPv6 NXDOMAIN redirection addresses.
	NxdomainRedirectAddressesV6 []string `json:"nxdomain_redirect_addresses_v6,omitempty"`

	// The TTL value of synthetic DNS responses that result from NXDOMAIN
	// redirection.
	NxdomainRedirectTtl *uint32 `json:"nxdomain_redirect_ttl,omitempty"`

	// The names of the Ruleset objects assigned at the Grid level for NXDOMAIN
	// redirection.
	NxdomainRulesets []string `json:"nxdomain_rulesets,omitempty"`

	// The source port for queries. Specifying a source port number for recursive
	// queries ensures that a firewall will allow the response. Valid values are
	// between 1 and 63999. The default is selected by BIND.
	QuerySourcePort *uint32 `json:"query_source_port,omitempty"`

	// The record name restriction policy.
	RecordNamePolicy *string `json:"record_name_policy,omitempty"`

	// A limit on the number of concurrent recursive clients.
	RecursiveClientLimit *uint32 `json:"recursive_client_limit,omitempty"`

	// The list of IPv4 or IPv6 addresses, networks or hosts authenticated by
	// Transaction signature (TSIG) key from which recursive queries are allowed or
	// denied.
	RecursiveQueryList []*Addressac `json:"recursive_query_list,omitempty"`

	// The recursive resolver for member DNS.
	RecursiveResolver string `json:"recursive_resolver,omitempty"`

	// The recursive query timeout for the member. The value must be 0 or between
	// 10 and 30.
	ResolverQueryTimeout *uint32 `json:"resolver_query_timeout,omitempty"`

	// The response rate limiting settings for the member.
	ResponseRateLimiting *GridResponseratelimiting `json:"response_rate_limiting,omitempty"`

	// Determines the type of root name servers.
	RootNameServerType string `json:"root_name_server_type,omitempty"`

	// Enables NSDNAME and NSIP resource records from RPZ feeds at member level.
	RpzDisableNsdnameNsip *bool `json:"rpz_disable_nsdname_nsip,omitempty"`

	// Enables the appliance to ignore RPZ-IP triggers with prefix lengths less
	// than the specified minimum prefix length.
	RpzDropIpRuleEnabled *bool `json:"rpz_drop_ip_rule_enabled,omitempty"`

	// The minimum prefix length for IPv4 RPZ-IP triggers. The appliance ignores
	// RPZ-IP triggers with prefix lengths less than the specified minimum IPv4
	// prefix length.
	RpzDropIpRuleMinPrefixLengthIpv4 *uint32 `json:"rpz_drop_ip_rule_min_prefix_length_ipv4,omitempty"`

	// The minimum prefix length for IPv6 RPZ-IP triggers. The appliance ignores
	// RPZ-IP triggers with prefix lengths less than the specified minimum IPv6
	// prefix length.
	RpzDropIpRuleMinPrefixLengthIpv6 *uint32 `json:"rpz_drop_ip_rule_min_prefix_length_ipv6,omitempty"`

	// The flag that indicates whether recursive RPZ lookups are enabled.
	RpzQnameWaitRecurse *bool `json:"rpz_qname_wait_recurse,omitempty"`

	// The number of maximum concurrent SOA queries per second for the member.
	SerialQueryRate *uint32 `json:"serial_query_rate,omitempty"`

	// The value of the server-id directive for BIND and Unbound DNS.
	ServerIdDirective string `json:"server_id_directive,omitempty"`

	// The value of the user-defined hostname directive for BIND and UNBOUND DNS.
	// To enable user-defined hostname directive, you must set the
	// bind_hostname_directive to "USER_DEFINED".
	ServerIdDirectiveString *string `json:"server_id_directive_string,omitempty"`

	// Determines if RPZ rules are applied to queries originated from this member
	// and received by other Grid members.
	SkipInGridRpzQueries *bool `json:"skip_in_grid_rpz_queries,omitempty"`

	// A sort list determines the order of addresses in responses made to DNS
	// queries. This setting overrides Grid sort list settings.
	Sortlist []*Sortlist `json:"sortlist,omitempty"`

	// The flag that indicates whether the storage of query capture reports on the
	// appliance is enabled or disabled.
	StoreLocally *bool `json:"store_locally,omitempty"`

	// The syslog facility. This is the location on the syslog server to which you
	// want to sort the DNS logging messages. This setting overrides the Grid
	// logging facility settings.
	SyslogFacility string `json:"syslog_facility,omitempty"`

	// TCP Idle timeout for DNS over TLS connections.
	TcpIdleTimeout *uint32 `json:"tcp_idle_timeout,omitempty"`

	// DNS over TLS sessions duration.
	TlsSessionDuration *uint32 `json:"tls_session_duration,omitempty"`

	// Excludes specified DNS servers during zone transfers.
	TransferExcludedServers []string `json:"transfer_excluded_servers,omitempty"`

	// The BIND format for a zone transfer. This provides tracking capabilities for
	// single or multiple transfers and their associated servers.
	TransferFormat string `json:"transfer_format,omitempty"`

	// The number of maximum concurrent transfers for the member.
	TransfersIn *uint32 `json:"transfers_in,omitempty"`

	// The number of maximum outbound concurrent zone transfers for the member.
	TransfersOut *uint32 `json:"transfers_out,omitempty"`

	// The number of maximum concurrent transfers per member for the member.
	TransfersPerNs *uint32 `json:"transfers_per_ns,omitempty"`

	// Logging level for the Unbound recursive resolver.
	UnboundLoggingLevel string `json:"unbound_logging_level,omitempty"`

	// Use flag for: add_client_ip_mac_options
	UseAddClientIpMacOptions *bool `json:"use_add_client_ip_mac_options,omitempty"`

	// Use flag for: allow_query
	UseAllowQuery *bool `json:"use_allow_query,omitempty"`

	// Use flag for: allow_transfer
	UseAllowTransfer *bool `json:"use_allow_transfer,omitempty"`

	// Use flag for: attack_mitigation
	UseAttackMitigation *bool `json:"use_attack_mitigation,omitempty"`

	// Use flag for: auto_blackhole
	UseAutoBlackhole *bool `json:"use_auto_blackhole,omitempty"`

	// Use flag for: bind_hostname_directive
	UseBindHostnameDirective *bool `json:"use_bind_hostname_directive,omitempty"`

	// Use flag for: enable_blackhole
	UseBlackhole *bool `json:"use_blackhole,omitempty"`

	// Use flag for: blackhole_list , blacklist_action, blacklist_log_query,
	// blacklist_redirect_addresses, blacklist_redirect_ttl, blacklist_rulesets,
	// enable_blacklist
	UseBlacklist *bool `json:"use_blacklist,omitempty"`

	// Use flag for: capture_dns_queries_on_all_domains
	UseCaptureDnsQueriesOnAllDomains *bool `json:"use_capture_dns_queries_on_all_domains,omitempty"`

	// Use flag for: copy_client_ip_mac_options
	UseCopyClientIpMacOptions *bool `json:"use_copy_client_ip_mac_options,omitempty"`

	// Use flag for: copy_xfer_to_notify
	UseCopyXferToNotify *bool `json:"use_copy_xfer_to_notify,omitempty"`

	// Use flag for: disable_edns
	UseDisableEdns *bool `json:"use_disable_edns,omitempty"`

	// Use flag for: enable_dns64 , dns64_groups
	UseDns64 *bool `json:"use_dns64,omitempty"`

	// Use flag for: dns_cache_acceleration_ttl
	UseDnsCacheAccelerationTtl *bool `json:"use_dns_cache_acceleration_ttl,omitempty"`

	// Use flag for: dns_health_check_domain_list ,
	// dns_health_check_recursion_flag, dns_health_check_anycast_control,
	// enable_dns_health_check, dns_health_check_interval,
	// dns_health_check_timeout, dns_health_check_retries
	UseDnsHealthCheck *bool `json:"use_dns_health_check,omitempty"`

	// Use flag for: dnssec_enabled , dnssec_expired_signatures_enabled,
	// dnssec_validation_enabled, dnssec_trusted_keys
	UseDnssec *bool `json:"use_dnssec,omitempty"`

	// Use flag for: enable_dnstap_queries , enable_dnstap_responses,
	// dnstap_setting
	UseDnstapSetting *bool `json:"use_dnstap_setting,omitempty"`

	// Use flag for: dtc_dns_queries_specific_behavior
	UseDtcDnsQueriesSpecificBehavior *bool `json:"use_dtc_dns_queries_specific_behavior,omitempty"`

	// Use flag for: dtc_edns_prefer_client_subnet
	UseDtcEdnsPreferClientSubnet *bool `json:"use_dtc_edns_prefer_client_subnet,omitempty"`

	// Use flag for: edns_udp_size
	UseEdnsUdpSize *bool `json:"use_edns_udp_size,omitempty"`

	// Use flag for: enable_capture_dns_queries , enable_capture_dns_responses
	UseEnableCaptureDns *bool `json:"use_enable_capture_dns,omitempty"`

	// Use flag for: enable_excluded_domain_names
	UseEnableExcludedDomainNames *bool `json:"use_enable_excluded_domain_names,omitempty"`

	// Use flag for: enable_gss_tsig
	UseEnableGssTsig *bool `json:"use_enable_gss_tsig,omitempty"`

	// Use flag for: enable_query_rewrite
	UseEnableQueryRewrite *bool `json:"use_enable_query_rewrite,omitempty"`

	// Use flag for: filter_aaaa , filter_aaaa_list
	UseFilterAaaa *bool `json:"use_filter_aaaa,omitempty"`

	// Use flag for: fixed_rrset_order_fqdns , enable_fixed_rrset_order_fqdns
	UseFixedRrsetOrderFqdns *bool `json:"use_fixed_rrset_order_fqdns,omitempty"`

	// Use flag for: forward_updates
	UseForwardUpdates *bool `json:"use_forward_updates,omitempty"`

	// Use flag for: forwarders , forward_only
	UseForwarders *bool `json:"use_forwarders,omitempty"`

	// Use flag for: enable_ftc , ftc_expired_record_ttl,
	// ftc_expired_record_timeout
	UseFtc *bool `json:"use_ftc,omitempty"`

	// Use flag for: gss_tsig_keys
	UseGssTsigKeys *bool `json:"use_gss_tsig_keys,omitempty"`

	// Use flag for: lame_ttl
	UseLameTtl *bool `json:"use_lame_ttl,omitempty"`

	// Determines if the DNS service on the IPv6 LAN2 port is enabled or not.
	UseLan2Ipv6Port *bool `json:"use_lan2_ipv6_port,omitempty"`

	// Determines if the DNS service on the LAN2 port is enabled or not.
	UseLan2Port *bool `json:"use_lan2_port,omitempty"`

	// Determines if the DNS service on the IPv6 LAN port is enabled or not.
	UseLanIpv6Port *bool `json:"use_lan_ipv6_port,omitempty"`

	// Determines the status of the use of DNS services on the IPv4 LAN1 port.
	UseLanPort *bool `json:"use_lan_port,omitempty"`

	// Use flag for: logging_categories
	UseLoggingCategories *bool `json:"use_logging_categories,omitempty"`

	// Use flag for: max_cache_ttl
	UseMaxCacheTtl *bool `json:"use_max_cache_ttl,omitempty"`

	// Use flag for: max_cached_lifetime
	UseMaxCachedLifetime *bool `json:"use_max_cached_lifetime,omitempty"`

	// Use flag for: max_ncache_ttl
	UseMaxNcacheTtl *bool `json:"use_max_ncache_ttl,omitempty"`

	// Use flag for: max_udp_size
	UseMaxUdpSize *bool `json:"use_max_udp_size,omitempty"`

	// Determines if the DNS services on the IPv6 MGMT port is enabled or not.
	UseMgmtIpv6Port *bool `json:"use_mgmt_ipv6_port,omitempty"`

	// Determines if the DNS services on the MGMT port is enabled or not.
	UseMgmtPort *bool `json:"use_mgmt_port,omitempty"`

	// Use flag for: notify_delay
	UseNotifyDelay *bool `json:"use_notify_delay,omitempty"`

	// Use flag for: nxdomain_redirect , nxdomain_redirect_addresses,
	// nxdomain_redirect_addresses_v6, nxdomain_redirect_ttl, nxdomain_log_query,
	// nxdomain_rulesets
	UseNxdomainRedirect *bool `json:"use_nxdomain_redirect,omitempty"`

	// Use flag for: record_name_policy
	UseRecordNamePolicy *bool `json:"use_record_name_policy,omitempty"`

	// Use flag for: recursive_client_limit
	UseRecursiveClientLimit *bool `json:"use_recursive_client_limit,omitempty"`

	// Use flag for: allow_recursive_query , recursive_query_list
	UseRecursiveQuerySetting *bool `json:"use_recursive_query_setting,omitempty"`

	// Use flag for: resolver_query_timeout
	UseResolverQueryTimeout *bool `json:"use_resolver_query_timeout,omitempty"`

	// Use flag for: response_rate_limiting
	UseResponseRateLimiting *bool `json:"use_response_rate_limiting,omitempty"`

	// Use flag for: root_name_server_type , custom_root_name_servers,
	// use_root_server_for_all_views
	UseRootNameServer *bool `json:"use_root_name_server,omitempty"`

	// Determines if root name servers should be applied to all views or only to
	// Default view.
	UseRootServerForAllViews *bool `json:"use_root_server_for_all_views,omitempty"`

	// Use flag for: rpz_disable_nsdname_nsip
	UseRpzDisableNsdnameNsip *bool `json:"use_rpz_disable_nsdname_nsip,omitempty"`

	// Use flag for: rpz_drop_ip_rule_enabled ,
	// rpz_drop_ip_rule_min_prefix_length_ipv4,
	// rpz_drop_ip_rule_min_prefix_length_ipv6
	UseRpzDropIpRule *bool `json:"use_rpz_drop_ip_rule,omitempty"`

	// Use flag for: rpz_qname_wait_recurse
	UseRpzQnameWaitRecurse *bool `json:"use_rpz_qname_wait_recurse,omitempty"`

	// Use flag for: serial_query_rate
	UseSerialQueryRate *bool `json:"use_serial_query_rate,omitempty"`

	// Use flag for: server_id_directive
	UseServerIdDirective *bool `json:"use_server_id_directive,omitempty"`

	// Use flag for: sortlist
	UseSortlist *bool `json:"use_sortlist,omitempty"`

	// Use flag for: enable_notify_source_port , notify_source_port,
	// enable_query_source_port, query_source_port
	UseSourcePorts *bool `json:"use_source_ports,omitempty"`

	// Use flag for: syslog_facility
	UseSyslogFacility *bool `json:"use_syslog_facility,omitempty"`

	// Use flag for: transfers_in
	UseTransfersIn *bool `json:"use_transfers_in,omitempty"`

	// Use flag for: transfers_out
	UseTransfersOut *bool `json:"use_transfers_out,omitempty"`

	// Use flag for: transfers_per_ns
	UseTransfersPerNs *bool `json:"use_transfers_per_ns,omitempty"`

	// Use flag for: allow_update , allow_gss_tsig_zone_updates
	UseUpdateSetting *bool `json:"use_update_setting,omitempty"`

	// Use flag for: transfer_excluded_servers , transfer_format
	UseZoneTransferFormat *bool `json:"use_zone_transfer_format,omitempty"`

	// The list of views associated with this member.
	Views []string `json:"views,omitempty"`
}

func (MemberDns) ObjectType() string {
	return "member:dns"
}

func (obj MemberDns) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"host_name", "ipv4addr", "ipv6addr"}
	}
	return obj.returnFields
}

// MemberFiledistribution represents Infoblox object member:filedistribution.
// The Grid member file distribution object is used to configure file
// distribution services such as TFTP, FTP and HTTP, and access control lists
// (ACL) that determine which clients are granted access to the service (TFTP,
// FTP, HTTP), and which clients are denied access to the service.
type MemberFiledistribution struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// Determines whether uploads to the Grid member are allowed.
	AllowUploads *bool `json:"allow_uploads,omitempty"`

	// The Grid member descriptive comment.
	Comment string `json:"comment,omitempty"`

	// Determines whether the FTP prtocol is enabled for file distribution.
	EnableFtp *bool `json:"enable_ftp,omitempty"`

	// Determines whether the LIST command for FTP is enabled.
	EnableFtpFilelist *bool `json:"enable_ftp_filelist,omitempty"`

	// Determines whether the passive mode for FTP is enabled.
	EnableFtpPassive *bool `json:"enable_ftp_passive,omitempty"`

	// Determines whether the HTTP prtocol is enabled for file distribution.
	EnableHttp *bool `json:"enable_http,omitempty"`

	// Determines whether the HTTP prtocol access control (AC) settings are
	// enabled.
	EnableHttpAcl *bool `json:"enable_http_acl,omitempty"`

	// Determines whether the TFTP prtocol is enabled for file distribution.
	EnableTftp *bool `json:"enable_tftp,omitempty"`

	// Access control (AC) settings for the FTP protocol.
	FtpAcls []*Addressac `json:"ftp_acls,omitempty"`

	// The network port used by the FTP protocol.
	FtpPort *uint32 `json:"ftp_port,omitempty"`

	// The FTP protocol status.
	FtpStatus string `json:"ftp_status,omitempty"`

	// The Grid member host name.
	HostName string `json:"host_name,omitempty"`

	// Access control (AC) settings for the HTTP protocol.
	HttpAcls []*Addressac `json:"http_acls,omitempty"`

	// The HTTP protocol status.
	HttpStatus string `json:"http_status,omitempty"`

	// The IPv4 address of the Grid member.
	Ipv4Address string `json:"ipv4_address,omitempty"`

	// The IPv6 address of the Grid member.
	Ipv6Address string `json:"ipv6_address,omitempty"`

	// The Grid member file distribution status.
	Status string `json:"status,omitempty"`

	// The access control (AC) settings for the TFTP protocol.
	TftpAcls []*Addressac `json:"tftp_acls,omitempty"`

	// The network port used by the TFTP protocol.
	TftpPort *uint32 `json:"tftp_port,omitempty"`

	// The TFTP protocol status.
	TftpStatus string `json:"tftp_status,omitempty"`

	// Use flag for: allow_uploads
	UseAllowUploads *bool `json:"use_allow_uploads,omitempty"`
}

func (MemberFiledistribution) ObjectType() string {
	return "member:filedistribution"
}

func (obj MemberFiledistribution) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"host_name", "ipv4_address", "ipv6_address", "status"}
	}
	return obj.returnFields
}

// MemberLicense represents Infoblox object member:license.
// This object represents the member license.
type MemberLicense struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The license expiration status.
	ExpirationStatus string `json:"expiration_status,omitempty"`

	// The expiration timestamp of the license.
	ExpiryDate *UnixTime `json:"expiry_date,omitempty"`

	// The hardware ID of the physical node on which the license is installed.
	Hwid string `json:"hwid,omitempty"`

	// License string.
	Key string `json:"key,omitempty"`

	// The overall type of license: static or dynamic.
	Kind string `json:"kind,omitempty"`

	// The license limit value.
	Limit string `json:"limit,omitempty"`

	// The license limit context.
	LimitContext string `json:"limit_context,omitempty"`

	// The license type.
	Type string `json:"type,omitempty"`
}

func (MemberLicense) ObjectType() string {
	return "member:license"
}

func (obj MemberLicense) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"type"}
	}
	return obj.returnFields
}

// MemberParentalcontrol represents Infoblox object member:parentalcontrol.
// This object represents a set of parental control properties for the Grid
// member.
type MemberParentalcontrol struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// Determines if the parental control service is enabled.
	EnableService *bool `json:"enable_service,omitempty"`

	// The parental control member hostname.
	Name string `json:"name,omitempty"`
}

func (MemberParentalcontrol) ObjectType() string {
	return "member:parentalcontrol"
}

func (obj MemberParentalcontrol) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"enable_service", "name"}
	}
	return obj.returnFields
}

// MemberThreatanalytics represents Infoblox object member:threatanalytics.
// To mitigate DNS data exfiltration, Infoblox DNS threat analytics employs
// analytics algorithms that analyze incoming DNS queries and responses to
// detect DNS tunneling traffic.
type MemberThreatanalytics struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The Grid member descriptive comment.
	Comment string `json:"comment,omitempty"`

	// Determines whether the threat analytics service is enabled.
	EnableService *bool `json:"enable_service,omitempty"`

	// The Grid member host name.
	HostName string `json:"host_name,omitempty"`

	// The IPv4 Address address of the Grid member.
	Ipv4Address string `json:"ipv4_address,omitempty"`

	// The IPv6 Address address of the Grid member.
	Ipv6Address string `json:"ipv6_address,omitempty"`

	// The Grid member threat analytics status.
	Status string `json:"status,omitempty"`
}

func (MemberThreatanalytics) ObjectType() string {
	return "member:threatanalytics"
}

func (obj MemberThreatanalytics) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"host_name", "ipv4_address", "ipv6_address", "status"}
	}
	return obj.returnFields
}

// MemberThreatprotection represents Infoblox object member:threatprotection.
// This object provides information about the member threat protection
// settings.
type MemberThreatprotection struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The human readable comment for member threat protection properties.
	Comment string `json:"comment,omitempty"`

	// The ruleset used for threat protection.
	CurrentRuleset *string `json:"current_ruleset,omitempty"`

	// Determines if multiple BIND responses via TCP connection is enabled or not.
	DisableMultipleDnsTcpRequest *bool `json:"disable_multiple_dns_tcp_request,omitempty"`

	// Determines if DNS responses are sent from acceleration cache before applying
	// Threat Protection rules. Recommended for better performance when using DNS
	// Cache Acceleration.
	EnableAccelRespBeforeThreatProtection *bool `json:"enable_accel_resp_before_threat_protection,omitempty"`

	// Determines if NAT (Network Address Translation) mapping for threat
	// protection is enabled or not.
	EnableNatRules *bool `json:"enable_nat_rules,omitempty"`

	// Determines if the Threat protection service is enabled or not.
	EnableService *bool `json:"enable_service,omitempty"`

	// The number of events logged per second per rule.
	EventsPerSecondPerRule *uint32 `json:"events_per_second_per_rule,omitempty"`

	// The hardware model of the member.
	HardwareModel string `json:"hardware_model,omitempty"`

	// The hardware type of the member.
	HardwareType string `json:"hardware_type,omitempty"`

	// A Grid member name.
	HostName string `json:"host_name,omitempty"`

	// The IPv4 address of member threat protection service.
	Ipv4address string `json:"ipv4address,omitempty"`

	// The IPv6 address of member threat protection service.
	Ipv6address string `json:"ipv6address,omitempty"`

	// The list of NAT rules.
	NatRules []*ThreatprotectionNatrule `json:"nat_rules,omitempty"`

	// Outbound settings for ATP events.
	OutboundSettings *SettingAtpoutbound `json:"outbound_settings,omitempty"`

	// The Threat Protection profile associated with the member.
	Profile *string `json:"profile,omitempty"`

	// Use flag for: current_ruleset
	UseCurrentRuleset *bool `json:"use_current_ruleset,omitempty"`

	// Use flag for: disable_multiple_dns_tcp_request
	UseDisableMultipleDnsTcpRequest *bool `json:"use_disable_multiple_dns_tcp_request,omitempty"`

	// Use flag for: enable_accel_resp_before_threat_protection
	UseEnableAccelRespBeforeThreatProtection *bool `json:"use_enable_accel_resp_before_threat_protection,omitempty"`

	// Use flag for: enable_nat_rules
	UseEnableNatRules *bool `json:"use_enable_nat_rules,omitempty"`

	// Use flag for: events_per_second_per_rule
	UseEventsPerSecondPerRule *bool `json:"use_events_per_second_per_rule,omitempty"`

	// Use flag for: outbound_settings
	UseOutboundSettings *bool `json:"use_outbound_settings,omitempty"`
}

func (MemberThreatprotection) ObjectType() string {
	return "member:threatprotection"
}

func (obj MemberThreatprotection) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{}
	}
	return obj.returnFields
}

// Memberdfp represents Infoblox object memberdfp.
// This object represnts DFP fields at member level
type Memberdfp struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// Option to resolve DNS query if resolution over Active Trust Cloud failed.
	DfpForwardFirst *bool `json:"dfp_forward_first,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// Host name of the parent Member
	HostName string `json:"host_name,omitempty"`

	// DFP override lock'.
	IsDfpOverride *bool `json:"is_dfp_override,omitempty"`
}

func (Memberdfp) ObjectType() string {
	return "memberdfp"
}

func (obj Memberdfp) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{}
	}
	return obj.returnFields
}

// Msserver represents Infoblox object msserver.
// This object represents the Microsoft Server.
type Msserver struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The Active Directory domain to which this server belongs (if applicable).
	AdDomain string `json:"ad_domain,omitempty"`

	// The Active Directory Sites information
	AdSites *Adsites `json:"ad_sites,omitempty"`

	// The Active Directory User synchronization information.
	AdUser *MsserverAduser `json:"ad_user,omitempty"`

	// The address or FQDN of the server.
	Address *string `json:"address,omitempty"`

	// User comments for this Microsoft Server
	Comment *string `json:"comment,omitempty"`

	// Result of the last RPC connection attempt made
	ConnectionStatus string `json:"connection_status,omitempty"`

	// Detail of the last connection attempt made
	ConnectionStatusDetail string `json:"connection_status_detail,omitempty"`

	// RW fields needed for DHCP purposes at Microsoft Server level
	DhcpServer *Dhcpserver `json:"dhcp_server,omitempty"`

	// Allow/forbids usage of this Microsoft Server
	Disabled *bool `json:"disabled,omitempty"`

	// Structure containing DNS information
	DnsServer *Dnsserver `json:"dns_server,omitempty"`

	// Reference to the DNS view
	DnsView *string `json:"dns_view,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// eference to the assigned grid member
	GridMember *string `json:"grid_member,omitempty"`

	// Timestamp of the last message received
	LastSeen *UnixTime `json:"last_seen,omitempty"`

	// Directs logging of sync messages either to syslog or mslog
	LogDestination string `json:"log_destination,omitempty"`

	// Log level for this Microsoft Server
	LogLevel string `json:"log_level,omitempty"`

	// Microsoft Server login name, with optional domainname
	LoginName *string `json:"login_name,omitempty"`

	// Microsoft Server login password
	LoginPassword *string `json:"login_password,omitempty"`

	// Hostname of grid member managing this Microsoft Server
	ManagingMember string `json:"managing_member,omitempty"`

	// Maximum number of connections to MS server
	MsMaxConnection *uint32 `json:"ms_max_connection,omitempty"`

	// Timeout in seconds of RPC connections for this MS Server
	MsRpcTimeoutInSeconds *uint32 `json:"ms_rpc_timeout_in_seconds,omitempty"`

	// Reference to the network view
	NetworkView *string `json:"network_view,omitempty"`

	// Enable read-only management for this Microsoft Server
	ReadOnly *bool `json:"read_only,omitempty"`

	// The root Active Directory domain to which this server belongs (if
	// applicable).
	RootAdDomain string `json:"root_ad_domain,omitempty"`

	// Gives the server name as reported by itself
	ServerName string `json:"server_name,omitempty"`

	// Minimum number of minutes between two synchronizations
	SynchronizationMinDelay *uint32 `json:"synchronization_min_delay,omitempty"`

	// Synchronization status summary
	SynchronizationStatus string `json:"synchronization_status,omitempty"`

	// Detail status if synchronization_status is ERROR
	SynchronizationStatusDetail string `json:"synchronization_status_detail,omitempty"`

	// Override log_destination inherited from grid level
	UseLogDestination *bool `json:"use_log_destination,omitempty"`

	// Override grid ms_max_connection setting
	UseMsMaxConnection *bool `json:"use_ms_max_connection,omitempty"`

	// Flag to override cluster RPC timeout
	UseMsRpcTimeoutInSeconds *bool `json:"use_ms_rpc_timeout_in_seconds,omitempty"`

	// Version of the Microsoft Server
	Version string `json:"version,omitempty"`
}

func (Msserver) ObjectType() string {
	return "msserver"
}

func (obj Msserver) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"address"}
	}
	return obj.returnFields
}

// MsserverAdsitesDomain represents Infoblox object msserver:adsites:domain.
// The object provides information about the Active Directory Domain.
type MsserverAdsitesDomain struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The name of the Extensible Attribute Definition object that is linked to the
	// Active Directory Sites Domain.
	EaDefinition string `json:"ea_definition,omitempty"`

	// The IP address or FQDN of the managing master for the MS server, if
	// applicable.
	MsSyncMasterName string `json:"ms_sync_master_name,omitempty"`

	// The name of the Active Directory Domain properties object.
	Name string `json:"name,omitempty"`

	// The NetBIOS name of the Active Directory Domain properties object.
	Netbios string `json:"netbios,omitempty"`

	// The name of the network view in which the Active Directory Domain resides.
	NetworkView string `json:"network_view,omitempty"`

	// Determines whether the Active Directory Domain properties object is a
	// read-only object.
	ReadOnly bool `json:"read_only,omitempty"`
}

func (MsserverAdsitesDomain) ObjectType() string {
	return "msserver:adsites:domain"
}

func (obj MsserverAdsitesDomain) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"name", "netbios", "network_view"}
	}
	return obj.returnFields
}

// MsserverAdsitesSite represents Infoblox object msserver:adsites:site.
// This object provides information about the Active Directory Site.
type MsserverAdsitesSite struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The reference to the Active Directory Domain to which the site belongs.
	Domain *string `json:"domain,omitempty"`

	// The name of the site properties object for the Active Directory Sites.
	Name *string `json:"name,omitempty"`

	// The list of networks to which the device interfaces belong.
	Networks []*Ipv4Network `json:"networks,omitempty"`
}

func (MsserverAdsitesSite) ObjectType() string {
	return "msserver:adsites:site"
}

func (obj MsserverAdsitesSite) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"domain", "name"}
	}
	return obj.returnFields
}

// MsserverDhcp represents Infoblox object msserver:dhcp.
// This object represents a subset of the Microsoft Server DHCP properties.
type MsserverDhcp struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The address or FQDN of the DHCP Microsoft Server.
	Address string `json:"address,omitempty"`

	// Comment from Microsoft Server
	Comment string `json:"comment,omitempty"`

	// The percentage of the total DHCP utilization of DHCP objects belonging to
	// the DHCP Microsoft Server multiplied by 1000. This is the percentage of the
	// total number of available IP addresses from all the DHCP objects belonging
	// to the DHCP Microsoft Server versus the total number of all IP addresses in
	// all of the DHCP objects on the DHCP Microsoft Server.
	DhcpUtilization uint32 `json:"dhcp_utilization,omitempty"`

	// A string describing the utilization level of DHCP objects that belong to the
	// DHCP Microsoft Server.
	DhcpUtilizationStatus string `json:"dhcp_utilization_status,omitempty"`

	// The total number of DHCP leases issued for the DHCP objects on the DHCP
	// Microsoft Server.
	DynamicHosts uint32 `json:"dynamic_hosts,omitempty"`

	// Timestamp of the last synchronization attempt
	LastSyncTs *UnixTime `json:"last_sync_ts,omitempty"`

	// The login name of the DHCP Microsoft Server.
	LoginName *string `json:"login_name,omitempty"`

	// The login password of the DHCP Microsoft Server.
	LoginPassword *string `json:"login_password,omitempty"`

	// Network view to update
	NetworkView string `json:"network_view,omitempty"`

	// Defines what control to apply on the DHCP server
	NextSyncControl string `json:"next_sync_control,omitempty"`

	// Whether Microsoft server is read only
	ReadOnly bool `json:"read_only,omitempty"`

	// Microsoft server address
	ServerName string `json:"server_name,omitempty"`

	// The number of static DHCP addresses configured in DHCP objects that belong
	// to the DHCP Microsoft Server.
	StaticHosts uint32 `json:"static_hosts,omitempty"`

	// Status of the Microsoft DHCP Service
	Status string `json:"status,omitempty"`

	// Detailed status of the DHCP status
	StatusDetail string `json:"status_detail,omitempty"`

	// Timestamp of the last update
	StatusLastUpdated *UnixTime `json:"status_last_updated,omitempty"`

	// Flag indicating if the DHCP supports Failover
	SupportsFailover bool `json:"supports_failover,omitempty"`

	// The minimum number of minutes between two synchronizations.
	SynchronizationInterval *uint32 `json:"synchronization_interval,omitempty"`

	// The total number of DHCP addresses configured in DHCP objects that belong to
	// the DHCP Microsoft Server.
	TotalHosts uint32 `json:"total_hosts,omitempty"`

	// Use flag for: login_name , login_password
	UseLogin *bool `json:"use_login,omitempty"`

	// Use flag for: synchronization_interval
	UseSynchronizationInterval *bool `json:"use_synchronization_interval,omitempty"`
}

func (MsserverDhcp) ObjectType() string {
	return "msserver:dhcp"
}

func (obj MsserverDhcp) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"address"}
	}
	return obj.returnFields
}

// MsserverDns represents Infoblox object msserver:dns.
// This object represents a subset of the Microsoft Server DNS properties.
type MsserverDns struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The address or FQDN of the DNS Microsoft Server.
	Address string `json:"address,omitempty"`

	// Determines if synchronization of DNS reporting data from the Microsoft
	// server is enabled or not.
	EnableDnsReportsSync *bool `json:"enable_dns_reports_sync,omitempty"`

	// The login name of the DNS Microsoft Server.
	LoginName *string `json:"login_name,omitempty"`

	// The login password of the DNS Microsoft Server.
	LoginPassword *string `json:"login_password,omitempty"`

	// The minimum number of minutes between two synchronizations.
	SynchronizationInterval *uint32 `json:"synchronization_interval,omitempty"`

	// Use flag for: enable_dns_reports_sync
	UseEnableDnsReportsSync *bool `json:"use_enable_dns_reports_sync,omitempty"`

	// Use flag for: login_name , login_password
	UseLogin *bool `json:"use_login,omitempty"`

	// Use flag for: synchronization_interval
	UseSynchronizationInterval *bool `json:"use_synchronization_interval,omitempty"`
}

func (MsserverDns) ObjectType() string {
	return "msserver:dns"
}

func (obj MsserverDns) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"address"}
	}
	return obj.returnFields
}

// Mssuperscope represents Infoblox object mssuperscope.
// This object represents a superscope feature of Microsoft DHCP server. You
// can use a superscope to group and activate multiple ranges via a single
// object.
type Mssuperscope struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The superscope descriptive comment.
	Comment *string `json:"comment,omitempty"`

	// The percentage of the total DHCP usage of the ranges in the superscope.
	DhcpUtilization uint32 `json:"dhcp_utilization,omitempty"`

	// Utilization level of the DHCP range objects that belong to the superscope.
	DhcpUtilizationStatus string `json:"dhcp_utilization_status,omitempty"`

	// Determines whether the superscope is disabled.
	Disable *bool `json:"disable,omitempty"`

	// The total number of DHCP leases issued for the DHCP range objects that
	// belong to the superscope.
	DynamicHosts uint32 `json:"dynamic_hosts,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// The percentage value for DHCP range usage after which an alarm will be
	// active.
	HighWaterMark uint32 `json:"high_water_mark,omitempty"`

	// The percentage value for DHCP range usage after which an alarm will be
	// reset.
	HighWaterMarkReset uint32 `json:"high_water_mark_reset,omitempty"`

	// The percentage value for DHCP range usage below which an alarm will be
	// active.
	LowWaterMark uint32 `json:"low_water_mark,omitempty"`

	// The percentage value for DHCP range usage below which an alarm will be
	// reset.
	LowWaterMarkReset uint32 `json:"low_water_mark_reset,omitempty"`

	// The name of the Microsoft DHCP superscope.
	Name *string `json:"name,omitempty"`

	// The name of the network view in which the superscope resides.
	NetworkView *string `json:"network_view,omitempty"`

	// The list of DHCP ranges that are associated with the superscope.
	Ranges []*Range `json:"ranges,omitempty"`

	// The number of static DHCP addresses configured in DHCP range objects that
	// belong to the superscope.
	StaticHosts uint32 `json:"static_hosts,omitempty"`

	// The total number of DHCP addresses configured in DHCP range objects that
	// belong to the superscope.
	TotalHosts uint32 `json:"total_hosts,omitempty"`
}

func (Mssuperscope) ObjectType() string {
	return "mssuperscope"
}

func (obj Mssuperscope) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"disable", "name", "network_view"}
	}
	return obj.returnFields
}

// Namedacl represents Infoblox object namedacl.
// A named ACL (Access Control List) is a list of IPv4/IPv6 addresses,
// networks, TSIG-based anonymous access controls, and other named ACLs, to
// which you can grant or deny permission for operations such as dynamic DNS
// updates or zone transfers.
type Namedacl struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The access control list of IPv4/IPv6 addresses, networks, TSIG-based
	// anonymous access controls, and other named ACLs.
	AccessList []*Addressac `json:"access_list,omitempty"`

	// Comment for the named ACL; maximum 256 characters.
	Comment *string `json:"comment,omitempty"`

	// The exploded access list for the named ACL. This list displays all the
	// access control entries in a named ACL and its nested named ACLs, if
	// applicable.
	ExplodedAccessList []*Addressac `json:"exploded_access_list,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// The name of the named ACL.
	Name *string `json:"name,omitempty"`
}

func (Namedacl) ObjectType() string {
	return "namedacl"
}

func (obj Namedacl) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"comment", "name"}
	}
	return obj.returnFields
}

// Natgroup represents Infoblox object natgroup.
// NAT groups are necessary if the Grid master is behind a NAT device and there
// are members behind both side of the NAT device. Any member on the same side
// as the master goes into the same NAT group as the master and uses its
// interface address for Grid communication. Grid members on the other side of
// that NAT device do not go into the same NAT group as the master and use the
// master’s NAT address for Grid communication.
type Natgroup struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The NAT group descriptive comment.
	Comment *string `json:"comment,omitempty"`

	// The name of a NAT group object.
	Name *string `json:"name,omitempty"`
}

func (Natgroup) ObjectType() string {
	return "natgroup"
}

func (obj Natgroup) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"comment", "name"}
	}
	return obj.returnFields
}

// Ipv4Network represents Infoblox object network.
// When DHCP services are configured on an appliance, the network that it
// serves must be defined. After a network is created, you can either create
// all the subnets individually, or create a parent network that encompasses
// the subnets.
type Ipv4Network struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// Authority for the DHCP network.
	Authority *bool `json:"authority,omitempty"`

	// This flag controls whether reverse zones are automatically created when the
	// network is added.
	AutoCreateReversezone bool `json:"auto_create_reversezone,omitempty"`

	// The bootfile name for the network. You can configure the DHCP server to
	// support clients that use the boot file name option in their DHCPREQUEST
	// messages.
	Bootfile *string `json:"bootfile,omitempty"`

	// The bootserver address for the network. You can specify the name and/or IP
	// address of the boot server that the host needs to boot. The boot server IPv4
	// Address or name in FQDN format.
	Bootserver *string `json:"bootserver,omitempty"`

	// Structure containing all cloud API related information for this object.
	CloudInfo *GridCloudapiInfo `json:"cloud_info,omitempty"`

	// Comment for the network, maximum 256 characters.
	Comment *string `json:"comment,omitempty"`

	// The number of conflicts discovered via network discovery.
	ConflictCount uint32 `json:"conflict_count,omitempty"`

	// The dynamic DNS domain name the appliance uses specifically for DDNS updates
	// for this network.
	DdnsDomainname *string `json:"ddns_domainname,omitempty"`

	// If this field is set to True, the DHCP server generates a hostname and
	// updates DNS with it when the DHCP client request does not contain a
	// hostname.
	DdnsGenerateHostname *bool `json:"ddns_generate_hostname,omitempty"`

	// This field controls whether only the DHCP server is allowed to update DNS,
	// regardless of the DHCP clients requests. Note that changes for this field
	// take effect only if ddns_use_option81 is True.
	DdnsServerAlwaysUpdates *bool `json:"ddns_server_always_updates,omitempty"`

	// The DNS update Time to Live (TTL) value of a DHCP network object. The TTL is
	// a 32-bit unsigned integer that represents the duration, in seconds, for
	// which the update is cached. Zero indicates that the update is not cached.
	DdnsTtl *uint32 `json:"ddns_ttl,omitempty"`

	// By default, the DHCP server does not update DNS when it allocates a fixed
	// address to a client. You can configure the DHCP server to update the A and
	// PTR records of a client with a fixed address. When this feature is enabled
	// and the DHCP server adds A and PTR records for a fixed address, the DHCP
	// server never discards the records.
	DdnsUpdateFixedAddresses *bool `json:"ddns_update_fixed_addresses,omitempty"`

	// The support for DHCP Option 81 at the network level.
	DdnsUseOption81 *bool `json:"ddns_use_option81,omitempty"`

	// The reason for deleting the RIR registration request.
	DeleteReason *string `json:"delete_reason,omitempty"`

	// If set to true, BOOTP settings are disabled and BOOTP requests will be
	// denied.
	DenyBootp *bool `json:"deny_bootp,omitempty"`

	// The percentage of the total DHCP utilization of the network multiplied by
	// 1000. This is the percentage of the total number of available IP addresses
	// belonging to the network versus the total number of all IP addresses in
	// network.
	DhcpUtilization uint32 `json:"dhcp_utilization,omitempty"`

	// A string describing the utilization level of the network.
	DhcpUtilizationStatus string `json:"dhcp_utilization_status,omitempty"`

	// Determines whether a network is disabled or not. When this is set to False,
	// the network is enabled.
	Disable *bool `json:"disable,omitempty"`

	// Discover now status for this network.
	DiscoverNowStatus string `json:"discover_now_status,omitempty"`

	// Number of the discovered BGP AS. When multiple BGP autonomous systems are
	// discovered in the network, this field displays "Multiple".
	DiscoveredBgpAs string `json:"discovered_bgp_as,omitempty"`

	// Discovered bridge domain.
	DiscoveredBridgeDomain *string `json:"discovered_bridge_domain,omitempty"`

	// Discovered tenant.
	DiscoveredTenant *string `json:"discovered_tenant,omitempty"`

	// The identifier of the discovered VLAN. When multiple VLANs are discovered in
	// the network, this field displays "Multiple".
	DiscoveredVlanId string `json:"discovered_vlan_id,omitempty"`

	// The name of the discovered VLAN. When multiple VLANs are discovered in the
	// network, this field displays "Multiple".
	DiscoveredVlanName string `json:"discovered_vlan_name,omitempty"`

	// Description of the discovered VRF. When multiple VRFs are discovered in the
	// network, this field displays "Multiple".
	DiscoveredVrfDescription string `json:"discovered_vrf_description,omitempty"`

	// The name of the discovered VRF. When multiple VRFs are discovered in the
	// network, this field displays "Multiple".
	DiscoveredVrfName string `json:"discovered_vrf_name,omitempty"`

	// Route distinguisher of the discovered VRF. When multiple VRFs are discovered
	// in the network, this field displays "Multiple".
	DiscoveredVrfRd string `json:"discovered_vrf_rd,omitempty"`

	// The discovery basic poll settings for this network.
	DiscoveryBasicPollSettings *DiscoveryBasicpollsettings `json:"discovery_basic_poll_settings,omitempty"`

	// The discovery blackout setting for this network.
	DiscoveryBlackoutSetting *PropertiesBlackoutsetting `json:"discovery_blackout_setting,omitempty"`

	// The network discovery engine type.
	DiscoveryEngineType string `json:"discovery_engine_type,omitempty"`

	// The member that will run discovery for this network.
	DiscoveryMember *string `json:"discovery_member,omitempty"`

	// The total number of DHCP leases issued for the network.
	DynamicHosts uint32 `json:"dynamic_hosts,omitempty"`

	// The e-mail lists to which the appliance sends DHCP threshold alarm e-mail
	// messages.
	EmailList []string `json:"email_list,omitempty"`

	// The dynamic DNS updates flag of a DHCP network object. If set to True, the
	// DHCP server sends DDNS updates to DNS servers in the same Grid, and to
	// external DNS servers.
	EnableDdns *bool `json:"enable_ddns,omitempty"`

	// Determines if DHCP thresholds are enabled for the network.
	EnableDhcpThresholds *bool `json:"enable_dhcp_thresholds,omitempty"`

	// Determines whether a discovery is enabled or not for this network. When this
	// is set to False, the network discovery is disabled.
	EnableDiscovery *bool `json:"enable_discovery,omitempty"`

	// Determines if DHCP threshold warnings are sent through email.
	EnableEmailWarnings *bool `json:"enable_email_warnings,omitempty"`

	// Determines if IFMAP publishing is enabled for the network.
	EnableIfmapPublishing *bool `json:"enable_ifmap_publishing,omitempty"`

	// Determines if the discovery for the network should be immediately enabled.
	EnableImmediateDiscovery *bool `json:"enable_immediate_discovery,omitempty"`

	// Set this to True if you want the DHCP server to use a different lease time
	// for PXE clients.
	EnablePxeLeaseTime *bool `json:"enable_pxe_lease_time,omitempty"`

	// Determines if DHCP threshold warnings are send through SNMP.
	EnableSnmpWarnings *bool `json:"enable_snmp_warnings,omitempty"`

	// The endpoints that provides data for the DHCP Network object.
	EndpointSources []*CiscoiseEndpoint `json:"endpoint_sources,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// The percentage of DHCP network usage threshold above which network usage is
	// not expected and may warrant your attention. When the high watermark is
	// reached, the Infoblox appliance generates a syslog message and sends a
	// warning (if enabled). A number that specifies the percentage of allocated
	// addresses. The range is from 1 to 100.
	HighWaterMark *uint32 `json:"high_water_mark,omitempty"`

	// The percentage of DHCP network usage below which the corresponding SNMP trap
	// is reset. A number that specifies the percentage of allocated addresses. The
	// range is from 1 to 100. The high watermark reset value must be lower than
	// the high watermark value.
	HighWaterMarkReset *uint32 `json:"high_water_mark_reset,omitempty"`

	// If this field is set to False, the appliance returns all DHCP options the
	// client is eligible to receive, rather than only the list of options the
	// client has requested.
	IgnoreDhcpOptionListRequest *bool `json:"ignore_dhcp_option_list_request,omitempty"`

	// Indicates whether the appliance will ignore DHCP client IDs or MAC
	// addresses. Valid values are "NONE", "CLIENT", or "MACADDR". The default is
	// "NONE".
	IgnoreId string `json:"ignore_id,omitempty"`

	// A list of MAC addresses the appliance will ignore.
	IgnoreMacAddresses []string `json:"ignore_mac_addresses,omitempty"`

	// The e-mail lists to which the appliance sends IPAM threshold alarm e-mail
	// messages.
	IpamEmailAddresses []string `json:"ipam_email_addresses,omitempty"`

	// The IPAM Threshold settings for this network.
	IpamThresholdSettings *SettingIpamThreshold `json:"ipam_threshold_settings,omitempty"`

	// The IPAM Trap settings for this network.
	IpamTrapSettings *SettingIpamTrap `json:"ipam_trap_settings,omitempty"`

	// The IPv4 Address of the network.
	Ipv4Addr *string `json:"ipv4addr,omitempty"`

	// The timestamp when the last RIR registration update was sent.
	LastRirRegistrationUpdateSent *UnixTime `json:"last_rir_registration_update_sent,omitempty"`

	// Last RIR registration update status.
	LastRirRegistrationUpdateStatus string `json:"last_rir_registration_update_status,omitempty"`

	// An integer that specifies the period of time (in seconds) that frees and
	// backs up leases remained in the database before they are automatically
	// deleted. To disable lease scavenging, set the parameter to -1. The minimum
	// positive value must be greater than 86400 seconds (1 day).
	LeaseScavengeTime int `json:"lease_scavenge_time,omitempty"`

	// This field contains the logic filters to be applied on the this network.
	// This list corresponds to the match rules that are written to the dhcpd
	// configuration file.
	LogicFilterRules []*Logicfilterrule `json:"logic_filter_rules,omitempty"`

	// The percentage of DHCP network usage below which the Infoblox appliance
	// generates a syslog message and sends a warning (if enabled). A number that
	// specifies the percentage of allocated addresses. The range is from 1 to 100.
	LowWaterMark *uint32 `json:"low_water_mark,omitempty"`

	// The percentage of DHCP network usage threshold below which network usage is
	// not expected and may warrant your attention. When the low watermark is
	// crossed, the Infoblox appliance generates a syslog message and sends a
	// warning (if enabled). A number that specifies the percentage of allocated
	// addresses. The range is from 1 to 100. The low watermark reset value must be
	// higher than the low watermark value.
	LowWaterMarkReset *uint32 `json:"low_water_mark_reset,omitempty"`

	// A list of members or Microsoft (r) servers that serve DHCP for this network.
	// All members in the array must be of the same type. The struct type must be
	// indicated in each element, by setting the "_struct" member to the struct
	// type.
	Members []*Msdhcpserver `json:"members,omitempty"`

	// This field controls whether this object is synchronized with the Multi-Grid
	// Master. If this field is set to True, objects are not synchronized.
	MgmPrivate *bool `json:"mgm_private,omitempty"`

	// This field is assumed to be True unless filled by any conforming objects,
	// such as Network, IPv6 Network, Network Container, IPv6 Network Container,
	// and Network View. This value is set to False if mgm_private is set to True
	// in the parent object.
	MgmPrivateOverridable bool `json:"mgm_private_overridable,omitempty"`

	// The Microsoft Active Directory user related information.
	MsAdUserData *MsserverAduserData `json:"ms_ad_user_data,omitempty"`

	// The netmask of the network in CIDR format.
	Netmask *uint32 `json:"netmask,omitempty"`

	// The network address in IPv4 Address/CIDR format. For regular expression
	// searches, only the IPv4 Address portion is supported. Searches for the CIDR
	// portion is always an exact match. For example, both network containers
	// 10.0.0.0/8 and 20.1.0.0/16 are matched by expression '.0' and only
	// 20.1.0.0/16 is matched by '.0/16'.
	Network *string `json:"network,omitempty"`

	// The network container to which this network belongs (if any).
	NetworkContainer string `json:"network_container,omitempty"`

	// The name of the network view in which this network resides.
	NetworkView string `json:"network_view,omitempty"`

	// The name in FQDN and/or IPv4 Address of the next server that the host needs
	// to boot.
	Nextserver *string `json:"nextserver,omitempty"`

	// An array of DHCP option dhcpoption structs that lists the DHCP options
	// associated with the object.
	Options []*Dhcpoption `json:"options,omitempty"`

	// The port control blackout setting for this network.
	PortControlBlackoutSetting *PropertiesBlackoutsetting `json:"port_control_blackout_setting,omitempty"`

	// The PXE lease time value of a DHCP Network object. Some hosts use PXE
	// (Preboot Execution Environment) to boot remotely from a server. To better
	// manage your IP resources, set a different lease time for PXE boot requests.
	// You can configure the DHCP server to allocate an IP address with a shorter
	// lease time to hosts that send PXE boot requests, so IP addresses are not
	// leased longer than necessary. A 32-bit unsigned integer that represents the
	// duration, in seconds, for which the update is cached. Zero indicates that
	// the update is not cached.
	PxeLeaseTime *uint32 `json:"pxe_lease_time,omitempty"`

	// If the field is set to True, the leases are kept in the Recycle Bin until
	// one week after expiration. Otherwise, the leases are permanently deleted.
	RecycleLeases *bool `json:"recycle_leases,omitempty"`

	// Restarts the member service.
	RestartIfNeeded *bool `json:"restart_if_needed,omitempty"`

	// The registry (RIR) that allocated the network address space.
	Rir string `json:"rir,omitempty"`

	// The RIR organization assoicated with the network.
	RirOrganization *string `json:"rir_organization,omitempty"`

	// The RIR registration action.
	RirRegistrationAction string `json:"rir_registration_action,omitempty"`

	// The registration status of the network in RIR.
	RirRegistrationStatus string `json:"rir_registration_status,omitempty"`

	// If the field is set to True, the discovery blackout setting will be used for
	// port control blackout setting.
	SamePortControlDiscoveryBlackout *bool `json:"same_port_control_discovery_blackout,omitempty"`

	// Determines whether to send the RIR registration request.
	SendRirRequest *bool `json:"send_rir_request,omitempty"`

	// The number of static DHCP addresses configured in the network.
	StaticHosts uint32 `json:"static_hosts,omitempty"`

	// The DHCP Network Cisco ISE subscribe settings.
	SubscribeSettings *CiscoiseSubscribesetting `json:"subscribe_settings,omitempty"`

	// If set on creation, the network is created according to the values specified
	// in the selected template.
	Template string `json:"template,omitempty"`

	// The total number of DHCP addresses configured in the network.
	TotalHosts uint32 `json:"total_hosts,omitempty"`

	// Determines whether the DHCP IPv4 Network is unmanaged or not.
	Unmanaged *bool `json:"unmanaged,omitempty"`

	// The number of unmanaged IP addresses as discovered by network discovery.
	UnmanagedCount uint32 `json:"unmanaged_count,omitempty"`

	// This field controls whether the DHCP server updates DNS when a DHCP lease is
	// renewed.
	UpdateDnsOnLeaseRenewal *bool `json:"update_dns_on_lease_renewal,omitempty"`

	// Use flag for: authority
	UseAuthority *bool `json:"use_authority,omitempty"`

	// Use flag for: discovery_blackout_setting , port_control_blackout_setting,
	// same_port_control_discovery_blackout
	UseBlackoutSetting *bool `json:"use_blackout_setting,omitempty"`

	// Use flag for: bootfile
	UseBootfile *bool `json:"use_bootfile,omitempty"`

	// Use flag for: bootserver
	UseBootserver *bool `json:"use_bootserver,omitempty"`

	// Use flag for: ddns_domainname
	UseDdnsDomainname *bool `json:"use_ddns_domainname,omitempty"`

	// Use flag for: ddns_generate_hostname
	UseDdnsGenerateHostname *bool `json:"use_ddns_generate_hostname,omitempty"`

	// Use flag for: ddns_ttl
	UseDdnsTtl *bool `json:"use_ddns_ttl,omitempty"`

	// Use flag for: ddns_update_fixed_addresses
	UseDdnsUpdateFixedAddresses *bool `json:"use_ddns_update_fixed_addresses,omitempty"`

	// Use flag for: ddns_use_option81
	UseDdnsUseOption81 *bool `json:"use_ddns_use_option81,omitempty"`

	// Use flag for: deny_bootp
	UseDenyBootp *bool `json:"use_deny_bootp,omitempty"`

	// Use flag for: discovery_basic_poll_settings
	UseDiscoveryBasicPollingSettings *bool `json:"use_discovery_basic_polling_settings,omitempty"`

	// Use flag for: email_list
	UseEmailList *bool `json:"use_email_list,omitempty"`

	// Use flag for: enable_ddns
	UseEnableDdns *bool `json:"use_enable_ddns,omitempty"`

	// Use flag for: enable_dhcp_thresholds
	UseEnableDhcpThresholds *bool `json:"use_enable_dhcp_thresholds,omitempty"`

	// Use flag for: discovery_member , enable_discovery
	UseEnableDiscovery *bool `json:"use_enable_discovery,omitempty"`

	// Use flag for: enable_ifmap_publishing
	UseEnableIfmapPublishing *bool `json:"use_enable_ifmap_publishing,omitempty"`

	// Use flag for: ignore_dhcp_option_list_request
	UseIgnoreDhcpOptionListRequest *bool `json:"use_ignore_dhcp_option_list_request,omitempty"`

	// Use flag for: ignore_id
	UseIgnoreId *bool `json:"use_ignore_id,omitempty"`

	// Use flag for: ipam_email_addresses
	UseIpamEmailAddresses *bool `json:"use_ipam_email_addresses,omitempty"`

	// Use flag for: ipam_threshold_settings
	UseIpamThresholdSettings *bool `json:"use_ipam_threshold_settings,omitempty"`

	// Use flag for: ipam_trap_settings
	UseIpamTrapSettings *bool `json:"use_ipam_trap_settings,omitempty"`

	// Use flag for: lease_scavenge_time
	UseLeaseScavengeTime *bool `json:"use_lease_scavenge_time,omitempty"`

	// Use flag for: logic_filter_rules
	UseLogicFilterRules *bool `json:"use_logic_filter_rules,omitempty"`

	// Use flag for: mgm_private
	UseMgmPrivate *bool `json:"use_mgm_private,omitempty"`

	// Use flag for: nextserver
	UseNextserver *bool `json:"use_nextserver,omitempty"`

	// Use flag for: options
	UseOptions *bool `json:"use_options,omitempty"`

	// Use flag for: pxe_lease_time
	UsePxeLeaseTime *bool `json:"use_pxe_lease_time,omitempty"`

	// Use flag for: recycle_leases
	UseRecycleLeases *bool `json:"use_recycle_leases,omitempty"`

	// Use flag for: subscribe_settings
	UseSubscribeSettings *bool `json:"use_subscribe_settings,omitempty"`

	// Use flag for: update_dns_on_lease_renewal
	UseUpdateDnsOnLeaseRenewal *bool `json:"use_update_dns_on_lease_renewal,omitempty"`

	// Use flag for: zone_associations
	UseZoneAssociations *bool `json:"use_zone_associations,omitempty"`

	// The network utilization in percentage.
	Utilization uint32 `json:"utilization,omitempty"`

	// The timestamp when the utilization statistics were last updated.
	UtilizationUpdate *UnixTime `json:"utilization_update,omitempty"`

	// List of VLANs assigned to Network.
	Vlans []*Vlanlink `json:"vlans,omitempty"`

	// The list of zones associated with this network.
	ZoneAssociations []*Zoneassociation `json:"zone_associations,omitempty"`
}

func (Ipv4Network) ObjectType() string {
	return "network"
}

func (obj Ipv4Network) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"comment", "network", "network_view"}
	}
	return obj.returnFields
}

// NetworkDiscovery represents Infoblox object network_discovery.
// This object can be used to control the network discovery process.
type NetworkDiscovery struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`
}

func (NetworkDiscovery) ObjectType() string {
	return "network_discovery"
}

func (obj NetworkDiscovery) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{}
	}
	return obj.returnFields
}

// Ipv4NetworkContainer represents Infoblox object networkcontainer.
// A network can contain child networks. The network that contains child
// networks is called a network container. This object encapsulates an IPv4
// network container object.
type Ipv4NetworkContainer struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// Authority for the DHCP network container.
	Authority *bool `json:"authority,omitempty"`

	// This flag controls whether reverse zones are automatically created when the
	// network is added.
	AutoCreateReversezone bool `json:"auto_create_reversezone,omitempty"`

	// The boot server IPv4 Address or name in FQDN format for the network
	// container. You can specify the name and/or IP address of the boot server
	// that the host needs to boot.
	Bootfile *string `json:"bootfile,omitempty"`

	// The bootserver address for the network container. You can specify the name
	// and/or IP address of the boot server that the host needs to boot. The boot
	// server IPv4 Address or name in FQDN format.
	Bootserver *string `json:"bootserver,omitempty"`

	// Structure containing all cloud API related information for this object.
	CloudInfo *GridCloudapiInfo `json:"cloud_info,omitempty"`

	// Comment for the network container; maximum 256 characters.
	Comment *string `json:"comment,omitempty"`

	// The dynamic DNS domain name the appliance uses specifically for DDNS updates
	// for this network container.
	DdnsDomainname *string `json:"ddns_domainname,omitempty"`

	// If this field is set to True, the DHCP server generates a hostname and
	// updates DNS with it when the DHCP client request does not contain a
	// hostname.
	DdnsGenerateHostname *bool `json:"ddns_generate_hostname,omitempty"`

	// This field controls whether the DHCP server is allowed to update DNS,
	// regardless of the DHCP client requests. Note that changes for this field
	// take effect only if ddns_use_option81 is True.
	DdnsServerAlwaysUpdates *bool `json:"ddns_server_always_updates,omitempty"`

	// The DNS update Time to Live (TTL) value of a DHCP network container object.
	// The TTL is a 32-bit unsigned integer that represents the duration, in
	// seconds, for which the update is cached. Zero indicates that the update is
	// not cached.
	DdnsTtl *uint32 `json:"ddns_ttl,omitempty"`

	// By default, the DHCP server does not update DNS when it allocates a fixed
	// address to a client. You can configure the DHCP server to update the A and
	// PTR records of a client with a fixed address. When this feature is enabled
	// and the DHCP server adds A and PTR records for a fixed address, the DHCP
	// server never discards the records.
	DdnsUpdateFixedAddresses *bool `json:"ddns_update_fixed_addresses,omitempty"`

	// The support for DHCP Option 81 at the network container level.
	DdnsUseOption81 *bool `json:"ddns_use_option81,omitempty"`

	// The reason for deleting the RIR registration request.
	DeleteReason *string `json:"delete_reason,omitempty"`

	// If set to True, BOOTP settings are disabled and BOOTP requests will be
	// denied.
	DenyBootp *bool `json:"deny_bootp,omitempty"`

	// Discover now status for this network container.
	DiscoverNowStatus string `json:"discover_now_status,omitempty"`

	// The discovery basic poll settings for this network container.
	DiscoveryBasicPollSettings *DiscoveryBasicpollsettings `json:"discovery_basic_poll_settings,omitempty"`

	// The discovery blackout setting for this network container.
	DiscoveryBlackoutSetting *PropertiesBlackoutsetting `json:"discovery_blackout_setting,omitempty"`

	// The network discovery engine type.
	DiscoveryEngineType string `json:"discovery_engine_type,omitempty"`

	// The member that will run discovery for this network container.
	DiscoveryMember *string `json:"discovery_member,omitempty"`

	// The e-mail lists to which the appliance sends DHCP threshold alarm e-mail
	// messages.
	EmailList []string `json:"email_list,omitempty"`

	// The dynamic DNS updates flag of a DHCP network container object. If set to
	// True, the DHCP server sends DDNS updates to DNS servers in the same Grid,
	// and to external DNS servers.
	EnableDdns *bool `json:"enable_ddns,omitempty"`

	// Determines if DHCP thresholds are enabled for the network container.
	EnableDhcpThresholds *bool `json:"enable_dhcp_thresholds,omitempty"`

	// Determines whether a discovery is enabled or not for this network container.
	// When this is set to False, the network container discovery is disabled.
	EnableDiscovery *bool `json:"enable_discovery,omitempty"`

	// Determines if DHCP threshold warnings are sent through email.
	EnableEmailWarnings *bool `json:"enable_email_warnings,omitempty"`

	// Determines if the discovery for the network container should be immediately
	// enabled.
	EnableImmediateDiscovery *bool `json:"enable_immediate_discovery,omitempty"`

	// Set this to True if you want the DHCP server to use a different lease time
	// for PXE clients.
	EnablePxeLeaseTime *bool `json:"enable_pxe_lease_time,omitempty"`

	// Determines if DHCP threshold warnings are send through SNMP.
	EnableSnmpWarnings *bool `json:"enable_snmp_warnings,omitempty"`

	// The endpoints that provides data for the DHCP Network Container object.
	EndpointSources []*CiscoiseEndpoint `json:"endpoint_sources,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// The percentage of DHCP network container usage threshold above which network
	// container usage is not expected and may warrant your attention. When the
	// high watermark is reached, the Infoblox appliance generates a syslog message
	// and sends a warning (if enabled). A number that specifies the percentage of
	// allocated addresses. The range is from 1 to 100.
	HighWaterMark *uint32 `json:"high_water_mark,omitempty"`

	// The percentage of DHCP network container usage below which the corresponding
	// SNMP trap is reset. A number that specifies the percentage of allocated
	// addresses. The range is from 1 to 100. The high watermark reset value must
	// be lower than the high watermark value.
	HighWaterMarkReset *uint32 `json:"high_water_mark_reset,omitempty"`

	// If this field is set to False, the appliance returns all DHCP options the
	// client is eligible to receive, rather than only the list of options the
	// client has requested.
	IgnoreDhcpOptionListRequest *bool `json:"ignore_dhcp_option_list_request,omitempty"`

	// Indicates whether the appliance will ignore DHCP client IDs or MAC
	// addresses.
	IgnoreId string `json:"ignore_id,omitempty"`

	// A list of MAC addresses the appliance will ignore.
	IgnoreMacAddresses []string `json:"ignore_mac_addresses,omitempty"`

	// The e-mail lists to which the appliance sends IPAM threshold alarm e-mail
	// messages.
	IpamEmailAddresses []string `json:"ipam_email_addresses,omitempty"`

	// The IPAM Threshold settings for this network container.
	IpamThresholdSettings *SettingIpamThreshold `json:"ipam_threshold_settings,omitempty"`

	// The IPAM Trap settings for this network container.
	IpamTrapSettings *SettingIpamTrap `json:"ipam_trap_settings,omitempty"`

	// The timestamp when the last RIR registration update was sent.
	LastRirRegistrationUpdateSent *UnixTime `json:"last_rir_registration_update_sent,omitempty"`

	// Last RIR registration update status.
	LastRirRegistrationUpdateStatus string `json:"last_rir_registration_update_status,omitempty"`

	// An integer that specifies the period of time (in seconds) that frees and
	// backs up leases remained in the database before they are automatically
	// deleted. To disable lease scavenging, set the parameter to -1. The minimum
	// positive value must be greater than 86400 seconds (1 day).
	LeaseScavengeTime int `json:"lease_scavenge_time,omitempty"`

	// This field contains the logic filters to be applied on the this network
	// container. This list corresponds to the match rules that are written to the
	// dhcpd configuration file.
	LogicFilterRules []*Logicfilterrule `json:"logic_filter_rules,omitempty"`

	// The percentage of DHCP network container usage below which the Infoblox
	// appliance generates a syslog message and sends a warning (if enabled). A
	// number that specifies the percentage of allocated addresses. The range is
	// from 1 to 100.
	LowWaterMark *uint32 `json:"low_water_mark,omitempty"`

	// The percentage of DHCP network container usage threshold below which network
	// container usage is not expected and may warrant your attention. When the low
	// watermark is crossed, the Infoblox appliance generates a syslog message and
	// sends a warning (if enabled). A number that specifies the percentage of
	// allocated addresses. The range is from 1 to 100. The low watermark reset
	// value must be higher than the low watermark value.
	LowWaterMarkReset *uint32 `json:"low_water_mark_reset,omitempty"`

	// This field controls whether this object is synchronized with the Multi-Grid
	// Master. If this field is set to True, objects are not synchronized.
	MgmPrivate *bool `json:"mgm_private,omitempty"`

	// This field is assumed to be True unless filled by any conforming objects,
	// such as Network, IPv6 Network, Network Container, IPv6 Network Container,
	// and Network View. This value is set to False if mgm_private is set to True
	// in the parent object.
	MgmPrivateOverridable bool `json:"mgm_private_overridable,omitempty"`

	// The Microsoft Active Directory user related information.
	MsAdUserData *MsserverAduserData `json:"ms_ad_user_data,omitempty"`

	// The network address in IPv4 Address/CIDR format. For regular expression
	// searches, only the IPv4 Address portion is supported. Searches for the CIDR
	// portion is always an exact match. For example, both network containers
	// 10.0.0.0/8 and 20.1.0.0/16 are matched by expression '.0' and only
	// 20.1.0.0/16 is matched by '.0/16'.
	Network string `json:"network,omitempty"`

	// The network container to which this network belongs, if any.
	NetworkContainer string `json:"network_container,omitempty"`

	// The name of the network view in which this network resides.
	NetworkView string `json:"network_view,omitempty"`

	// The name in FQDN and/or IPv4 Address of the next server that the host needs
	// to boot.
	Nextserver *string `json:"nextserver,omitempty"`

	// An array of DHCP option dhcpoption structs that lists the DHCP options
	// associated with the object.
	Options []*Dhcpoption `json:"options,omitempty"`

	// The port control blackout setting for this network container.
	PortControlBlackoutSetting *PropertiesBlackoutsetting `json:"port_control_blackout_setting,omitempty"`

	// The PXE lease time value of a DHCP Network container object. Some hosts use
	// PXE (Preboot Execution Environment) to boot remotely from a server. To
	// better manage your IP resources, set a different lease time for PXE boot
	// requests. You can configure the DHCP server to allocate an IP address with a
	// shorter lease time to hosts that send PXE boot requests, so IP addresses are
	// not leased longer than necessary. A 32-bit unsigned integer that represents
	// the duration, in seconds, for which the update is cached. Zero indicates
	// that the update is not cached.
	PxeLeaseTime *uint32 `json:"pxe_lease_time,omitempty"`

	// If the field is set to True, the leases are kept in the Recycle Bin until
	// one week after expiration. Otherwise, the leases are permanently deleted.
	RecycleLeases *bool `json:"recycle_leases,omitempty"`

	// Remove subnets delete option. Determines whether all child objects should be
	// removed alongside with the network container or child objects should be
	// assigned to another parental container. By default child objects are deleted
	// with the network container.
	RemoveSubnets bool `json:"remove_subnets,omitempty"`

	// Restarts the member service.
	RestartIfNeeded *bool `json:"restart_if_needed,omitempty"`

	// The registry (RIR) that allocated the network container address space.
	Rir string `json:"rir,omitempty"`

	// The RIR organization assoicated with the network container.
	RirOrganization *string `json:"rir_organization,omitempty"`

	// The RIR registration action.
	RirRegistrationAction string `json:"rir_registration_action,omitempty"`

	// The registration status of the network container in RIR.
	RirRegistrationStatus string `json:"rir_registration_status,omitempty"`

	// If the field is set to True, the discovery blackout setting will be used for
	// port control blackout setting.
	SamePortControlDiscoveryBlackout *bool `json:"same_port_control_discovery_blackout,omitempty"`

	// Determines whether to send the RIR registration request.
	SendRirRequest *bool `json:"send_rir_request,omitempty"`

	// The DHCP Network Container Cisco ISE subscribe settings.
	SubscribeSettings *CiscoiseSubscribesetting `json:"subscribe_settings,omitempty"`

	// Determines whether the network container is unmanaged or not.
	Unmanaged *bool `json:"unmanaged,omitempty"`

	// This field controls whether the DHCP server updates DNS when a DHCP lease is
	// renewed.
	UpdateDnsOnLeaseRenewal *bool `json:"update_dns_on_lease_renewal,omitempty"`

	// Use flag for: authority
	UseAuthority *bool `json:"use_authority,omitempty"`

	// Use flag for: discovery_blackout_setting , port_control_blackout_setting,
	// same_port_control_discovery_blackout
	UseBlackoutSetting *bool `json:"use_blackout_setting,omitempty"`

	// Use flag for: bootfile
	UseBootfile *bool `json:"use_bootfile,omitempty"`

	// Use flag for: bootserver
	UseBootserver *bool `json:"use_bootserver,omitempty"`

	// Use flag for: ddns_domainname
	UseDdnsDomainname *bool `json:"use_ddns_domainname,omitempty"`

	// Use flag for: ddns_generate_hostname
	UseDdnsGenerateHostname *bool `json:"use_ddns_generate_hostname,omitempty"`

	// Use flag for: ddns_ttl
	UseDdnsTtl *bool `json:"use_ddns_ttl,omitempty"`

	// Use flag for: ddns_update_fixed_addresses
	UseDdnsUpdateFixedAddresses *bool `json:"use_ddns_update_fixed_addresses,omitempty"`

	// Use flag for: ddns_use_option81
	UseDdnsUseOption81 *bool `json:"use_ddns_use_option81,omitempty"`

	// Use flag for: deny_bootp
	UseDenyBootp *bool `json:"use_deny_bootp,omitempty"`

	// Use flag for: discovery_basic_poll_settings
	UseDiscoveryBasicPollingSettings *bool `json:"use_discovery_basic_polling_settings,omitempty"`

	// Use flag for: email_list
	UseEmailList *bool `json:"use_email_list,omitempty"`

	// Use flag for: enable_ddns
	UseEnableDdns *bool `json:"use_enable_ddns,omitempty"`

	// Use flag for: enable_dhcp_thresholds
	UseEnableDhcpThresholds *bool `json:"use_enable_dhcp_thresholds,omitempty"`

	// Use flag for: discovery_member , enable_discovery
	UseEnableDiscovery *bool `json:"use_enable_discovery,omitempty"`

	// Use flag for: ignore_dhcp_option_list_request
	UseIgnoreDhcpOptionListRequest *bool `json:"use_ignore_dhcp_option_list_request,omitempty"`

	// Use flag for: ignore_id
	UseIgnoreId *bool `json:"use_ignore_id,omitempty"`

	// Use flag for: ipam_email_addresses
	UseIpamEmailAddresses *bool `json:"use_ipam_email_addresses,omitempty"`

	// Use flag for: ipam_threshold_settings
	UseIpamThresholdSettings *bool `json:"use_ipam_threshold_settings,omitempty"`

	// Use flag for: ipam_trap_settings
	UseIpamTrapSettings *bool `json:"use_ipam_trap_settings,omitempty"`

	// Use flag for: lease_scavenge_time
	UseLeaseScavengeTime *bool `json:"use_lease_scavenge_time,omitempty"`

	// Use flag for: logic_filter_rules
	UseLogicFilterRules *bool `json:"use_logic_filter_rules,omitempty"`

	// Use flag for: mgm_private
	UseMgmPrivate *bool `json:"use_mgm_private,omitempty"`

	// Use flag for: nextserver
	UseNextserver *bool `json:"use_nextserver,omitempty"`

	// Use flag for: options
	UseOptions *bool `json:"use_options,omitempty"`

	// Use flag for: pxe_lease_time
	UsePxeLeaseTime *bool `json:"use_pxe_lease_time,omitempty"`

	// Use flag for: recycle_leases
	UseRecycleLeases *bool `json:"use_recycle_leases,omitempty"`

	// Use flag for: subscribe_settings
	UseSubscribeSettings *bool `json:"use_subscribe_settings,omitempty"`

	// Use flag for: update_dns_on_lease_renewal
	UseUpdateDnsOnLeaseRenewal *bool `json:"use_update_dns_on_lease_renewal,omitempty"`

	// Use flag for: zone_associations
	UseZoneAssociations *bool `json:"use_zone_associations,omitempty"`

	// The network container utilization in percentage.
	Utilization uint32 `json:"utilization,omitempty"`

	// The list of zones associated with this network.
	ZoneAssociations []*Zoneassociation `json:"zone_associations,omitempty"`
}

func (Ipv4NetworkContainer) ObjectType() string {
	return "networkcontainer"
}

func (obj Ipv4NetworkContainer) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"comment", "network", "network_view"}
	}
	return obj.returnFields
}

// NetworkTemplate represents Infoblox object networktemplate.
// The network template used to create networks in a quick and consistent way.
// Networks created from a network template inherit all the properties defined
// in the network template, except for the comment and netmask that can be
// defined in the network.
type NetworkTemplate struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// This flag controls whether the template allows any netmask. You must specify
	// a netmask when creating a network using this template. If you set this
	// parameter to false, you must specify the "netmask" field for the network
	// template object.
	AllowAnyNetmask *bool `json:"allow_any_netmask,omitempty"`

	// Authority for the DHCP network.
	Authority *bool `json:"authority,omitempty"`

	// This flag controls whether reverse zones are automatically created when the
	// network is added.
	AutoCreateReversezone *bool `json:"auto_create_reversezone,omitempty"`

	// The boot server IPv4 Address or name in FQDN format for the network. You can
	// specify the name and/or IP address of the boot server that the host needs to
	// boot.
	Bootfile *string `json:"bootfile,omitempty"`

	// The bootserver address for the network. You can specify the name and/or IP
	// address of the boot server that the host needs to boot. The boot server IPv4
	// Address or name in FQDN format.
	Bootserver *string `json:"bootserver,omitempty"`

	// This flag controls whether this template can be used to create network
	// objects in a cloud-computing deployment.
	CloudApiCompatible *bool `json:"cloud_api_compatible,omitempty"`

	// Comment for the network; maximum 256 characters.
	Comment *string `json:"comment,omitempty"`

	// The dynamic DNS domain name the appliance uses specifically for DDNS updates
	// for this network.
	DdnsDomainname *string `json:"ddns_domainname,omitempty"`

	// If this field is set to True, the DHCP server generates a hostname and
	// updates DNS with it when the DHCP client request does not contain a
	// hostname.
	DdnsGenerateHostname *bool `json:"ddns_generate_hostname,omitempty"`

	// This field controls whether the DHCP server is allowed to update DNS,
	// regardless of the DHCP client requests. Note that changes for this field
	// take effect only if ddns_use_option81 is True.
	DdnsServerAlwaysUpdates *bool `json:"ddns_server_always_updates,omitempty"`

	// The DNS update Time to Live (TTL) value of a DHCP network object. The TTL is
	// a 32-bit unsigned integer that represents the duration, in seconds, for
	// which the update is cached. Zero indicates that the update is not cached.
	DdnsTtl *uint32 `json:"ddns_ttl,omitempty"`

	// By default, the DHCP server does not update DNS when it allocates a fixed
	// address to a client. You can configure the DHCP server to update the A and
	// PTR records of a client with a fixed address. When this feature is enabled
	// and the DHCP server adds A and PTR records for a fixed address, the DHCP
	// server never discards the records.
	DdnsUpdateFixedAddresses *bool `json:"ddns_update_fixed_addresses,omitempty"`

	// The support for DHCP Option 81 at the network level.
	DdnsUseOption81 *bool `json:"ddns_use_option81,omitempty"`

	// Reference the Cloud Platform Appliance to which authority of the object
	// should be delegated when the object is created using the template.
	DelegatedMember *Dhcpmember `json:"delegated_member,omitempty"`

	// If set to True, BOOTP settings are disabled and BOOTP requests will be
	// denied.
	DenyBootp *bool `json:"deny_bootp,omitempty"`

	// The e-mail lists to which the appliance sends DHCP threshold alarm e-mail
	// messages.
	EmailList []string `json:"email_list,omitempty"`

	// The dynamic DNS updates flag of a DHCP network object. If set to True, the
	// DHCP server sends DDNS updates to DNS servers in the same Grid, and to
	// external DNS servers.
	EnableDdns *bool `json:"enable_ddns,omitempty"`

	// Determines if DHCP thresholds are enabled for the network.
	EnableDhcpThresholds *bool `json:"enable_dhcp_thresholds,omitempty"`

	// Determines if DHCP threshold warnings are sent through email.
	EnableEmailWarnings *bool `json:"enable_email_warnings,omitempty"`

	// Set this to True if you want the DHCP server to use a different lease time
	// for PXE clients.
	EnablePxeLeaseTime *bool `json:"enable_pxe_lease_time,omitempty"`

	// Determines if DHCP threshold warnings are send through SNMP.
	EnableSnmpWarnings *bool `json:"enable_snmp_warnings,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// The list of fixed address templates assigned to this network template
	// object. When you create a network based on a network template object that
	// contains fixed address templates, the fixed addresses are created based on
	// the associated fixed address templates.
	FixedAddressTemplates []string `json:"fixed_address_templates,omitempty"`

	// The percentage of DHCP network usage threshold above which network usage is
	// not expected and may warrant your attention. When the high watermark is
	// reached, the Infoblox appliance generates a syslog message and sends a
	// warning (if enabled). A number that specifies the percentage of allocated
	// addresses. The range is from 1 to 100.
	HighWaterMark *uint32 `json:"high_water_mark,omitempty"`

	// The percentage of DHCP network usage below which the corresponding SNMP trap
	// is reset. A number that specifies the percentage of allocated addresses. The
	// range is from 1 to 100. The high watermark reset value must be lower than
	// the high watermark value.
	HighWaterMarkReset *uint32 `json:"high_water_mark_reset,omitempty"`

	// If this field is set to False, the appliance returns all DHCP options the
	// client is eligible to receive, rather than only the list of options the
	// client has requested.
	IgnoreDhcpOptionListRequest *bool `json:"ignore_dhcp_option_list_request,omitempty"`

	// The e-mail lists to which the appliance sends IPAM threshold alarm e-mail
	// messages.
	IpamEmailAddresses []string `json:"ipam_email_addresses,omitempty"`

	// The IPAM Threshold settings for this network template.
	IpamThresholdSettings *SettingIpamThreshold `json:"ipam_threshold_settings,omitempty"`

	// The IPAM Trap settings for this network template.
	IpamTrapSettings *SettingIpamTrap `json:"ipam_trap_settings,omitempty"`

	// An integer that specifies the period of time (in seconds) that frees and
	// backs up leases remained in the database before they are automatically
	// deleted. To disable lease scavenging, set the parameter to -1. The minimum
	// positive value must be greater than 86400 seconds (1 day).
	LeaseScavengeTime int `json:"lease_scavenge_time,omitempty"`

	// This field contains the logic filters to be applied on the this network
	// template. This list corresponds to the match rules that are written to the
	// dhcpd configuration file.
	LogicFilterRules []*Logicfilterrule `json:"logic_filter_rules,omitempty"`

	// The percentage of DHCP network usage below which the Infoblox appliance
	// generates a syslog message and sends a warning (if enabled). A number that
	// specifies the percentage of allocated addresses. The range is from 1 to 100.
	LowWaterMark *uint32 `json:"low_water_mark,omitempty"`

	// The percentage of DHCP network usage threshold below which network usage is
	// not expected and may warrant your attention. When the low watermark is
	// crossed, the Infoblox appliance generates a syslog message and sends a
	// warning (if enabled). A number that specifies the percentage of allocated
	// addresses. The range is from 1 to 100. The low watermark reset value must be
	// higher than the low watermark value.
	LowWaterMarkReset *uint32 `json:"low_water_mark_reset,omitempty"`

	// A list of members or Microsoft (r) servers that serve DHCP for this network.
	// All members in the array must be of the same type. The struct type must be
	// indicated in each element, by setting the "_struct" member to the struct
	// type.
	Members []*Msdhcpserver `json:"members,omitempty"`

	// The name of this network template.
	Name *string `json:"name,omitempty"`

	// The netmask of the network in CIDR format.
	Netmask *uint32 `json:"netmask,omitempty"`

	// The name in FQDN and/or IPv4 Address of the next server that the host needs
	// to boot.
	Nextserver *string `json:"nextserver,omitempty"`

	// An array of DHCP option dhcpoption structs that lists the DHCP options
	// associated with the object.
	Options []*Dhcpoption `json:"options,omitempty"`

	// The PXE lease time value of a DHCP Network object. Some hosts use PXE
	// (Preboot Execution Environment) to boot remotely from a server. To better
	// manage your IP resources, set a different lease time for PXE boot requests.
	// You can configure the DHCP server to allocate an IP address with a shorter
	// lease time to hosts that send PXE boot requests, so IP addresses are not
	// leased longer than necessary. A 32-bit unsigned integer that represents the
	// duration, in seconds, for which the update is cached. Zero indicates that
	// the update is not cached.
	PxeLeaseTime *uint32 `json:"pxe_lease_time,omitempty"`

	// The list of IP address range templates assigned to this network template
	// object. When you create a network based on a network template object that
	// contains range templates, the IP address ranges are created based on the
	// associated IP address range templates.
	RangeTemplates []string `json:"range_templates,omitempty"`

	// If the field is set to True, the leases are kept in the Recycle Bin until
	// one week after expiration. Otherwise, the leases are permanently deleted.
	RecycleLeases *bool `json:"recycle_leases,omitempty"`

	// THe registry (RIR) that allocated the network address space.
	Rir string `json:"rir,omitempty"`

	// The RIR organization assoicated with the network.
	RirOrganization *string `json:"rir_organization,omitempty"`

	// The RIR registration action.
	RirRegistrationAction string `json:"rir_registration_action,omitempty"`

	// The registration status of the network in RIR.
	RirRegistrationStatus string `json:"rir_registration_status,omitempty"`

	// Determines whether to send the RIR registration request.
	SendRirRequest *bool `json:"send_rir_request,omitempty"`

	// This field controls whether the DHCP server updates DNS when a DHCP lease is
	// renewed.
	UpdateDnsOnLeaseRenewal *bool `json:"update_dns_on_lease_renewal,omitempty"`

	// Use flag for: authority
	UseAuthority *bool `json:"use_authority,omitempty"`

	// Use flag for: bootfile
	UseBootfile *bool `json:"use_bootfile,omitempty"`

	// Use flag for: bootserver
	UseBootserver *bool `json:"use_bootserver,omitempty"`

	// Use flag for: ddns_domainname
	UseDdnsDomainname *bool `json:"use_ddns_domainname,omitempty"`

	// Use flag for: ddns_generate_hostname
	UseDdnsGenerateHostname *bool `json:"use_ddns_generate_hostname,omitempty"`

	// Use flag for: ddns_ttl
	UseDdnsTtl *bool `json:"use_ddns_ttl,omitempty"`

	// Use flag for: ddns_update_fixed_addresses
	UseDdnsUpdateFixedAddresses *bool `json:"use_ddns_update_fixed_addresses,omitempty"`

	// Use flag for: ddns_use_option81
	UseDdnsUseOption81 *bool `json:"use_ddns_use_option81,omitempty"`

	// Use flag for: deny_bootp
	UseDenyBootp *bool `json:"use_deny_bootp,omitempty"`

	// Use flag for: email_list
	UseEmailList *bool `json:"use_email_list,omitempty"`

	// Use flag for: enable_ddns
	UseEnableDdns *bool `json:"use_enable_ddns,omitempty"`

	// Use flag for: enable_dhcp_thresholds
	UseEnableDhcpThresholds *bool `json:"use_enable_dhcp_thresholds,omitempty"`

	// Use flag for: ignore_dhcp_option_list_request
	UseIgnoreDhcpOptionListRequest *bool `json:"use_ignore_dhcp_option_list_request,omitempty"`

	// Use flag for: ipam_email_addresses
	UseIpamEmailAddresses *bool `json:"use_ipam_email_addresses,omitempty"`

	// Use flag for: ipam_threshold_settings
	UseIpamThresholdSettings *bool `json:"use_ipam_threshold_settings,omitempty"`

	// Use flag for: ipam_trap_settings
	UseIpamTrapSettings *bool `json:"use_ipam_trap_settings,omitempty"`

	// Use flag for: lease_scavenge_time
	UseLeaseScavengeTime *bool `json:"use_lease_scavenge_time,omitempty"`

	// Use flag for: logic_filter_rules
	UseLogicFilterRules *bool `json:"use_logic_filter_rules,omitempty"`

	// Use flag for: nextserver
	UseNextserver *bool `json:"use_nextserver,omitempty"`

	// Use flag for: options
	UseOptions *bool `json:"use_options,omitempty"`

	// Use flag for: pxe_lease_time
	UsePxeLeaseTime *bool `json:"use_pxe_lease_time,omitempty"`

	// Use flag for: recycle_leases
	UseRecycleLeases *bool `json:"use_recycle_leases,omitempty"`

	// Use flag for: update_dns_on_lease_renewal
	UseUpdateDnsOnLeaseRenewal *bool `json:"use_update_dns_on_lease_renewal,omitempty"`
}

func (NetworkTemplate) ObjectType() string {
	return "networktemplate"
}

func (obj NetworkTemplate) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"comment", "name"}
	}
	return obj.returnFields
}

// Networkuser represents Infoblox object networkuser.
// The DHCP Network User object provides information about Active Directory
// users such as user session for a specific IP address, domain, login and
// logout timestamps.
type Networkuser struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The IPv4 Address or IPv6 Address of the Network User.
	Address *string `json:"address,omitempty"`

	// The reference of the IPAM IPv4Address or IPv6Address object describing the
	// address of the Network User.
	AddressObject string `json:"address_object,omitempty"`

	// The Network User data source.
	DataSource string `json:"data_source,omitempty"`

	// The Network User data source IPv4 Address or IPv6 Address or FQDN address.
	DataSourceIp string `json:"data_source_ip,omitempty"`

	// The domain name of the Network User.
	Domainname *string `json:"domainname,omitempty"`

	// The first seen timestamp of the Network User.
	FirstSeenTime *UnixTime `json:"first_seen_time,omitempty"`

	// The group identifier of the Network User.
	Guid *string `json:"guid,omitempty"`

	// The last seen timestamp of the Network User.
	LastSeenTime *UnixTime `json:"last_seen_time,omitempty"`

	// The last updated timestamp of the Network User.
	LastUpdatedTime *UnixTime `json:"last_updated_time,omitempty"`

	// The logon identifier of the Network User.
	LogonId *string `json:"logon_id,omitempty"`

	// The logout timestamp of the Network User.
	LogoutTime *UnixTime `json:"logout_time,omitempty"`

	// The name of the Network User.
	Name *string `json:"name,omitempty"`

	// The reference to the network to which the Network User belongs.
	Network string `json:"network,omitempty"`

	// The name of the network view in which this Network User resides.
	NetworkView *string `json:"network_view,omitempty"`

	// The status of the Network User.
	UserStatus string `json:"user_status,omitempty"`
}

func (Networkuser) ObjectType() string {
	return "networkuser"
}

func (obj Networkuser) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"address", "domainname", "name", "network_view", "user_status"}
	}
	return obj.returnFields
}

// NetworkView represents Infoblox object networkview.
// A network view is a single routing domain with its own networks and shared
// networks. A network view can contain both IPv4 and IPv6 networks. All
// networks must belong to a network view.
type NetworkView struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The list of DNS views associated with this network view.
	AssociatedDnsViews []string `json:"associated_dns_views,omitempty"`

	// The list of members associated with a network view.
	AssociatedMembers []*NetworkviewAssocmember `json:"associated_members,omitempty"`

	// Structure containing all cloud API related information for this object.
	CloudInfo *GridCloudapiInfo `json:"cloud_info,omitempty"`

	// Comment for the network view; maximum 256 characters.
	Comment *string `json:"comment,omitempty"`

	// DNS views that will receive the updates if you enable the appliance to send
	// updates to Grid members.
	DdnsDnsView *string `json:"ddns_dns_view,omitempty"`

	// An array of Ddns Zone Primary dhcpddns structs that lists the information of
	// primary zone to wich DDNS updates should be sent.
	DdnsZonePrimaries []*Dhcpddns `json:"ddns_zone_primaries,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// The list of linked authoritative DNS zones.
	InternalForwardZones []*ZoneAuth `json:"internal_forward_zones,omitempty"`

	// The NIOS appliance provides one default network view. You can rename the
	// default view and change its settings, but you cannot delete it. There must
	// always be at least one network view in the appliance.
	IsDefault bool `json:"is_default,omitempty"`

	// This field controls whether this object is synchronized with the Multi-Grid
	// Master. If this field is set to True, objects are not synchronized.
	MgmPrivate *bool `json:"mgm_private,omitempty"`

	// The Microsoft Active Directory user related information.
	MsAdUserData *MsserverAduserData `json:"ms_ad_user_data,omitempty"`

	// Name of the network view.
	Name *string `json:"name,omitempty"`

	// The list of forward-mapping zones to which the DHCP server sends the
	// updates.
	RemoteForwardZones []*Remoteddnszone `json:"remote_forward_zones,omitempty"`

	// The list of reverse-mapping zones to which the DHCP server sends the
	// updates.
	RemoteReverseZones []*Remoteddnszone `json:"remote_reverse_zones,omitempty"`
}

func (NetworkView) ObjectType() string {
	return "networkview"
}

func (obj NetworkView) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"comment", "is_default", "name"}
	}
	return obj.returnFields
}

func NewEmptyNetworkView() *NetworkView {
	res := &NetworkView{}
	res.returnFields = []string{"extattrs", "name", "comment"}
	return res
}

func NewNetworkView(name string, comment string, eas EA, ref string) *NetworkView {
	res := NewEmptyNetworkView()
	res.Name = &name
	res.Comment = &comment
	res.Ea = eas
	res.Ref = ref
	return res
}

// NotificationRestEndpoint represents Infoblox object notification:rest:endpoint.
// The notification REST endpoint object represents settings of particular REST
// API endpoint.
type NotificationRestEndpoint struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The client certificate subject of a notification REST endpoint.
	ClientCertificateSubject string `json:"client_certificate_subject,omitempty"`

	// The token returned by the uploadinit function call in object fileop for a
	// notification REST endpoit client certificate.
	ClientCertificateToken *string `json:"client_certificate_token,omitempty"`

	// The timestamp when client certificate for a notification REST endpoint was
	// created.
	ClientCertificateValidFrom *UnixTime `json:"client_certificate_valid_from,omitempty"`

	// The timestamp when client certificate for a notification REST endpoint
	// expires.
	ClientCertificateValidTo *UnixTime `json:"client_certificate_valid_to,omitempty"`

	// The comment of a notification REST endpoint.
	Comment *string `json:"comment,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// The log level for a notification REST endpoint.
	LogLevel string `json:"log_level,omitempty"`

	// The name of a notification REST endpoint.
	Name *string `json:"name,omitempty"`

	// The outbound member which will generate an event.
	OutboundMemberType string `json:"outbound_member_type,omitempty"`

	// The list of members for outbound events.
	OutboundMembers []string `json:"outbound_members,omitempty"`

	// The password of the user that can log into a notification REST endpoint.
	Password *string `json:"password,omitempty"`

	// The server certificate validation type.
	ServerCertValidation string `json:"server_cert_validation,omitempty"`

	// Determines if the sync process is disabled for a notification REST endpoint.
	SyncDisabled *bool `json:"sync_disabled,omitempty"`

	// The notification REST template instance. The parameters of REST API endpoint
	// template instance are prohibited to change.
	TemplateInstance *NotificationRestTemplateinstance `json:"template_instance,omitempty"`

	// The timeout of session management (in seconds).
	Timeout *uint32 `json:"timeout,omitempty"`

	// The URI of a notification REST endpoint.
	Uri *string `json:"uri,omitempty"`

	// The username of the user that can log into a notification REST endpoint.
	Username *string `json:"username,omitempty"`

	// The vendor identifier.
	VendorIdentifier *string `json:"vendor_identifier,omitempty"`

	// The user name for WAPI integration.
	WapiUserName *string `json:"wapi_user_name,omitempty"`

	// The user password for WAPI integration.
	WapiUserPassword *string `json:"wapi_user_password,omitempty"`
}

func (NotificationRestEndpoint) ObjectType() string {
	return "notification:rest:endpoint"
}

func (obj NotificationRestEndpoint) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"name", "outbound_member_type", "uri"}
	}
	return obj.returnFields
}

// NotificationRestTemplate represents Infoblox object notification:rest:template.
// The notification REST template object represents settings of particular REST
// API template.
type NotificationRestTemplate struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The action name.
	ActionName string `json:"action_name,omitempty"`

	// The time stamp when a template was added.
	AddedOn *UnixTime `json:"added_on,omitempty"`

	// The comment for this REST API template.
	Comment *string `json:"comment,omitempty"`

	// The JSON formatted content of a template. The data passed by content creates
	// parameters for a template.
	Content *string `json:"content,omitempty"`

	// The event type.
	EventType []string `json:"event_type,omitempty"`

	// The name of a notification REST template.
	Name *string `json:"name,omitempty"`

	// The outbound type for the template.
	OutboundType string `json:"outbound_type,omitempty"`

	// The notification REST template parameters.
	Parameters []*NotificationRestTemplateparameter `json:"parameters,omitempty"`

	// The template type.
	TemplateType string `json:"template_type,omitempty"`

	// The vendor identifier.
	VendorIdentifier string `json:"vendor_identifier,omitempty"`
}

func (NotificationRestTemplate) ObjectType() string {
	return "notification:rest:template"
}

func (obj NotificationRestTemplate) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"content", "name"}
	}
	return obj.returnFields
}

// NotificationRule represents Infoblox object notification:rule.
// Notification rule specifies the server to which this rule is applicable,
// certain conditions (i.e. triggers), and the action to be taken when the rule
// is hit. It also specifies where this rule engine is configured to be run.
type NotificationRule struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// Determines whether the notification rule is applied on all members or not.
	// When this is set to False, the notification rule is applied only on
	// selected_members.
	AllMembers *bool `json:"all_members,omitempty"`

	// The notification rule descriptive comment.
	Comment *string `json:"comment,omitempty"`

	// Determines whether a notification rule is disabled or not. When this is set
	// to False, the notification rule is enabled.
	Disable *bool `json:"disable,omitempty"`

	// Determines whether the notification rule for event deduplication is enabled.
	// Note that to enable event deduplication, you must set at least one
	// deduplication field.
	EnableEventDeduplication *bool `json:"enable_event_deduplication,omitempty"`

	// Determines whether the notification rule for the event deduplication syslog
	// is enabled.
	EnableEventDeduplicationLog *bool `json:"enable_event_deduplication_log,omitempty"`

	// The list of fields that must be used in the notification rule for event
	// deduplication.
	EventDeduplicationFields []string `json:"event_deduplication_fields,omitempty"`

	// The lookback period for the notification rule for event deduplication.
	EventDeduplicationLookbackPeriod *uint32 `json:"event_deduplication_lookback_period,omitempty"`

	// Event priority.
	EventPriority *string `json:"event_priority,omitempty"`

	// The notification rule event type.
	EventType string `json:"event_type,omitempty"`

	// The notification rule expression list.
	ExpressionList []*NotificationRuleexpressionop `json:"expression_list,omitempty"`

	// The notification rule name.
	Name string `json:"name,omitempty"`

	// The notification rule action is applied if expression list evaluates to
	// True.
	NotificationAction string `json:"notification_action,omitempty"`

	// The notification target.
	NotificationTarget *string `json:"notification_target,omitempty"`

	// The publish settings.
	PublishSettings *CiscoisePublishsetting `json:"publish_settings,omitempty"`

	// Schedule setting that must be specified if event_type is SCHEDULE.
	ScheduledEvent *SettingSchedule `json:"scheduled_event,omitempty"`

	// The list of the members on which the notification rule is applied.
	SelectedMembers []string `json:"selected_members,omitempty"`

	// The notification REST template instance.
	TemplateInstance *NotificationRestTemplateinstance `json:"template_instance,omitempty"`

	// Use flag for: publish_settings
	UsePublishSettings *bool `json:"use_publish_settings,omitempty"`
}

func (NotificationRule) ObjectType() string {
	return "notification:rule"
}

func (obj NotificationRule) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"event_type", "name", "notification_action", "notification_target"}
	}
	return obj.returnFields
}

// Nsgroup represents Infoblox object nsgroup.
// A name server group is a collection of one or more primary DNS servers and
// one or more secondary DNS servers. Grouping a commonly used set of primary
// and secondary DNS servers together simplifies zone creation, allowing you to
// specify a single name server group instead of specifying multiple name
// servers individually.
type Nsgroup struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// Comment for the name server group; maximum 256 characters.
	Comment *string `json:"comment,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// The list of external primary servers.
	ExternalPrimaries []NameServer `json:"external_primaries,omitempty"`

	// The list of external secondary servers.
	ExternalSecondaries []NameServer `json:"external_secondaries,omitempty"`

	// The grid primary servers for this group.
	GridPrimary []*Memberserver `json:"grid_primary,omitempty"`

	// The list with Grid members that are secondary servers for this group.
	GridSecondaries []*Memberserver `json:"grid_secondaries,omitempty"`

	// Determines if this name server group is the Grid default.
	IsGridDefault *bool `json:"is_grid_default,omitempty"`

	// Determines if the "multiple DNS primaries" feature is enabled for the group.
	IsMultimaster bool `json:"is_multimaster,omitempty"`

	// The name of this name server group.
	Name *string `json:"name,omitempty"`

	// This flag controls whether the group is using an external primary. Note that
	// modification of this field requires passing values for "grid_secondaries"
	// and "external_primaries".
	UseExternalPrimary *bool `json:"use_external_primary,omitempty"`
}

func (Nsgroup) ObjectType() string {
	return "nsgroup"
}

func (obj Nsgroup) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"comment", "name"}
	}
	return obj.returnFields
}

// NsgroupDelegation represents Infoblox object nsgroup:delegation.
// The NS group delegation object provides delegation servers configuration for
// delegated zones. When you configure a name server group, you can now create
// a set of external name servers as a delegation name server group and assign
// it to delegated zones. Specifying a single delegation name server group
// instead of configuring multiple name servers individually for each delegated
// zones can significantly reduce configuration efforts.
type NsgroupDelegation struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The comment for the delegated NS group.
	Comment *string `json:"comment,omitempty"`

	// The list of delegated servers for the delegated NS group.
	DelegateTo []NameServer `json:"delegate_to,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// The name of the delegated NS group.
	Name *string `json:"name,omitempty"`
}

func (NsgroupDelegation) ObjectType() string {
	return "nsgroup:delegation"
}

func (obj NsgroupDelegation) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"delegate_to", "name"}
	}
	return obj.returnFields
}

// NsgroupForwardingmember represents Infoblox object nsgroup:forwardingmember.
// The Forwarding Member Name Server Group provides forwarding servers
// configuration for forward zones.
type NsgroupForwardingmember struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// Comment for the Forwarding Member Name Server Group; maximum 256 characters.
	Comment *string `json:"comment,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// The list of forwarding member servers.
	ForwardingServers []*Forwardingmemberserver `json:"forwarding_servers,omitempty"`

	// The name of the Forwarding Member Name Server Group.
	Name *string `json:"name,omitempty"`
}

func (NsgroupForwardingmember) ObjectType() string {
	return "nsgroup:forwardingmember"
}

func (obj NsgroupForwardingmember) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"forwarding_servers", "name"}
	}
	return obj.returnFields
}

// NsgroupForwardstubserver represents Infoblox object nsgroup:forwardstubserver.
// The Forward Stub Server Name Server Group allows configuring external
// servers for Forward Zone and Stub Zone.
type NsgroupForwardstubserver struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// Comment for the Forward Stub Server Name Server Group; maximum 256
	// characters.
	Comment *string `json:"comment,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// The list of external servers.
	ExternalServers []NameServer `json:"external_servers,omitempty"`

	// The name of this Forward Stub Server Name Server Group.
	Name *string `json:"name,omitempty"`
}

func (NsgroupForwardstubserver) ObjectType() string {
	return "nsgroup:forwardstubserver"
}

func (obj NsgroupForwardstubserver) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"external_servers", "name"}
	}
	return obj.returnFields
}

// NsgroupStubmember represents Infoblox object nsgroup:stubmember.
// The Stub Member Name Server Group provides stub servers configuration for
// stub zones.
type NsgroupStubmember struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// Comment for the Stub Member Name Server Group; maximum 256 characters.
	Comment *string `json:"comment,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// The name of the Stub Member Name Server Group.
	Name *string `json:"name,omitempty"`

	// The Grid member servers of this stub zone. Note that the
	// lead/stealth/grid_replicate/
	// preferred_primaries/override_preferred_primaries fields of the struct will
	// be ignored when set in this field.
	StubMembers []*Memberserver `json:"stub_members,omitempty"`
}

func (NsgroupStubmember) ObjectType() string {
	return "nsgroup:stubmember"
}

func (obj NsgroupStubmember) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"name"}
	}
	return obj.returnFields
}

// Orderedranges represents Infoblox object orderedranges.
// An ordered DHCP ranges object contains an ordered list of DHCP range objects
// that belong to a network.
type Orderedranges struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The reference to the network that contains ranges.
	Network string `json:"network,omitempty"`

	// The ordered list of references to ranges.
	Ranges []*Range `json:"ranges,omitempty"`
}

func (Orderedranges) ObjectType() string {
	return "orderedranges"
}

func (obj Orderedranges) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"network", "ranges"}
	}
	return obj.returnFields
}

// Orderedresponsepolicyzones represents Infoblox object orderedresponsepolicyzones.
// An ordered list of Response Policy Zones in a DNS view. Server will reject
// zones that are disabled or zones without primary name server assigned.
type Orderedresponsepolicyzones struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// An ordered list of Response Policy Zone names.
	RpZones []string `json:"rp_zones,omitempty"`

	// The DNS View name.
	View *string `json:"view,omitempty"`
}

func (Orderedresponsepolicyzones) ObjectType() string {
	return "orderedresponsepolicyzones"
}

func (obj Orderedresponsepolicyzones) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"view"}
	}
	return obj.returnFields
}

// OutboundCloudclient represents Infoblox object outbound:cloudclient.
// You can use the outbound Cloud Client object to configure the detection and
// authentication of domains in the Cloud, and then apply them to on-premises
// DNS firewall RPZ zones within a configurable time frame.
type OutboundCloudclient struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// Determines whether the OutBound Cloud Client is enabled.
	Enable *bool `json:"enable,omitempty"`

	// The Grid member where our outbound is running.
	GridMember *string `json:"grid_member,omitempty"`

	// The time interval (in seconds) for requesting newly detected domains by the
	// Infoblox Outbound Cloud Client and applying them to the list of configured
	// RPZs.
	Interval *uint32 `json:"interval,omitempty"`

	// List of event types to request
	OutboundCloudClientEvents []*OutboundCloudclientEvent `json:"outbound_cloud_client_events,omitempty"`
}

func (OutboundCloudclient) ObjectType() string {
	return "outbound:cloudclient"
}

func (obj OutboundCloudclient) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"enable", "interval"}
	}
	return obj.returnFields
}

// ParentalcontrolAvp represents Infoblox object parentalcontrol:avp.
// The accounting attribute value pair object is used to extract accounting
// information from accounting protocols logs.
type ParentalcontrolAvp struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The comment for the AVP.
	Comment *string `json:"comment,omitempty"`

	// The list of domains applicable to AVP.
	DomainTypes []string `json:"domain_types,omitempty"`

	// Determines if AVP is restricted to domains.
	IsRestricted *bool `json:"is_restricted,omitempty"`

	// The name of AVP.
	Name *string `json:"name,omitempty"`

	// The type of AVP as per RFC 2865/2866.
	Type *uint32 `json:"type,omitempty"`

	// Determines if AVP was defined by user.
	UserDefined bool `json:"user_defined,omitempty"`

	// The type of value.
	ValueType string `json:"value_type,omitempty"`

	// The vendor ID as per RFC 2865/2866.
	VendorId *uint32 `json:"vendor_id,omitempty"`

	// The vendor type as per RFC 2865/2866.
	VendorType *uint32 `json:"vendor_type,omitempty"`
}

func (ParentalcontrolAvp) ObjectType() string {
	return "parentalcontrol:avp"
}

func (obj ParentalcontrolAvp) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"name", "type", "value_type"}
	}
	return obj.returnFields
}

// ParentalcontrolBlockingpolicy represents Infoblox object parentalcontrol:blockingpolicy.
// This object represents a set of parental control properties for blocking
// policy.
type ParentalcontrolBlockingpolicy struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The name of the blocking policy.
	Name *string `json:"name,omitempty"`

	// The 32 bit hex value of the blocking policy.
	Value *string `json:"value,omitempty"`
}

func (ParentalcontrolBlockingpolicy) ObjectType() string {
	return "parentalcontrol:blockingpolicy"
}

func (obj ParentalcontrolBlockingpolicy) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"name", "value"}
	}
	return obj.returnFields
}

// ParentalcontrolSubscriber represents Infoblox object parentalcontrol:subscriber.
// The parental control subscriber properties contains user defined RADIUS
// subscriber information which will be used by DNS/RPZ for reporting and
// logging violations.
type ParentalcontrolSubscriber struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The name of AVP to be used as an alternate subscriber ID for fixed lines.
	AltSubscriberId *string `json:"alt_subscriber_id,omitempty"`

	// A character string to control aspects of rewriting of the fields.
	AltSubscriberIdRegexp *string `json:"alt_subscriber_id_regexp,omitempty"`

	// The subexpression indicates which subexpression to extract. If zero, then
	// the text matching the entire regular expression is extracted. If non-zero,
	// then the regex must contain at least that many sub-expression groups. It
	// takes values from 0 to 8.
	AltSubscriberIdSubexpression *uint32 `json:"alt_subscriber_id_subexpression,omitempty"`

	// The list of ordered AVP Ancillary Fields.
	Ancillaries []string `json:"ancillaries,omitempty"`

	// Category content account name using the categorization service.
	CatAcctname *string `json:"cat_acctname,omitempty"`

	// Category content account password to access the categorization service.
	CatPassword *string `json:"cat_password,omitempty"`

	// Category content updates every number of hours.
	CatUpdateFrequency *uint32 `json:"cat_update_frequency,omitempty"`

	// Category content vendor url to download category data from and upload
	// feedback to, configure for parental control.
	CategoryUrl *string `json:"category_url,omitempty"`

	// Determines if NAS RADIUS traffic is accepted over MGMT only.
	EnableMgmtOnlyNas *bool `json:"enable_mgmt_only_nas,omitempty"`

	// Determines if parental control is enabled.
	EnableParentalControl *bool `json:"enable_parental_control,omitempty"`

	// The time for collector to be fully populated. Valid values are from 1 to
	// 65535.
	InterimAccountingInterval *uint32 `json:"interim_accounting_interval,omitempty"`

	// The ordered list of IP Anchors AVPs. The list content cannot be changed, but
	// the order of elements.
	IpAnchors []string `json:"ip_anchors,omitempty"`

	// A character string to control aspects of rewriting of the fields.
	IpSpaceDiscRegexp *string `json:"ip_space_disc_regexp,omitempty"`

	// The subexpression indicates which subexpression to extract. If zero, then
	// the text matching the entire regular expression is extracted. If non-zero,
	// then the regex must contain at least that many sub-expression groups. It
	// takes values from 0 to 8.
	IpSpaceDiscSubexpression *uint32 `json:"ip_space_disc_subexpression,omitempty"`

	// The name of AVP to be used as IP address discriminator.
	IpSpaceDiscriminator *string `json:"ip_space_discriminator,omitempty"`

	// The name of AVP to be used as local ID.
	LocalId *string `json:"local_id,omitempty"`

	// A character string to control aspects of rewriting of the fields.
	LocalIdRegexp *string `json:"local_id_regexp,omitempty"`

	// The subexpression indicates which subexpression to extract. If zero, then
	// the text matching the entire regular expression is extracted. If non-zero,
	// then the regex must contain at least that many sub-expression groups. It
	// takes values from 0 to 8.
	LocalIdSubexpression *uint32 `json:"local_id_subexpression,omitempty"`

	// CEF log all guest lookups, will produce two logs in case of a violation.
	LogGuestLookups *bool `json:"log_guest_lookups,omitempty"`

	// NAS contextual information AVP.
	NasContextInfo *string `json:"nas_context_info,omitempty"`

	// The SOA to store parental control records.
	PcZoneName *string `json:"pc_zone_name,omitempty"`

	// Proxy server password used for authentication.
	ProxyPassword *string `json:"proxy_password,omitempty"`

	// Proxy url to download category data from and upload feedback to, configure
	// for parental control. The default value 'None' is no longer valid as it
	// match url regex pattern "^http|https://". The new default value does not get
	// saved in database, but rather used for comparision with object created in
	// unit test cases.
	ProxyUrl *string `json:"proxy_url,omitempty"`

	// Proxy server username used for authentication.
	ProxyUsername *string `json:"proxy_username,omitempty"`

	// The name of AVP to be used as a subscriber.
	SubscriberId *string `json:"subscriber_id,omitempty"`

	// A character string to control aspects of rewriting of the fields.
	SubscriberIdRegexp *string `json:"subscriber_id_regexp,omitempty"`

	// The subexpression indicates which subexpression to extract. If zero, then
	// the text matching the entire regular expression is extracted. If non-zero,
	// then the regex must contain at least that many sub-expression groups. It
	// takes values from 0 to 8.
	SubscriberIdSubexpression *uint32 `json:"subscriber_id_subexpression,omitempty"`
}

func (ParentalcontrolSubscriber) ObjectType() string {
	return "parentalcontrol:subscriber"
}

func (obj ParentalcontrolSubscriber) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"alt_subscriber_id", "local_id", "subscriber_id"}
	}
	return obj.returnFields
}

// ParentalcontrolSubscriberrecord represents Infoblox object parentalcontrol:subscriberrecord.
// This object represents a set of parental control properties for subscriber
// record.
type ParentalcontrolSubscriberrecord struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// accounting_session_id
	AccountingSessionId *string `json:"accounting_session_id,omitempty"`

	// alt_ip_addr
	AltIpAddr *string `json:"alt_ip_addr,omitempty"`

	// ans0
	Ans0 *string `json:"ans0,omitempty"`

	// ans1
	Ans1 *string `json:"ans1,omitempty"`

	// ans2
	Ans2 *string `json:"ans2,omitempty"`

	// ans3
	Ans3 *string `json:"ans3,omitempty"`

	// ans4
	Ans4 *string `json:"ans4,omitempty"`

	// black_list
	BlackList *string `json:"black_list,omitempty"`

	// bwflag
	Bwflag *bool `json:"bwflag,omitempty"`

	// dynamic_category_policy
	DynamicCategoryPolicy *bool `json:"dynamic_category_policy,omitempty"`

	// flags
	Flags *string `json:"flags,omitempty"`

	// ip_addr
	IpAddr *string `json:"ip_addr,omitempty"`

	// ipsd
	Ipsd *string `json:"ipsd,omitempty"`

	// localid
	Localid *string `json:"localid,omitempty"`

	// nas_contextual
	NasContextual *string `json:"nas_contextual,omitempty"`

	// parental_control_policy
	ParentalControlPolicy *string `json:"parental_control_policy,omitempty"`

	// prefix
	Prefix *uint32 `json:"prefix,omitempty"`

	// proxy_all
	ProxyAll *bool `json:"proxy_all,omitempty"`

	// site
	Site *string `json:"site,omitempty"`

	// subscriber_id
	SubscriberId *string `json:"subscriber_id,omitempty"`

	// subscriber_secure_policy
	SubscriberSecurePolicy *string `json:"subscriber_secure_policy,omitempty"`

	// unknown_category_policy
	UnknownCategoryPolicy *bool `json:"unknown_category_policy,omitempty"`

	// white_list
	WhiteList *string `json:"white_list,omitempty"`

	// wpc_category_policy
	WpcCategoryPolicy *string `json:"wpc_category_policy,omitempty"`
}

func (ParentalcontrolSubscriberrecord) ObjectType() string {
	return "parentalcontrol:subscriberrecord"
}

func (obj ParentalcontrolSubscriberrecord) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"accounting_session_id", "ip_addr", "ipsd", "localid", "prefix", "site", "subscriber_id"}
	}
	return obj.returnFields
}

// ParentalcontrolSubscribersite represents Infoblox object parentalcontrol:subscribersite.
// This object represents a set of parental control properties for subscriber
// site.
type ParentalcontrolSubscribersite struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The list of ABS for the site.
	Abss []*ParentalcontrolAbs `json:"abss,omitempty"`

	// The size of the Deterministic NAT block-size.
	BlockSize *uint32 `json:"block_size,omitempty"`

	// The IPv4 Address of the blocking server.
	BlockingIpv4Vip1 *string `json:"blocking_ipv4_vip1,omitempty"`

	// The IPv4 Address of the blocking server.
	BlockingIpv4Vip2 *string `json:"blocking_ipv4_vip2,omitempty"`

	// The IPv6 Address of the blocking server.
	BlockingIpv6Vip1 *string `json:"blocking_ipv6_vip1,omitempty"`

	// The IPv6 Address of the blocking server.
	BlockingIpv6Vip2 *string `json:"blocking_ipv6_vip2,omitempty"`

	// The human readable comment for the site.
	Comment *string `json:"comment,omitempty"`

	// Enable/disable the DCA subscriber B/W list support.
	DcaSubBwList *bool `json:"dca_sub_bw_list,omitempty"`

	// Enable/disable the DCA subscriber query count.
	DcaSubQueryCount *bool `json:"dca_sub_query_count,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// The start of the first Deterministic block.
	FirstPort *uint32 `json:"first_port,omitempty"`

	// The max number of subscribers for the site. It is used to configure the
	// cache size.
	MaximumSubscribers *uint32 `json:"maximum_subscribers,omitempty"`

	// The list of members for the site.
	Members []*ParentalcontrolSitemember `json:"members,omitempty"`

	// The list of MSP for the site.
	Msps []*ParentalcontrolMsp `json:"msps,omitempty"`

	// The name of the site.
	Name string `json:"name,omitempty"`

	// The list of accounting log servers.
	NasGateways []*ParentalcontrolNasgateway `json:"nas_gateways,omitempty"`

	// The port number to reach the collector.
	NasPort *uint32 `json:"nas_port,omitempty"`

	// Enables Proxy RPZ PASSTGHRU.
	ProxyRpzPassthru *bool `json:"proxy_rpz_passthru,omitempty"`

	// The list of SPM for the site.
	Spms []*ParentalcontrolSpm `json:"spms,omitempty"`

	// Stop the anycast service when the subscriber service is in the interim
	// state.
	StopAnycast *bool `json:"stop_anycast,omitempty"`

	// Restrict subscriber cache entries to NATed clients.
	StrictNat *bool `json:"strict_nat,omitempty"`
}

func (ParentalcontrolSubscribersite) ObjectType() string {
	return "parentalcontrol:subscribersite"
}

func (obj ParentalcontrolSubscribersite) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"block_size", "dca_sub_bw_list", "dca_sub_query_count", "first_port", "name", "stop_anycast", "strict_nat"}
	}
	return obj.returnFields
}

// Permission represents Infoblox object permission.
// Limited-access admin groups can access certain DHCP resources only if their
// administrative permissions are defined. By default, the appliance denies
// access when a limited-access admin group does not have defined permissions.
// You can grant admin groups read-only or read/write permission, or deny
// access by using this object.
type Permission struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The name of the admin group this permission applies to.
	Group *string `json:"group,omitempty"`

	// A reference to a WAPI object, which will be the object this permission
	// applies to.
	Object *string `json:"object,omitempty"`

	// The type of permission.
	Permission string `json:"permission,omitempty"`

	// The type of resource this permission applies to. If 'object' is set, the
	// permission is going to apply to child objects of the specified type, for
	// example if 'object' was set to an authoritative zone reference and
	// 'resource_type' was set to 'A', the permission would apply to A Resource
	// Records within the specified zone.
	ResourceType string `json:"resource_type,omitempty"`

	// The name of the role this permission applies to.
	Role *string `json:"role,omitempty"`
}

func (Permission) ObjectType() string {
	return "permission"
}

func (obj Permission) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"group", "permission", "resource_type", "role"}
	}
	return obj.returnFields
}

// PxgridEndpoint represents Infoblox object pxgrid:endpoint.
// The pxgrid endpoint object represents the settings of a particular PXGRID
// endpoint.
type PxgridEndpoint struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The pxgrid endpoint IPv4 Address or IPv6 Address or Fully-Qualified Domain
	// Name (FQDN)
	Address *string `json:"address,omitempty"`

	// The Cisco ISE client certificate subject.
	ClientCertificateSubject string `json:"client_certificate_subject,omitempty"`

	// The token returned by the uploadinit function call in object fileop for
	// Cisco ISE client certificate.
	ClientCertificateToken *string `json:"client_certificate_token,omitempty"`

	// The pxgrid endpoint client certificate valid from.
	ClientCertificateValidFrom *UnixTime `json:"client_certificate_valid_from,omitempty"`

	// The pxgrid endpoint client certificate valid to.
	ClientCertificateValidTo *UnixTime `json:"client_certificate_valid_to,omitempty"`

	// The Cisco ISE endpoint descriptive comment.
	Comment *string `json:"comment,omitempty"`

	// Determines whether a Cisco ISE endpoint is disabled or not. When this is set
	// to False, the Cisco ISE endpoint is enabled.
	Disable *bool `json:"disable,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// The log level for a notification pxgrid endpoint.
	LogLevel string `json:"log_level,omitempty"`

	// The name of the pxgrid endpoint.
	Name *string `json:"name,omitempty"`

	// The pxgrid network view name.
	NetworkView *string `json:"network_view,omitempty"`

	// The outbound member that will generate events.
	OutboundMemberType string `json:"outbound_member_type,omitempty"`

	// The list of members for outbound events.
	OutboundMembers []string `json:"outbound_members,omitempty"`

	// The Cisco ISE publish settings.
	PublishSettings *CiscoisePublishsetting `json:"publish_settings,omitempty"`

	// The Cisco ISE subscribe settings.
	SubscribeSettings *CiscoiseSubscribesetting `json:"subscribe_settings,omitempty"`

	// The Pxgrid template instance. You cannot change the parameters of the pxgrid
	// endpoint template instance.
	TemplateInstance *NotificationRestTemplateinstance `json:"template_instance,omitempty"`

	// The timeout of session management (in seconds).
	Timeout *uint32 `json:"timeout,omitempty"`

	// The vendor identifier.
	VendorIdentifier *string `json:"vendor_identifier,omitempty"`

	// The user name for WAPI integration.
	WapiUserName *string `json:"wapi_user_name,omitempty"`

	// The user password for WAPI integration.
	WapiUserPassword *string `json:"wapi_user_password,omitempty"`
}

func (PxgridEndpoint) ObjectType() string {
	return "pxgrid:endpoint"
}

func (obj PxgridEndpoint) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"address", "disable", "name", "outbound_member_type"}
	}
	return obj.returnFields
}

// RadiusAuthservice represents Infoblox object radius:authservice.
// RADIUS provides authentication, accounting, and authorization functions.
type RadiusAuthservice struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The number of times to attempt to contact an accounting RADIUS server.
	AcctRetries *uint32 `json:"acct_retries,omitempty"`

	// The number of seconds to wait for a response from the RADIUS server.
	AcctTimeout *uint32 `json:"acct_timeout,omitempty"`

	// The number of times to attempt to contact an authentication RADIUS server.
	AuthRetries *uint32 `json:"auth_retries,omitempty"`

	// The number of seconds to wait for a response from the RADIUS server.
	AuthTimeout *uint32 `json:"auth_timeout,omitempty"`

	// The TTL of cached authentication data in seconds.
	CacheTtl *uint32 `json:"cache_ttl,omitempty"`

	// The RADIUS descriptive comment.
	Comment *string `json:"comment,omitempty"`

	// Determines whether the RADIUS authentication service is disabled.
	Disable *bool `json:"disable,omitempty"`

	// Determines whether the authentication cache is enabled.
	EnableCache *bool `json:"enable_cache,omitempty"`

	// The way to contact the RADIUS server.
	Mode string `json:"mode,omitempty"`

	// The RADIUS authentication service name.
	Name *string `json:"name,omitempty"`

	// The time period to wait before retrying a server that has been marked as
	// down.
	RecoveryInterval *uint32 `json:"recovery_interval,omitempty"`

	// The ordered list of RADIUS authentication servers.
	Servers []*RadiusServer `json:"servers,omitempty"`
}

func (RadiusAuthservice) ObjectType() string {
	return "radius:authservice"
}

func (obj RadiusAuthservice) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"comment", "disable", "name"}
	}
	return obj.returnFields
}

// Range represents Infoblox object range.
// A DHCP range defines the specified range of IP addresses in a network. A
// DHCP range should be added for a network so the Infoblox appliance can
// assign IP addresses within that specified range to DHCP clients. If the
// client is on a network that is assigned a DHCP range, the device distributes
// an available IP address from that range to the DHCP client, or to a DHCP
// relay agent if the request came through an agent. The DHCP range should also
// be assigned with a device. If devices are in a grid, the particular member
// serving DHCP for the DHCP range must be specified. If the server is an
// independent device, this device must be specified as the member that serves
// the DHCP range.
type Range struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// This field controls whether only the DHCP server is allowed to update DNS,
	// regardless of the DHCP clients requests.
	AlwaysUpdateDns *bool `json:"always_update_dns,omitempty"`

	// The bootfile name for the range. You can configure the DHCP server to
	// support clients that use the boot file name option in their DHCPREQUEST
	// messages.
	Bootfile *string `json:"bootfile,omitempty"`

	// The bootserver address for the range. You can specify the name and/or IP
	// address of the boot server that the host needs to boot. The boot server IPv4
	// Address or name in FQDN format.
	Bootserver *string `json:"bootserver,omitempty"`

	// Structure containing all cloud API related information for this object.
	CloudInfo *GridCloudapiInfo `json:"cloud_info,omitempty"`

	// Comment for the range; maximum 256 characters.
	Comment *string `json:"comment,omitempty"`

	// The dynamic DNS domain name the appliance uses specifically for DDNS updates
	// for this range.
	DdnsDomainname *string `json:"ddns_domainname,omitempty"`

	// If this field is set to True, the DHCP server generates a hostname and
	// updates DNS with it when the DHCP client request does not contain a
	// hostname.
	DdnsGenerateHostname *bool `json:"ddns_generate_hostname,omitempty"`

	// If True, send NAK forcing the client to take the new address.
	DenyAllClients *bool `json:"deny_all_clients,omitempty"`

	// If set to true, BOOTP settings are disabled and BOOTP requests will be
	// denied.
	DenyBootp *bool `json:"deny_bootp,omitempty"`

	// The percentage of the total DHCP utilization of the range multiplied by
	// 1000. This is the percentage of the total number of available IP addresses
	// belonging to the range versus the total number of all IP addresses in the
	// range.
	DhcpUtilization uint32 `json:"dhcp_utilization,omitempty"`

	// A string describing the utilization level of the range.
	DhcpUtilizationStatus string `json:"dhcp_utilization_status,omitempty"`

	// Determines whether a range is disabled or not. When this is set to False,
	// the range is enabled.
	Disable *bool `json:"disable,omitempty"`

	// Discover now status for this range.
	DiscoverNowStatus string `json:"discover_now_status,omitempty"`

	// The discovery basic poll settings for this range.
	DiscoveryBasicPollSettings *DiscoveryBasicpollsettings `json:"discovery_basic_poll_settings,omitempty"`

	// The discovery blackout setting for this range.
	DiscoveryBlackoutSetting *PropertiesBlackoutsetting `json:"discovery_blackout_setting,omitempty"`

	// The member that will run discovery for this range.
	DiscoveryMember *string `json:"discovery_member,omitempty"`

	// The total number of DHCP leases issued for the range.
	DynamicHosts uint32 `json:"dynamic_hosts,omitempty"`

	// The e-mail lists to which the appliance sends DHCP threshold alarm e-mail
	// messages.
	EmailList []string `json:"email_list,omitempty"`

	// The dynamic DNS updates flag of a DHCP range object. If set to True, the
	// DHCP server sends DDNS updates to DNS servers in the same Grid, and to
	// external DNS servers.
	EnableDdns *bool `json:"enable_ddns,omitempty"`

	// Determines if DHCP thresholds are enabled for the range.
	EnableDhcpThresholds *bool `json:"enable_dhcp_thresholds,omitempty"`

	// Determines whether a discovery is enabled or not for this range. When this
	// is set to False, the discovery for this range is disabled.
	EnableDiscovery *bool `json:"enable_discovery,omitempty"`

	// Determines if DHCP threshold warnings are sent through email.
	EnableEmailWarnings *bool `json:"enable_email_warnings,omitempty"`

	// Determines if IFMAP publishing is enabled for the range.
	EnableIfmapPublishing *bool `json:"enable_ifmap_publishing,omitempty"`

	// Determines if the discovery for the range should be immediately enabled.
	EnableImmediateDiscovery *bool `json:"enable_immediate_discovery,omitempty"`

	// Set this to True if you want the DHCP server to use a different lease time
	// for PXE clients.
	EnablePxeLeaseTime *bool `json:"enable_pxe_lease_time,omitempty"`

	// Determines if DHCP threshold warnings are send through SNMP.
	EnableSnmpWarnings *bool `json:"enable_snmp_warnings,omitempty"`

	// The IPv4 Address end address of the range.
	EndAddr *string `json:"end_addr,omitempty"`

	// The endpoints that provides data for the DHCP Range object.
	EndpointSources []*CiscoiseEndpoint `json:"endpoint_sources,omitempty"`

	// These are ranges of IP addresses that the appliance does not use to assign
	// to clients. You can use these exclusion addresses as static IP addresses.
	// They contain the start and end addresses of the exclusion range, and
	// optionally, information about this exclusion range.
	Exclude []*Exclusionrange `json:"exclude,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// The name of the failover association: the server in this failover
	// association will serve the IPv4 range in case the main server is out of
	// service. {range:range} must be set to 'FAILOVER' or 'FAILOVER_MS' if you
	// want the failover association specified here to serve the range.
	FailoverAssociation *string `json:"failover_association,omitempty"`

	// This field contains the fingerprint filters for this DHCP range. The
	// appliance uses matching rules in these filters to select the address range
	// from which it assigns a lease.
	FingerprintFilterRules []*Filterrule `json:"fingerprint_filter_rules,omitempty"`

	// The percentage of DHCP range usage threshold above which range usage is not
	// expected and may warrant your attention. When the high watermark is reached,
	// the Infoblox appliance generates a syslog message and sends a warning (if
	// enabled). A number that specifies the percentage of allocated addresses. The
	// range is from 1 to 100.
	HighWaterMark *uint32 `json:"high_water_mark,omitempty"`

	// The percentage of DHCP range usage below which the corresponding SNMP trap
	// is reset. A number that specifies the percentage of allocated addresses. The
	// range is from 1 to 100. The high watermark reset value must be lower than
	// the high watermark value.
	HighWaterMarkReset *uint32 `json:"high_water_mark_reset,omitempty"`

	// If this field is set to False, the appliance returns all DHCP options the
	// client is eligible to receive, rather than only the list of options the
	// client has requested.
	IgnoreDhcpOptionListRequest *bool `json:"ignore_dhcp_option_list_request,omitempty"`

	// Indicates whether the appliance will ignore DHCP client IDs or MAC
	// addresses. Valid values are "NONE", "CLIENT", or "MACADDR". The default is
	// "NONE".
	IgnoreId string `json:"ignore_id,omitempty"`

	// A list of MAC addresses the appliance will ignore.
	IgnoreMacAddresses []string `json:"ignore_mac_addresses,omitempty"`

	// This field will be 'true' if this particular range is part of a split scope.
	IsSplitScope bool `json:"is_split_scope,omitempty"`

	// Permission for known clients. This can be 'Allow' or 'Deny'. If set to
	// 'Deny' known clients will be denied IP addresses. Known clients include
	// roaming hosts and clients with fixed addresses or DHCP host entries. Unknown
	// clients include clients that are not roaming hosts and clients that do not
	// have fixed addresses or DHCP host entries.
	KnownClients *string `json:"known_clients,omitempty"`

	// An integer that specifies the period of time (in seconds) that frees and
	// backs up leases remained in the database before they are automatically
	// deleted. To disable lease scavenging, set the parameter to -1. The minimum
	// positive value must be greater than 86400 seconds (1 day).
	LeaseScavengeTime int `json:"lease_scavenge_time,omitempty"`

	// This field contains the logic filters to be applied to this range. This list
	// corresponds to the match rules that are written to the dhcpd configuration
	// file.
	LogicFilterRules []*Logicfilterrule `json:"logic_filter_rules,omitempty"`

	// The percentage of DHCP range usage below which the Infoblox appliance
	// generates a syslog message and sends a warning (if enabled). A number that
	// specifies the percentage of allocated addresses. The range is from 1 to 100.
	LowWaterMark *uint32 `json:"low_water_mark,omitempty"`

	// The percentage of DHCP range usage threshold below which range usage is not
	// expected and may warrant your attention. When the low watermark is crossed,
	// the Infoblox appliance generates a syslog message and sends a warning (if
	// enabled). A number that specifies the percentage of allocated addresses. The
	// range is from 1 to 100. The low watermark reset value must be higher than
	// the low watermark value.
	LowWaterMarkReset *uint32 `json:"low_water_mark_reset,omitempty"`

	// This field contains the MAC filters to be applied to this range. The
	// appliance uses the matching rules of these filters to select the address
	// range from which it assigns a lease.
	MacFilterRules []*Filterrule `json:"mac_filter_rules,omitempty"`

	// The member that will provide service for this range. {range:range} needs to
	// be set to 'MEMBER' if you want the server specified here to serve the range.
	// For searching by this field you should use a HTTP method that contains a
	// body (POST or PUT) with Dhcp Member structure dhcpmember and the request
	// should have option _method=GET.
	Member *Dhcpmember `json:"member,omitempty"`

	// The Microsoft Active Directory user related information.
	MsAdUserData *MsserverAduserData `json:"ms_ad_user_data,omitempty"`

	// This field contains the Microsoft DHCP options for this range.
	MsOptions []*Msdhcpoption `json:"ms_options,omitempty"`

	// The Microsoft server that will provide service for this range. {range:range}
	// needs to be set to 'MS_SERVER' if you want the server specified here to
	// serve the range. For searching by this field you should use a HTTP method
	// that contains a body (POST or PUT) with MS DHCP server structure
	// msdhcpserver and the request should have option _method=GET.
	MsServer *Msdhcpserver `json:"ms_server,omitempty"`

	// This field contains the NAC filters to be applied to this range. The
	// appliance uses the matching rules of these filters to select the address
	// range from which it assigns a lease.
	NacFilterRules []*Filterrule `json:"nac_filter_rules,omitempty"`

	// This field contains the name of the Microsoft scope.
	Name *string `json:"name,omitempty"`

	// The network to which this range belongs, in IPv4 Address/CIDR format.
	Network *string `json:"network,omitempty"`

	// The name of the network view in which this range resides.
	NetworkView *string `json:"network_view,omitempty"`

	// The name in FQDN and/or IPv4 Address of the next server that the host needs
	// to boot.
	Nextserver *string `json:"nextserver,omitempty"`

	// This field contains the Option filters to be applied to this range. The
	// appliance uses the matching rules of these filters to select the address
	// range from which it assigns a lease.
	OptionFilterRules []*Filterrule `json:"option_filter_rules,omitempty"`

	// An array of DHCP option dhcpoption structs that lists the DHCP options
	// associated with the object.
	Options []*Dhcpoption `json:"options,omitempty"`

	// The port control blackout setting for this range.
	PortControlBlackoutSetting *PropertiesBlackoutsetting `json:"port_control_blackout_setting,omitempty"`

	// The PXE lease time value of a DHCP Range object. Some hosts use PXE (Preboot
	// Execution Environment) to boot remotely from a server. To better manage your
	// IP resources, set a different lease time for PXE boot requests. You can
	// configure the DHCP server to allocate an IP address with a shorter lease
	// time to hosts that send PXE boot requests, so IP addresses are not leased
	// longer than necessary. A 32-bit unsigned integer that represents the
	// duration, in seconds, for which the update is cached. Zero indicates that
	// the update is not cached.
	PxeLeaseTime *uint32 `json:"pxe_lease_time,omitempty"`

	// If the field is set to True, the leases are kept in the Recycle Bin until
	// one week after expiration. Otherwise, the leases are permanently deleted.
	RecycleLeases *bool `json:"recycle_leases,omitempty"`

	// This field contains the Relay Agent filters to be applied to this range. The
	// appliance uses the matching rules of these filters to select the address
	// range from which it assigns a lease.
	RelayAgentFilterRules []*Filterrule `json:"relay_agent_filter_rules,omitempty"`

	// Restarts the member service.
	RestartIfNeeded *bool `json:"restart_if_needed,omitempty"`

	// If the field is set to True, the discovery blackout setting will be used for
	// port control blackout setting.
	SamePortControlDiscoveryBlackout *bool `json:"same_port_control_discovery_blackout,omitempty"`

	// The type of server that is going to serve the range.
	ServerAssociationType string `json:"server_association_type,omitempty"`

	// The Microsoft member to which the split scope is assigned. See
	// {next_available_ip:next_available_ip} for more information
	SplitMember *Msdhcpserver `json:"split_member,omitempty"`

	// This field controls the percentage used when creating a split scope. Valid
	// values are numbers between 1 and 99. If the value is 40, it means that the
	// top 40% of the exclusion will be created on the DHCP range assigned to
	// {next_available_ip:next_available_ip} and the lower 60% of the range will be
	// assigned to DHCP range assigned to {next_available_ip:next_available_ip}
	SplitScopeExclusionPercent uint32 `json:"split_scope_exclusion_percent,omitempty"`

	// The IPv4 Address starting address of the range.
	StartAddr *string `json:"start_addr,omitempty"`

	// The number of static DHCP addresses configured in the range.
	StaticHosts uint32 `json:"static_hosts,omitempty"`

	// The DHCP Range Cisco ISE subscribe settings.
	SubscribeSettings *CiscoiseSubscribesetting `json:"subscribe_settings,omitempty"`

	// If set on creation, the range will be created according to the values
	// specified in the named template.
	Template string `json:"template,omitempty"`

	// The total number of DHCP addresses configured in the range.
	TotalHosts uint32 `json:"total_hosts,omitempty"`

	// Permission for unknown clients. This can be 'Allow' or 'Deny'. If set to
	// 'Deny', unknown clients will be denied IP addresses. Known clients include
	// roaming hosts and clients with fixed addresses or DHCP host entries. Unknown
	// clients include clients that are not roaming hosts and clients that do not
	// have fixed addresses or DHCP host entries.
	UnknownClients *string `json:"unknown_clients,omitempty"`

	// This field controls whether the DHCP server updates DNS when a DHCP lease is
	// renewed.
	UpdateDnsOnLeaseRenewal *bool `json:"update_dns_on_lease_renewal,omitempty"`

	// Use flag for: discovery_blackout_setting , port_control_blackout_setting,
	// same_port_control_discovery_blackout
	UseBlackoutSetting *bool `json:"use_blackout_setting,omitempty"`

	// Use flag for: bootfile
	UseBootfile *bool `json:"use_bootfile,omitempty"`

	// Use flag for: bootserver
	UseBootserver *bool `json:"use_bootserver,omitempty"`

	// Use flag for: ddns_domainname
	UseDdnsDomainname *bool `json:"use_ddns_domainname,omitempty"`

	// Use flag for: ddns_generate_hostname
	UseDdnsGenerateHostname *bool `json:"use_ddns_generate_hostname,omitempty"`

	// Use flag for: deny_bootp
	UseDenyBootp *bool `json:"use_deny_bootp,omitempty"`

	// Use flag for: discovery_basic_poll_settings
	UseDiscoveryBasicPollingSettings *bool `json:"use_discovery_basic_polling_settings,omitempty"`

	// Use flag for: email_list
	UseEmailList *bool `json:"use_email_list,omitempty"`

	// Use flag for: enable_ddns
	UseEnableDdns *bool `json:"use_enable_ddns,omitempty"`

	// Use flag for: enable_dhcp_thresholds
	UseEnableDhcpThresholds *bool `json:"use_enable_dhcp_thresholds,omitempty"`

	// Use flag for: discovery_member , enable_discovery
	UseEnableDiscovery *bool `json:"use_enable_discovery,omitempty"`

	// Use flag for: enable_ifmap_publishing
	UseEnableIfmapPublishing *bool `json:"use_enable_ifmap_publishing,omitempty"`

	// Use flag for: ignore_dhcp_option_list_request
	UseIgnoreDhcpOptionListRequest *bool `json:"use_ignore_dhcp_option_list_request,omitempty"`

	// Use flag for: ignore_id
	UseIgnoreId *bool `json:"use_ignore_id,omitempty"`

	// Use flag for: known_clients
	UseKnownClients *bool `json:"use_known_clients,omitempty"`

	// Use flag for: lease_scavenge_time
	UseLeaseScavengeTime *bool `json:"use_lease_scavenge_time,omitempty"`

	// Use flag for: logic_filter_rules
	UseLogicFilterRules *bool `json:"use_logic_filter_rules,omitempty"`

	// Use flag for: ms_options
	UseMsOptions *bool `json:"use_ms_options,omitempty"`

	// Use flag for: nextserver
	UseNextserver *bool `json:"use_nextserver,omitempty"`

	// Use flag for: options
	UseOptions *bool `json:"use_options,omitempty"`

	// Use flag for: pxe_lease_time
	UsePxeLeaseTime *bool `json:"use_pxe_lease_time,omitempty"`

	// Use flag for: recycle_leases
	UseRecycleLeases *bool `json:"use_recycle_leases,omitempty"`

	// Use flag for: subscribe_settings
	UseSubscribeSettings *bool `json:"use_subscribe_settings,omitempty"`

	// Use flag for: unknown_clients
	UseUnknownClients *bool `json:"use_unknown_clients,omitempty"`

	// Use flag for: update_dns_on_lease_renewal
	UseUpdateDnsOnLeaseRenewal *bool `json:"use_update_dns_on_lease_renewal,omitempty"`
}

func (Range) ObjectType() string {
	return "range"
}

func (obj Range) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"comment", "end_addr", "network", "network_view", "start_addr"}
	}
	return obj.returnFields
}

// Rangetemplate represents Infoblox object rangetemplate.
// The range template used to create a range objects in a quick and consistant
// way. Range object created from a range template will inherit most properties
// defined in range template object so most of the range template properties
// are the same as the range object properties.
type Rangetemplate struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The bootfile name for the range. You can configure the DHCP server to
	// support clients that use the boot file name option in their DHCPREQUEST
	// messages.
	Bootfile *string `json:"bootfile,omitempty"`

	// The bootserver address for the range. You can specify the name and/or IP
	// address of the boot server that the host needs to boot. The boot server IPv4
	// Address or name in FQDN format.
	Bootserver *string `json:"bootserver,omitempty"`

	// This flag controls whether this template can be used to create network
	// objects in a cloud-computing deployment.
	CloudApiCompatible *bool `json:"cloud_api_compatible,omitempty"`

	// A descriptive comment of a range template object.
	Comment *string `json:"comment,omitempty"`

	// The dynamic DNS domain name the appliance uses specifically for DDNS updates
	// for this range.
	DdnsDomainname *string `json:"ddns_domainname,omitempty"`

	// If this field is set to True, the DHCP server generates a hostname and
	// updates DNS with it when the DHCP client request does not contain a
	// hostname.
	DdnsGenerateHostname *bool `json:"ddns_generate_hostname,omitempty"`

	// The vconnector member that the object should be delegated to when created
	// from this range template.
	DelegatedMember *Dhcpmember `json:"delegated_member,omitempty"`

	// If True, send NAK forcing the client to take the new address.
	DenyAllClients *bool `json:"deny_all_clients,omitempty"`

	// Determines if BOOTP settings are disabled and BOOTP requests will be denied.
	DenyBootp *bool `json:"deny_bootp,omitempty"`

	// The e-mail lists to which the appliance sends DHCP threshold alarm e-mail
	// messages.
	EmailList []string `json:"email_list,omitempty"`

	// Determines if the DHCP server sends DDNS updates to DNS servers in the same
	// Grid, and to external DNS servers.
	EnableDdns *bool `json:"enable_ddns,omitempty"`

	// Determines if DHCP thresholds are enabled for the range.
	EnableDhcpThresholds *bool `json:"enable_dhcp_thresholds,omitempty"`

	// Determines if DHCP threshold warnings are sent through email.
	EnableEmailWarnings *bool `json:"enable_email_warnings,omitempty"`

	// Set this to True if you want the DHCP server to use a different lease time
	// for PXE clients.
	EnablePxeLeaseTime *bool `json:"enable_pxe_lease_time,omitempty"`

	// Determines if DHCP threshold warnings are sent through SNMP.
	EnableSnmpWarnings *bool `json:"enable_snmp_warnings,omitempty"`

	// These are ranges of IP addresses that the appliance does not use to assign
	// to clients. You can use these exclusion addresses as static IP addresses.
	// They contain the start and end addresses of the exclusion range, and
	// optionally, information about this exclusion range.
	Exclude []*Exclusionrangetemplate `json:"exclude,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// The name of the failover association: the server in this failover
	// association will serve the IPv4 range in case the main server is out of
	// service. {rangetemplate:rangetemplate} must be set to 'FAILOVER' or
	// 'FAILOVER_MS' if you want the failover association specified here to serve
	// the range.
	FailoverAssociation *string `json:"failover_association,omitempty"`

	// This field contains the fingerprint filters for this DHCP range. The
	// appliance uses matching rules in these filters to select the address range
	// from which it assigns a lease.
	FingerprintFilterRules []*Filterrule `json:"fingerprint_filter_rules,omitempty"`

	// The percentage of DHCP range usage threshold above which range usage is not
	// expected and may warrant your attention. When the high watermark is reached,
	// the Infoblox appliance generates a syslog message and sends a warning (if
	// enabled). A number that specifies the percentage of allocated addresses. The
	// range is from 1 to 100.
	HighWaterMark *uint32 `json:"high_water_mark,omitempty"`

	// The percentage of DHCP range usage below which the corresponding SNMP trap
	// is reset. A number that specifies the percentage of allocated addresses. The
	// range is from 1 to 100. The high watermark reset value must be lower than
	// the high watermark value.
	HighWaterMarkReset *uint32 `json:"high_water_mark_reset,omitempty"`

	// If this field is set to False, the appliance returns all DHCP options the
	// client is eligible to receive, rather than only the list of options the
	// client has requested.
	IgnoreDhcpOptionListRequest *bool `json:"ignore_dhcp_option_list_request,omitempty"`

	// Permission for known clients. If set to 'Deny' known clients will be denied
	// IP addresses. Known clients include roaming hosts and clients with fixed
	// addresses or DHCP host entries. Unknown clients include clients that are not
	// roaming hosts and clients that do not have fixed addresses or DHCP host
	// entries.
	KnownClients string `json:"known_clients,omitempty"`

	// An integer that specifies the period of time (in seconds) that frees and
	// backs up leases remained in the database before they are automatically
	// deleted. To disable lease scavenging, set the parameter to -1. The minimum
	// positive value must be greater than 86400 seconds (1 day).
	LeaseScavengeTime int `json:"lease_scavenge_time,omitempty"`

	// This field contains the logic filters to be applied on this range. This list
	// corresponds to the match rules that are written to the dhcpd configuration
	// file.
	LogicFilterRules []*Logicfilterrule `json:"logic_filter_rules,omitempty"`

	// The percentage of DHCP range usage below which the Infoblox appliance
	// generates a syslog message and sends a warning (if enabled). A number that
	// specifies the percentage of allocated addresses. The range is from 1 to 100.
	LowWaterMark *uint32 `json:"low_water_mark,omitempty"`

	// The percentage of DHCP range usage threshold below which range usage is not
	// expected and may warrant your attention. When the low watermark is crossed,
	// the Infoblox appliance generates a syslog message and sends a warning (if
	// enabled). A number that specifies the percentage of allocated addresses. The
	// range is from 1 to 100. The low watermark reset value must be higher than
	// the low watermark value.
	LowWaterMarkReset *uint32 `json:"low_water_mark_reset,omitempty"`

	// This field contains the MAC filters to be applied to this range. The
	// appliance uses the matching rules of these filters to select the address
	// range from which it assigns a lease.
	MacFilterRules []*Filterrule `json:"mac_filter_rules,omitempty"`

	// The member that will provide service for this range.
	// {rangetemplate:rangetemplate} needs to be set to 'MEMBER' if you want the
	// server specified here to serve the range. For searching by this field you
	// should use a HTTP method that contains a body (POST or PUT) with Dhcp Member
	// structure dhcpmember and the request should have option _method=GET.
	Member *Dhcpmember `json:"member,omitempty"`

	// The Microsoft DHCP options for this range.
	MsOptions []*Msdhcpoption `json:"ms_options,omitempty"`

	// The Microsoft server that will provide service for this range.
	// {rangetemplate:rangetemplate} needs to be set to 'MS_SERVER' if you want the
	// server specified here to serve the range. For searching by this field you
	// should use a HTTP method that contains a body (POST or PUT) with MS DHCP
	// server structure msdhcpserver and the request should have option
	// _method=GET.
	MsServer *Msdhcpserver `json:"ms_server,omitempty"`

	// This field contains the NAC filters to be applied to this range. The
	// appliance uses the matching rules of these filters to select the address
	// range from which it assigns a lease.
	NacFilterRules []*Filterrule `json:"nac_filter_rules,omitempty"`

	// The name of a range template object.
	Name *string `json:"name,omitempty"`

	// The name in FQDN and/or IPv4 Address format of the next server that the host
	// needs to boot.
	Nextserver *string `json:"nextserver,omitempty"`

	// The number of addresses for this range.
	NumberOfAddresses *uint32 `json:"number_of_addresses,omitempty"`

	// The start address offset for this range.
	Offset *uint32 `json:"offset,omitempty"`

	// This field contains the Option filters to be applied to this range. The
	// appliance uses the matching rules of these filters to select the address
	// range from which it assigns a lease.
	OptionFilterRules []*Filterrule `json:"option_filter_rules,omitempty"`

	// An array of DHCP option dhcpoption structs that lists the DHCP options
	// associated with the object.
	Options []*Dhcpoption `json:"options,omitempty"`

	// The PXE lease time value for a range object. Some hosts use PXE (Preboot
	// Execution Environment) to boot remotely from a server. To better manage your
	// IP resources, set a different lease time for PXE boot requests. You can
	// configure the DHCP server to allocate an IP address with a shorter lease
	// time to hosts that send PXE boot requests, so IP addresses are not leased
	// longer than necessary. A 32-bit unsigned integer that represents the
	// duration, in seconds, for which the update is cached. Zero indicates that
	// the update is not cached.
	PxeLeaseTime *uint32 `json:"pxe_lease_time,omitempty"`

	// If the field is set to True, the leases are kept in the Recycle Bin until
	// one week after expiration. Otherwise, the leases are permanently deleted.
	RecycleLeases *bool `json:"recycle_leases,omitempty"`

	// This field contains the Relay Agent filters to be applied to this range. The
	// appliance uses the matching rules of these filters to select the address
	// range from which it assigns a lease.
	RelayAgentFilterRules []*Filterrule `json:"relay_agent_filter_rules,omitempty"`

	// The type of server that is going to serve the range.
	ServerAssociationType string `json:"server_association_type,omitempty"`

	// Permission for unknown clients. If set to 'Deny' unknown clients will be
	// denied IP addresses. Known clients include roaming hosts and clients with
	// fixed addresses or DHCP host entries. Unknown clients include clients that
	// are not roaming hosts and clients that do not have fixed addresses or DHCP
	// host entries.
	UnknownClients string `json:"unknown_clients,omitempty"`

	// This field controls whether the DHCP server updates DNS when a DHCP lease is
	// renewed.
	UpdateDnsOnLeaseRenewal *bool `json:"update_dns_on_lease_renewal,omitempty"`

	// Use flag for: bootfile
	UseBootfile *bool `json:"use_bootfile,omitempty"`

	// Use flag for: bootserver
	UseBootserver *bool `json:"use_bootserver,omitempty"`

	// Use flag for: ddns_domainname
	UseDdnsDomainname *bool `json:"use_ddns_domainname,omitempty"`

	// Use flag for: ddns_generate_hostname
	UseDdnsGenerateHostname *bool `json:"use_ddns_generate_hostname,omitempty"`

	// Use flag for: deny_bootp
	UseDenyBootp *bool `json:"use_deny_bootp,omitempty"`

	// Use flag for: email_list
	UseEmailList *bool `json:"use_email_list,omitempty"`

	// Use flag for: enable_ddns
	UseEnableDdns *bool `json:"use_enable_ddns,omitempty"`

	// Use flag for: enable_dhcp_thresholds
	UseEnableDhcpThresholds *bool `json:"use_enable_dhcp_thresholds,omitempty"`

	// Use flag for: ignore_dhcp_option_list_request
	UseIgnoreDhcpOptionListRequest *bool `json:"use_ignore_dhcp_option_list_request,omitempty"`

	// Use flag for: known_clients
	UseKnownClients *bool `json:"use_known_clients,omitempty"`

	// Use flag for: lease_scavenge_time
	UseLeaseScavengeTime *bool `json:"use_lease_scavenge_time,omitempty"`

	// Use flag for: logic_filter_rules
	UseLogicFilterRules *bool `json:"use_logic_filter_rules,omitempty"`

	// Use flag for: ms_options
	UseMsOptions *bool `json:"use_ms_options,omitempty"`

	// Use flag for: nextserver
	UseNextserver *bool `json:"use_nextserver,omitempty"`

	// Use flag for: options
	UseOptions *bool `json:"use_options,omitempty"`

	// Use flag for: pxe_lease_time
	UsePxeLeaseTime *bool `json:"use_pxe_lease_time,omitempty"`

	// Use flag for: recycle_leases
	UseRecycleLeases *bool `json:"use_recycle_leases,omitempty"`

	// Use flag for: unknown_clients
	UseUnknownClients *bool `json:"use_unknown_clients,omitempty"`

	// Use flag for: update_dns_on_lease_renewal
	UseUpdateDnsOnLeaseRenewal *bool `json:"use_update_dns_on_lease_renewal,omitempty"`
}

func (Rangetemplate) ObjectType() string {
	return "rangetemplate"
}

func (obj Rangetemplate) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"comment", "name", "number_of_addresses", "offset"}
	}
	return obj.returnFields
}

// RecordA represents Infoblox object record:a.
// An A (address) record maps a domain name to an IPv4 address. To define a
// specific name-to-address mapping, add an A record to a previously defined
// authoritative forward-mapping zone.
type RecordA struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// Aws Route 53 record information.
	AwsRte53RecordInfo *Awsrte53recordinfo `json:"aws_rte53_record_info,omitempty"`

	// Structure containing all cloud API related information for this object.
	CloudInfo *GridCloudapiInfo `json:"cloud_info,omitempty"`

	// Comment for the record; maximum 256 characters.
	Comment *string `json:"comment,omitempty"`

	// The time of the record creation in Epoch seconds format.
	CreationTime *UnixTime `json:"creation_time,omitempty"`

	// The record creator. Note that changing creator from or to 'SYSTEM' value is
	// not allowed.
	Creator string `json:"creator,omitempty"`

	// The GSS-TSIG principal that owns this record.
	DdnsPrincipal *string `json:"ddns_principal,omitempty"`

	// Determines if the DDNS updates for this record are allowed or not.
	DdnsProtected *bool `json:"ddns_protected,omitempty"`

	// Determines if the record is disabled or not. False means that the record is
	// enabled.
	Disable *bool `json:"disable,omitempty"`

	// The discovered data for this A record.
	DiscoveredData *Discoverydata `json:"discovered_data,omitempty"`

	// The name for an A record in punycode format.
	DnsName string `json:"dns_name,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// Determines if the reclamation is allowed for the record or not.
	ForbidReclamation *bool `json:"forbid_reclamation,omitempty"`

	// The IPv4 Address of the record.
	Ipv4Addr *string `json:"ipv4addr,omitempty"`

	// The time of the last DNS query in Epoch seconds format.
	LastQueried *UnixTime `json:"last_queried,omitempty"`

	// The Microsoft Active Directory user related information.
	MsAdUserData *MsserverAduserData `json:"ms_ad_user_data,omitempty"`

	// Name for A record in FQDN format. This value can be in unicode format.
	Name *string `json:"name,omitempty"`

	// Determines if the record is reclaimable or not.
	Reclaimable bool `json:"reclaimable,omitempty"`

	// Delete option that indicates whether the associated PTR records should be
	// removed while deleting the specified A record.
	RemoveAssociatedPtr bool `json:"remove_associated_ptr,omitempty"`

	// The name of the shared record group in which the record resides. This field
	// exists only on db_objects if this record is a shared record.
	SharedRecordGroup string `json:"shared_record_group,omitempty"`

	// The Time To Live (TTL) value for record. A 32-bit unsigned integer that
	// represents the duration, in seconds, for which the record is valid (cached).
	// Zero indicates that the record should not be cached.
	Ttl *uint32 `json:"ttl,omitempty"`

	// Use flag for: ttl
	UseTtl *bool `json:"use_ttl,omitempty"`

	// The name of the DNS view in which the record resides. Example: "external".
	View string `json:"view,omitempty"`

	// The name of the zone in which the record resides. Example: "zone.com". If a
	// view is not specified when searching by zone, the default view is used.
	Zone string `json:"zone,omitempty"`
}

func (RecordA) ObjectType() string {
	return "record:a"
}

func (obj RecordA) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"ipv4addr", "name", "view"}
	}
	return obj.returnFields
}

func NewEmptyRecordA() *RecordA {
	res := &RecordA{}
	res.returnFields = []string{
		"extattrs", "ipv4addr", "name", "view", "zone", "comment", "ttl", "use_ttl"}

	return res
}

func NewRecordA(
	view string,
	zone string,
	name string,
	ipAddr string,
	ttl uint32,
	useTTL bool,
	comment string,
	eas EA,
	ref string) *RecordA {

	res := NewEmptyRecordA()
	res.View = view
	res.Zone = zone
	res.Name = &name
	res.Ipv4Addr = &ipAddr
	res.Ttl = &ttl
	res.UseTtl = &useTTL
	res.Comment = &comment
	res.Ea = eas
	res.Ref = ref

	return res
}

// RecordAAAA represents Infoblox object record:aaaa.
// An AAAA (address) record maps a domain name to an IPv6 address. To define a
// specific name-to-address mapping, add an AAAA record to a previously defined
// authoritative forward-mapping zone.
type RecordAAAA struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// Aws Route 53 record information.
	AwsRte53RecordInfo *Awsrte53recordinfo `json:"aws_rte53_record_info,omitempty"`

	// Structure containing all cloud API related information for this object.
	CloudInfo *GridCloudapiInfo `json:"cloud_info,omitempty"`

	// Comment for the record; maximum 256 characters.
	Comment *string `json:"comment,omitempty"`

	// The time of the record creation in Epoch seconds format.
	CreationTime *UnixTime `json:"creation_time,omitempty"`

	// The record creator. Note that changing creator from or to 'SYSTEM' value is
	// not allowed.
	Creator string `json:"creator,omitempty"`

	// The GSS-TSIG principal that owns this record.
	DdnsPrincipal *string `json:"ddns_principal,omitempty"`

	// Determines if the DDNS updates for this record are allowed or not.
	DdnsProtected *bool `json:"ddns_protected,omitempty"`

	// Determines if the record is disabled or not. False means that the record is
	// enabled.
	Disable *bool `json:"disable,omitempty"`

	// The discovered data for this AAAA record.
	DiscoveredData *Discoverydata `json:"discovered_data,omitempty"`

	// The name for an AAAA record in punycode format.
	DnsName string `json:"dns_name,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// Determines if the reclamation is allowed for the record or not.
	ForbidReclamation *bool `json:"forbid_reclamation,omitempty"`

	// The IPv6 Address of the record.
	Ipv6Addr *string `json:"ipv6addr,omitempty"`

	// The time of the last DNS query in Epoch seconds format.
	LastQueried *UnixTime `json:"last_queried,omitempty"`

	// The Microsoft Active Directory user related information.
	MsAdUserData *MsserverAduserData `json:"ms_ad_user_data,omitempty"`

	// Name for the AAAA record in FQDN format. This value can be in unicode
	// format.
	Name *string `json:"name,omitempty"`

	// Determines if the record is reclaimable or not.
	Reclaimable bool `json:"reclaimable,omitempty"`

	// Delete option that indicates whether the associated PTR records should be
	// removed while deleting the specified A record.
	RemoveAssociatedPtr bool `json:"remove_associated_ptr,omitempty"`

	// The name of the shared record group in which the record resides. This field
	// exists only on db_objects if this record is a shared record.
	SharedRecordGroup string `json:"shared_record_group,omitempty"`

	// The Time To Live (TTL) value for the record. A 32-bit unsigned integer that
	// represents the duration, in seconds, for which the record is valid (cached).
	// Zero indicates that the record should not be cached.
	Ttl *uint32 `json:"ttl,omitempty"`

	// Use flag for: ttl
	UseTtl *bool `json:"use_ttl,omitempty"`

	// The name of the DNS view in which the record resides. Example: "external".
	View string `json:"view,omitempty"`

	// The name of the zone in which the record resides. Example: "zone.com". If a
	// view is not specified when searching by zone, the default view is used.
	Zone string `json:"zone,omitempty"`
}

func (RecordAAAA) ObjectType() string {
	return "record:aaaa"
}

func (obj RecordAAAA) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"ipv6addr", "name", "view"}
	}
	return obj.returnFields
}

func NewEmptyRecordAAAA() *RecordAAAA {
	res := &RecordAAAA{}
	res.returnFields = []string{"extattrs", "ipv6addr", "name", "view", "zone", "use_ttl", "ttl", "comment"}

	return res
}

func NewRecordAAAA(
	view string,
	name string,
	ipAddr string,
	useTtl bool,
	ttl uint32,
	comment string,
	eas EA,
	ref string) *RecordAAAA {

	res := NewEmptyRecordAAAA()
	res.View = view
	res.Name = &name
	res.Ipv6Addr = &ipAddr
	res.UseTtl = &useTtl
	res.Ttl = &ttl
	res.Comment = &comment
	res.Ea = eas
	res.Ref = ref

	return res
}

// RecordAlias represents Infoblox object record:alias.
// Alias resource record allows you to create typed aliases for standard DNS
// resource records which are resolved dynamically by an authoritative server.
// Unlike CNAME Alias can be created in the zone apex.
type RecordAlias struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// Aws Route 53 record information.
	AwsRte53RecordInfo *Awsrte53recordinfo `json:"aws_rte53_record_info,omitempty"`

	// Structure containing all cloud API related information for this object.
	CloudInfo *GridCloudapiInfo `json:"cloud_info,omitempty"`

	// Comment for the record; maximum 256 characters.
	Comment *string `json:"comment,omitempty"`

	// The record creator.
	Creator string `json:"creator,omitempty"`

	// Determines if the record is disabled or not. False means that the record is
	// enabled.
	Disable *bool `json:"disable,omitempty"`

	// The name for an Alias record in punycode format.
	DnsName string `json:"dns_name,omitempty"`

	// Target name in punycode format.
	DnsTargetName string `json:"dns_target_name,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// The time of the last DNS query in Epoch seconds format.
	LastQueried *UnixTime `json:"last_queried,omitempty"`

	// The name for an Alias record in FQDN format. This value can be in unicode
	// format. Regular expression search is not supported for unicode values.
	Name *string `json:"name,omitempty"`

	// Target name in FQDN format. This value can be in unicode format.
	TargetName *string `json:"target_name,omitempty"`

	// Target type.
	TargetType string `json:"target_type,omitempty"`

	// The Time To Live (TTL) value for record. A 32-bit unsigned integer that
	// represents the duration, in seconds, for which the record is valid (cached).
	// Zero indicates that the record should not be cached.
	Ttl *uint32 `json:"ttl,omitempty"`

	// Use flag for: ttl
	UseTtl *bool `json:"use_ttl,omitempty"`

	// The name of the DNS View in which the record resides. Example: "external".
	View *string `json:"view,omitempty"`

	// The name of the zone in which the record resides. Example: "zone.com". If a
	// view is not specified when searching by zone, the default view is used.
	Zone string `json:"zone,omitempty"`
}

func (RecordAlias) ObjectType() string {
	return "record:alias"
}

func (obj RecordAlias) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"name", "target_name", "target_type", "view"}
	}
	return obj.returnFields
}

// RecordCaa represents Infoblox object record:caa.
// The Certification Authority Authorization (CAA) DNS resource record (RR) is
// used to specify which certificate authorities (CAs) are allowed to issue
// certificates for a domain. For further details see RFC-6844.
type RecordCaa struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// Flag of CAA record.
	CaFlag *uint32 `json:"ca_flag,omitempty"`

	// Tag of CAA record.
	CaTag *string `json:"ca_tag,omitempty"`

	// Value of CAA record
	CaValue *string `json:"ca_value,omitempty"`

	// Structure containing all cloud API related information for this object.
	CloudInfo *GridCloudapiInfo `json:"cloud_info,omitempty"`

	// Comment for the record; maximum 256 characters.
	Comment *string `json:"comment,omitempty"`

	// The creation time of the record.
	CreationTime *UnixTime `json:"creation_time,omitempty"`

	// The record creator. Note that changing creator from or to 'SYSTEM' value is
	// not allowed.
	Creator string `json:"creator,omitempty"`

	// The GSS-TSIG principal that owns this record.
	DdnsPrincipal *string `json:"ddns_principal,omitempty"`

	// Determines if the DDNS updates for this record are allowed or not.
	DdnsProtected *bool `json:"ddns_protected,omitempty"`

	// Determines if the record is disabled or not. False means that the record is
	// enabled.
	Disable *bool `json:"disable,omitempty"`

	// The name of the CAA record in punycode format.
	DnsName string `json:"dns_name,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// Determines if the reclamation is allowed for the record or not.
	ForbidReclamation *bool `json:"forbid_reclamation,omitempty"`

	// The time of the last DNS query in Epoch seconds format.
	LastQueried *UnixTime `json:"last_queried,omitempty"`

	// The CAA record name in FQDN format. This value can be in unicode format.
	Name *string `json:"name,omitempty"`

	// Determines if the record is reclaimable or not.
	Reclaimable bool `json:"reclaimable,omitempty"`

	// The Time to Live (TTL) value for the record. A 32-bit unsigned integer that
	// represents the duration, in seconds, for which the record is valid (cached).
	// Zero indicates that the record should not be cached.
	Ttl *uint32 `json:"ttl,omitempty"`

	// Use flag for: ttl
	UseTtl *bool `json:"use_ttl,omitempty"`

	// The name of the DNS view in which the record resides. Example: "external".
	View *string `json:"view,omitempty"`

	// The name of the zone in which the record resides. Example: "zone.com". If a
	// view is not specified when searching by zone, the default view is used.
	Zone string `json:"zone,omitempty"`
}

func (RecordCaa) ObjectType() string {
	return "record:caa"
}

func (obj RecordCaa) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"name", "view"}
	}
	return obj.returnFields
}

// RecordCNAME represents Infoblox object record:cname.
// A CNAME record maps an alias to a canonical name. You can use CNAME records
// in both forward- and IPv4 reverse-mapping zones to serve two different
// purposes. (At this time, you cannot use CNAME records with IPv6
// reverse-mapping zones.)
type RecordCNAME struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// Aws Route 53 record information.
	AwsRte53RecordInfo *Awsrte53recordinfo `json:"aws_rte53_record_info,omitempty"`

	// Canonical name in FQDN format. This value can be in unicode format.
	Canonical *string `json:"canonical,omitempty"`

	// Structure containing all cloud API related information for this object.
	CloudInfo *GridCloudapiInfo `json:"cloud_info,omitempty"`

	// Comment for the record; maximum 256 characters.
	Comment *string `json:"comment,omitempty"`

	// The time of the record creation in Epoch seconds format.
	CreationTime *UnixTime `json:"creation_time,omitempty"`

	// The record creator. Note that changing creator from or to 'SYSTEM' value is
	// not allowed.
	Creator string `json:"creator,omitempty"`

	// The GSS-TSIG principal that owns this record.
	DdnsPrincipal *string `json:"ddns_principal,omitempty"`

	// Determines if the DDNS updates for this record are allowed or not.
	DdnsProtected *bool `json:"ddns_protected,omitempty"`

	// Determines if the record is disabled or not. False means that the record is
	// enabled.
	Disable *bool `json:"disable,omitempty"`

	// Canonical name in punycode format.
	DnsCanonical string `json:"dns_canonical,omitempty"`

	// The name for the CNAME record in punycode format.
	DnsName string `json:"dns_name,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// Determines if the reclamation is allowed for the record or not.
	ForbidReclamation *bool `json:"forbid_reclamation,omitempty"`

	// The time of the last DNS query in Epoch seconds format.
	LastQueried *UnixTime `json:"last_queried,omitempty"`

	// The name for a CNAME record in FQDN format. This value can be in unicode
	// format. Regular expression search is not supported for unicode values.
	Name *string `json:"name,omitempty"`

	// Determines if the record is reclaimable or not.
	Reclaimable bool `json:"reclaimable,omitempty"`

	// The name of the shared record group in which the record resides. This field
	// exists only on db_objects if this record is a shared record.
	SharedRecordGroup string `json:"shared_record_group,omitempty"`

	// The Time To Live (TTL) value for record. A 32-bit unsigned integer that
	// represents the duration, in seconds, for which the record is valid (cached).
	// Zero indicates that the record should not be cached.
	Ttl *uint32 `json:"ttl,omitempty"`

	// Use flag for: ttl
	UseTtl *bool `json:"use_ttl,omitempty"`

	// The name of the DNS view in which the record resides. Example: "external".
	View *string `json:"view,omitempty"`

	// The name of the zone in which the record resides. Example: "zone.com". If a
	// view is not specified when searching by zone, the default view is used.
	Zone string `json:"zone,omitempty"`
}

func (RecordCNAME) ObjectType() string {
	return "record:cname"
}

func (obj RecordCNAME) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"canonical", "name", "view"}
	}
	return obj.returnFields
}

func NewEmptyRecordCNAME() *RecordCNAME {
	res := &RecordCNAME{}
	res.returnFields = []string{"extattrs", "canonical", "name", "view", "zone", "comment", "ttl", "use_ttl"}

	return res
}

func NewRecordCNAME(dnsView string,
	canonical string,
	recordName string,
	useTtl bool,
	ttl uint32,
	comment string,
	ea EA,
	ref string) *RecordCNAME {

	res := NewEmptyRecordCNAME()

	res.View = &dnsView
	if *res.View == "" {
		res.View = nil
	}

	res.Canonical = &canonical
	res.Name = &recordName
	res.UseTtl = &useTtl
	res.Ttl = &ttl
	res.Comment = &comment
	res.Ea = ea
	res.Ref = ref

	return res
}

// RecordDhcid represents Infoblox object record:dhcid.
// The DHCID DNS resource record (RR) is used to associate the DNS domain names
// with the DHCP clients using the domain names.
type RecordDhcid struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The creation time of the record.
	CreationTime *UnixTime `json:"creation_time,omitempty"`

	// The record creator.
	Creator string `json:"creator,omitempty"`

	// The Base64 encoded DHCP client information.
	Dhcid string `json:"dhcid,omitempty"`

	// The name for the DHCID record in punycode format.
	DnsName string `json:"dns_name,omitempty"`

	// The name of the DHCID record in FQDN format.
	Name string `json:"name,omitempty"`

	// The Time To Live (TTL) value for the record. A 32-bit unsigned integer that
	// represents the duration, in seconds, for which the record is valid (cached).
	// Zero indicates that the record should not be cached.
	Ttl uint32 `json:"ttl,omitempty"`

	// Use flag for: ttl
	UseTtl bool `json:"use_ttl,omitempty"`

	// The name of the DNS view in which the record resides. Example: "external".
	View string `json:"view,omitempty"`

	// The name of the zone in which the record resides. Example: "zone.com". If a
	// view is not specified when searching by zone, the default view is used.
	Zone string `json:"zone,omitempty"`
}

func (RecordDhcid) ObjectType() string {
	return "record:dhcid"
}

func (obj RecordDhcid) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"name", "view"}
	}
	return obj.returnFields
}

// RecordDname represents Infoblox object record:dname.
// A DNAME record maps all the names in one domain to those in another domain,
// essentially substituting one domain name suffix with the other.
type RecordDname struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The structure containing all cloud API related information for this object.
	CloudInfo *GridCloudapiInfo `json:"cloud_info,omitempty"`

	// The comment for the record.
	Comment *string `json:"comment,omitempty"`

	// The time of the record creation in Epoch seconds format.
	CreationTime *UnixTime `json:"creation_time,omitempty"`

	// The record creator.
	Creator string `json:"creator,omitempty"`

	// The GSS-TSIG principal that owns this record.
	DdnsPrincipal *string `json:"ddns_principal,omitempty"`

	// Determines if the DDNS updates for this record are allowed.
	DdnsProtected *bool `json:"ddns_protected,omitempty"`

	// Determines if the record is disabled.
	Disable *bool `json:"disable,omitempty"`

	// Name of a DNS DNAME record in punycode format.
	DnsName string `json:"dns_name,omitempty"`

	// The target domain name of the DNS DNAME record in punycode format.
	DnsTarget string `json:"dns_target,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// Determines if reclamation is allowed for the record.
	ForbidReclamation *bool `json:"forbid_reclamation,omitempty"`

	// The time of the last DNS query in Epoch seconds format.
	LastQueried *UnixTime `json:"last_queried,omitempty"`

	// The name of the DNS DNAME record in FQDN format.
	Name *string `json:"name,omitempty"`

	// Determines if the record is reclaimable.
	Reclaimable bool `json:"reclaimable,omitempty"`

	// The name of the shared record group in which the record resides. This field
	// exists only on db_objects if this record is a shared record.
	SharedRecordGroup string `json:"shared_record_group,omitempty"`

	// The target domain name of the DNS DNAME record in FQDN format.
	Target *string `json:"target,omitempty"`

	// Time To Live (TTL) value for the record. A 32-bit unsigned integer that
	// represents the duration, in seconds, that the record is valid (cached). Zero
	// indicates that the record should not be cached.
	Ttl *uint32 `json:"ttl,omitempty"`

	// Use flag for: ttl
	UseTtl *bool `json:"use_ttl,omitempty"`

	// The name of the DNS View in which the record resides, for example
	// "external".
	View string `json:"view,omitempty"`

	// The name of the zone in which the record resides. For example: "zone.com".
	// If a view is not specified when searching by zone, the default view is used.
	Zone string `json:"zone,omitempty"`
}

func (RecordDname) ObjectType() string {
	return "record:dname"
}

func (obj RecordDname) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"name", "target", "view"}
	}
	return obj.returnFields
}

// RecordDnskey represents Infoblox object record:dnskey.
// The DNSKEY resource record stores public keys for the DNSSEC authentication
// process. The DNSKEY records are generated automatically when the
// corresponding authoritative zone is signed. The DNSKEY resource record
// object is read-only.
type RecordDnskey struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The public key encryption algorithm of a DNSKEY Record object.
	Algorithm string `json:"algorithm,omitempty"`

	// The comment for the record.
	Comment string `json:"comment,omitempty"`

	// The creation time of the record.
	CreationTime *UnixTime `json:"creation_time,omitempty"`

	// The record creator.
	Creator string `json:"creator,omitempty"`

	// Name of a DNSKEY record in punycode format.
	DnsName string `json:"dns_name,omitempty"`

	// The flags field is a 16-bit unsigned integer. Currently, only two bits of
	// this value are used: the least significant bit and bit 7. The other bits are
	// reserved for future use and must be zero. If bit 7 is set to 1, the key is a
	// DNS zone key. Otherwise, the key is not a zone key and cannot be used to
	// verify zone data. The least significant bit indicates "secure entry point
	// property". If it is not zero, the key is a key signing key (KSK type).
	// Otherwise, the key type is ZSK.
	Flags int `json:"flags,omitempty"`

	// The key tag identifying the public key of a DNSKEY Record object.
	KeyTag uint32 `json:"key_tag,omitempty"`

	// The time of the last DNS query in Epoch seconds format.
	LastQueried *UnixTime `json:"last_queried,omitempty"`

	// The name of the DNSKEY record in FQDN format. It has to be the same as the
	// zone, where the record resides.
	Name string `json:"name,omitempty"`

	// The public key. The format of the returned value depends on the key
	// algorithm.
	PublicKey string `json:"public_key,omitempty"`

	// The Time To Live (TTL) value for the record. A 32-bit unsigned integer that
	// represents the duration, in seconds, for which the record is valid (cached).
	// Zero indicates that the record should not be cached.
	Ttl uint32 `json:"ttl,omitempty"`

	// Use flag for: ttl
	UseTtl bool `json:"use_ttl,omitempty"`

	// The name of the DNS View in which the record resides. Example: "external".
	View string `json:"view,omitempty"`

	// The name of the zone in which the record resides. Example: "zone.com". If a
	// view is not specified when searching by zone, the default view is used.
	Zone string `json:"zone,omitempty"`
}

func (RecordDnskey) ObjectType() string {
	return "record:dnskey"
}

func (obj RecordDnskey) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"name", "view"}
	}
	return obj.returnFields
}

// RecordDs represents Infoblox object record:ds.
// The DS key record is a part of the DNS security extension records. The DS RR
// contains a hash of a child zone’s KSK and can be used as a trust anchor in
// some security-aware resolvers and to create a secure delegation point for a
// signed subzone in DNS servers. It is used to authorize the DNSKEY records of
// the child zone and thus to establish the DNSSEC chain of trust.
type RecordDs struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The algorithm of the DNSKEY RR to which this DS RR refers. It uses the same
	// algorithm values and types as the corresponding DNSKEY RR.
	Algorithm string `json:"algorithm,omitempty"`

	// Structure containing all cloud API related information for this object.
	CloudInfo *GridCloudapiInfo `json:"cloud_info,omitempty"`

	// The comment for the record.
	Comment string `json:"comment,omitempty"`

	// The creation time of the record.
	CreationTime *UnixTime `json:"creation_time,omitempty"`

	// Creator of the record.
	Creator string `json:"creator,omitempty"`

	// The digest of the DNSKEY resource record that is stored in a DS Record
	// object.
	Digest string `json:"digest,omitempty"`

	// The algorithm used to construct the digest.
	DigestType string `json:"digest_type,omitempty"`

	// The name for the DS record in punycode format.
	DnsName string `json:"dns_name,omitempty"`

	// The key tag value that is used to determine which key to use to verify
	// signatures.
	KeyTag uint32 `json:"key_tag,omitempty"`

	// The time of the last DNS query in Epoch seconds format.
	LastQueried *UnixTime `json:"last_queried,omitempty"`

	// The name of the DNS DS record in FQDN format.
	Name string `json:"name,omitempty"`

	// The Time To Live (TTL) value for the record. A 32-bit unsigned integer that
	// represents the duration, in seconds, for which the record is valid (cached).
	// Zero indicates that the record should not be cached.
	Ttl uint32 `json:"ttl,omitempty"`

	// Use flag for: ttl
	UseTtl bool `json:"use_ttl,omitempty"`

	// The name of the DNS View in which the record resides. Example: "external".
	View string `json:"view,omitempty"`

	// The name of the zone in which the record resides. Example: "zone.com". If a
	// view is not specified when searching by zone, the default view is used.
	Zone string `json:"zone,omitempty"`
}

func (RecordDs) ObjectType() string {
	return "record:ds"
}

func (obj RecordDs) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"name", "view"}
	}
	return obj.returnFields
}

// RecordDtclbdn represents Infoblox object record:dtclbdn.
// Load Balanced Domain Name (LBDN) is a Load balanced domain name record type,
// which is served by Infoblox Name Servers. LBDN is a qualified domain name
// associated with a specific service such as ftp.abc.com or www.abc.com. A
// LBDN record must be associated to a zone for which Infoblox is authoritative
// for. User may assign multiple “Resource Pools” to a LBDN record. User
// may also assign one or more DNS Distribution (Load balancing) methods an
// LBDN record. User must not be able to create multiple LBDNs for the same
// name.
type RecordDtclbdn struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The comment for the DTC LBDN record object; maximum 256 characters.
	Comment string `json:"comment,omitempty"`

	// Determines whether the DTC LBDN is disabled or not.
	Disable bool `json:"disable,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// The time of the last DNS query in Epoch seconds format.
	LastQueried *UnixTime `json:"last_queried,omitempty"`

	// The DTC LBDN object.
	Lbdn string `json:"lbdn,omitempty"`

	// The display name of the DTC LBDN record.
	Name string `json:"name,omitempty"`

	// An FQDN pattern, LBDN wildcards can be used.
	Pattern string `json:"pattern,omitempty"`

	// The name of the DNS View in which the record resides.
	View string `json:"view,omitempty"`

	// The name of the zone in which the record resides.
	Zone string `json:"zone,omitempty"`
}

func (RecordDtclbdn) ObjectType() string {
	return "record:dtclbdn"
}

func (obj RecordDtclbdn) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"comment", "name", "view", "zone"}
	}
	return obj.returnFields
}

// HostRecord represents Infoblox object record:host.
// A host record defines attributes for a node, such as the name-to-address and
// address-to-name mapping. This alleviates having to specify an A record and a
// PTR record separately for the same node. A host can also define aliases and
// DHCP fixed address nodes. The zone must be created first before adding a
// host record for the zone.
type HostRecord struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// This is a list of aliases for the host. The aliases must be in FQDN format.
	// This value can be in unicode format.
	Aliases []string `json:"aliases"`

	// This field controls whether the credential is used for both the Telnet and
	// SSH credentials. If set to False, the credential is used only for SSH.
	AllowTelnet *bool `json:"allow_telnet,omitempty"`

	// The CLI credentials for the host record.
	CliCredentials []*DiscoveryClicredential `json:"cli_credentials,omitempty"`

	// Structure containing all cloud API related information for this object.
	CloudInfo *GridCloudapiInfo `json:"cloud_info,omitempty"`

	// Comment for the record; maximum 256 characters.
	Comment *string `json:"comment,omitempty"`

	// When configure_for_dns is false, the host does not have parent zone
	// information.
	EnableDns *bool `json:"configure_for_dns,omitempty"`

	// The time of the record creation in Epoch seconds format.
	CreationTime *UnixTime `json:"creation_time,omitempty"`

	// Determines if the DDNS updates for this record are allowed or not.
	DdnsProtected *bool `json:"ddns_protected,omitempty"`

	// The description of the device.
	DeviceDescription *string `json:"device_description,omitempty"`

	// The location of the device.
	DeviceLocation *string `json:"device_location,omitempty"`

	// The type of the device.
	DeviceType *string `json:"device_type,omitempty"`

	// The vendor of the device.
	DeviceVendor *string `json:"device_vendor,omitempty"`

	// Determines if the record is disabled or not. False means that the record is
	// enabled.
	Disable *bool `json:"disable,omitempty"`

	// Determines if the discovery for the record is disabled or not. False means
	// that the discovery is enabled.
	DisableDiscovery *bool `json:"disable_discovery,omitempty"`

	// The list of aliases for the host in punycode format.
	DnsAliases []string `json:"dns_aliases,omitempty"`

	// The name for a host record in punycode format.
	DnsName string `json:"dns_name,omitempty"`

	// Determines if the discovery for the record should be immediately enabled.
	EnableImmediateDiscovery *bool `json:"enable_immediate_discovery,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// This is a list of IPv4 Addresses for the host.
	Ipv4Addrs []HostRecordIpv4Addr `json:"ipv4addrs"`

	// This is a list of IPv6 Addresses for the host.
	Ipv6Addrs []HostRecordIpv6Addr `json:"ipv6addrs"`

	// The time of the last DNS query in Epoch seconds format.
	LastQueried *UnixTime `json:"last_queried,omitempty"`

	// The Microsoft Active Directory user related information.
	MsAdUserData *MsserverAduserData `json:"ms_ad_user_data,omitempty"`

	// The host name in FQDN format This value can be in unicode format. Regular
	// expression search is not supported for unicode values.
	Name *string `json:"name,omitempty"`

	// The name of the network view in which the host record resides.
	NetworkView string `json:"network_view,omitempty"`

	// Restarts the member service.
	RestartIfNeeded *bool `json:"restart_if_needed,omitempty"`

	// The value of this field specifies the order in which resource record sets
	// are returned. The possible values are "cyclic", "random" and "fixed".
	RrsetOrder *string `json:"rrset_order,omitempty"`

	// The SNMPv3 credential for a host record.
	Snmp3Credential *DiscoverySnmp3credential `json:"snmp3_credential,omitempty"`

	// The SNMPv1 or SNMPv2 credential for a host record.
	SnmpCredential *DiscoverySnmpcredential `json:"snmp_credential,omitempty"`

	// The Time To Live (TTL) value for record. A 32-bit unsigned integer that
	// represents the duration, in seconds, for which the record is valid (cached).
	// Zero indicates that the record should not be cached.
	Ttl *uint32 `json:"ttl,omitempty"`

	// If set to true, the CLI credential will override member-level settings.
	UseCliCredentials *bool `json:"use_cli_credentials,omitempty"`

	// Determines if the SNMPv3 credential should be used for the record.
	UseSnmp3Credential *bool `json:"use_snmp3_credential,omitempty"`

	// If set to true, the SNMP credential will override member-level settings.
	UseSnmpCredential *bool `json:"use_snmp_credential,omitempty"`

	// Use flag for: ttl
	UseTtl *bool `json:"use_ttl,omitempty"`

	// The name of the DNS view in which the record resides. Example: "external".
	View *string `json:"view,omitempty"`

	// The name of the zone in which the record resides. Example: "zone.com". If a
	// view is not specified when searching by zone, the default view is used.
	Zone string `json:"zone,omitempty"`
}

func (HostRecord) ObjectType() string {
	return "record:host"
}

func (obj HostRecord) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"ipv4addrs", "ipv6addrs", "name", "view"}
	}
	return obj.returnFields
}

func NewEmptyHostRecord() *HostRecord {
	res := &HostRecord{}
	res.returnFields = []string{"extattrs", "ipv4addrs", "ipv6addrs", "name", "view", "zone", "comment", "network_view", "aliases", "use_ttl", "ttl", "configure_for_dns"}
	return res
}

func NewHostRecord(
	netView string,
	name string,
	ipv4Addr string,
	ipv6Addr string,
	ipv4AddrList []HostRecordIpv4Addr,
	ipv6AddrList []HostRecordIpv6Addr,
	eas EA,
	enableDNS bool,
	dnsView string,
	zone string,
	ref string,
	useTtl bool,
	ttl uint32,
	comment string,
	aliases []string,
	disable bool) *HostRecord {

	res := NewEmptyHostRecord()
	res.NetworkView = netView
	res.Name = &name
	res.Ea = eas
	res.View = &dnsView
	if *res.View == "" {
		res.View = nil
	}
	res.Zone = zone
	res.Ref = ref
	res.Comment = &comment
	res.Disable = &disable
	//res.Ipv4Addr = ipv4Addr
	//res.Ipv6Addr = ipv6Addr
	res.Ipv4Addrs = ipv4AddrList
	res.Ipv6Addrs = ipv6AddrList
	res.UseTtl = &useTtl
	res.Ttl = &ttl
	res.Aliases = aliases
	res.EnableDns = &enableDNS

	return res
}

// HostRecordIpv4Addr represents Infoblox object record:host_ipv4addr.
// A Host Address is an object used to specify addresses in the record.host
// object.
type HostRecordIpv4Addr struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The name of the boot file the client must download.
	Bootfile *string `json:"bootfile,omitempty"`

	// The IP address or hostname of the boot file server where the boot file is
	// stored.
	Bootserver *string `json:"bootserver,omitempty"`

	// Set this to True to enable the DHCP configuration for this host address.
	EnableDhcp *bool `json:"configure_for_dhcp,omitempty"`

	// Set this to True to disable the BOOTP settings and deny BOOTP boot requests.
	DenyBootp *bool `json:"deny_bootp,omitempty"`

	// The discovery status of this Host Address.
	DiscoverNowStatus string `json:"discover_now_status,omitempty"`

	// The discovered data for this Host Address.
	DiscoveredData *Discoverydata `json:"discovered_data,omitempty"`

	// Set this to True if you want the DHCP server to use a different lease time
	// for PXE clients. You can specify the duration of time it takes a host to
	// connect to a boot server, such as a TFTP server, and download the file it
	// needs to boot. For example, set a longer lease time if the client downloads
	// an OS (operating system) or configuration file, or set a shorter lease time
	// if the client downloads only configuration changes. Enter the lease time for
	// the preboot execution environment for hosts to boot remotely from a server.
	EnablePxeLeaseTime *bool `json:"enable_pxe_lease_time,omitempty"`

	// The host to which the host address belongs, in FQDN format. It is only
	// present when the host address object is not returned as part of a host.
	Host string `json:"host,omitempty"`

	// If this field is set to false, the appliance returns all DHCP options the
	// client is eligible to receive, rather than only the list of options the
	// client has requested.
	IgnoreClientRequestedOptions *bool `json:"ignore_client_requested_options,omitempty"`

	// The IPv4 Address of the host.
	Ipv4Addr *string `json:"ipv4addr,omitempty"`

	// This flag reflects whether the MAC address for this host address is invalid.
	IsInvalidMac bool `json:"is_invalid_mac,omitempty"`

	// The time of the last DNS query in Epoch seconds format.
	LastQueried *UnixTime `json:"last_queried,omitempty"`

	// This field contains the logic filters to be applied on the this host
	// address. This list corresponds to the match rules that are written to the
	// dhcpd configuration file.
	LogicFilterRules []*Logicfilterrule `json:"logic_filter_rules,omitempty"`

	// The MAC address for this host address.
	Mac *string `json:"mac,omitempty"`

	// Set this to 'MAC_ADDRESS' to assign the IP address to the selected host,
	// provided that the MAC address of the requesting host matches the MAC address
	// that you specify in the field. Set this to 'RESERVED' to reserve this
	// particular IP address for future use, or if the IP address is statically
	// configured on a system (the Infoblox server does not assign the address from
	// a DHCP request).
	MatchClient *string `json:"match_client,omitempty"`

	// The Microsoft Active Directory user related information.
	MsAdUserData *MsserverAduserData `json:"ms_ad_user_data,omitempty"`

	// The network of the host address, in FQDN/CIDR format.
	Network string `json:"network,omitempty"`

	// The name of the network view in which the host address resides.
	NetworkView string `json:"network_view,omitempty"`

	// The name in FQDN format and/or IPv4 Address of the next server that the host
	// needs to boot.
	Nextserver *string `json:"nextserver,omitempty"`

	// An array of DHCP option dhcpoption structs that lists the DHCP options
	// associated with the object.
	Options []*Dhcpoption `json:"options,omitempty"`

	// The lease time for PXE clients, see *enable_pxe_lease_time* for more
	// information.
	PxeLeaseTime *uint32 `json:"pxe_lease_time,omitempty"`

	// The reference to the reserved interface to which the device belongs.
	ReservedInterface *string `json:"reserved_interface,omitempty"`

	// Use flag for: bootfile
	UseBootfile *bool `json:"use_bootfile,omitempty"`

	// Use flag for: bootserver
	UseBootserver *bool `json:"use_bootserver,omitempty"`

	// Use flag for: deny_bootp
	UseDenyBootp *bool `json:"use_deny_bootp,omitempty"`

	// Set this to True when using this host address for EA inheritance.
	UseForEaInheritance *bool `json:"use_for_ea_inheritance,omitempty"`

	// Use flag for: ignore_client_requested_options
	UseIgnoreClientRequestedOptions *bool `json:"use_ignore_client_requested_options,omitempty"`

	// Use flag for: logic_filter_rules
	UseLogicFilterRules *bool `json:"use_logic_filter_rules,omitempty"`

	// Use flag for: nextserver
	UseNextserver *bool `json:"use_nextserver,omitempty"`

	// Use flag for: options
	UseOptions *bool `json:"use_options,omitempty"`

	// Use flag for: pxe_lease_time
	UsePxeLeaseTime *bool `json:"use_pxe_lease_time,omitempty"`
}

func (HostRecordIpv4Addr) ObjectType() string {
	return "record:host_ipv4addr"
}

func (obj HostRecordIpv4Addr) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"configure_for_dhcp", "host", "ipv4addr", "mac"}
	}
	return obj.returnFields
}

func NewEmptyHostRecordIpv4Addr() *HostRecordIpv4Addr {
	return &HostRecordIpv4Addr{}
}

func NewHostRecordIpv4Addr(
	ipAddr string,
	macAddr string,
	enableDhcp bool,
	ref string) *HostRecordIpv4Addr {

	res := NewEmptyHostRecordIpv4Addr()
	res.Ipv4Addr = &ipAddr
	res.Mac = &macAddr
	res.Ref = ref
	res.EnableDhcp = &enableDhcp

	return res
}

// HostRecordIpv6Addr represents Infoblox object record:host_ipv6addr.
// An IPv6 host address is an object used to specify addresses in the
// record.host object.
type HostRecordIpv6Addr struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// Type of the DHCP IPv6 Host Address object.
	AddressType string `json:"address_type,omitempty"`

	// Set this to True to enable the DHCP configuration for this IPv6 host
	// address.
	EnableDhcp *bool `json:"configure_for_dhcp,omitempty"`

	// The discovery status of this IPv6 Host Address.
	DiscoverNowStatus string `json:"discover_now_status,omitempty"`

	// The discovered data for this host address.
	DiscoveredData *Discoverydata `json:"discovered_data,omitempty"`

	// Use this method to set or retrieve the domain_name value of the DHCP IPv6
	// Host Address object.
	DomainName *string `json:"domain_name,omitempty"`

	// The IPv6 addresses of DNS recursive name servers to which the DHCP client
	// can send name resolution requests. The DHCP server includes this information
	// in the DNS Recursive Name Server option in Advertise, Rebind,
	// Information-Request, and Reply messages.
	DomainNameServers []string `json:"domain_name_servers,omitempty"`

	// DHCPv6 Unique Identifier (DUID) of the address object.
	Duid *string `json:"duid,omitempty"`

	// The host to which the IPv6 host address belongs, in FQDN format. It is only
	// present when the host address object is not returned as part of a host.
	Host string `json:"host,omitempty"`

	// The IPv6 Address prefix of the DHCP IPv6 Host Address object.
	Ipv6Addr *string `json:"ipv6addr,omitempty"`

	// The IPv6 Address prefix of the DHCP IPv6 Host Address object.
	Ipv6prefix *string `json:"ipv6prefix,omitempty"`

	// Prefix bits of the DHCP IPv6 Host Address object.
	Ipv6prefixBits *uint32 `json:"ipv6prefix_bits,omitempty"`

	// The time of the last DNS query in Epoch seconds format.
	LastQueried *UnixTime `json:"last_queried,omitempty"`

	// This field contains the logic filters to be applied on the this host
	// address. This list corresponds to the match rules that are written to the
	// dhcpd configuration file.
	LogicFilterRules []*Logicfilterrule `json:"logic_filter_rules,omitempty"`

	// Set this to 'DUID' to assign the IP address to the selected host, provided
	// that the DUID of the requesting host matches the DUID that you specify in
	// the field. Set this to 'RESERVED' to reserve this particular IP address for
	// future use, or if the IP address is statically configured on a system (the
	// Infoblox server does not assign the address from a DHCP request).
	MatchClient *string `json:"match_client,omitempty"`

	// The Microsoft Active Directory user related information.
	MsAdUserData *MsserverAduserData `json:"ms_ad_user_data,omitempty"`

	// The network of the host address, in FQDN/CIDR format.
	Network string `json:"network,omitempty"`

	// The name of the network view in which the host address resides.
	NetworkView string `json:"network_view,omitempty"`

	// An array of DHCP option dhcpoption structs that lists the DHCP options
	// associated with the object.
	Options []*Dhcpoption `json:"options,omitempty"`

	// Use this method to set or retrieve the preferred lifetime value of the DHCP
	// IPv6 Host Address object.
	PreferredLifetime *uint32 `json:"preferred_lifetime,omitempty"`

	// The reference to the reserved interface to which the device belongs.
	ReservedInterface *string `json:"reserved_interface,omitempty"`

	// Use flag for: domain_name
	UseDomainName *bool `json:"use_domain_name,omitempty"`

	// Use flag for: domain_name_servers
	UseDomainNameServers *bool `json:"use_domain_name_servers,omitempty"`

	// Set this to True when using this host address for EA inheritance.
	UseForEaInheritance *bool `json:"use_for_ea_inheritance,omitempty"`

	// Use flag for: logic_filter_rules
	UseLogicFilterRules *bool `json:"use_logic_filter_rules,omitempty"`

	// Use flag for: options
	UseOptions *bool `json:"use_options,omitempty"`

	// Use flag for: preferred_lifetime
	UsePreferredLifetime *bool `json:"use_preferred_lifetime,omitempty"`

	// Use flag for: valid_lifetime
	UseValidLifetime *bool `json:"use_valid_lifetime,omitempty"`

	// Use this method to set or retrieve the valid lifetime value of the DHCP IPv6
	// Host Address object.
	ValidLifetime *uint32 `json:"valid_lifetime,omitempty"`
}

func (HostRecordIpv6Addr) ObjectType() string {
	return "record:host_ipv6addr"
}

func (obj HostRecordIpv6Addr) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"configure_for_dhcp", "duid", "host", "ipv6addr"}
	}
	return obj.returnFields
}

func NewEmptyHostRecordIpv6Addr() *HostRecordIpv6Addr {
	return &HostRecordIpv6Addr{}
}

func NewHostRecordIpv6Addr(
	ipAddr string,
	duid string,
	enableDhcp bool,
	ref string) *HostRecordIpv6Addr {

	res := NewEmptyHostRecordIpv6Addr()
	res.Ipv6Addr = &ipAddr
	res.Duid = &duid
	res.Ref = ref
	res.EnableDhcp = &enableDhcp

	return res
}

// RecordMX represents Infoblox object record:mx.
// An MX (mail exchanger) record maps a domain name to a mail exchanger. A mail
// exchanger is a server that either delivers or forwards mail. You can specify
// one or more mail exchangers for a zone, as well as the preference for using
// each mail exchanger. A standard MX record applies to a particular domain or
// subdomain.
type RecordMX struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// Aws Route 53 record information.
	AwsRte53RecordInfo *Awsrte53recordinfo `json:"aws_rte53_record_info,omitempty"`

	// Structure containing all cloud API related information for this object.
	CloudInfo *GridCloudapiInfo `json:"cloud_info,omitempty"`

	// Comment for the record; maximum 256 characters.
	Comment *string `json:"comment,omitempty"`

	// The time of the record creation in Epoch seconds format.
	CreationTime *UnixTime `json:"creation_time,omitempty"`

	// The record creator. Note that changing creator from or to 'SYSTEM' value is
	// not allowed.
	Creator string `json:"creator,omitempty"`

	// The GSS-TSIG principal that owns this record.
	DdnsPrincipal *string `json:"ddns_principal,omitempty"`

	// Determines if the DDNS updates for this record are allowed or not.
	DdnsProtected *bool `json:"ddns_protected,omitempty"`

	// Determines if the record is disabled or not. False means that the record is
	// enabled.
	Disable *bool `json:"disable,omitempty"`

	// The Mail exchanger name in punycode format.
	DnsMailExchanger string `json:"dns_mail_exchanger,omitempty"`

	// The name for a MX record in punycode format.
	DnsName string `json:"dns_name,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// Determines if the reclamation is allowed for the record or not.
	ForbidReclamation *bool `json:"forbid_reclamation,omitempty"`

	// The time of the last DNS query in Epoch seconds format.
	LastQueried *UnixTime `json:"last_queried,omitempty"`

	// Mail exchanger name in FQDN format. This value can be in unicode format.
	MailExchanger *string `json:"mail_exchanger,omitempty"`

	// Name for the MX record in FQDN format. This value can be in unicode format.
	Name *string `json:"name,omitempty"`

	// Preference value, 0 to 65535 (inclusive) in 32-bit unsigned integer format.
	Preference *uint32 `json:"preference,omitempty"`

	// Determines if the record is reclaimable or not.
	Reclaimable bool `json:"reclaimable,omitempty"`

	// The name of the shared record group in which the record resides. This field
	// exists only on db_objects if this record is a shared record.
	SharedRecordGroup string `json:"shared_record_group,omitempty"`

	// The Time To Live (TTL) value for record. A 32-bit unsigned integer that
	// represents the duration, in seconds, for which the record is valid (cached).
	// Zero indicates that the record should not be cached.
	Ttl *uint32 `json:"ttl,omitempty"`

	// Use flag for: ttl
	UseTtl *bool `json:"use_ttl,omitempty"`

	// The name of the DNS view in which the record resides. Example: "external".
	View *string `json:"view,omitempty"`

	// The name of the zone in which the record resides. Example: "zone.com". If a
	// view is not specified when searching by zone, the default view is used.
	Zone string `json:"zone,omitempty"`
}

func (RecordMX) ObjectType() string {
	return "record:mx"
}

func (obj RecordMX) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"mail_exchanger", "name", "preference", "view"}
	}
	return obj.returnFields
}

// RecordNaptr represents Infoblox object record:naptr.
// A DNS NAPTR object represents a Naming Authority Pointer (NAPTR) resource
// record. This resource record specifies a regular expression-based rewrite
// rule that, when applied to an existing string, produces a new domain name or
// URI.
type RecordNaptr struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// Structure containing all cloud API related information for this object.
	CloudInfo *GridCloudapiInfo `json:"cloud_info,omitempty"`

	// Comment for the record; maximum 256 characters.
	Comment *string `json:"comment,omitempty"`

	// The time of the record creation in Epoch seconds format.
	CreationTime *UnixTime `json:"creation_time,omitempty"`

	// The record creator. Note that changing creator from or to 'SYSTEM' value is
	// not allowed.
	Creator string `json:"creator,omitempty"`

	// The GSS-TSIG principal that owns this record.
	DdnsPrincipal *string `json:"ddns_principal,omitempty"`

	// Determines if the DDNS updates for this record are allowed or not.
	DdnsProtected *bool `json:"ddns_protected,omitempty"`

	// Determines if the record is disabled or not. False means that the record is
	// enabled.
	Disable *bool `json:"disable,omitempty"`

	// The name of the NAPTR record in punycode format.
	DnsName string `json:"dns_name,omitempty"`

	// The replacement field of the NAPTR record in punycode format.
	DnsReplacement string `json:"dns_replacement,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// The flags used to control the interpretation of the fields for an NAPTR
	// record object. Supported values for the flags field are "U", "S", "P" and
	// "A".
	Flags *string `json:"flags,omitempty"`

	// Determines if the reclamation is allowed for the record or not.
	ForbidReclamation *bool `json:"forbid_reclamation,omitempty"`

	// The time of the last DNS query in Epoch seconds format.
	LastQueried *UnixTime `json:"last_queried,omitempty"`

	// The name of the NAPTR record in FQDN format. This value can be in unicode
	// format.
	Name *string `json:"name,omitempty"`

	// The order parameter of the NAPTR records. This parameter specifies the order
	// in which the NAPTR rules are applied when multiple rules are present. Valid
	// values are from 0 to 65535 (inclusive), in 32-bit unsigned integer format.
	Order *uint32 `json:"order,omitempty"`

	// The preference of the NAPTR record. The preference field determines the
	// order NAPTR records are processed when multiple records with the same order
	// parameter are present. Valid values are from 0 to 65535 (inclusive), in
	// 32-bit unsigned integer format.
	Preference *uint32 `json:"preference,omitempty"`

	// Determines if the record is reclaimable or not.
	Reclaimable bool `json:"reclaimable,omitempty"`

	// The regular expression-based rewriting rule of the NAPTR record. This should
	// be a POSIX compliant regular expression, including the substitution rule and
	// flags. Refer to RFC 2915 for the field syntax details.
	Regexp *string `json:"regexp,omitempty"`

	// The replacement field of the NAPTR record object. For nonterminal NAPTR
	// records, this field specifies the next domain name to look up. This value
	// can be in unicode format.
	Replacement *string `json:"replacement,omitempty"`

	// The services field of the NAPTR record object; maximum 128 characters. The
	// services field contains protocol and service identifiers, such as "http+E2U"
	// or "SIPS+D2T".
	Services *string `json:"services,omitempty"`

	// The Time to Live (TTL) value for the NAPTR record. A 32-bit unsigned integer
	// that represents the duration, in seconds, for which the record is valid
	// (cached). Zero indicates that the record should not be cached.
	Ttl *uint32 `json:"ttl,omitempty"`

	// Use flag for: ttl
	UseTtl *bool `json:"use_ttl,omitempty"`

	// The name of the DNS view in which the record resides. Example: "external".
	View string `json:"view,omitempty"`

	// The name of the zone in which the record resides. Example: "zone.com". If a
	// view is not specified when searching by zone, the default view is used.
	Zone string `json:"zone,omitempty"`
}

func (RecordNaptr) ObjectType() string {
	return "record:naptr"
}

func (obj RecordNaptr) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"name", "order", "preference", "regexp", "replacement", "services", "view"}
	}
	return obj.returnFields
}

// RecordNS represents Infoblox object record:ns.
// A DNS NS record identifies an authoritative DNS server for a domain. Each
// authoritative DNS server must have an NS record. The appliance automatically
// creates an NS record when you assign a grid member as the primary server for
// a zone. You can manually create NS records for other zones.
type RecordNS struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The list of zone name servers.
	Addresses []*ZoneNameServer `json:"addresses,omitempty"`

	// Structure containing all cloud API related information for this object.
	CloudInfo *GridCloudapiInfo `json:"cloud_info,omitempty"`

	// The record creator.
	Creator string `json:"creator,omitempty"`

	// The name of the NS record in punycode format.
	DnsName string `json:"dns_name,omitempty"`

	// The time of the last DNS query in Epoch seconds format.
	LastQueried *UnixTime `json:"last_queried,omitempty"`

	// The MS delegation point name.
	MsDelegationName *string `json:"ms_delegation_name,omitempty"`

	// The name of the NS record in FQDN format. This value can be in unicode
	// format.
	Name string `json:"name,omitempty"`

	// The domain name of an authoritative server for the redirected zone.
	Nameserver *string `json:"nameserver,omitempty"`

	// The host name policy for the record.
	Policy string `json:"policy,omitempty"`

	// The name of the DNS view in which the record resides. Example: "external".
	View string `json:"view,omitempty"`

	// The name of the zone in which the record resides. Example: "zone.com". If a
	// view is not specified when searching by zone, the default view is used.
	Zone string `json:"zone,omitempty"`
}

func (RecordNS) ObjectType() string {
	return "record:ns"
}

func (obj RecordNS) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"name", "nameserver", "view"}
	}
	return obj.returnFields
}

// RecordNsec represents Infoblox object record:nsec.
// NSEC resource record is one of the resource records included in the DNS
// security extension mechanism (DNSSEC). This record is used to provide
// authenticated denial of existence of a resource record in response to a
// resolver query.
type RecordNsec struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// Structure containing all cloud API related information for this object.
	CloudInfo *GridCloudapiInfo `json:"cloud_info,omitempty"`

	// Time that the record was created.
	CreationTime *UnixTime `json:"creation_time,omitempty"`

	// Creator of the record.
	Creator string `json:"creator,omitempty"`

	// Name for an NSEC record in punycode format.
	DnsName string `json:"dns_name,omitempty"`

	// Name of the next owner in punycode format.
	DnsNextOwnerName string `json:"dns_next_owner_name,omitempty"`

	// The time of the last DNS query in Epoch seconds format.
	LastQueried *UnixTime `json:"last_queried,omitempty"`

	// The name of the NSEC record in FQDN format.
	Name string `json:"name,omitempty"`

	// Name of the next owner that has authoritative data or that contains a
	// delegation point NS record.
	NextOwnerName string `json:"next_owner_name,omitempty"`

	// The RRSet types that exist at the original owner name of the NSEC RR.
	RrsetTypes []string `json:"rrset_types,omitempty"`

	// The Time To Live (TTL) value for the record. A 32-bit unsigned integer that
	// represents the duration, in seconds, for which the record is valid (cached).
	// Zero indicates that the record should not be cached.
	Ttl uint32 `json:"ttl,omitempty"`

	// Use flag for: ttl
	UseTtl bool `json:"use_ttl,omitempty"`

	// The name of the DNS View in which the record resides. Example: "external".
	View string `json:"view,omitempty"`

	// The name of the zone in which the record resides. Example: "zone.com". If a
	// view is not specified when searching by zone, the default view is used.
	Zone string `json:"zone,omitempty"`
}

func (RecordNsec) ObjectType() string {
	return "record:nsec"
}

func (obj RecordNsec) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"name", "view"}
	}
	return obj.returnFields
}

// RecordNsec3 represents Infoblox object record:nsec3.
// When a name server receives a request for a domain name that does not exist
// in a zone, the name server sends an authenticated negative response in the
// form of an NSEC or NSEC3 RR. NSEC and NSEC3 records contain the next secure
// domain name in a zone and list the RR types present at the NSEC or NSEC3
// RR’s owner name. The difference between an NSEC and NSEC3 RRs is that the
// owner name in an NSEC3 RR is a cryptographic hash of the original owner name
// prepended to the name of the zone. NSEC3 RRs protect against zone
// enumeration.
type RecordNsec3 struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The hash algorithm that was used.
	Algorithm string `json:"algorithm,omitempty"`

	// Structure containing all cloud API related information for this object.
	CloudInfo *GridCloudapiInfo `json:"cloud_info,omitempty"`

	// The creation time of the record.
	CreationTime *UnixTime `json:"creation_time,omitempty"`

	// Creator of the record.
	Creator string `json:"creator,omitempty"`

	// Name for an NSEC3 record in punycode format.
	DnsName string `json:"dns_name,omitempty"`

	// The set of 8 one-bit flags, of which only one flag, the Opt-Out flag, is
	// defined by RFC 5155. The Opt-Out flag indicates whether the NSEC3 record
	// covers unsigned delegations.
	Flags uint32 `json:"flags,omitempty"`

	// The number of times the hash function was performed.
	Iterations uint32 `json:"iterations,omitempty"`

	// The time of the last DNS query in Epoch seconds format.
	LastQueried *UnixTime `json:"last_queried,omitempty"`

	// The name of the NSEC3 record in FQDN format.
	Name string `json:"name,omitempty"`

	// The hashed next owner name that has authoritative data or that contains a
	// delegation point NS record.
	NextOwnerName string `json:"next_owner_name,omitempty"`

	// The RRSet types that exist at the original owner name of the NSEC3 RR.
	RrsetTypes []string `json:"rrset_types,omitempty"`

	// A series of case-insensitive hexadecimal digits. It is appended to the
	// original owner name as protection against pre-calculated dictionary attacks.
	// A new salt value is generated when ZSK rolls over. You can control the
	// period of the rollover. For random salt values, the selected length is
	// between one and 15 octets.
	Salt string `json:"salt,omitempty"`

	// The Time To Live (TTL) value for the record. A 32-bit unsigned integer that
	// represents the duration, in seconds, for which the record is valid (cached).
	// Zero indicates that the record should not be cached.
	Ttl uint32 `json:"ttl,omitempty"`

	// Use flag for: ttl
	UseTtl bool `json:"use_ttl,omitempty"`

	// The name of the DNS View in which the record resides. Example: "external".
	View string `json:"view,omitempty"`

	// The name of the zone in which the record resides. Example: "zone.com". If a
	// view is not specified when searching by zone, the default view is used.
	Zone string `json:"zone,omitempty"`
}

func (RecordNsec3) ObjectType() string {
	return "record:nsec3"
}

func (obj RecordNsec3) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"name", "view"}
	}
	return obj.returnFields
}

// RecordNsec3param represents Infoblox object record:nsec3param.
// An authoritative DNS server uses NSEC3PARAM RRs to determine which NSEC3
// records it includes in its negative responses. An NSEC3PARAM RR contains the
// parameters that an authoritative server needs to calculate hashed owner
// names. As stated in RFC 5155, the presence of an NSEC3PARAM RR at a zone
// apex indicates that the specified parameters may be used by authoritative
// servers to choose an appropriate set of NSEC3 RRs for negative responses.
type RecordNsec3param struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The hash algorithm that was used.
	Algorithm string `json:"algorithm,omitempty"`

	// Structure containing all cloud API related information for this object.
	CloudInfo *GridCloudapiInfo `json:"cloud_info,omitempty"`

	// The creation time of the record.
	CreationTime *UnixTime `json:"creation_time,omitempty"`

	// Creator of the record.
	Creator string `json:"creator,omitempty"`

	// Name for an NSEC3PARAM record in punycode format.
	DnsName string `json:"dns_name,omitempty"`

	// The set of 8 one-bit flags, of which only one flag, the Opt-Out flag, is
	// defined by RFC 5155. The Opt-Out flag indicates whether the NSEC3 record
	// covers unsigned delegations.
	Flags uint32 `json:"flags,omitempty"`

	// The number of times the hash function was performed.
	Iterations uint32 `json:"iterations,omitempty"`

	// The time of the last DNS query in Epoch seconds format.
	LastQueried *UnixTime `json:"last_queried,omitempty"`

	// The name of the NSEC3PARAM record in FQDN format. It has to be the same as
	// the zone, where the record resides.
	Name string `json:"name,omitempty"`

	// A series of case-insensitive hexadecimal digits. It is appended to the
	// original owner name as protection against pre-calculated dictionary attacks.
	// A new salt value is generated when the ZSK rolls over, for which the user
	// can control the period. For a random salt value, the selected length is
	// between one and 15 octets.
	Salt string `json:"salt,omitempty"`

	// The Time To Live (TTL) value for the record. A 32-bit unsigned integer that
	// represents the duration, in seconds, for which the record is valid (cached).
	// Zero indicates that the record should not be cached.
	Ttl uint32 `json:"ttl,omitempty"`

	// Use flag for: ttl
	UseTtl bool `json:"use_ttl,omitempty"`

	// The name of the DNS View in which the record resides. Example: "external".
	View string `json:"view,omitempty"`

	// The name of the zone in which the record resides. Example: "zone.com". If a
	// view is not specified when searching by zone, the default view is used.
	Zone string `json:"zone,omitempty"`
}

func (RecordNsec3param) ObjectType() string {
	return "record:nsec3param"
}

func (obj RecordNsec3param) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"name", "view"}
	}
	return obj.returnFields
}

// RecordPTR represents Infoblox object record:ptr.
// In a forward-mapping zone, a PTR (pointer) record maps a domain name to
// another domain name. In a reverse-mapping zone, a PTR (pointer) record maps
// an address to a domain name. To define a specific address-to-name mapping,
// add a PTR record to a previously defined authoritative reverse-mapping zone.
type RecordPTR struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// Aws Route 53 record information.
	AwsRte53RecordInfo *Awsrte53recordinfo `json:"aws_rte53_record_info,omitempty"`

	// Structure containing all cloud API related information for this object.
	CloudInfo *GridCloudapiInfo `json:"cloud_info,omitempty"`

	// Comment for the record; maximum 256 characters.
	Comment *string `json:"comment,omitempty"`

	// The time of the record creation in Epoch seconds format.
	CreationTime *UnixTime `json:"creation_time,omitempty"`

	// The record creator. Note that changing creator from or to 'SYSTEM' value is
	// not allowed.
	Creator string `json:"creator,omitempty"`

	// The GSS-TSIG principal that owns this record.
	DdnsPrincipal *string `json:"ddns_principal,omitempty"`

	// Determines if the DDNS updates for this record are allowed or not.
	DdnsProtected *bool `json:"ddns_protected,omitempty"`

	// Determines if the record is disabled or not. False means that the record is
	// enabled.
	Disable *bool `json:"disable,omitempty"`

	// The discovered data for this PTR record.
	DiscoveredData *Discoverydata `json:"discovered_data,omitempty"`

	// The name for a DNS PTR record in punycode format.
	DnsName string `json:"dns_name,omitempty"`

	// The domain name of the DNS PTR record in punycode format.
	DnsPtrdname string `json:"dns_ptrdname,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// Determines if the reclamation is allowed for the record or not.
	ForbidReclamation *bool `json:"forbid_reclamation,omitempty"`

	// The IPv4 Address of the record.
	Ipv4Addr *string `json:"ipv4addr,omitempty"`

	// The IPv6 Address of the record.
	Ipv6Addr *string `json:"ipv6addr,omitempty"`

	// The time of the last DNS query in Epoch seconds format.
	LastQueried *UnixTime `json:"last_queried,omitempty"`

	// The Microsoft Active Directory user related information.
	MsAdUserData *MsserverAduserData `json:"ms_ad_user_data,omitempty"`

	// The name of the DNS PTR record in FQDN format.
	Name *string `json:"name,omitempty"`

	// The domain name of the DNS PTR record in FQDN format.
	PtrdName *string `json:"ptrdname,omitempty"`

	// Determines if the record is reclaimable or not.
	Reclaimable bool `json:"reclaimable,omitempty"`

	// The name of the shared record group in which the record resides. This field
	// exists only on db_objects if this record is a shared record.
	SharedRecordGroup string `json:"shared_record_group,omitempty"`

	// Time To Live (TTL) value for the record. A 32-bit unsigned integer that
	// represents the duration, in seconds, that the record is valid (cached). Zero
	// indicates that the record should not be cached.
	Ttl *uint32 `json:"ttl,omitempty"`

	// Use flag for: ttl
	UseTtl *bool `json:"use_ttl,omitempty"`

	// Name of the DNS View in which the record resides, for example "external".
	View string `json:"view,omitempty"`

	// The name of the zone in which the record resides. For example: "zone.com".
	// If a view is not specified when searching by zone, the default view is used.
	Zone string `json:"zone,omitempty"`
}

func (RecordPTR) ObjectType() string {
	return "record:ptr"
}

func (obj RecordPTR) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"ptrdname", "view"}
	}
	return obj.returnFields
}

func NewEmptyRecordPTR() *RecordPTR {
	res := RecordPTR{}
	res.returnFields = []string{"extattrs", "ipv4addr", "ipv6addr", "name", "ptrdname", "view", "zone", "comment", "use_ttl", "ttl"}

	return &res
}

func NewRecordPTR(dnsView string, ptrdname string, useTtl bool, ttl uint32, comment string, ea EA) *RecordPTR {
	res := NewEmptyRecordPTR()
	res.View = dnsView
	res.PtrdName = &ptrdname
	res.UseTtl = &useTtl
	res.Ttl = &ttl
	res.Comment = &comment
	res.Ea = ea

	return res
}

// RecordRpzA represents Infoblox object record:rpz:a.
// An RPZ Substitute (A Record) Rule maps a domain name to a substitute IPv4
// address. To define a specific name-to-address mapping, add an Substitute (A
// Record) Rule to a previously defined Response Policy Zone.
type RecordRpzA struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The comment for the record; maximum 256 characters.
	Comment *string `json:"comment,omitempty"`

	// Determines if the record is disabled or not. False means that the record is
	// enabled.
	Disable *bool `json:"disable,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// The IPv4 Address of the substitute rule.
	Ipv4Addr *string `json:"ipv4addr,omitempty"`

	// The name for a record in FQDN format. This value cannot be in unicode
	// format.
	Name *string `json:"name,omitempty"`

	// The name of a response policy zone in which the record resides.
	RpZone *string `json:"rp_zone,omitempty"`

	// The Time To Live (TTL) value for record. A 32-bit unsigned integer that
	// represents the duration, in seconds, for which the record is valid (cached).
	// Zero indicates that the record should not be cached.
	Ttl *uint32 `json:"ttl,omitempty"`

	// Use flag for: ttl
	UseTtl *bool `json:"use_ttl,omitempty"`

	// The name of the DNS View in which the record resides. Example: "external".
	View *string `json:"view,omitempty"`

	// The name of the zone in which the record resides. Example: "zone.com". If a
	// view is not specified when searching by zone, the default view is used.
	Zone string `json:"zone,omitempty"`
}

func (RecordRpzA) ObjectType() string {
	return "record:rpz:a"
}

func (obj RecordRpzA) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"ipv4addr", "name", "view"}
	}
	return obj.returnFields
}

// RecordRpzAIpaddress represents Infoblox object record:rpz:a:ipaddress.
// An RPZ AIpAddress is an Substitute (IPv4 Address) Rule that maps an IP
// address represented by a host name to a substitute IPv4 address. To define a
// specific address-to-address mapping, add an Substitute (IPv4 Address) Rule
// to a previously defined Response Policy Zone.
type RecordRpzAIpaddress struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The comment for the record; maximum 256 characters.
	Comment *string `json:"comment,omitempty"`

	// Determines if the record is disabled or not. False means that the record is
	// enabled.
	Disable *bool `json:"disable,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// The IPv4 Address of the substitute rule.
	Ipv4Addr *string `json:"ipv4addr,omitempty"`

	// The name for a record in FQDN format. This value cannot be in unicode
	// format.
	Name *string `json:"name,omitempty"`

	// The name of a response policy zone in which the record resides.
	RpZone *string `json:"rp_zone,omitempty"`

	// The Time To Live (TTL) value for record. A 32-bit unsigned integer that
	// represents the duration, in seconds, for which the record is valid (cached).
	// Zero indicates that the record should not be cached.
	Ttl *uint32 `json:"ttl,omitempty"`

	// Use flag for: ttl
	UseTtl *bool `json:"use_ttl,omitempty"`

	// The name of the DNS View in which the record resides. Example: "external".
	View *string `json:"view,omitempty"`

	// The name of the zone in which the record resides. Example: "zone.com". If a
	// view is not specified when searching by zone, the default view is used.
	Zone string `json:"zone,omitempty"`
}

func (RecordRpzAIpaddress) ObjectType() string {
	return "record:rpz:a:ipaddress"
}

func (obj RecordRpzAIpaddress) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"ipv4addr", "name", "view"}
	}
	return obj.returnFields
}

// RecordRpzAaaa represents Infoblox object record:rpz:aaaa.
// An RPZ Substitute (AAAA Record) Rule, maps a domain name to a substitute
// IPv6 address. To define a specific name-to-address mapping, add an
// Substitute (AAAA Record) Rule to a previously defined Response Policy Zone.
type RecordRpzAaaa struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The comment for the record; maximum 256 characters.
	Comment *string `json:"comment,omitempty"`

	// Determines if the record is disabled or not. False means that the record is
	// enabled.
	Disable *bool `json:"disable,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// The IPv6 Address of the substitute rule.
	Ipv6Addr *string `json:"ipv6addr,omitempty"`

	// The name for a record in FQDN format. This value cannot be in unicode
	// format.
	Name *string `json:"name,omitempty"`

	// The name of a response policy zone in which the record resides.
	RpZone *string `json:"rp_zone,omitempty"`

	// The Time To Live (TTL) value for record. A 32-bit unsigned integer that
	// represents the duration, in seconds, for which the record is valid (cached).
	// Zero indicates that the record should not be cached.
	Ttl *uint32 `json:"ttl,omitempty"`

	// Use flag for: ttl
	UseTtl *bool `json:"use_ttl,omitempty"`

	// The name of the DNS View in which the record resides. Example: "external".
	View *string `json:"view,omitempty"`

	// The name of the zone in which the record resides. Example: "zone.com". If a
	// view is not specified when searching by zone, the default view is used.
	Zone string `json:"zone,omitempty"`
}

func (RecordRpzAaaa) ObjectType() string {
	return "record:rpz:aaaa"
}

func (obj RecordRpzAaaa) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"ipv6addr", "name", "view"}
	}
	return obj.returnFields
}

// RecordRpzAaaaIpaddress represents Infoblox object record:rpz:aaaa:ipaddress.
// An RPZ Substitute (IPv6 Address) Rule maps an IP address represented by a
// host name to a substitute IPv6 address. To define a specific
// address-to-address mapping, add an RPZ Substitute (IPv6 Address) Rule to a
// previously defined Response Policy Zone.
type RecordRpzAaaaIpaddress struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The comment for the record; maximum 256 characters.
	Comment *string `json:"comment,omitempty"`

	// Determines if the record is disabled or not. False means that the record is
	// enabled.
	Disable *bool `json:"disable,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// The IPv6 Address of the substitute rule.
	Ipv6Addr *string `json:"ipv6addr,omitempty"`

	// The name for a record in FQDN format. This value cannot be in unicode
	// format.
	Name *string `json:"name,omitempty"`

	// The name of a response policy zone in which the record resides.
	RpZone *string `json:"rp_zone,omitempty"`

	// The Time To Live (TTL) value for record. A 32-bit unsigned integer that
	// represents the duration, in seconds, for which the record is valid (cached).
	// Zero indicates that the record should not be cached.
	Ttl *uint32 `json:"ttl,omitempty"`

	// Use flag for: ttl
	UseTtl *bool `json:"use_ttl,omitempty"`

	// The name of the DNS View in which the record resides. Example: "external".
	View *string `json:"view,omitempty"`

	// The name of the zone in which the record resides. Example: "zone.com". If a
	// view is not specified when searching by zone, the default view is used.
	Zone string `json:"zone,omitempty"`
}

func (RecordRpzAaaaIpaddress) ObjectType() string {
	return "record:rpz:aaaa:ipaddress"
}

func (obj RecordRpzAaaaIpaddress) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"ipv6addr", "name", "view"}
	}
	return obj.returnFields
}

// RecordRpzCname represents Infoblox object record:rpz:cname.
// An RPZ CNAME record represents different RPZ rules, depending on the value
// of the canonical name. The intention of this object is to support QNAME
// Trigger policy. The QNAME policy trigger applies to requested domain names
// (QNAME). This record represents Passthru Domain Name Rule, Block Domain Name
// (No Such Domain) Rule, Block Domain Name (No Data) Rule and Substitute
// (Domain Name) Rule.
type RecordRpzCname struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The canonical name in FQDN format. This value can be in unicode format.
	Canonical *string `json:"canonical,omitempty"`

	// The comment for the record; maximum 256 characters.
	Comment *string `json:"comment,omitempty"`

	// Determines if the record is disabled or not. False means that the record is
	// enabled.
	Disable *bool `json:"disable,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// The name for a record in FQDN format. This value cannot be in unicode
	// format.
	Name *string `json:"name,omitempty"`

	// The name of a response policy zone in which the record resides.
	RpZone *string `json:"rp_zone,omitempty"`

	// The Time To Live (TTL) value for record. A 32-bit unsigned integer that
	// represents the duration, in seconds, for which the record is valid (cached).
	// Zero indicates that the record should not be cached.
	Ttl *uint32 `json:"ttl,omitempty"`

	// Use flag for: ttl
	UseTtl *bool `json:"use_ttl,omitempty"`

	// The name of the DNS View in which the record resides. Example: "external".
	View *string `json:"view,omitempty"`

	// The name of the zone in which the record resides. Example: "zone.com". If a
	// view is not specified when searching by zone, the default view is used.
	Zone string `json:"zone,omitempty"`
}

func (RecordRpzCname) ObjectType() string {
	return "record:rpz:cname"
}

func (obj RecordRpzCname) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"canonical", "name", "view"}
	}
	return obj.returnFields
}

// RecordRpzCnameClientipaddress represents Infoblox object record:rpz:cname:clientipaddress.
// A DNS RPZ CNAMEClientIpAddress record represents different RPZ rules,
// depending on the value of the canonical name. This record represents
// Passthru IP Address Rule, Block IP Address (No Such Domain) Rule, Block IP
// Address (No Data) Rule.
type RecordRpzCnameClientipaddress struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The canonical name in FQDN format. This value can be in unicode format.
	Canonical *string `json:"canonical,omitempty"`

	// The comment for the record; maximum 256 characters.
	Comment *string `json:"comment,omitempty"`

	// Determines if the record is disabled or not. False means that the record is
	// enabled.
	Disable *bool `json:"disable,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// Indicates whether the record is an IPv4 record. If the return value is
	// "true", it is an IPv4 record. Ohterwise, it is an IPv6 record.
	IsIpv4 bool `json:"is_ipv4,omitempty"`

	// The name for a record in FQDN format. This value cannot be in unicode
	// format.
	Name *string `json:"name,omitempty"`

	// The name of a response policy zone in which the record resides.
	RpZone *string `json:"rp_zone,omitempty"`

	// The Time To Live (TTL) value for record. A 32-bit unsigned integer that
	// represents the duration, in seconds, for which the record is valid (cached).
	// Zero indicates that the record should not be cached.
	Ttl *uint32 `json:"ttl,omitempty"`

	// Use flag for: ttl
	UseTtl *bool `json:"use_ttl,omitempty"`

	// The name of the DNS View in which the record resides. Example: "external".
	View *string `json:"view,omitempty"`

	// The name of the zone in which the record resides. Example: "zone.com". If a
	// view is not specified when searching by zone, the default view is used.
	Zone string `json:"zone,omitempty"`
}

func (RecordRpzCnameClientipaddress) ObjectType() string {
	return "record:rpz:cname:clientipaddress"
}

func (obj RecordRpzCnameClientipaddress) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"canonical", "name", "view"}
	}
	return obj.returnFields
}

// RecordRpzCnameClientipaddressdn represents Infoblox object record:rpz:cname:clientipaddressdn.
// A DNS Substitute Domain Name (Based on Client IP Address) rule represents
// different Response Policy Zone (RPZ) rules, depending on the value of the
// canonical name.
type RecordRpzCnameClientipaddressdn struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The canonical name in FQDN format. This value can be in unicode format.
	Canonical *string `json:"canonical,omitempty"`

	// The comment for the record; maximum 256 characters.
	Comment *string `json:"comment,omitempty"`

	// Determines if the record is disabled or not. False means that the record is
	// enabled.
	Disable *bool `json:"disable,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// Indicates whether the record is an IPv4 record. If the return value is
	// "true", it is an IPv4 record. Ohterwise, it is an IPv6 record.
	IsIpv4 bool `json:"is_ipv4,omitempty"`

	// The name for a record in FQDN format. This value cannot be in unicode
	// format.
	Name *string `json:"name,omitempty"`

	// The name of a response policy zone in which the record resides.
	RpZone *string `json:"rp_zone,omitempty"`

	// The Time To Live (TTL) value for record. A 32-bit unsigned integer that
	// represents the duration, in seconds, for which the record is valid (cached).
	// Zero indicates that the record should not be cached.
	Ttl *uint32 `json:"ttl,omitempty"`

	// Use flag for: ttl
	UseTtl *bool `json:"use_ttl,omitempty"`

	// The name of the DNS View in which the record resides. Example: "external".
	View *string `json:"view,omitempty"`

	// The name of the zone in which the record resides. Example: "zone.com". If a
	// view is not specified when searching by zone, the default view is used.
	Zone string `json:"zone,omitempty"`
}

func (RecordRpzCnameClientipaddressdn) ObjectType() string {
	return "record:rpz:cname:clientipaddressdn"
}

func (obj RecordRpzCnameClientipaddressdn) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"canonical", "name", "view"}
	}
	return obj.returnFields
}

// RecordRpzCnameIpaddress represents Infoblox object record:rpz:cname:ipaddress.
// A DNS RPZ CNAMEIpAddress record represents different RPZ rules, depending on
// the value of the canonical name. This record represents Passthru IP Address
// Rule, Block IP Address (No Such Domain) Rule, Block IP Address (No Data)
// Rule.
type RecordRpzCnameIpaddress struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The canonical name in FQDN format. This value can be in unicode format.
	Canonical *string `json:"canonical,omitempty"`

	// The comment for the record; maximum 256 characters.
	Comment *string `json:"comment,omitempty"`

	// Determines if the record is disabled or not. False means that the record is
	// enabled.
	Disable *bool `json:"disable,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// Indicates whether the record is an IPv4 record. If the return value is
	// "true", it is an IPv4 record. Ohterwise, it is an IPv6 record.
	IsIpv4 bool `json:"is_ipv4,omitempty"`

	// The name for a record in FQDN format. This value cannot be in unicode
	// format.
	Name *string `json:"name,omitempty"`

	// The name of a response policy zone in which the record resides.
	RpZone *string `json:"rp_zone,omitempty"`

	// The Time To Live (TTL) value for record. A 32-bit unsigned integer that
	// represents the duration, in seconds, for which the record is valid (cached).
	// Zero indicates that the record should not be cached.
	Ttl *uint32 `json:"ttl,omitempty"`

	// Use flag for: ttl
	UseTtl *bool `json:"use_ttl,omitempty"`

	// The name of the DNS View in which the record resides. Example: "external".
	View *string `json:"view,omitempty"`

	// The name of the zone in which the record resides. Example: "zone.com". If a
	// view is not specified when searching by zone, the default view is used.
	Zone string `json:"zone,omitempty"`
}

func (RecordRpzCnameIpaddress) ObjectType() string {
	return "record:rpz:cname:ipaddress"
}

func (obj RecordRpzCnameIpaddress) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"canonical", "name", "view"}
	}
	return obj.returnFields
}

// RecordRpzCnameIpaddressdn represents Infoblox object record:rpz:cname:ipaddressdn.
// A DNS Substitute Domain Name (Based on IP Address) rule represents different
// Response Policy Zone (RPZ) rules, depending on the value of the canonical
// name.
type RecordRpzCnameIpaddressdn struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The canonical name in FQDN format. This value can be in unicode format.
	Canonical *string `json:"canonical,omitempty"`

	// The comment for the record; maximum 256 characters.
	Comment *string `json:"comment,omitempty"`

	// Determines if the record is disabled or not. False means that the record is
	// enabled.
	Disable *bool `json:"disable,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// Indicates whether the record is an IPv4 record. If the return value is
	// "true", it is an IPv4 record. Ohterwise, it is an IPv6 record.
	IsIpv4 bool `json:"is_ipv4,omitempty"`

	// The name for a record in FQDN format. This value cannot be in unicode
	// format.
	Name *string `json:"name,omitempty"`

	// The name of a response policy zone in which the record resides.
	RpZone *string `json:"rp_zone,omitempty"`

	// The Time To Live (TTL) value for record. A 32-bit unsigned integer that
	// represents the duration, in seconds, for which the record is valid (cached).
	// Zero indicates that the record should not be cached.
	Ttl *uint32 `json:"ttl,omitempty"`

	// Use flag for: ttl
	UseTtl *bool `json:"use_ttl,omitempty"`

	// The name of the DNS View in which the record resides. Example: "external".
	View *string `json:"view,omitempty"`

	// The name of the zone in which the record resides. Example: "zone.com". If a
	// view is not specified when searching by zone, the default view is used.
	Zone string `json:"zone,omitempty"`
}

func (RecordRpzCnameIpaddressdn) ObjectType() string {
	return "record:rpz:cname:ipaddressdn"
}

func (obj RecordRpzCnameIpaddressdn) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"canonical", "name", "view"}
	}
	return obj.returnFields
}

// RecordRpzMx represents Infoblox object record:rpz:mx.
// An RPZ Substitute (MX Record) Rule maps a domain name to a mail exchanger. A
// mail exchanger is a server that either delivers or forwards mail.
type RecordRpzMx struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The comment for the record; maximum 256 characters.
	Comment *string `json:"comment,omitempty"`

	// Determines if the record is disabled or not. False means that the record is
	// enabled.
	Disable *bool `json:"disable,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// Mail exchanger name in FQDN format. This value can be in unicode format.
	MailExchanger *string `json:"mail_exchanger,omitempty"`

	// The name for a record in FQDN format. This value cannot be in unicode
	// format.
	Name *string `json:"name,omitempty"`

	// Preference value, 0 to 65535 (inclusive) in 32-bit unsigned integer format.
	Preference *uint32 `json:"preference,omitempty"`

	// The name of a response policy zone in which the record resides.
	RpZone *string `json:"rp_zone,omitempty"`

	// The Time To Live (TTL) value for record. A 32-bit unsigned integer that
	// represents the duration, in seconds, for which the record is valid (cached).
	// Zero indicates that the record should not be cached.
	Ttl *uint32 `json:"ttl,omitempty"`

	// Use flag for: ttl
	UseTtl *bool `json:"use_ttl,omitempty"`

	// The name of the DNS View in which the record resides. Example: "external".
	View *string `json:"view,omitempty"`

	// The name of the zone in which the record resides. Example: "zone.com". If a
	// view is not specified when searching by zone, the default view is used.
	Zone string `json:"zone,omitempty"`
}

func (RecordRpzMx) ObjectType() string {
	return "record:rpz:mx"
}

func (obj RecordRpzMx) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"mail_exchanger", "name", "preference", "view"}
	}
	return obj.returnFields
}

// RecordRpzNaptr represents Infoblox object record:rpz:naptr.
// An RPZ Substitute (NAPTR Record) Rule object represents the substitution
// rule for DNS Naming Authority Pointer (NAPTR) records. This rule specifies a
// regular expression-based rewrite rule that, when applied to an existing
// string, produces a new domain name or URI.
type RecordRpzNaptr struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The comment for the record; maximum 256 characters.
	Comment *string `json:"comment,omitempty"`

	// Determines if the record is disabled or not. False means that the record is
	// enabled.
	Disable *bool `json:"disable,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// The flags used to control the interpretation of the fields for a Substitute
	// (NAPTR Record) Rule object. Supported values for the flags field are "U",
	// "S", "P" and "A".
	Flags *string `json:"flags,omitempty"`

	// The time of the last DNS query in Epoch seconds format.
	LastQueried *UnixTime `json:"last_queried,omitempty"`

	// The name for a record in FQDN format. This value cannot be in unicode
	// format.
	Name *string `json:"name,omitempty"`

	// The order parameter of the Substitute (NAPTR Record) Rule records. This
	// parameter specifies the order in which the NAPTR rules are applied when
	// multiple rules are present. Valid values are from 0 to 65535 (inclusive), in
	// 32-bit unsigned integer format.
	Order *uint32 `json:"order,omitempty"`

	// The preference of the Substitute (NAPTR Record) Rule record. The preference
	// field determines the order NAPTR records are processed when multiple records
	// with the same order parameter are present. Valid values are from 0 to 65535
	// (inclusive), in 32-bit unsigned integer format.
	Preference *uint32 `json:"preference,omitempty"`

	// The regular expression-based rewriting rule of the Substitute (NAPTR Record)
	// Rule record. This should be a POSIX compliant regular expression, including
	// the substitution rule and flags. Refer to RFC 2915 for the field syntax
	// details.
	Regexp *string `json:"regexp,omitempty"`

	// The replacement field of the Substitute (NAPTR Record) Rule object. For
	// nonterminal NAPTR records, this field specifies the next domain name to look
	// up. This value can be in unicode format.
	Replacement *string `json:"replacement,omitempty"`

	// The name of a response policy zone in which the record resides.
	RpZone *string `json:"rp_zone,omitempty"`

	// The services field of the Substitute (NAPTR Record) Rule object; maximum 128
	// characters. The services field contains protocol and service identifiers,
	// such as "http+E2U" or "SIPS+D2T".
	Services *string `json:"services,omitempty"`

	// The Time To Live (TTL) value for record. A 32-bit unsigned integer that
	// represents the duration, in seconds, for which the record is valid (cached).
	// Zero indicates that the record should not be cached.
	Ttl *uint32 `json:"ttl,omitempty"`

	// Use flag for: ttl
	UseTtl *bool `json:"use_ttl,omitempty"`

	// The name of the DNS View in which the record resides. Example: "external".
	View *string `json:"view,omitempty"`

	// The name of the zone in which the record resides. Example: "zone.com". If a
	// view is not specified when searching by zone, the default view is used.
	Zone string `json:"zone,omitempty"`
}

func (RecordRpzNaptr) ObjectType() string {
	return "record:rpz:naptr"
}

func (obj RecordRpzNaptr) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"name", "order", "preference", "regexp", "replacement", "services", "view"}
	}
	return obj.returnFields
}

// RecordRpzPtr represents Infoblox object record:rpz:ptr.
// An RPZ Substitute (PTR Record) Rule object represents a Pointer (PTR)
// resource record. To define a specific address-to-name mapping, add an RPZ
// Substitute (PTR Record) Rule to a previously defined Response Policy Zone.
type RecordRpzPtr struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The comment for the record; maximum 256 characters.
	Comment *string `json:"comment,omitempty"`

	// Determines if the record is disabled or not. False means that the record is
	// enabled.
	Disable *bool `json:"disable,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// The IPv4 Address of the substitute rule.
	Ipv4Addr *string `json:"ipv4addr,omitempty"`

	// The IPv6 Address of the substitute rule.
	Ipv6Addr *string `json:"ipv6addr,omitempty"`

	// The name of the RPZ Substitute (PTR Record) Rule object in FQDN format.
	Name *string `json:"name,omitempty"`

	// The domain name of the RPZ Substitute (PTR Record) Rule object in FQDN
	// format.
	PtrdName *string `json:"ptrdname,omitempty"`

	// The name of a response policy zone in which the record resides.
	RpZone *string `json:"rp_zone,omitempty"`

	// The Time To Live (TTL) value for record. A 32-bit unsigned integer that
	// represents the duration, in seconds, for which the record is valid (cached).
	// Zero indicates that the record should not be cached.
	Ttl *uint32 `json:"ttl,omitempty"`

	// Use flag for: ttl
	UseTtl *bool `json:"use_ttl,omitempty"`

	// The name of the DNS View in which the record resides. Example: "external".
	View *string `json:"view,omitempty"`

	// The name of the zone in which the record resides. Example: "zone.com". If a
	// view is not specified when searching by zone, the default view is used.
	Zone string `json:"zone,omitempty"`
}

func (RecordRpzPtr) ObjectType() string {
	return "record:rpz:ptr"
}

func (obj RecordRpzPtr) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"ptrdname", "view"}
	}
	return obj.returnFields
}

// RecordRpzSrv represents Infoblox object record:rpz:srv.
// An RPZ Substitute (SRV Record) Rule object represents the substitution rule
// for DNS SRV records.
type RecordRpzSrv struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The comment for the record; maximum 256 characters.
	Comment *string `json:"comment,omitempty"`

	// Determines if the record is disabled or not. False means that the record is
	// enabled.
	Disable *bool `json:"disable,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// The name for a record in FQDN format. This value cannot be in unicode
	// format.
	Name *string `json:"name,omitempty"`

	// The port of the Substitute (SRV Record) Rule. Valid values are from 0 to
	// 65535 (inclusive), in 32-bit unsigned integer format.
	Port *uint32 `json:"port,omitempty"`

	// The priority of the Substitute (SRV Record) Rule. Valid values are from 0 to
	// 65535 (inclusive), in 32-bit unsigned integer format.
	Priority *uint32 `json:"priority,omitempty"`

	// The name of a response policy zone in which the record resides.
	RpZone *string `json:"rp_zone,omitempty"`

	// The target of the Substitute (SRV Record) Rule in FQDN format. This value
	// can be in unicode format.
	Target *string `json:"target,omitempty"`

	// The Time To Live (TTL) value for record. A 32-bit unsigned integer that
	// represents the duration, in seconds, for which the record is valid (cached).
	// Zero indicates that the record should not be cached.
	Ttl *uint32 `json:"ttl,omitempty"`

	// Use flag for: ttl
	UseTtl *bool `json:"use_ttl,omitempty"`

	// The name of the DNS View in which the record resides. Example: "external".
	View *string `json:"view,omitempty"`

	// The weight of the Substitute (SRV Record) Rule. Valid values are from 0 to
	// 65535 (inclusive), in 32-bit unsigned integer format.
	Weight *uint32 `json:"weight,omitempty"`

	// The name of the zone in which the record resides. Example: "zone.com". If a
	// view is not specified when searching by zone, the default view is used.
	Zone string `json:"zone,omitempty"`
}

func (RecordRpzSrv) ObjectType() string {
	return "record:rpz:srv"
}

func (obj RecordRpzSrv) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"name", "port", "priority", "target", "view", "weight"}
	}
	return obj.returnFields
}

// RecordRpzTxt represents Infoblox object record:rpz:txt.
// An RPZ Substitute (TXT Record) Rule object represents the substitution rule
// for DNS TXT records.
type RecordRpzTxt struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The comment for the record; maximum 256 characters.
	Comment *string `json:"comment,omitempty"`

	// Determines if the record is disabled or not. False means that the record is
	// enabled.
	Disable *bool `json:"disable,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// The name for a record in FQDN format. This value cannot be in unicode
	// format.
	Name *string `json:"name,omitempty"`

	// The name of a response policy zone in which the record resides.
	RpZone *string `json:"rp_zone,omitempty"`

	// Text associated with the record. It can contain up to 255 bytes per
	// substring, up to a total of 512 bytes. To enter leading, trailing, or
	// embedded spaces in the text, add quotes around the text to preserve the
	// spaces.
	Text *string `json:"text,omitempty"`

	// The Time To Live (TTL) value for record. A 32-bit unsigned integer that
	// represents the duration, in seconds, for which the record is valid (cached).
	// Zero indicates that the record should not be cached.
	Ttl *uint32 `json:"ttl,omitempty"`

	// Use flag for: ttl
	UseTtl *bool `json:"use_ttl,omitempty"`

	// The name of the DNS View in which the record resides. Example: "external".
	View *string `json:"view,omitempty"`

	// The name of the zone in which the record resides. Example: "zone.com". If a
	// view is not specified when searching by zone, the default view is used.
	Zone string `json:"zone,omitempty"`
}

func (RecordRpzTxt) ObjectType() string {
	return "record:rpz:txt"
}

func (obj RecordRpzTxt) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"name", "text", "view"}
	}
	return obj.returnFields
}

// RecordRrsig represents Infoblox object record:rrsig.
// RRSIG records are one of the resource records in DNSSEC. These records store
// digital signatures of resource record sets (RRsets). Digital signatures are
// used to authenticate data that is in the signed RRsets.
type RecordRrsig struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The cryptographic algorithm that was used to create the signature. It uses
	// the same algorithm types as the DNSKEY record indicated in the key tag
	// field.
	Algorithm string `json:"algorithm,omitempty"`

	// Structure containing all cloud API related information for this object.
	CloudInfo *GridCloudapiInfo `json:"cloud_info,omitempty"`

	// The creation time of the record.
	CreationTime *UnixTime `json:"creation_time,omitempty"`

	// The record creator.
	Creator string `json:"creator,omitempty"`

	// Name for an RRSIG record in punycode format.
	DnsName string `json:"dns_name,omitempty"`

	// The domain name, in punycode format, of the zone that contains the signed
	// RRset.
	DnsSignerName string `json:"dns_signer_name,omitempty"`

	// The expiry time of an RRSIG record in Epoch seconds format.
	ExpirationTime *UnixTime `json:"expiration_time,omitempty"`

	// The inception time of an RRSIG record in Epoch seconds format.
	InceptionTime *UnixTime `json:"inception_time,omitempty"`

	// The key tag value of the DNSKEY RR that validates the signature.
	KeyTag uint32 `json:"key_tag,omitempty"`

	// The number of labels in the name of the RRset signed with the RRSIG object.
	Labels uint32 `json:"labels,omitempty"`

	// The time of the last DNS query in Epoch seconds format.
	LastQueried *UnixTime `json:"last_queried,omitempty"`

	// The name of the RRSIG record in FQDN format.
	Name string `json:"name,omitempty"`

	// The TTL value of the RRset covered by the RRSIG record.
	OriginalTtl uint32 `json:"original_ttl,omitempty"`

	// The Base64 encoded cryptographic signature that covers the RRSIG RDATA of
	// the RRSIG Record object.
	Signature string `json:"signature,omitempty"`

	// The domain name of the zone in FQDN format that contains the signed RRset.
	SignerName string `json:"signer_name,omitempty"`

	// The Time To Live (TTL) value for the record. A 32-bit unsigned integer that
	// represents the duration, in seconds, for which the record is valid (cached).
	// Zero indicates that the record should not be cached.
	Ttl uint32 `json:"ttl,omitempty"`

	// The RR type covered by the RRSIG record.
	TypeCovered string `json:"type_covered,omitempty"`

	// Use flag for: ttl
	UseTtl bool `json:"use_ttl,omitempty"`

	// The name of the DNS View in which the record resides. Example: "external".
	View string `json:"view,omitempty"`

	// The name of the zone in which the record resides. Example: "zone.com". If a
	// view is not specified when searching by zone, the default view is used.
	Zone string `json:"zone,omitempty"`
}

func (RecordRrsig) ObjectType() string {
	return "record:rrsig"
}

func (obj RecordRrsig) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"name", "view"}
	}
	return obj.returnFields
}

// RecordSRV represents Infoblox object record:srv.
// A DNS SRV object represents an SRV resource record, which is also known as a
// service record. An SRV record provides information on available services.
type RecordSRV struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// Aws Route 53 record information.
	AwsRte53RecordInfo *Awsrte53recordinfo `json:"aws_rte53_record_info,omitempty"`

	// Structure containing all cloud API related information for this object.
	CloudInfo *GridCloudapiInfo `json:"cloud_info,omitempty"`

	// Comment for the record; maximum 256 characters.
	Comment *string `json:"comment,omitempty"`

	// The time of the record creation in Epoch seconds format.
	CreationTime *UnixTime `json:"creation_time,omitempty"`

	// The record creator. Note that changing creator from or to 'SYSTEM' value is
	// not allowed.
	Creator string `json:"creator,omitempty"`

	// The GSS-TSIG principal that owns this record.
	DdnsPrincipal *string `json:"ddns_principal,omitempty"`

	// Determines if the DDNS updates for this record are allowed or not.
	DdnsProtected *bool `json:"ddns_protected,omitempty"`

	// Determines if the record is disabled or not. False means that the record is
	// enabled.
	Disable *bool `json:"disable,omitempty"`

	// The name for an SRV record in punycode format.
	DnsName string `json:"dns_name,omitempty"`

	// The name for a SRV record in punycode format.
	DnsTarget string `json:"dns_target,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// Determines if the reclamation is allowed for the record or not.
	ForbidReclamation *bool `json:"forbid_reclamation,omitempty"`

	// The time of the last DNS query in Epoch seconds format.
	LastQueried *UnixTime `json:"last_queried,omitempty"`

	// A name in FQDN format. This value can be in unicode format.
	Name *string `json:"name,omitempty"`

	// The port of the SRV record. Valid values are from 0 to 65535 (inclusive), in
	// 32-bit unsigned integer format.
	Port *uint32 `json:"port,omitempty"`

	// The priority of the SRV record. Valid values are from 0 to 65535
	// (inclusive), in 32-bit unsigned integer format.
	Priority *uint32 `json:"priority,omitempty"`

	// Determines if the record is reclaimable or not.
	Reclaimable bool `json:"reclaimable,omitempty"`

	// The name of the shared record group in which the record resides. This field
	// exists only on db_objects if this record is a shared record.
	SharedRecordGroup string `json:"shared_record_group,omitempty"`

	// The target of the SRV record in FQDN format. This value can be in unicode
	// format.
	Target *string `json:"target,omitempty"`

	// The Time to Live (TTL) value for the record. A 32-bit unsigned integer that
	// represents the duration, in seconds, for which the record is valid (cached).
	// Zero indicates that the record should not be cached.
	Ttl *uint32 `json:"ttl,omitempty"`

	// Use flag for: ttl
	UseTtl *bool `json:"use_ttl,omitempty"`

	// The name of the DNS view in which the record resides. Example: "external".
	View string `json:"view,omitempty"`

	// The weight of the SRV record. Valid values are from 0 to 65535 (inclusive),
	// in 32-bit unsigned integer format.
	Weight *uint32 `json:"weight,omitempty"`

	// The name of the zone in which the record resides. Example: "zone.com". If a
	// view is not specified when searching by zone, the default view is used.
	Zone string `json:"zone,omitempty"`
}

func (RecordSRV) ObjectType() string {
	return "record:srv"
}

func (obj RecordSRV) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"name", "port", "priority", "target", "view", "weight"}
	}
	return obj.returnFields
}

// RecordTlsa represents Infoblox object record:tlsa.
// The TLSA DNS resource record (RR) is used to associate a TLS server
// certificate or public key with the domain name where the record is found,
// thus forming a ‘TLSA certificate association’. For further details see
// RFC-6698. Note that you must specify only one view for the attribute
// ‘views’.
type RecordTlsa struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// Hex dump of either raw data for matching type 0, or the hash of the raw data
	// for matching types 1 and 2.
	CertificateData *string `json:"certificate_data,omitempty"`

	// Specifies the provided association that will be used to match the
	// certificate presented in the TLS handshake. Based on RFC-6698.
	CertificateUsage *uint32 `json:"certificate_usage,omitempty"`

	// Structure containing all cloud API related information for this object.
	CloudInfo *GridCloudapiInfo `json:"cloud_info,omitempty"`

	// Comment for the record; maximum 256 characters.
	Comment *string `json:"comment,omitempty"`

	// The record creator. Note that changing creator from or to 'SYSTEM' value is
	// not allowed.
	Creator string `json:"creator,omitempty"`

	// Determines if the record is disabled or not. False means that the record is
	// enabled.
	Disable *bool `json:"disable,omitempty"`

	// The name of the TLSA record in punycode format.
	DnsName string `json:"dns_name,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// The time of the last DNS query in Epoch seconds format.
	LastQueried *UnixTime `json:"last_queried,omitempty"`

	// Specifies how the certificate association is presented. Based on RFC-6698.
	MatchedType *uint32 `json:"matched_type,omitempty"`

	// The TLSA record name in FQDN format. This value can be in unicode format.
	Name *string `json:"name,omitempty"`

	// Specifies which part of the TLS certificate presented by the server will be
	// matched against the association data. Based on RFC-6698.
	Selector *uint32 `json:"selector,omitempty"`

	// The Time to Live (TTL) value for the record. A 32-bit unsigned integer that
	// represents the duration, in seconds, for which the record is valid (cached).
	// Zero indicates that the record should not be cached.
	Ttl *uint32 `json:"ttl,omitempty"`

	// Use flag for: ttl
	UseTtl *bool `json:"use_ttl,omitempty"`

	// The name of the DNS view in which the record resides. Example: "external".
	View *string `json:"view,omitempty"`

	// The name of the zone in which the record resides. Example: "zone.com". If a
	// view is not specified when searching by zone, the default view is used.
	Zone string `json:"zone,omitempty"`
}

func (RecordTlsa) ObjectType() string {
	return "record:tlsa"
}

func (obj RecordTlsa) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"name", "view"}
	}
	return obj.returnFields
}

// RecordTXT represents Infoblox object record:txt.
// A TXT (text record) record contains supplemental information for a host. For
// example, if you have a sales server that serves only North America, you can
// create a text record stating this fact. You can create more than one text
// record for a domain name.
type RecordTXT struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// Aws Route 53 record information.
	AwsRte53RecordInfo *Awsrte53recordinfo `json:"aws_rte53_record_info,omitempty"`

	// Structure containing all cloud API related information for this object.
	CloudInfo *GridCloudapiInfo `json:"cloud_info,omitempty"`

	// Comment for the record; maximum 256 characters.
	Comment *string `json:"comment,omitempty"`

	// The time of the record creation in Epoch seconds format.
	CreationTime *UnixTime `json:"creation_time,omitempty"`

	// The record creator. Note that changing creator from or to 'SYSTEM' value is
	// not allowed.
	Creator string `json:"creator,omitempty"`

	// The GSS-TSIG principal that owns this record.
	DdnsPrincipal *string `json:"ddns_principal,omitempty"`

	// Determines if the DDNS updates for this record are allowed or not.
	DdnsProtected *bool `json:"ddns_protected,omitempty"`

	// Determines if the record is disabled or not. False means that the record is
	// enabled.
	Disable *bool `json:"disable,omitempty"`

	// The name for a TXT record in punycode format.
	DnsName string `json:"dns_name,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// Determines if the reclamation is allowed for the record or not.
	ForbidReclamation *bool `json:"forbid_reclamation,omitempty"`

	// The time of the last DNS query in Epoch seconds format.
	LastQueried *UnixTime `json:"last_queried,omitempty"`

	// Name for the TXT record in FQDN format. This value can be in unicode format.
	Name *string `json:"name,omitempty"`

	// Determines if the record is reclaimable or not.
	Reclaimable bool `json:"reclaimable,omitempty"`

	// The name of the shared record group in which the record resides. This field
	// exists only on db_objects if this record is a shared record.
	SharedRecordGroup string `json:"shared_record_group,omitempty"`

	// Text associated with the record. It can contain up to 255 bytes per
	// substring, up to a total of 512 bytes. To enter leading, trailing, or
	// embedded spaces in the text, add quotes around the text to preserve the
	// spaces.
	Text *string `json:"text,omitempty"`

	// The Time To Live (TTL) value for the record. A 32-bit unsigned integer that
	// represents the duration, in seconds, for which the record is valid (cached).
	// Zero indicates that the record should not be cached.
	Ttl *uint32 `json:"ttl,omitempty"`

	// Use flag for: ttl
	UseTtl *bool `json:"use_ttl,omitempty"`

	// The name of the DNS view in which the record resides. Example: "external".
	View *string `json:"view,omitempty"`

	// The name of the zone in which the record resides. Example: "zone.com". If a
	// view is not specified when searching by zone, the default view is used.
	Zone string `json:"zone,omitempty"`
}

func (RecordTXT) ObjectType() string {
	return "record:txt"
}

func (obj RecordTXT) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"name", "text", "view"}
	}
	return obj.returnFields
}

func NewEmptyRecordTXT() *RecordTXT {
	res := RecordTXT{}
	res.returnFields = []string{"view", "zone", "name", "text", "ttl", "use_ttl", "comment", "extattrs"}

	return &res
}

func NewRecordTXT(
	dnsview string,
	zone string,
	recordname string,
	text string,
	ttl uint32,
	useTtl bool,
	comment string,
	eas EA) *RecordTXT {

	res := NewEmptyRecordTXT()
	res.View = &dnsview
	if *res.View == "" {
		res.View = nil
	}
	res.Zone = zone
	res.Name = &recordname
	res.Text = &text
	res.Ttl = &ttl
	res.UseTtl = &useTtl
	res.Comment = &comment
	res.Ea = eas

	return res
}

// RecordUnknown represents Infoblox object record:unknown.
// An “RR of unknown type” is an RR whose RDATA format is not known to the
// DNS implementation at hand, and whose type is not an assigned QTYPE or
// Meta-TYPE as specified in 2929] nor within the range reserved in that
// section for assignment only to QTYPEs and Meta-TYPEs. The purpose of the
// Unknown resource record is to allow future DNS implementations to handle new
// RR types transparently. For further details see RFC-3597.
type RecordUnknown struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// Structure containing all cloud API related information for this object.
	CloudInfo *GridCloudapiInfo `json:"cloud_info,omitempty"`

	// Comment for the record; maximum 256 characters.
	Comment *string `json:"comment,omitempty"`

	// The record creator. Note that changing creator from or to 'SYSTEM' value is
	// not allowed.
	Creator string `json:"creator,omitempty"`

	// Determines if the record is disabled or not. False means that the record is
	// enabled.
	Disable *bool `json:"disable,omitempty"`

	// Standard textual representation of the RDATA.
	DisplayRdata string `json:"display_rdata,omitempty"`

	// The name of the unknown record in punycode format.
	DnsName string `json:"dns_name,omitempty"`

	// Determines if host name policy is applicable for the record.
	EnableHostNamePolicy *bool `json:"enable_host_name_policy,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// The time of the last DNS query in Epoch seconds format.
	LastQueried *UnixTime `json:"last_queried,omitempty"`

	// The Unknown record name in FQDN format. This value can be in unicode format.
	Name *string `json:"name,omitempty"`

	// The host name policy for the record.
	Policy string `json:"policy,omitempty"`

	// Specifies type of unknown resource record.
	RecordType *string `json:"record_type,omitempty"`

	// The list of rdata subfield values of unknown resource record.
	SubfieldValues []*Rdatasubfield `json:"subfield_values,omitempty"`

	// The Time to Live (TTL) value for the record. A 32-bit unsigned integer that
	// represents the duration, in seconds, for which the record is valid (cached).
	// Zero indicates that the record should not be cached.
	Ttl *uint32 `json:"ttl,omitempty"`

	// Use flag for: ttl
	UseTtl *bool `json:"use_ttl,omitempty"`

	// The name of the DNS view in which the record resides. Example: "external".
	View *string `json:"view,omitempty"`

	// The name of the zone in which the record resides. Example: "zone.com". If a
	// view is not specified when searching by zone, the default view is used.
	Zone string `json:"zone,omitempty"`
}

func (RecordUnknown) ObjectType() string {
	return "record:unknown"
}

func (obj RecordUnknown) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"name", "view"}
	}
	return obj.returnFields
}

// Recordnamepolicy represents Infoblox object recordnamepolicy.
// You can enforce naming policy for the hostnames of A, AAAA, Host, MX, NS and
// bulk host records based on user-defined or default patterns. For MX and NS
// records, the hostname restrictions apply to the text in the RDATA field of
// the resource record name. Records that you created before you enabled the
// hostname checking policy need not to comply with the hostname restriction
// that you specify.
type Recordnamepolicy struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// Determines whether the record name policy is Grid default.
	IsDefault *bool `json:"is_default,omitempty"`

	// The name of the record name policy object.
	Name *string `json:"name,omitempty"`

	// Determines whether the record name policy is a predefined one.
	PreDefined bool `json:"pre_defined,omitempty"`

	// The POSIX regular expression the record names should match in order to
	// comply with the record name policy.
	Regex *string `json:"regex,omitempty"`
}

func (Recordnamepolicy) ObjectType() string {
	return "recordnamepolicy"
}

func (obj Recordnamepolicy) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"is_default", "name", "regex"}
	}
	return obj.returnFields
}

// Restartservicestatus represents Infoblox object restartservicestatus.
// This object represents the service status. Use the the
// requestrestartservicestatus function call in object grid or the
// requestrestartservicestatus function call in object member to refresh the
// status.
type Restartservicestatus struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The status of the DHCP service.
	DhcpStatus string `json:"dhcp_status,omitempty"`

	// The status of the DNS service.
	DnsStatus string `json:"dns_status,omitempty"`

	// The name of this Grid member in FQDN format.
	Member string `json:"member,omitempty"`

	// The status of the reporting service.
	ReportingStatus string `json:"reporting_status,omitempty"`
}

func (Restartservicestatus) ObjectType() string {
	return "restartservicestatus"
}

func (obj Restartservicestatus) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"dhcp_status", "dns_status", "member", "reporting_status"}
	}
	return obj.returnFields
}

// Rir represents Infoblox object rir.
// An RIR is an entity that manages the Internet number resources, which
// include IP addresses and autonomous system numbers, within a specific region
// of the world. RIRs use SWIP (Shared WHOIS Project) or RWhois (Referral
// WHOIS) servers to provide address allocation information for IP address
// blocks. Typically, an RIR determines the address blocks to be allocated for
// specific organizations (typically ISPs), while an ISP manages the allocated
// address blocks, associated organizations and corresponding RIR
// registrations. An organization can determine when to request for more
// address data with their RIRs every few months.
type Rir struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The communication mode for RIR.
	CommunicationMode string `json:"communication_mode,omitempty"`

	// The e-mail address for RIR.
	Email *string `json:"email,omitempty"`

	// The name of RIR.
	Name string `json:"name,omitempty"`

	// The WebAPI URL for RIR.
	Url *string `json:"url,omitempty"`

	// Use flag for: email
	UseEmail *bool `json:"use_email,omitempty"`

	// Use flag for: url
	UseUrl *bool `json:"use_url,omitempty"`
}

func (Rir) ObjectType() string {
	return "rir"
}

func (obj Rir) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"communication_mode", "email", "name", "url"}
	}
	return obj.returnFields
}

// RirOrganization represents Infoblox object rir:organization.
// An RIR organization provides information about an entity that has registered
// a network resource in the RIPE database. This entity can be a company (such
// as an ISP), a nonprofit group, or an individual. You can add RIR
// organizations defined in the RIPE database and start managing their data
// through NIOS.
type RirOrganization struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// The RIR organization identifier.
	Id *string `json:"id,omitempty"`

	// The RIR organization maintainer.
	Maintainer *string `json:"maintainer,omitempty"`

	// The RIR organization name.
	Name *string `json:"name,omitempty"`

	// The password for the maintainer of RIR organization.
	Password *string `json:"password,omitempty"`

	// The RIR associated with RIR organization.
	Rir *string `json:"rir,omitempty"`

	// The sender e-mail address for RIR organization.
	SenderEmail *string `json:"sender_email,omitempty"`
}

func (RirOrganization) ObjectType() string {
	return "rir:organization"
}

func (obj RirOrganization) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"id", "maintainer", "name", "rir", "sender_email"}
	}
	return obj.returnFields
}

// RoamingHost represents Infoblox object roaminghost.
// A roaming host is a specific host that a DHCP server always assigns when a
// lease request comes from a particular MAC address of the client.
type RoamingHost struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The address type for this roaming host.
	AddressType string `json:"address_type,omitempty"`

	// The bootfile name for the roaming host. You can configure the DHCP server to
	// support clients that use the boot file name option in their DHCPREQUEST
	// messages.
	Bootfile *string `json:"bootfile,omitempty"`

	// The boot server address for the roaming host. You can specify the name
	// and/or IP address of the boot server that the host needs to boot. The boot
	// server IPv4 Address or name in FQDN format.
	Bootserver *string `json:"bootserver,omitempty"`

	// This field controls whether there is a prepend for the
	// dhcp-client-identifier of a roaming host.
	ClientIdentifierPrependZero *bool `json:"client_identifier_prepend_zero,omitempty"`

	// Comment for the roaming host; maximum 256 characters.
	Comment *string `json:"comment,omitempty"`

	// The DDNS domain name for this roaming host.
	DdnsDomainname *string `json:"ddns_domainname,omitempty"`

	// The DDNS host name for this roaming host.
	DdnsHostname *string `json:"ddns_hostname,omitempty"`

	// If set to true, BOOTP settings are disabled and BOOTP requests will be
	// denied.
	DenyBootp *bool `json:"deny_bootp,omitempty"`

	// The DHCP client ID for the roaming host.
	DhcpClientIdentifier *string `json:"dhcp_client_identifier,omitempty"`

	// Determines whether a roaming host is disabled or not. When this is set to
	// False, the roaming host is enabled.
	Disable *bool `json:"disable,omitempty"`

	// The dynamic DNS updates flag of the roaming host object. If set to True, the
	// DHCP server sends DDNS updates to DNS servers in the same Grid, and to
	// external DNS servers.
	EnableDdns *bool `json:"enable_ddns,omitempty"`

	// Set this to True if you want the DHCP server to use a different lease time
	// for PXE clients.
	EnablePxeLeaseTime *bool `json:"enable_pxe_lease_time,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// Set this to True to use the roaming host name as its ddns_hostname.
	ForceRoamingHostname *bool `json:"force_roaming_hostname,omitempty"`

	// If this field is set to False, the appliance returns all the DHCP options
	// the client is eligible to receive, rather than only the list of options the
	// client has requested.
	IgnoreDhcpOptionListRequest *bool `json:"ignore_dhcp_option_list_request,omitempty"`

	// The client hostname of a DHCP roaming host object. This field specifies the
	// host name that the DHCP client sends to the Infoblox appliance using DHCP
	// option 12.
	Ipv6ClientHostname string `json:"ipv6_client_hostname,omitempty"`

	// The IPv6 DDNS domain name for this roaming host.
	Ipv6DdnsDomainname *string `json:"ipv6_ddns_domainname,omitempty"`

	// The IPv6 DDNS host name for this roaming host.
	Ipv6DdnsHostname *string `json:"ipv6_ddns_hostname,omitempty"`

	// The IPv6 domain name for this roaming host.
	Ipv6DomainName *string `json:"ipv6_domain_name,omitempty"`

	// The IPv6 addresses of DNS recursive name servers to which the DHCP client
	// can send name resolution requests. The DHCP server includes this information
	// in the DNS Recursive Name Server option in Advertise, Rebind,
	// Information-Request, and Reply messages.
	Ipv6DomainNameServers []string `json:"ipv6_domain_name_servers,omitempty"`

	// The DUID value for this roaming host.
	Ipv6Duid *string `json:"ipv6_duid,omitempty"`

	// Set this to True to enable IPv6 DDNS.
	Ipv6EnableDdns *bool `json:"ipv6_enable_ddns,omitempty"`

	// Set this to True to use the roaming host name as its ddns_hostname.
	Ipv6ForceRoamingHostname *bool `json:"ipv6_force_roaming_hostname,omitempty"`

	// The identification method for an IPv6 or mixed IPv4/IPv6 roaming host.
	// Currently, the only supported value for this field is "DUID", which
	// corresponds to identification by DHCPv6 unique ID.
	Ipv6MatchOption string `json:"ipv6_match_option,omitempty"`

	// An array of DHCP option dhcpoption structs that lists the DHCP options
	// associated with the object.
	Ipv6Options []*Dhcpoption `json:"ipv6_options,omitempty"`

	// If set on creation, the roaming host will be created according to the values
	// specified in the named IPv6 roaming host template.
	Ipv6Template string `json:"ipv6_template,omitempty"`

	// The MAC address for this roaming host.
	Mac *string `json:"mac,omitempty"`

	// The match-client value for this roaming host. Valid values are:
	// "MAC_ADDRESS": The fixed IP address is leased to the matching MAC address.
	// "CLIENT_ID": The fixed IP address is leased to the matching DHCP client
	// identifier.
	MatchClient string `json:"match_client,omitempty"`

	// The name of this roaming host.
	Name *string `json:"name,omitempty"`

	// The name of the network view in which this roaming host resides.
	NetworkView *string `json:"network_view,omitempty"`

	// The name in FQDN and/or IPv4 Address format of the next server that the host
	// needs to boot.
	Nextserver *string `json:"nextserver,omitempty"`

	// An array of DHCP option dhcpoption structs that lists the DHCP options
	// associated with the object.
	Options []*Dhcpoption `json:"options,omitempty"`

	// The preferred lifetime value for this roaming host object.
	PreferredLifetime *uint32 `json:"preferred_lifetime,omitempty"`

	// The PXE lease time value for this roaming host object. Some hosts use PXE
	// (Preboot Execution Environment) to boot remotely from a server. To better
	// manage your IP resources, set a different lease time for PXE boot requests.
	// You can configure the DHCP server to allocate an IP address with a shorter
	// lease time to hosts that send PXE boot requests, so IP addresses are not
	// leased longer than necessary. A 32-bit unsigned integer that represents the
	// duration, in seconds, for which the update is cached. Zero indicates that
	// the update is not cached.
	PxeLeaseTime *uint32 `json:"pxe_lease_time,omitempty"`

	// If set on creation, the roaming host will be created according to the values
	// specified in the named template.
	Template string `json:"template,omitempty"`

	// Use flag for: bootfile
	UseBootfile *bool `json:"use_bootfile,omitempty"`

	// Use flag for: bootserver
	UseBootserver *bool `json:"use_bootserver,omitempty"`

	// Use flag for: ddns_domainname
	UseDdnsDomainname *bool `json:"use_ddns_domainname,omitempty"`

	// Use flag for: deny_bootp
	UseDenyBootp *bool `json:"use_deny_bootp,omitempty"`

	// Use flag for: enable_ddns
	UseEnableDdns *bool `json:"use_enable_ddns,omitempty"`

	// Use flag for: ignore_dhcp_option_list_request
	UseIgnoreDhcpOptionListRequest *bool `json:"use_ignore_dhcp_option_list_request,omitempty"`

	// Use flag for: ipv6_ddns_domainname
	UseIpv6DdnsDomainname *bool `json:"use_ipv6_ddns_domainname,omitempty"`

	// Use flag for: ipv6_domain_name
	UseIpv6DomainName *bool `json:"use_ipv6_domain_name,omitempty"`

	// Use flag for: ipv6_domain_name_servers
	UseIpv6DomainNameServers *bool `json:"use_ipv6_domain_name_servers,omitempty"`

	// Use flag for: ipv6_enable_ddns
	UseIpv6EnableDdns *bool `json:"use_ipv6_enable_ddns,omitempty"`

	// Use flag for: ipv6_options
	UseIpv6Options *bool `json:"use_ipv6_options,omitempty"`

	// Use flag for: nextserver
	UseNextserver *bool `json:"use_nextserver,omitempty"`

	// Use flag for: options
	UseOptions *bool `json:"use_options,omitempty"`

	// Use flag for: preferred_lifetime
	UsePreferredLifetime *bool `json:"use_preferred_lifetime,omitempty"`

	// Use flag for: pxe_lease_time
	UsePxeLeaseTime *bool `json:"use_pxe_lease_time,omitempty"`

	// Use flag for: valid_lifetime
	UseValidLifetime *bool `json:"use_valid_lifetime,omitempty"`

	// The valid lifetime value for this roaming host object.
	ValidLifetime *uint32 `json:"valid_lifetime,omitempty"`
}

func (RoamingHost) ObjectType() string {
	return "roaminghost"
}

func (obj RoamingHost) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"address_type", "name", "network_view"}
	}
	return obj.returnFields
}

// Ruleset represents Infoblox object ruleset.
// Represents a Ruleset object, which is a collection of rules that is used to
// match domain names.
type Ruleset struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// Descriptive comment about the Ruleset object.
	Comment *string `json:"comment,omitempty"`

	// The flag that indicates if the Ruleset object is disabled.
	Disabled *bool `json:"disabled,omitempty"`

	// The name of this Ruleset object.
	Name *string `json:"name,omitempty"`

	// The list of Rules assigned to this Ruleset object. Rules can be set only
	// when the Ruleset type is set to "NXDOMAIN".
	NxdomainRules []*Nxdomainrule `json:"nxdomain_rules,omitempty"`

	// The type of this Ruleset object.
	Type string `json:"type,omitempty"`
}

func (Ruleset) ObjectType() string {
	return "ruleset"
}

func (obj Ruleset) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"comment", "disabled", "name", "type"}
	}
	return obj.returnFields
}

// SamlAuthservice represents Infoblox object saml:authservice.
// This object represents SAML authentication service.
type SamlAuthservice struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The descriptive comment for the SAML authentication service.
	Comment *string `json:"comment,omitempty"`

	// The SAML Identity Provider to use for authentication.
	Idp *SamlIdp `json:"idp,omitempty"`

	// The name of the SAML authentication service.
	Name *string `json:"name,omitempty"`

	// The session timeout in seconds.
	SessionTimeout *uint32 `json:"session_timeout,omitempty"`
}

func (SamlAuthservice) ObjectType() string {
	return "saml:authservice"
}

func (obj SamlAuthservice) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"name"}
	}
	return obj.returnFields
}

// Scavengingtask represents Infoblox object scavengingtask.
// The DNS scavenging task object provides information on scavenging process
// state.
type Scavengingtask struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The scavenging action.
	Action string `json:"action,omitempty"`

	// The reference to the object associated with the scavenging task.
	AssociatedObject string `json:"associated_object,omitempty"`

	// The scavenging process end time.
	EndTime *UnixTime `json:"end_time,omitempty"`

	// The number of processed during scavenging resource records.
	ProcessedRecords uint32 `json:"processed_records,omitempty"`

	// The number of resource records that are allowed to be reclaimed during the
	// scavenging process.
	ReclaimableRecords uint32 `json:"reclaimable_records,omitempty"`

	// The number of reclaimed during the scavenging process resource records.
	ReclaimedRecords uint32 `json:"reclaimed_records,omitempty"`

	// The scavenging process start time.
	StartTime *UnixTime `json:"start_time,omitempty"`

	// The scavenging process status. This is a read-only attribute.
	Status string `json:"status,omitempty"`
}

func (Scavengingtask) ObjectType() string {
	return "scavengingtask"
}

func (obj Scavengingtask) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"action", "associated_object", "status"}
	}
	return obj.returnFields
}

// ScheduledTask represents Infoblox object scheduledtask.
// This object represents a scheduled task.
type ScheduledTask struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The approval status of the task.
	ApprovalStatus string `json:"approval_status,omitempty"`

	// The approver of the task.
	Approver string `json:"approver,omitempty"`

	// The comment specified by the approver of the task.
	ApproverComment *string `json:"approver_comment,omitempty"`

	// Indicates whether there will be an automatic restart when the appliance
	// executes the task.
	AutomaticRestart *bool `json:"automatic_restart,omitempty"`

	// A list of objects that are affected by the task.
	ChangedObjects []*Changedobject `json:"changed_objects,omitempty"`

	// If this scheduled task has dependent tasks, their references will be
	// returned in this field.
	DependentTasks []*ScheduledTask `json:"dependent_tasks,omitempty"`

	// If this field is set to True the specified task will be executed
	// immediately.
	ExecuteNow *bool `json:"execute_now,omitempty"`

	// Messages generated by the execution of the scheduled task after its
	// completion.
	ExecutionDetails []string `json:"execution_details,omitempty"`

	// The type of details generated by the execution of the scheduled task after
	// its completion.
	ExecutionDetailsType string `json:"execution_details_type,omitempty"`

	// The execution status of the task.
	ExecutionStatus string `json:"execution_status,omitempty"`

	// The time when the appliance executed the task.
	ExecutionTime *UnixTime `json:"execution_time,omitempty"`

	// Indicates whether this is a Network Insight scheduled task.
	IsNetworkInsightTask bool `json:"is_network_insight_task,omitempty"`

	// The member where this task was created.
	Member string `json:"member,omitempty"`

	// If this scheduled task has a predecessor task set, its reference will be
	// returned in this field.
	PredecessorTask string `json:"predecessor_task,omitempty"`

	// If set to True, if the scheduled task is a Network Insight task and it
	// failed, a new task will be cloned from this task and re-executed.
	ReExecuteTask *bool `json:"re_execute_task,omitempty"`

	// The time when the task is scheduled to occur.
	ScheduledTime *UnixTime `json:"scheduled_time,omitempty"`

	// The time when the task was submitted.
	SubmitTime *UnixTime `json:"submit_time,omitempty"`

	// The submitter of the task.
	Submitter string `json:"submitter,omitempty"`

	// The comment specified by the submitter of the task.
	SubmitterComment *string `json:"submitter_comment,omitempty"`

	// The task ID.
	TaskId uint32 `json:"task_id,omitempty"`

	// The task type.
	TaskType string `json:"task_type,omitempty"`

	// The task ticket number.
	TicketNumber string `json:"ticket_number,omitempty"`
}

func (ScheduledTask) ObjectType() string {
	return "scheduledtask"
}

func (obj ScheduledTask) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"approval_status", "execution_status", "task_id"}
	}
	return obj.returnFields
}

// Search represents Infoblox object search.
// The search object is used to perform global searches for multiple object
// types in the database. This object contains only search parameters and
// returns objects that match the search criteria. The returned objects are
// base objects for the respective object types.
type Search struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`
}

func (Search) ObjectType() string {
	return "search"
}

func (obj Search) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{}
	}
	return obj.returnFields
}

// SharedNetwork represents Infoblox object sharednetwork.
// A shared network is a network segment to which you assign two or more
// subnets. When subnets in a shared network contain IP addresses that are
// available for dynamic allocation, the addresses are put into a common pool
// for allocation when client requests arise. When you create a shared network,
// the DHCP server can assign IP addresses to client requests from any subnet
// (that resides on the same network interface) in the shared network.
type SharedNetwork struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// Authority for the shared network.
	Authority *bool `json:"authority,omitempty"`

	// The bootfile name for the shared network. You can configure the DHCP server
	// to support clients that use the boot file name option in their DHCPREQUEST
	// messages.
	Bootfile *string `json:"bootfile,omitempty"`

	// The bootserver address for the shared network. You can specify the name
	// and/or IP address of the boot server that the host needs to boot. The boot
	// server IPv4 Address or name in FQDN format.
	Bootserver *string `json:"bootserver,omitempty"`

	// Comment for the shared network, maximum 256 characters.
	Comment *string `json:"comment,omitempty"`

	// If this field is set to True, the DHCP server generates a hostname and
	// updates DNS with it when the DHCP client request does not contain a
	// hostname.
	DdnsGenerateHostname *bool `json:"ddns_generate_hostname,omitempty"`

	// This field controls whether only the DHCP server is allowed to update DNS,
	// regardless of the DHCP clients requests. Note that changes for this field
	// take effect only if ddns_use_option81 is True.
	DdnsServerAlwaysUpdates *bool `json:"ddns_server_always_updates,omitempty"`

	// The DNS update Time to Live (TTL) value of a shared network object. The TTL
	// is a 32-bit unsigned integer that represents the duration, in seconds, for
	// which the update is cached. Zero indicates that the update is not cached.
	DdnsTtl *uint32 `json:"ddns_ttl,omitempty"`

	// By default, the DHCP server does not update DNS when it allocates a fixed
	// address to a client. You can configure the DHCP server to update the A and
	// PTR records of a client with a fixed address. When this feature is enabled
	// and the DHCP server adds A and PTR records for a fixed address, the DHCP
	// server never discards the records.
	DdnsUpdateFixedAddresses *bool `json:"ddns_update_fixed_addresses,omitempty"`

	// The support for DHCP Option 81 at the shared network level.
	DdnsUseOption81 *bool `json:"ddns_use_option81,omitempty"`

	// If set to true, BOOTP settings are disabled and BOOTP requests will be
	// denied.
	DenyBootp *bool `json:"deny_bootp,omitempty"`

	// The percentage of the total DHCP utilization of the networks belonging to
	// the shared network multiplied by 1000. This is the percentage of the total
	// number of available IP addresses from all the networks belonging to the
	// shared network versus the total number of all IP addresses in all of the
	// networks in the shared network.
	DhcpUtilization uint32 `json:"dhcp_utilization,omitempty"`

	// A string describing the utilization level of the shared network.
	DhcpUtilizationStatus string `json:"dhcp_utilization_status,omitempty"`

	// Determines whether a shared network is disabled or not. When this is set to
	// False, the shared network is enabled.
	Disable *bool `json:"disable,omitempty"`

	// The total number of DHCP leases issued for the shared network.
	DynamicHosts uint32 `json:"dynamic_hosts,omitempty"`

	// The dynamic DNS updates flag of a shared network object. If set to True, the
	// DHCP server sends DDNS updates to DNS servers in the same Grid, and to
	// external DNS servers.
	EnableDdns *bool `json:"enable_ddns,omitempty"`

	// Set this to True if you want the DHCP server to use a different lease time
	// for PXE clients.
	EnablePxeLeaseTime *bool `json:"enable_pxe_lease_time,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// If set to true, the client identifier will be ignored.
	IgnoreClientIdentifier *bool `json:"ignore_client_identifier,omitempty"`

	// If this field is set to False, the appliance returns all DHCP options the
	// client is eligible to receive, rather than only the list of options the
	// client has requested.
	IgnoreDhcpOptionListRequest *bool `json:"ignore_dhcp_option_list_request,omitempty"`

	// Indicates whether the appliance will ignore DHCP client IDs or MAC
	// addresses. Valid values are "NONE", "CLIENT", or "MACADDR". The default is
	// "NONE".
	IgnoreId string `json:"ignore_id,omitempty"`

	// A list of MAC addresses the appliance will ignore.
	IgnoreMacAddresses []string `json:"ignore_mac_addresses,omitempty"`

	// An integer that specifies the period of time (in seconds) that frees and
	// backs up leases remained in the database before they are automatically
	// deleted. To disable lease scavenging, set the parameter to -1. The minimum
	// positive value must be greater than 86400 seconds (1 day).
	LeaseScavengeTime int `json:"lease_scavenge_time,omitempty"`

	// This field contains the logic filters to be applied on the this shared
	// network. This list corresponds to the match rules that are written to the
	// dhcpd configuration file.
	LogicFilterRules []*Logicfilterrule `json:"logic_filter_rules,omitempty"`

	// The Microsoft Active Directory user related information.
	MsAdUserData *MsserverAduserData `json:"ms_ad_user_data,omitempty"`

	// The name of the IPv6 Shared Network.
	Name *string `json:"name,omitempty"`

	// The name of the network view in which this shared network resides.
	NetworkView string `json:"network_view,omitempty"`

	// A list of networks belonging to the shared network Each individual list item
	// must be specified as an object containing a '_ref' parameter to a network
	// reference, for example:: [{ "_ref":
	// "network/ZG5zLm5ldHdvcmskMTAuMwLvMTYvMA", }] if the reference of the wanted
	// network is not known, it is possible to specify search parameters for the
	// network instead in the following way:: [{ "_ref": { 'network': '10.0.0.0/8',
	// } }] note that in this case the search must match exactly one network for
	// the assignment to be successful.
	Networks []*Ipv4Network `json:"networks,omitempty"`

	// The name in FQDN and/or IPv4 Address of the next server that the host needs
	// to boot.
	Nextserver *string `json:"nextserver,omitempty"`

	// An array of DHCP option dhcpoption structs that lists the DHCP options
	// associated with the object.
	Options []*Dhcpoption `json:"options,omitempty"`

	// The PXE lease time value of a shared network object. Some hosts use PXE
	// (Preboot Execution Environment) to boot remotely from a server. To better
	// manage your IP resources, set a different lease time for PXE boot requests.
	// You can configure the DHCP server to allocate an IP address with a shorter
	// lease time to hosts that send PXE boot requests, so IP addresses are not
	// leased longer than necessary. A 32-bit unsigned integer that represents the
	// duration, in seconds, for which the update is cached. Zero indicates that
	// the update is not cached.
	PxeLeaseTime *uint32 `json:"pxe_lease_time,omitempty"`

	// The number of static DHCP addresses configured in the shared network.
	StaticHosts uint32 `json:"static_hosts,omitempty"`

	// The total number of DHCP addresses configured in the shared network.
	TotalHosts uint32 `json:"total_hosts,omitempty"`

	// This field controls whether the DHCP server updates DNS when a DHCP lease is
	// renewed.
	UpdateDnsOnLeaseRenewal *bool `json:"update_dns_on_lease_renewal,omitempty"`

	// Use flag for: authority
	UseAuthority *bool `json:"use_authority,omitempty"`

	// Use flag for: bootfile
	UseBootfile *bool `json:"use_bootfile,omitempty"`

	// Use flag for: bootserver
	UseBootserver *bool `json:"use_bootserver,omitempty"`

	// Use flag for: ddns_generate_hostname
	UseDdnsGenerateHostname *bool `json:"use_ddns_generate_hostname,omitempty"`

	// Use flag for: ddns_ttl
	UseDdnsTtl *bool `json:"use_ddns_ttl,omitempty"`

	// Use flag for: ddns_update_fixed_addresses
	UseDdnsUpdateFixedAddresses *bool `json:"use_ddns_update_fixed_addresses,omitempty"`

	// Use flag for: ddns_use_option81
	UseDdnsUseOption81 *bool `json:"use_ddns_use_option81,omitempty"`

	// Use flag for: deny_bootp
	UseDenyBootp *bool `json:"use_deny_bootp,omitempty"`

	// Use flag for: enable_ddns
	UseEnableDdns *bool `json:"use_enable_ddns,omitempty"`

	// Use flag for: ignore_client_identifier
	UseIgnoreClientIdentifier *bool `json:"use_ignore_client_identifier,omitempty"`

	// Use flag for: ignore_dhcp_option_list_request
	UseIgnoreDhcpOptionListRequest *bool `json:"use_ignore_dhcp_option_list_request,omitempty"`

	// Use flag for: ignore_id
	UseIgnoreId *bool `json:"use_ignore_id,omitempty"`

	// Use flag for: lease_scavenge_time
	UseLeaseScavengeTime *bool `json:"use_lease_scavenge_time,omitempty"`

	// Use flag for: logic_filter_rules
	UseLogicFilterRules *bool `json:"use_logic_filter_rules,omitempty"`

	// Use flag for: nextserver
	UseNextserver *bool `json:"use_nextserver,omitempty"`

	// Use flag for: options
	UseOptions *bool `json:"use_options,omitempty"`

	// Use flag for: pxe_lease_time
	UsePxeLeaseTime *bool `json:"use_pxe_lease_time,omitempty"`

	// Use flag for: update_dns_on_lease_renewal
	UseUpdateDnsOnLeaseRenewal *bool `json:"use_update_dns_on_lease_renewal,omitempty"`
}

func (SharedNetwork) ObjectType() string {
	return "sharednetwork"
}

func (obj SharedNetwork) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"comment", "name", "network_view", "networks"}
	}
	return obj.returnFields
}

// SharedRecordA represents Infoblox object sharedrecord:a.
// A shared A (address) record is similar to a regular A record. It maps a
// domain name to an IPv4 address. The difference is that a shared A record
// should be added to a shared record group. If the shared record group is
// associated with other zones, the shared A record is shared among these
// zones.
type SharedRecordA struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// Comment for this shared record; maximum 256 characters.
	Comment *string `json:"comment,omitempty"`

	// Determines if this shared record is disabled or not. False means that the
	// record is enabled.
	Disable *bool `json:"disable,omitempty"`

	// The name for this shared record in punycode format.
	DnsName string `json:"dns_name,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// The IPv4 Address of the shared record.
	Ipv4Addr *string `json:"ipv4addr,omitempty"`

	// Name for this shared record. This value can be in unicode format.
	Name *string `json:"name,omitempty"`

	// The name of the shared record group in which the record resides.
	SharedRecordGroup *string `json:"shared_record_group,omitempty"`

	// The Time To Live (TTL) value for this shared record. A 32-bit unsigned
	// integer that represents the duration, in seconds, for which the shared
	// record is valid (cached). Zero indicates that the shared record should not
	// be cached.
	Ttl *uint32 `json:"ttl,omitempty"`

	// Use flag for: ttl
	UseTtl *bool `json:"use_ttl,omitempty"`
}

func (SharedRecordA) ObjectType() string {
	return "sharedrecord:a"
}

func (obj SharedRecordA) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"ipv4addr", "name", "shared_record_group"}
	}
	return obj.returnFields
}

// SharedRecordAAAA represents Infoblox object sharedrecord:aaaa.
// A shared AAAA (address) record is similar to a regular AAAA record. It maps
// a domain name to an IPv6 address. The difference is that a shared AAAA
// record should be added to a shared record group. If the shared record group
// is associated with other zones, the shared AAAA record is shared among these
// zones.
type SharedRecordAAAA struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// Comment for this shared record; maximum 256 characters.
	Comment *string `json:"comment,omitempty"`

	// Determines if this shared record is disabled or not. False means that the
	// record is enabled.
	Disable *bool `json:"disable,omitempty"`

	// The name for this shared record in punycode format.
	DnsName string `json:"dns_name,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// The IPv6 Address of the shared record.
	Ipv6Addr *string `json:"ipv6addr,omitempty"`

	// Name for this shared record. This value can be in unicode format.
	Name *string `json:"name,omitempty"`

	// The name of the shared record group in which the record resides.
	SharedRecordGroup *string `json:"shared_record_group,omitempty"`

	// The Time To Live (TTL) value for this shared record. A 32-bit unsigned
	// integer that represents the duration, in seconds, for which the shared
	// record is valid (cached). Zero indicates that the shared record should not
	// be cached.
	Ttl *uint32 `json:"ttl,omitempty"`

	// Use flag for: ttl
	UseTtl *bool `json:"use_ttl,omitempty"`
}

func (SharedRecordAAAA) ObjectType() string {
	return "sharedrecord:aaaa"
}

func (obj SharedRecordAAAA) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"ipv6addr", "name", "shared_record_group"}
	}
	return obj.returnFields
}

// SharedrecordCname represents Infoblox object sharedrecord:cname.
// A shared CNAME (canonical name) record is similar to a regular CNAME record.
// The difference is that a shared CNAME record should be added to a shared
// record group. If the shared record group is associated with other zones, the
// shared CNAME record is shared among these zones.
type SharedrecordCname struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// Canonical name in FQDN format. This value can be in unicode format.
	Canonical *string `json:"canonical,omitempty"`

	// Comment for this shared record; maximum 256 characters.
	Comment *string `json:"comment,omitempty"`

	// Determines if this shared record is disabled or not. False means that the
	// record is enabled.
	Disable *bool `json:"disable,omitempty"`

	// Canonical name in punycode format.
	DnsCanonical string `json:"dns_canonical,omitempty"`

	// The name for this shared record in punycode format.
	DnsName string `json:"dns_name,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// Name for this shared record. This value can be in unicode format.
	Name *string `json:"name,omitempty"`

	// The name of the shared record group in which the record resides.
	SharedRecordGroup *string `json:"shared_record_group,omitempty"`

	// The Time To Live (TTL) value for this shared record. A 32-bit unsigned
	// integer that represents the duration, in seconds, for which the shared
	// record is valid (cached). Zero indicates that the shared record should not
	// be cached.
	Ttl *uint32 `json:"ttl,omitempty"`

	// Use flag for: ttl
	UseTtl *bool `json:"use_ttl,omitempty"`
}

func (SharedrecordCname) ObjectType() string {
	return "sharedrecord:cname"
}

func (obj SharedrecordCname) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"canonical", "name", "shared_record_group"}
	}
	return obj.returnFields
}

// SharedRecordMX represents Infoblox object sharedrecord:mx.
// A shared MX (mail exchanger) record is similar to a regular MX record. It
// maps a domain name to a mail exchanger. The difference is that a shared MX
// record should be added to a shared record group. If the shared record group
// is associated with other zones, the shared MX record is shared among these
// zones.
type SharedRecordMX struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// Comment for this shared record; maximum 256 characters.
	Comment *string `json:"comment,omitempty"`

	// Determines if this shared record is disabled or not. False means that the
	// record is enabled.
	Disable *bool `json:"disable,omitempty"`

	// The name of the mail exchanger in punycode format.
	DnsMailExchanger string `json:"dns_mail_exchanger,omitempty"`

	// The name for this shared record in punycode format.
	DnsName string `json:"dns_name,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// The name of the mail exchanger in FQDN format. This value can be in unicode
	// format.
	MailExchanger *string `json:"mail_exchanger,omitempty"`

	// Name for this shared record. This value can be in unicode format.
	Name *string `json:"name,omitempty"`

	// The preference value. Valid values are from 0 to 65535 (inclusive), in
	// 32-bit unsigned integer format.
	Preference *uint32 `json:"preference,omitempty"`

	// The name of the shared record group in which the record resides.
	SharedRecordGroup *string `json:"shared_record_group,omitempty"`

	// The Time To Live (TTL) value for this shared record. A 32-bit unsigned
	// integer that represents the duration, in seconds, for which the shared
	// record is valid (cached). Zero indicates that the shared record should not
	// be cached.
	Ttl *uint32 `json:"ttl,omitempty"`

	// Use flag for: ttl
	UseTtl *bool `json:"use_ttl,omitempty"`
}

func (SharedRecordMX) ObjectType() string {
	return "sharedrecord:mx"
}

func (obj SharedRecordMX) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"mail_exchanger", "name", "preference", "shared_record_group"}
	}
	return obj.returnFields
}

// SharedrecordSrv represents Infoblox object sharedrecord:srv.
// A shared SRV (service) record is similar to a regular SRV record. It
// provides information about available services. The difference is that a
// shared SRV record should be added to a shared record group. If the shared
// record group is associated with other zones, the shared SRV record is shared
// among these zones.
type SharedrecordSrv struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// Comment for this shared record; maximum 256 characters.
	Comment *string `json:"comment,omitempty"`

	// Determines if this shared record is disabled or not. False means that the
	// record is enabled.
	Disable *bool `json:"disable,omitempty"`

	// The name for this shared record in punycode format.
	DnsName string `json:"dns_name,omitempty"`

	// The name for a shared SRV record in punycode format.
	DnsTarget string `json:"dns_target,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// Name for this shared record. This value can be in unicode format.
	Name *string `json:"name,omitempty"`

	// The port of the shared SRV record. Valid values are from 0 to 65535
	// (inclusive), in 32-bit unsigned integer format.
	Port *uint32 `json:"port,omitempty"`

	// The priority of the shared SRV record. Valid values are from 0 to 65535
	// (inclusive), in 32-bit unsigned integer format.
	Priority *uint32 `json:"priority,omitempty"`

	// The name of the shared record group in which the record resides.
	SharedRecordGroup *string `json:"shared_record_group,omitempty"`

	// The target of the shared SRV record in FQDN format. This value can be in
	// unicode format.
	Target *string `json:"target,omitempty"`

	// The Time To Live (TTL) value for this shared record. A 32-bit unsigned
	// integer that represents the duration, in seconds, for which the shared
	// record is valid (cached). Zero indicates that the shared record should not
	// be cached.
	Ttl *uint32 `json:"ttl,omitempty"`

	// Use flag for: ttl
	UseTtl *bool `json:"use_ttl,omitempty"`

	// The weight of the shared SRV record. Valid values are from 0 to 65535
	// (inclusive), in 32-bit unsigned integer format.
	Weight *uint32 `json:"weight,omitempty"`
}

func (SharedrecordSrv) ObjectType() string {
	return "sharedrecord:srv"
}

func (obj SharedrecordSrv) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"name", "port", "priority", "shared_record_group", "target", "weight"}
	}
	return obj.returnFields
}

// SharedRecordTXT represents Infoblox object sharedrecord:txt.
// A shared TXT (text) record is similar to a regular TXT record. It contains
// supplemental information for a host. SPF (Sender Policy Framework) records
// are specialized TXT records that identify the servers that send mail from a
// domain. The difference is that a shared TXT record should be added to a
// shared record group. If the shared record group is associated with other
// zones, the shared TXT record is shared among these zones.
type SharedRecordTXT struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// Comment for this shared record; maximum 256 characters.
	Comment *string `json:"comment,omitempty"`

	// Determines if this shared record is disabled or not. False means that the
	// record is enabled.
	Disable *bool `json:"disable,omitempty"`

	// The name for this shared record in punycode format.
	DnsName string `json:"dns_name,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// Name for this shared record. This value can be in unicode format.
	Name *string `json:"name,omitempty"`

	// The name of the shared record group in which the record resides.
	SharedRecordGroup *string `json:"shared_record_group,omitempty"`

	// Text associated with the shared record. It can contain up to 255 bytes per
	// substring and up a total of 512 bytes. To enter leading, trailing or
	// embedded spaces in the text, add quotes (" ") around the text to preserve
	// the spaces.
	Text *string `json:"text,omitempty"`

	// The Time To Live (TTL) value for this shared record. A 32-bit unsigned
	// integer that represents the duration, in seconds, for which the shared
	// record is valid (cached). Zero indicates that the shared record should not
	// be cached.
	Ttl *uint32 `json:"ttl,omitempty"`

	// Use flag for: ttl
	UseTtl *bool `json:"use_ttl,omitempty"`
}

func (SharedRecordTXT) ObjectType() string {
	return "sharedrecord:txt"
}

func (obj SharedRecordTXT) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"name", "shared_record_group", "text"}
	}
	return obj.returnFields
}

// Sharedrecordgroup represents Infoblox object sharedrecordgroup.
// A shared record group (SRG) is created to contain DNS shared records and
// share them between different zones. For example, if a group of DNS records
// needs to be in three different zones, you can include the records in a
// shared record group and assign the group to the three zones. For more
// information about shared record groups and shared records, please refer to
// Infoblox Administrator Guide.
type Sharedrecordgroup struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The descriptive comment of this shared record group.
	Comment *string `json:"comment,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// The name of this shared record group.
	Name *string `json:"name,omitempty"`

	// The record name policy of this shared record group.
	RecordNamePolicy *string `json:"record_name_policy,omitempty"`

	// Use flag for: record_name_policy
	UseRecordNamePolicy *bool `json:"use_record_name_policy,omitempty"`

	// The list of zones associated with this shared record group.
	ZoneAssociations []string `json:"zone_associations,omitempty"`
}

func (Sharedrecordgroup) ObjectType() string {
	return "sharedrecordgroup"
}

func (obj Sharedrecordgroup) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"comment", "name"}
	}
	return obj.returnFields
}

// SmartfolderChildren represents Infoblox object smartfolder:children.
// The Smart Folder children object is used to read the objects that are
// associated with either a Smart Folder (global or personal) or a set of
// queries that users can make without saving a Smart Folder object on the
// appliance.
type SmartfolderChildren struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The object retuned by the Smart Folder query.
	Resource string `json:"resource,omitempty"`

	// The value returned by the Smart Folder query.
	Value *SmartfolderQueryitemvalue `json:"value,omitempty"`

	// The type of the returned value.
	ValueType string `json:"value_type,omitempty"`
}

func (SmartfolderChildren) ObjectType() string {
	return "smartfolder:children"
}

func (obj SmartfolderChildren) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"resource", "value", "value_type"}
	}
	return obj.returnFields
}

// SmartfolderGlobal represents Infoblox object smartfolder:global.
// Smart Folders are used to organize your core network services data.
// Depending on your administrative roles and business needs, you can filter
// your data object types, names, extensible attributes and discovered data and
// then place the filtered results in a Smart Folder.
type SmartfolderGlobal struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The global Smart Folder descriptive comment.
	Comment *string `json:"comment,omitempty"`

	// Global Smart Folder grouping rules.
	GroupBys []*SmartfolderGroupby `json:"group_bys,omitempty"`

	// The global Smart Folder name.
	Name *string `json:"name,omitempty"`

	// The global Smart Folder filter queries.
	QueryItems []*SmartfolderQueryitem `json:"query_items,omitempty"`
}

func (SmartfolderGlobal) ObjectType() string {
	return "smartfolder:global"
}

func (obj SmartfolderGlobal) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"comment", "name"}
	}
	return obj.returnFields
}

// SmartfolderPersonal represents Infoblox object smartfolder:personal.
// Smart Folders are used to organize your core network services data.
// Depending on your administrative roles and business needs, you can filter
// your data object types, names, extensible attributes and discovered data and
// then place the filtered results in a Smart Folder.
type SmartfolderPersonal struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The personal Smart Folder descriptive comment.
	Comment *string `json:"comment,omitempty"`

	// The personal Smart Folder groupping rules.
	GroupBys []*SmartfolderGroupby `json:"group_bys,omitempty"`

	// Determines whether the personal Smart Folder is a shortcut.
	IsShortcut bool `json:"is_shortcut,omitempty"`

	// The personal Smart Folder name.
	Name *string `json:"name,omitempty"`

	// The personal Smart Folder filter queries.
	QueryItems []*SmartfolderQueryitem `json:"query_items,omitempty"`
}

func (SmartfolderPersonal) ObjectType() string {
	return "smartfolder:personal"
}

func (obj SmartfolderPersonal) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"comment", "is_shortcut", "name"}
	}
	return obj.returnFields
}

// SNMPUser represents Infoblox object snmpuser.
// This object contains information related to SNMPv3 users.
type SNMPUser struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// Determines an authentication password for the user. This is a write-only
	// attribute.
	AuthenticationPassword *string `json:"authentication_password,omitempty"`

	// The authentication protocol to be used for this user.
	AuthenticationProtocol string `json:"authentication_protocol,omitempty"`

	// A descriptive comment for the SNMPv3 User.
	Comment *string `json:"comment,omitempty"`

	// Determines if SNMPv3 user is disabled or not.
	Disable *bool `json:"disable,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// The name of the user.
	Name *string `json:"name,omitempty"`

	// Determines a password for the privacy protocol.
	PrivacyPassword *string `json:"privacy_password,omitempty"`

	// The privacy protocol to be used for this user.
	PrivacyProtocol string `json:"privacy_protocol,omitempty"`
}

func (SNMPUser) ObjectType() string {
	return "snmpuser"
}

func (obj SNMPUser) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"comment", "name"}
	}
	return obj.returnFields
}

// Superhost represents Infoblox object superhost.
// The collection of correlated IPAM records which is related to single device.
type Superhost struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The comment for Super Host.
	Comment *string `json:"comment,omitempty"`

	// True if we have to delete all DNS/DHCP associated objects with Super Host,
	// false by default.
	DeleteAssociatedObjects *bool `json:"delete_associated_objects,omitempty"`

	// A list of DHCP objects refs which are associated with Super Host.
	DhcpAssociatedObjects []*Ipv4FixedAddress `json:"dhcp_associated_objects,omitempty"`

	// Disable all DNS/DHCP associated objects with Super Host if True, False by
	// default.
	Disabled *bool `json:"disabled,omitempty"`

	// A list of object refs of the DNS resource records which are associated with
	// Super Host.
	DnsAssociatedObjects []*RecordA `json:"dns_associated_objects,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// Name of the Superhost.
	Name *string `json:"name,omitempty"`
}

func (Superhost) ObjectType() string {
	return "superhost"
}

func (obj Superhost) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"comment", "name"}
	}
	return obj.returnFields
}

// Superhostchild represents Infoblox object superhostchild.
// The superhostchild object is a read-only synthetic object used to retrieve
// records assigned to superhost.
type Superhostchild struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The record object, if supported by the WAPI. Otherwise, the value is "None".
	AssociatedObject string `json:"associated_object,omitempty"`

	// The record comment.
	Comment string `json:"comment,omitempty"`

	// Time at which DNS RR was created.
	CreationTimestamp *UnixTime `json:"creation_timestamp,omitempty"`

	// Specific data of DNS/DHCP records.
	Data string `json:"data,omitempty"`

	// True if the child DNS/DHCP object is disabled.
	Disabled bool `json:"disabled,omitempty"`

	// Name of the associated DNS/DHCP object.
	Name string `json:"name,omitempty"`

	// The name of the network view in which this network record resides.
	NetworkView string `json:"network_view,omitempty"`

	// Name of the Super Host object in which record resides.
	Parent string `json:"parent,omitempty"`

	// Name of a parent zone/network.
	RecordParent string `json:"record_parent,omitempty"`

	// The record type. When searching for an unspecified record type, the search
	// is performed for all records.
	Type string `json:"type,omitempty"`

	// Name of the DNS View in which the record resides.
	View string `json:"view,omitempty"`
}

func (Superhostchild) ObjectType() string {
	return "superhostchild"
}

func (obj Superhostchild) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"comment", "data", "name", "network_view", "parent", "record_parent", "type", "view"}
	}
	return obj.returnFields
}

// SyslogEndpoint represents Infoblox object syslog:endpoint.
// The name part of the syslog:endpoint object reference has the following
// components:
type SyslogEndpoint struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// The log level for a notification REST endpoint.
	LogLevel string `json:"log_level,omitempty"`

	// The name of a Syslog endpoint.
	Name *string `json:"name,omitempty"`

	// The outbound member that will generate events.
	OutboundMemberType string `json:"outbound_member_type,omitempty"`

	// The list of members for outbound events.
	OutboundMembers []string `json:"outbound_members,omitempty"`

	// List of syslog servers
	SyslogServers []*SyslogEndpointServers `json:"syslog_servers,omitempty"`

	// The Syslog template instance. You cannot change the parameters of the Syslog
	// endpoint template instance.
	TemplateInstance *NotificationRestTemplateinstance `json:"template_instance,omitempty"`

	// The timeout of session management (in seconds).
	Timeout *uint32 `json:"timeout,omitempty"`

	// The vendor identifier.
	VendorIdentifier *string `json:"vendor_identifier,omitempty"`

	// The user name for WAPI integration.
	WapiUserName *string `json:"wapi_user_name,omitempty"`

	// The user password for WAPI integration.
	WapiUserPassword *string `json:"wapi_user_password,omitempty"`
}

func (SyslogEndpoint) ObjectType() string {
	return "syslog:endpoint"
}

func (obj SyslogEndpoint) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"name", "outbound_member_type"}
	}
	return obj.returnFields
}

// TacacsplusAuthservice represents Infoblox object tacacsplus:authservice.
// This object is used to supply configuration for TACACS+ authentication
// service.
type TacacsplusAuthservice struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The number of the accounting retries before giving up and moving on to the
	// next server.
	AcctRetries *uint32 `json:"acct_retries,omitempty"`

	// The accounting retry period in milliseconds.
	AcctTimeout *uint32 `json:"acct_timeout,omitempty"`

	// The number of the authentication/authorization retries before giving up and
	// moving on to the next server.
	AuthRetries *uint32 `json:"auth_retries,omitempty"`

	// The authentication/authorization timeout period in milliseconds.
	AuthTimeout *uint32 `json:"auth_timeout,omitempty"`

	// The TACACS+ authentication service descriptive comment.
	Comment *string `json:"comment,omitempty"`

	// Determines whether the TACACS+ authentication service object is disabled.
	Disable *bool `json:"disable,omitempty"`

	// The TACACS+ authentication service name.
	Name *string `json:"name,omitempty"`

	// The list of the TACACS+ servers used for authentication.
	Servers []*TacacsplusServer `json:"servers,omitempty"`
}

func (TacacsplusAuthservice) ObjectType() string {
	return "tacacsplus:authservice"
}

func (obj TacacsplusAuthservice) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"comment", "disable", "name"}
	}
	return obj.returnFields
}

// Taxii represents Infoblox object taxii.
// The Taxii Member object provides information about Taxii service
// configuration such as the start/stop flag and RPZ (Response Policy Zone)
// configuration.
type Taxii struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// Indicates whether the Taxii service is running on the given member or not.
	EnableService *bool `json:"enable_service,omitempty"`

	// The IPv4 Address of the Grid member.
	Ipv4Addr string `json:"ipv4addr,omitempty"`

	// The IPv6 Address of the Grid member.
	Ipv6Addr string `json:"ipv6addr,omitempty"`

	// The name of the Taxii Member.
	Name string `json:"name,omitempty"`

	// Taxii service RPZ configuration list.
	TaxiiRpzConfig []*TaxiiRpzconfig `json:"taxii_rpz_config,omitempty"`
}

func (Taxii) ObjectType() string {
	return "taxii"
}

func (obj Taxii) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"ipv4addr", "ipv6addr", "name"}
	}
	return obj.returnFields
}

// Tftpfiledir represents Infoblox object tftpfiledir.
// The TFTP file/directory object provides facilities for creating a directory
// structure for file distribution, modifying the directory name and
// permission, creating virtual TFTP root directories, and browsing the
// contents of the directories.
type Tftpfiledir struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The path to the directory that contains file or subdirectory.
	Directory string `json:"directory,omitempty"`

	// Determines whether the TFTP entity is synchronized to Grid Master.
	IsSyncedToGm bool `json:"is_synced_to_gm,omitempty"`

	// The time when the file or directory was last modified.
	LastModify *UnixTime `json:"last_modify,omitempty"`

	// The TFTP directory or file name.
	Name *string `json:"name,omitempty"`

	// The type of TFTP file system entity (directory or file).
	Type string `json:"type,omitempty"`

	// The replication members with TFTP client addresses where this virtual folder
	// is applicable.
	VtftpDirMembers []*Vtftpdirmember `json:"vtftp_dir_members,omitempty"`
}

func (Tftpfiledir) ObjectType() string {
	return "tftpfiledir"
}

func (obj Tftpfiledir) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"directory", "name", "type"}
	}
	return obj.returnFields
}

// ThreatanalyticsAnalyticsWhitelist represents Infoblox object threatanalytics:analytics_whitelist.
// The threat analytics whitelist object contains trusted domains on which NIOS
// allows DNS traffic.
type ThreatanalyticsAnalyticsWhitelist struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// Whitelist version string.
	Version string `json:"version,omitempty"`
}

func (ThreatanalyticsAnalyticsWhitelist) ObjectType() string {
	return "threatanalytics:analytics_whitelist"
}

func (obj ThreatanalyticsAnalyticsWhitelist) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"version"}
	}
	return obj.returnFields
}

// ThreatanalyticsModuleset represents Infoblox object threatanalytics:moduleset.
// The threat analytics module set represents the installation or update of
// module information.
type ThreatanalyticsModuleset struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The version number of the threat analytics module set.
	Version string `json:"version,omitempty"`
}

func (ThreatanalyticsModuleset) ObjectType() string {
	return "threatanalytics:moduleset"
}

func (obj ThreatanalyticsModuleset) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"version"}
	}
	return obj.returnFields
}

// ThreatanalyticsWhitelist represents Infoblox object threatanalytics:whitelist.
// The threat analytics whitelist object contains trusted domains on which NIOS
// allows DNS traffic.
type ThreatanalyticsWhitelist struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The descriptive comment for the threat analytics whitelist.
	Comment *string `json:"comment,omitempty"`

	// Determines whether the threat analytics whitelist is disabled.
	Disable *bool `json:"disable,omitempty"`

	// The FQDN of the threat analytics whitelist.
	Fqdn *string `json:"fqdn,omitempty"`

	// The type of the threat analytics whitelist.
	Type string `json:"type,omitempty"`
}

func (ThreatanalyticsWhitelist) ObjectType() string {
	return "threatanalytics:whitelist"
}

func (obj ThreatanalyticsWhitelist) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"comment", "disable", "fqdn"}
	}
	return obj.returnFields
}

// ThreatinsightCloudclient represents Infoblox object threatinsight:cloudclient.
// You can use the Threat Insight Cloud Client object to configure the
// detection and authentication of domains in the Cloud, and then apply them to
// on-premises DNS firewall RPZ zones within a configurable time frame.
type ThreatinsightCloudclient struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The RPZs to which you apply newly detected domains through the Infoblox
	// Threat Insight Cloud Client.
	BlacklistRpzList []*ZoneRp `json:"blacklist_rpz_list,omitempty"`

	// Determines whether the Threat Insight in Cloud Client is enabled.
	Enable *bool `json:"enable,omitempty"`

	// Force a refresh if at least one RPZ is configured.
	ForceRefresh *bool `json:"force_refresh,omitempty"`

	// The time interval (in seconds) for requesting newly detected domains by the
	// Infoblox Threat Insight Cloud Client and applying them to the list of
	// configured RPZs.
	Interval *uint32 `json:"interval,omitempty"`
}

func (ThreatinsightCloudclient) ObjectType() string {
	return "threatinsight:cloudclient"
}

func (obj ThreatinsightCloudclient) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"enable", "interval"}
	}
	return obj.returnFields
}

// ThreatprotectionGridRule represents Infoblox object threatprotection:grid:rule.
// This object provides information about the threat protection custom rule
// settings.
type ThreatprotectionGridRule struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The list of allowed actions of the custom rule.
	AllowedActions []string `json:"allowed_actions,omitempty"`

	// The rule category the custom rule assigned to.
	Category string `json:"category,omitempty"`

	// The human readable comment for the custom rule.
	Comment *string `json:"comment,omitempty"`

	// The rule config of the template.
	Config *ThreatprotectionRuleconfig `json:"config,omitempty"`

	// The description of the custom rule.
	Description string `json:"description,omitempty"`

	// Determines if the custom rule is disabled.
	Disabled *bool `json:"disabled,omitempty"`

	// Determines if factory reset is enabled for the custom rule.
	IsFactoryResetEnabled bool `json:"is_factory_reset_enabled,omitempty"`

	// The name of the rule custom rule concatenated with its rule config
	// parameters.
	Name string `json:"name,omitempty"`

	// The version of the ruleset the custom rule assigned to.
	Ruleset string `json:"ruleset,omitempty"`

	// The Rule ID.
	Sid uint32 `json:"sid,omitempty"`

	// The threat protection rule template used to create this rule.
	Template *string `json:"template,omitempty"`

	// The type of the custom rule.
	Type string `json:"type,omitempty"`
}

func (ThreatprotectionGridRule) ObjectType() string {
	return "threatprotection:grid:rule"
}

func (obj ThreatprotectionGridRule) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"name", "ruleset", "sid"}
	}
	return obj.returnFields
}

// ThreatprotectionProfile represents Infoblox object threatprotection:profile.
// The Threat Protection profile object facilitates configuring groups of
// Threat Protection members that have similar traffic properties. A member can
// be either associated with a Threat Protection profile or inherit the ruleset
// from the Grid or override the ruleset individually at the member level.
type ThreatprotectionProfile struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The comment for the Threat Protection profile.
	Comment *string `json:"comment,omitempty"`

	// The current Threat Protection profile ruleset.
	CurrentRuleset *string `json:"current_ruleset,omitempty"`

	// Determines if multiple BIND responses via TCP connection are disabled.
	DisableMultipleDnsTcpRequest *bool `json:"disable_multiple_dns_tcp_request,omitempty"`

	// The number of events logged per second per rule.
	EventsPerSecondPerRule *uint32 `json:"events_per_second_per_rule,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// The list of members that are associated with the profile.
	Members []string `json:"members,omitempty"`

	// The name of the Threat Protection profile.
	Name *string `json:"name,omitempty"`

	// The source member. It can be used only during the create operation for
	// cloning a profile from an existing member.
	SourceMember string `json:"source_member,omitempty"`

	// The source profile. It can be used only during the create operation for
	// cloning a profile from an existing profile.
	SourceProfile string `json:"source_profile,omitempty"`

	// Use flag for: current_ruleset
	UseCurrentRuleset *bool `json:"use_current_ruleset,omitempty"`

	// Use flag for: disable_multiple_dns_tcp_request
	UseDisableMultipleDnsTcpRequest *bool `json:"use_disable_multiple_dns_tcp_request,omitempty"`

	// Use flag for: events_per_second_per_rule
	UseEventsPerSecondPerRule *bool `json:"use_events_per_second_per_rule,omitempty"`
}

func (ThreatprotectionProfile) ObjectType() string {
	return "threatprotection:profile"
}

func (obj ThreatprotectionProfile) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"comment", "name"}
	}
	return obj.returnFields
}

// ThreatprotectionProfileRule represents Infoblox object threatprotection:profile:rule.
// This object provides information about the Threat protection profile rule
// settings.
type ThreatprotectionProfileRule struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The threat protection rule configuration.
	Config *ThreatprotectionRuleconfig `json:"config,omitempty"`

	// Determines if the rule is enabled or not for the profile.
	Disable *bool `json:"disable,omitempty"`

	// The name of the Threat protection profile.
	Profile string `json:"profile,omitempty"`

	// The rule object name.
	Rule string `json:"rule,omitempty"`

	// The snort rule ID.
	Sid uint32 `json:"sid,omitempty"`

	// Use flag for: config
	UseConfig *bool `json:"use_config,omitempty"`

	// Use flag for: disable
	UseDisable *bool `json:"use_disable,omitempty"`
}

func (ThreatprotectionProfileRule) ObjectType() string {
	return "threatprotection:profile:rule"
}

func (obj ThreatprotectionProfileRule) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"profile", "rule"}
	}
	return obj.returnFields
}

// ThreatprotectionRule represents Infoblox object threatprotection:rule.
// This object provides information about the member Threat protection rule
// settings.
type ThreatprotectionRule struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The threat protection rule configuration.
	Config *ThreatprotectionRuleconfig `json:"config,omitempty"`

	// Determines if the rule is enabled or not for the member.
	Disable *bool `json:"disable,omitempty"`

	// The name of the Threat protection member.
	Member string `json:"member,omitempty"`

	// The rule object name.
	Rule string `json:"rule,omitempty"`

	// The Rule ID.
	Sid uint32 `json:"sid,omitempty"`

	// Use flag for: config
	UseConfig *bool `json:"use_config,omitempty"`

	// Use flag for: disable
	UseDisable *bool `json:"use_disable,omitempty"`
}

func (ThreatprotectionRule) ObjectType() string {
	return "threatprotection:rule"
}

func (obj ThreatprotectionRule) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"member", "rule"}
	}
	return obj.returnFields
}

// ThreatprotectionRulecategory represents Infoblox object threatprotection:rulecategory.
// This object provides information about the threat protection rule category
// settings.
type ThreatprotectionRulecategory struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// Determines if factory reset is enabled for this rule category.
	IsFactoryResetEnabled bool `json:"is_factory_reset_enabled,omitempty"`

	// The name of the rule category.
	Name string `json:"name,omitempty"`

	// The version of the ruleset the category assigned to.
	Ruleset string `json:"ruleset,omitempty"`
}

func (ThreatprotectionRulecategory) ObjectType() string {
	return "threatprotection:rulecategory"
}

func (obj ThreatprotectionRulecategory) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"name", "ruleset"}
	}
	return obj.returnFields
}

// ThreatprotectionRuleset represents Infoblox object threatprotection:ruleset.
// This object represent the Grid protection ruleset information.
type ThreatprotectionRuleset struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// Determines the way the ruleset was added.
	AddType string `json:"add_type,omitempty"`

	// The time when the ruleset was added.
	AddedTime *UnixTime `json:"added_time,omitempty"`

	// The human readable comment for the ruleset.
	Comment *string `json:"comment,omitempty"`

	// Determines if the ruleset will not be deleted during upgrade.
	DoNotDelete *bool `json:"do_not_delete,omitempty"`

	// Determines if factory reset is enabled for this ruleset.
	IsFactoryResetEnabled bool `json:"is_factory_reset_enabled,omitempty"`

	// The users of the ruleset.
	UsedBy []string `json:"used_by,omitempty"`

	// The ruleset version.
	Version string `json:"version,omitempty"`
}

func (ThreatprotectionRuleset) ObjectType() string {
	return "threatprotection:ruleset"
}

func (obj ThreatprotectionRuleset) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"add_type", "version"}
	}
	return obj.returnFields
}

// ThreatprotectionRuletemplate represents Infoblox object threatprotection:ruletemplate.
// This object provides information about the threat protection rule template
// settings.
type ThreatprotectionRuletemplate struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The list of allowed actions of rhe rule template.
	AllowedActions []string `json:"allowed_actions,omitempty"`

	// The rule category this template assigned to.
	Category string `json:"category,omitempty"`

	// The rule config of this template.
	DefaultConfig *ThreatprotectionRuleconfig `json:"default_config,omitempty"`

	// The description of the rule template.
	Description string `json:"description,omitempty"`

	// The name of the rule template.
	Name string `json:"name,omitempty"`

	// The version of the ruleset the template assigned to.
	Ruleset string `json:"ruleset,omitempty"`

	// The Rule ID.
	Sid uint32 `json:"sid,omitempty"`
}

func (ThreatprotectionRuletemplate) ObjectType() string {
	return "threatprotection:ruletemplate"
}

func (obj ThreatprotectionRuletemplate) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"name", "ruleset", "sid"}
	}
	return obj.returnFields
}

// ThreatprotectionStatistics represents Infoblox object threatprotection:statistics.
// This object provides information about the threat protection statistics.
type ThreatprotectionStatistics struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The Grid member name to get threat protection statistics. If nothing is
	// specified then event statistics is returned for the Grid.
	Member string `json:"member,omitempty"`

	// The list of event statistical information for the Grid or particular
	// members.
	StatInfos []*ThreatprotectionStatinfo `json:"stat_infos,omitempty"`
}

func (ThreatprotectionStatistics) ObjectType() string {
	return "threatprotection:statistics"
}

func (obj ThreatprotectionStatistics) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"member", "stat_infos"}
	}
	return obj.returnFields
}

// Upgradegroup represents Infoblox object upgradegroup.
// To minimize the impact of Grid upgrades on system operations, you can
// organize members into upgrade groups and schedule their software
// distributions. The upgrade group object provides configuration of upgrade
// and software distribution for members included in the upgrade group.
type Upgradegroup struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The upgrade group descriptive comment.
	Comment *string `json:"comment,omitempty"`

	// The distribution dependent group name.
	DistributionDependentGroup *string `json:"distribution_dependent_group,omitempty"`

	// The distribution scheduling policy.
	DistributionPolicy string `json:"distribution_policy,omitempty"`

	// The time of the next scheduled distribution.
	DistributionTime *UnixTime `json:"distribution_time,omitempty"`

	// The upgrade group members.
	Members []*UpgradegroupMember `json:"members,omitempty"`

	// The upgrade group name.
	Name *string `json:"name,omitempty"`

	// The time zone for scheduling operations.
	TimeZone string `json:"time_zone,omitempty"`

	// The upgrade dependent group name.
	UpgradeDependentGroup *string `json:"upgrade_dependent_group,omitempty"`

	// The upgrade scheduling policy.
	UpgradePolicy string `json:"upgrade_policy,omitempty"`

	// The time of the next scheduled upgrade.
	UpgradeTime *UnixTime `json:"upgrade_time,omitempty"`
}

func (Upgradegroup) ObjectType() string {
	return "upgradegroup"
}

func (obj Upgradegroup) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"comment", "name"}
	}
	return obj.returnFields
}

// Upgradeschedule represents Infoblox object upgradeschedule.
// You can schedule lite and full upgrades for certain NIOS versions. When you
// schedule an upgrade, you schedule the upgrade for the Grid Master and the
// upgrade groups, including the Default group. The Grid Master must always
// upgrade before the upgrade groups.
type Upgradeschedule struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// Determines whether the upgrade schedule is active.
	Active *bool `json:"active,omitempty"`

	// The start time of the upgrade.
	StartTime *UnixTime `json:"start_time,omitempty"`

	// The time zone for upgrade start time.
	TimeZone string `json:"time_zone,omitempty"`

	// The upgrade groups scheduling settings.
	UpgradeGroups []*UpgradegroupSchedule `json:"upgrade_groups,omitempty"`
}

func (Upgradeschedule) ObjectType() string {
	return "upgradeschedule"
}

func (obj Upgradeschedule) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"active", "start_time", "time_zone"}
	}
	return obj.returnFields
}

// UpgradeStatus represents Infoblox object upgradestatus.
// The Upgrade Status object is used to view the upgrade status of Infoblox
// Grid elements.
type UpgradeStatus struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// Determines if distribution is allowed for the Grid.
	AllowDistribution bool `json:"allow_distribution,omitempty"`

	// Determines if distribution scheduling is allowed.
	AllowDistributionScheduling bool `json:"allow_distribution_scheduling,omitempty"`

	// Determines if upgrade is allowed for the Grid.
	AllowUpgrade bool `json:"allow_upgrade,omitempty"`

	// Determines if the Grid is allowed to cancel an upgrade.
	AllowUpgradeCancel bool `json:"allow_upgrade_cancel,omitempty"`

	// Determines if the Grid is allowed to pause an upgrade.
	AllowUpgradePause bool `json:"allow_upgrade_pause,omitempty"`

	// Determines if the Grid is allowed to resume an upgrade.
	AllowUpgradeResume bool `json:"allow_upgrade_resume,omitempty"`

	// Determine if the Grid is allowed to schedule an upgrade.
	AllowUpgradeScheduling bool `json:"allow_upgrade_scheduling,omitempty"`

	// Determines if the Grid is allowed to test an upgrade.
	AllowUpgradeTest bool `json:"allow_upgrade_test,omitempty"`

	// Determine if the Grid is allowed to upload a build.
	AllowUpload bool `json:"allow_upload,omitempty"`

	// The alternative version.
	AlternateVersion string `json:"alternate_version,omitempty"`

	// Comment in readable format for an upgrade group a or virtual node.
	Comment string `json:"comment,omitempty"`

	// The current version.
	CurrentVersion string `json:"current_version,omitempty"`

	// Current version summary for the 'type' requested. This field can be
	// requested for the Grid, a certain group that has virtual nodes as
	// subelements, or for the overall group status.
	CurrentVersionSummary string `json:"current_version_summary,omitempty"`

	// Determines if the distribution schedule is active for the Grid.
	DistributionScheduleActive bool `json:"distribution_schedule_active,omitempty"`

	// The Grid master distribution schedule time.
	DistributionScheduleTime *UnixTime `json:"distribution_schedule_time,omitempty"`

	// The current state of distribution process.
	DistributionState string `json:"distribution_state,omitempty"`

	// The version that is distributed.
	DistributionVersion string `json:"distribution_version,omitempty"`

	// Distribution version summary for the 'type' requested. This field can be
	// requested for the Grid, a certain group that has virtual nodes as
	// subelements, or for the overall group status.
	DistributionVersionSummary string `json:"distribution_version_summary,omitempty"`

	// The status of a certain element with regards to the type requested.
	ElementStatus string `json:"element_status,omitempty"`

	// The state of the Grid.
	GridState string `json:"grid_state,omitempty"`

	// The state of a group.
	GroupState string `json:"group_state,omitempty"`

	// Status of the HA pair.
	HaStatus string `json:"ha_status,omitempty"`

	// The list of hotfixes.
	Hotfixes []*Hotfix `json:"hotfixes,omitempty"`

	// The IPv4 Address of virtual node or physical one.
	Ipv4Address string `json:"ipv4_address,omitempty"`

	// The IPv6 Address of virtual node or physical one.
	Ipv6Address string `json:"ipv6_address,omitempty"`

	// Member that participates in the upgrade process.
	Member string `json:"member,omitempty"`

	// The Grid message.
	Message string `json:"message,omitempty"`

	// Status of the physical node in the HA pair.
	PnodeRole string `json:"pnode_role,omitempty"`

	// Determines if the upgrade process is reverted.
	Reverted bool `json:"reverted,omitempty"`

	// The status time.
	StatusTime *UnixTime `json:"status_time,omitempty"`

	// Status of a certain group, virtual node or physical node.
	StatusValue string `json:"status_value,omitempty"`

	// Timestamp of when the status was updated.
	StatusValueUpdateTime *UnixTime `json:"status_value_update_time,omitempty"`

	// The list of upgrade process steps.
	Steps []*Upgradestep `json:"steps,omitempty"`

	// The number of steps done.
	StepsCompleted int `json:"steps_completed,omitempty"`

	// Total number steps in the upgrade process.
	StepsTotal int `json:"steps_total,omitempty"`

	// The type of subelements to be requested. If 'type' is 'GROUP', or 'VNODE',
	// then 'upgrade_group' or 'member' should have proper values for an operation
	// to return data specific for the values passed. Otherwise, overall data is
	// returned for every group or physical node.
	SubelementType string `json:"subelement_type,omitempty"`

	// Number of subelements that have accomplished an upgrade.
	SubelementsCompleted int `json:"subelements_completed,omitempty"`

	// The upgrade process information of subelements.
	SubelementsStatus []*UpgradeStatus `json:"subelements_status,omitempty"`

	// Number of subelements number in a certain group, virtual node, or the Grid.
	SubelementsTotal int `json:"subelements_total,omitempty"`

	// The type of upper level elements to be requested.
	Type string `json:"type,omitempty"`

	// Upgrade group that participates in the upgrade process.
	UpgradeGroup string `json:"upgrade_group,omitempty"`

	// Determines if the upgrade schedule is active.
	UpgradeScheduleActive bool `json:"upgrade_schedule_active,omitempty"`

	// The upgrade state of the Grid.
	UpgradeState string `json:"upgrade_state,omitempty"`

	// The upgrade test status of the Grid.
	UpgradeTestStatus string `json:"upgrade_test_status,omitempty"`

	// The version that is uploaded.
	UploadVersion string `json:"upload_version,omitempty"`

	// Upload version summary for the 'type' requested. This field can be requested
	// for the Grid, a certain group that has virtual nodes as subelements, or
	// overall group status.
	UploadVersionSummary string `json:"upload_version_summary,omitempty"`
}

func (UpgradeStatus) ObjectType() string {
	return "upgradestatus"
}

func (obj UpgradeStatus) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"alternate_version", "comment", "current_version", "distribution_version", "element_status", "grid_state", "group_state", "ha_status", "hotfixes", "ipv4_address", "ipv6_address", "member", "message", "pnode_role", "reverted", "status_value", "status_value_update_time", "steps", "steps_completed", "steps_total", "type", "upgrade_group", "upgrade_state", "upgrade_test_status", "upload_version"}
	}
	return obj.returnFields
}

func NewUpgradeStatus(upgradeStatus UpgradeStatus) *UpgradeStatus {
	result := upgradeStatus
	returnFields := []string{"subelements_status", "type"}
	result.returnFields = returnFields
	return &result
}

// UserProfile represents Infoblox object userprofile.
// The user profile of the admin who has logged in.
type UserProfile struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// Determines the active dashboard type.
	ActiveDashboardType string `json:"active_dashboard_type,omitempty"`

	// The Admin Group object to which the admin belongs. An admin user can belong
	// to only one admin group at a time.
	AdminGroup string `json:"admin_group,omitempty"`

	// The number of days left before the admin's password expires.
	DaysToExpire int `json:"days_to_expire,omitempty"`

	// The email address of the admin.
	Email *string `json:"email,omitempty"`

	// Determines if extensible attribute values will be returned by global search
	// or not.
	GlobalSearchOnEa *bool `json:"global_search_on_ea,omitempty"`

	// Determines if global search will search for network insight devices and
	// interfaces or not.
	GlobalSearchOnNiData *bool `json:"global_search_on_ni_data,omitempty"`

	// List of Admin Group objects that the current user is mapped to.
	GridAdminGroups []string `json:"grid_admin_groups,omitempty"`

	// The timestamp when the admin last logged in.
	LastLogin *UnixTime `json:"last_login,omitempty"`

	// Determines how many nodes are displayed at generation levels.
	LbTreeNodesAtGenLevel *uint32 `json:"lb_tree_nodes_at_gen_level,omitempty"`

	// Determines how many nodes are displayed at the last level.
	LbTreeNodesAtLastLevel *uint32 `json:"lb_tree_nodes_at_last_level,omitempty"`

	// The maximum count of widgets that can be added to one dashboard.
	MaxCountWidgets *uint32 `json:"max_count_widgets,omitempty"`

	// The admin name.
	Name string `json:"name,omitempty"`

	// The current password that will be replaced by a new password. To change a
	// password in the database, you must provide both the current and new password
	// values. This is a write-only attribute.
	OldPassword *string `json:"old_password,omitempty"`

	// The new password of the admin. To change a password in the database, you
	// must provide both the current and new password values. This is a write-only
	// attribute.
	Password *string `json:"password,omitempty"`

	// The number of lines of data a table or a single list view can contain.
	TableSize *uint32 `json:"table_size,omitempty"`

	// The time zone of the admin user.
	TimeZone string `json:"time_zone,omitempty"`

	// Use flag for: time_zone
	UseTimeZone *bool `json:"use_time_zone,omitempty"`

	// The admin type.
	UserType string `json:"user_type,omitempty"`
}

func (UserProfile) ObjectType() string {
	return "userprofile"
}

func (obj UserProfile) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"name"}
	}
	return obj.returnFields
}

func NewUserProfile(userprofile UserProfile) *UserProfile {
	res := userprofile
	res.returnFields = []string{"name"}
	return &res
}

// Vdiscoverytask represents Infoblox object vdiscoverytask.
// This object represents vDiscovery Task.
type Vdiscoverytask struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// Allow unsecured connection over HTTPS and bypass validation of the remote
	// SSL certificate.
	AllowUnsecuredConnection *bool `json:"allow_unsecured_connection,omitempty"`

	// Whether to insert or update cloud EAs with discovery data.
	AutoConsolidateCloudEa *bool `json:"auto_consolidate_cloud_ea,omitempty"`

	// Whether to replace managed tenant with discovery tenant data.
	AutoConsolidateManagedTenant *bool `json:"auto_consolidate_managed_tenant,omitempty"`

	// Whether to replace managed virtual machine with discovery vm data.
	AutoConsolidateManagedVm *bool `json:"auto_consolidate_managed_vm,omitempty"`

	// Template string used to generate host name.
	AutoCreateDnsHostnameTemplate *string `json:"auto_create_dns_hostname_template,omitempty"`

	// Control whether to create or update DNS record using discovered data.
	AutoCreateDnsRecord *bool `json:"auto_create_dns_record,omitempty"`

	// Indicates the type of record to create if the auto create DNS record is
	// enabled.
	AutoCreateDnsRecordType string `json:"auto_create_dns_record_type,omitempty"`

	// Comment on the task.
	Comment *string `json:"comment,omitempty"`

	// Credentials type used for connecting to the cloud management platform.
	CredentialsType string `json:"credentials_type,omitempty"`

	// The DNS view name for private IPs.
	DnsViewPrivateIp *string `json:"dns_view_private_ip,omitempty"`

	// The DNS view name for public IPs.
	DnsViewPublicIp *string `json:"dns_view_public_ip,omitempty"`

	// The name of the domain to use with keystone v3.
	DomainName *string `json:"domain_name,omitempty"`

	// Type of discovery driver.
	DriverType string `json:"driver_type,omitempty"`

	// Whether to enabled the cloud discovery or not.
	Enabled *bool `json:"enabled,omitempty"`

	// FQDN or IP of the cloud management platform.
	FqdnOrIp *string `json:"fqdn_or_ip,omitempty"`

	// Identity service version.
	IdentityVersion string `json:"identity_version,omitempty"`

	// Timestamp of last run.
	LastRun *UnixTime `json:"last_run,omitempty"`

	// Member on which cloud discovery will be run.
	Member *string `json:"member,omitempty"`

	// Whether to replace the old data with new or not.
	MergeData *bool `json:"merge_data,omitempty"`

	// Name of this cloud discovery task. Uniquely identify a task.
	Name *string `json:"name,omitempty"`

	// Password used for connecting to the cloud management platform.
	Password *string `json:"password,omitempty"`

	// Connection port used for connecting to the cloud management platform.
	Port *uint32 `json:"port,omitempty"`

	// Network view for private IPs.
	PrivateNetworkView *string `json:"private_network_view,omitempty"`

	// Mapping policy for the network view for private IPs in discovery data.
	PrivateNetworkViewMappingPolicy string `json:"private_network_view_mapping_policy,omitempty"`

	// Connection protocol used for connecting to the cloud management platform.
	Protocol string `json:"protocol,omitempty"`

	// Network view for public IPs.
	PublicNetworkView *string `json:"public_network_view,omitempty"`

	// Mapping policy for the network view for public IPs in discovery data.
	PublicNetworkViewMappingPolicy string `json:"public_network_view_mapping_policy,omitempty"`

	// Schedule setting for cloud discovery task.
	ScheduledRun *SettingSchedule `json:"scheduled_run,omitempty"`

	// The service_account_file for GCP.
	ServiceAccountFile *string `json:"service_account_file,omitempty"`

	// Current state of this task.
	State string `json:"state,omitempty"`

	// State message of the complete discovery process.
	StateMsg string `json:"state_msg,omitempty"`

	// If set to true, the appliance uses a specific DNS view for private IPs.
	UpdateDnsViewPrivateIp *bool `json:"update_dns_view_private_ip,omitempty"`

	// If set to true, the appliance uses a specific DNS view for public IPs.
	UpdateDnsViewPublicIp *bool `json:"update_dns_view_public_ip,omitempty"`

	// Whether to update metadata as a result of this network discovery.
	UpdateMetadata *bool `json:"update_metadata,omitempty"`

	// If set true, all keystone connection will use "/identity" endpoint and port
	// value will be ignored.
	UseIdentity *bool `json:"use_identity,omitempty"`

	// Username used for connecting to the cloud management platform.
	Username *string `json:"username,omitempty"`
}

func (Vdiscoverytask) ObjectType() string {
	return "vdiscoverytask"
}

func (obj Vdiscoverytask) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"name", "state"}
	}
	return obj.returnFields
}

// View represents Infoblox object view.
// DNS views provide the ability to serve one version of DNS data to one set of
// clients and another version to another set of clients. With DNS views, the
// appliance can provide a different answer to the same query, depending on the
// source of the query.
type View struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The action to perform when a domain name matches the pattern defined in a
	// rule that is specified by the blacklist_ruleset method. Valid values are
	// "REDIRECT" or "REFUSE". The default value is "REFUSE".
	BlacklistAction string `json:"blacklist_action,omitempty"`

	// The flag that indicates whether blacklist redirection queries are logged.
	// Specify "true" to enable logging, or "false" to disable it. The default
	// value is "false".
	BlacklistLogQuery *bool `json:"blacklist_log_query,omitempty"`

	// The array of IP addresses the appliance includes in the response it sends in
	// place of a blacklisted IP address.
	BlacklistRedirectAddresses []string `json:"blacklist_redirect_addresses,omitempty"`

	// The Time To Live (TTL) value of the synthetic DNS responses resulted from
	// blacklist redirection. The TTL value is a 32-bit unsigned integer that
	// represents the TTL in seconds.
	BlacklistRedirectTtl *uint32 `json:"blacklist_redirect_ttl,omitempty"`

	// The name of the Ruleset object assigned at the Grid level for blacklist
	// redirection.
	BlacklistRulesets []string `json:"blacklist_rulesets,omitempty"`

	// Structure containing all cloud API related information for this object.
	CloudInfo *GridCloudapiInfo `json:"cloud_info,omitempty"`

	// Comment for the DNS view; maximum 64 characters.
	Comment *string `json:"comment,omitempty"`

	// The list of customized root name servers. You can either select and use
	// Internet root name servers or specify custom root name servers by providing
	// a host name and IP address to which the Infoblox appliance can send queries.
	// Include the specified parameter to set the attribute value. Omit the
	// parameter to retrieve the attribute value.
	CustomRootNameServers []NameServer `json:"custom_root_name_servers,omitempty"`

	// Defines whether creation timestamp of RR should be updated ' when DDNS
	// update happens even if there is no change to ' the RR.
	DdnsForceCreationTimestampUpdate *bool `json:"ddns_force_creation_timestamp_update,omitempty"`

	// The DDNS Principal cluster group name.
	DdnsPrincipalGroup *string `json:"ddns_principal_group,omitempty"`

	// The flag that indicates whether the DDNS principal track is enabled or
	// disabled.
	DdnsPrincipalTracking *bool `json:"ddns_principal_tracking,omitempty"`

	// The flag that indicates whether an option to restrict DDNS update request
	// based on FQDN patterns is enabled or disabled.
	DdnsRestrictPatterns *bool `json:"ddns_restrict_patterns,omitempty"`

	// The unordered list of restriction patterns for an option of to restrict DDNS
	// updates based on FQDN patterns.
	DdnsRestrictPatternsList []string `json:"ddns_restrict_patterns_list,omitempty"`

	// The flag that indicates whether an option to restrict DDNS update request to
	// protected resource records is enabled or disabled.
	DdnsRestrictProtected *bool `json:"ddns_restrict_protected,omitempty"`

	// The flag that indicates whether DDNS update request for principal other than
	// target resource record's principal is restricted.
	DdnsRestrictSecure *bool `json:"ddns_restrict_secure,omitempty"`

	// The flag that indicates whether an option to restrict DDNS update request to
	// resource records which are marked as 'STATIC' is enabled or disabled.
	DdnsRestrictStatic *bool `json:"ddns_restrict_static,omitempty"`

	// Determines if the DNS view is disabled or not. When this is set to False,
	// the DNS view is enabled.
	Disable *bool `json:"disable,omitempty"`

	// Determines if the DNS64 s enabled or not.
	Dns64Enabled *bool `json:"dns64_enabled,omitempty"`

	// The list of DNS64 synthesis groups associated with this DNS view.
	Dns64Groups []string `json:"dns64_groups,omitempty"`

	// Determines if the DNS security extension is enabled or not.
	DnssecEnabled *bool `json:"dnssec_enabled,omitempty"`

	// Determines if the DNS security extension accepts expired signatures or not.
	DnssecExpiredSignaturesEnabled *bool `json:"dnssec_expired_signatures_enabled,omitempty"`

	// A list of zones for which the server does not perform DNSSEC validation.
	DnssecNegativeTrustAnchors []string `json:"dnssec_negative_trust_anchors,omitempty"`

	// The list of trusted keys for the DNS security extension.
	DnssecTrustedKeys []*Dnssectrustedkey `json:"dnssec_trusted_keys,omitempty"`

	// Determines if the DNS security validation is enabled or not.
	DnssecValidationEnabled *bool `json:"dnssec_validation_enabled,omitempty"`

	// Advertises the EDNS0 buffer size to the upstream server. The value should be
	// between 512 and 4096 bytes. The recommended value is between 512 and 1220
	// bytes.
	EdnsUdpSize *uint32 `json:"edns_udp_size,omitempty"`

	// Determines if the blacklist in a DNS view is enabled or not.
	EnableBlacklist *bool `json:"enable_blacklist,omitempty"`

	// Determines if the fixed RRset order FQDN is enabled or not.
	EnableFixedRrsetOrderFqdns *bool `json:"enable_fixed_rrset_order_fqdns,omitempty"`

	// Determines if the 'match-recursive-only' option in a DNS view is enabled or
	// not.
	EnableMatchRecursiveOnly *bool `json:"enable_match_recursive_only,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// The type of AAAA filtering for this DNS view object.
	FilterAaaa string `json:"filter_aaaa,omitempty"`

	// Applies AAAA filtering to a named ACL, or to a list of IPv4/IPv6 addresses
	// and networks from which queries are received. This field does not allow TSIG
	// keys.
	FilterAaaaList []*Addressac `json:"filter_aaaa_list,omitempty"`

	// The fixed RRset order FQDN. If this field does not contain an empty value,
	// the appliance will automatically set the enable_fixed_rrset_order_fqdns
	// field to 'true', unless the same request sets the enable field to 'false'.
	FixedRrsetOrderFqdns []*GridDnsFixedrrsetorderfqdn `json:"fixed_rrset_order_fqdns,omitempty"`

	// Determines if this DNS view sends queries to forwarders only or not. When
	// the value is True, queries are sent to forwarders only, and not to other
	// internal or Internet root servers.
	ForwardOnly *bool `json:"forward_only,omitempty"`

	// The list of forwarders for the DNS view. A forwarder is a name server to
	// which other name servers first send their off-site queries. The forwarder
	// builds up a cache of information, avoiding the need for other name servers
	// to send queries off-site.
	Forwarders []string `json:"forwarders,omitempty"`

	// The NIOS appliance provides one default DNS view. You can rename the default
	// view and change its settings, but you cannot delete it. There must always be
	// at least one DNS view in the appliance.
	IsDefault bool `json:"is_default,omitempty"`

	// The number of seconds to cache lame delegations or lame servers.
	LameTtl *uint32 `json:"lame_ttl,omitempty"`

	// Determines last queried ACL for the specified IPv4 or IPv6 addresses and
	// networks in scavenging settings.
	LastQueriedAcl []*Addressac `json:"last_queried_acl,omitempty"`

	// A list of forwarders for the match clients. This list specifies a named ACL,
	// or a list of IPv4/IPv6 addresses, networks, TSIG keys of clients that are
	// allowed or denied access to the DNS view.
	MatchClients []*Addressac `json:"match_clients,omitempty"`

	// A list of forwarders for the match destinations. This list specifies a name
	// ACL, or a list of IPv4/IPv6 addresses, networks, TSIG keys of clients that
	// are allowed or denied access to the DNS view.
	MatchDestinations []*Addressac `json:"match_destinations,omitempty"`

	// The maximum number of seconds to cache ordinary (positive) answers.
	MaxCacheTtl *uint32 `json:"max_cache_ttl,omitempty"`

	// The maximum number of seconds to cache negative (NXDOMAIN) answers.
	MaxNcacheTtl *uint32 `json:"max_ncache_ttl,omitempty"`

	// The value is used by authoritative DNS servers to never send DNS responses
	// larger than the configured value. The value should be between 512 and 4096
	// bytes. The recommended value is between 512 and 1220 bytes.
	MaxUdpSize *uint32 `json:"max_udp_size,omitempty"`

	// Name of the DNS view.
	Name *string `json:"name,omitempty"`

	// The name of the network view object associated with this DNS view.
	NetworkView *string `json:"network_view,omitempty"`

	// The number of seconds of delay the notify messages are sent to secondaries.
	NotifyDelay *uint32 `json:"notify_delay,omitempty"`

	// The flag that indicates whether NXDOMAIN redirection queries are logged.
	// Specify "true" to enable logging, or "false" to disable it. The default
	// value is "false".
	NxdomainLogQuery *bool `json:"nxdomain_log_query,omitempty"`

	// Determines if NXDOMAIN redirection in a DNS view is enabled or not.
	NxdomainRedirect *bool `json:"nxdomain_redirect,omitempty"`

	// The array with IPv4 addresses the appliance includes in the response it
	// sends in place of an NXDOMAIN response.
	NxdomainRedirectAddresses []string `json:"nxdomain_redirect_addresses,omitempty"`

	// The array with IPv6 addresses the appliance includes in the response it
	// sends in place of an NXDOMAIN response.
	NxdomainRedirectAddressesV6 []string `json:"nxdomain_redirect_addresses_v6,omitempty"`

	// The Time To Live (TTL) value of the synthetic DNS responses resulted from
	// NXDOMAIN redirection. The TTL value is a 32-bit unsigned integer that
	// represents the TTL in seconds.
	NxdomainRedirectTtl *uint32 `json:"nxdomain_redirect_ttl,omitempty"`

	// The names of the Ruleset objects assigned at the grid level for NXDOMAIN
	// redirection.
	NxdomainRulesets []string `json:"nxdomain_rulesets,omitempty"`

	// Determines if recursion is enabled or not.
	Recursion *bool `json:"recursion,omitempty"`

	// The response rate limiting settings for the DNS View.
	ResponseRateLimiting *GridResponseratelimiting `json:"response_rate_limiting,omitempty"`

	// Determines the type of root name servers.
	RootNameServerType string `json:"root_name_server_type,omitempty"`

	// Enables the appliance to ignore RPZ-IP triggers with prefix lengths less
	// than the specified minimum prefix length.
	RpzDropIpRuleEnabled *bool `json:"rpz_drop_ip_rule_enabled,omitempty"`

	// The minimum prefix length for IPv4 RPZ-IP triggers. The appliance ignores
	// RPZ-IP triggers with prefix lengths less than the specified minimum IPv4
	// prefix length.
	RpzDropIpRuleMinPrefixLengthIpv4 *uint32 `json:"rpz_drop_ip_rule_min_prefix_length_ipv4,omitempty"`

	// The minimum prefix length for IPv6 RPZ-IP triggers. The appliance ignores
	// RPZ-IP triggers with prefix lengths less than the specified minimum IPv6
	// prefix length.
	RpzDropIpRuleMinPrefixLengthIpv6 *uint32 `json:"rpz_drop_ip_rule_min_prefix_length_ipv6,omitempty"`

	// The flag that indicates whether recursive RPZ lookups are enabled.
	RpzQnameWaitRecurse *bool `json:"rpz_qname_wait_recurse,omitempty"`

	// The scavenging settings.
	ScavengingSettings *SettingScavenging `json:"scavenging_settings,omitempty"`

	// A sort list that determines the order of IP addresses in responses sent to
	// DNS queries.
	Sortlist []*Sortlist `json:"sortlist,omitempty"`

	// Use flag for: blacklist_action , blacklist_log_query,
	// blacklist_redirect_addresses, blacklist_redirect_ttl, blacklist_rulesets,
	// enable_blacklist
	UseBlacklist *bool `json:"use_blacklist,omitempty"`

	// Use flag for: ddns_force_creation_timestamp_update
	UseDdnsForceCreationTimestampUpdate *bool `json:"use_ddns_force_creation_timestamp_update,omitempty"`

	// Use flag for: ddns_restrict_patterns_list , ddns_restrict_patterns
	UseDdnsPatternsRestriction *bool `json:"use_ddns_patterns_restriction,omitempty"`

	// Use flag for: ddns_restrict_secure , ddns_principal_tracking,
	// ddns_principal_group
	UseDdnsPrincipalSecurity *bool `json:"use_ddns_principal_security,omitempty"`

	// Use flag for: ddns_restrict_protected
	UseDdnsRestrictProtected *bool `json:"use_ddns_restrict_protected,omitempty"`

	// Use flag for: ddns_restrict_static
	UseDdnsRestrictStatic *bool `json:"use_ddns_restrict_static,omitempty"`

	// Use flag for: dns64_enabled , dns64_groups
	UseDns64 *bool `json:"use_dns64,omitempty"`

	// Use flag for: dnssec_enabled , dnssec_expired_signatures_enabled,
	// dnssec_validation_enabled, dnssec_trusted_keys
	UseDnssec *bool `json:"use_dnssec,omitempty"`

	// Use flag for: edns_udp_size
	UseEdnsUdpSize *bool `json:"use_edns_udp_size,omitempty"`

	// Use flag for: filter_aaaa , filter_aaaa_list
	UseFilterAaaa *bool `json:"use_filter_aaaa,omitempty"`

	// Use flag for: fixed_rrset_order_fqdns , enable_fixed_rrset_order_fqdns
	UseFixedRrsetOrderFqdns *bool `json:"use_fixed_rrset_order_fqdns,omitempty"`

	// Use flag for: forwarders , forward_only
	UseForwarders *bool `json:"use_forwarders,omitempty"`

	// Use flag for: lame_ttl
	UseLameTtl *bool `json:"use_lame_ttl,omitempty"`

	// Use flag for: max_cache_ttl
	UseMaxCacheTtl *bool `json:"use_max_cache_ttl,omitempty"`

	// Use flag for: max_ncache_ttl
	UseMaxNcacheTtl *bool `json:"use_max_ncache_ttl,omitempty"`

	// Use flag for: max_udp_size
	UseMaxUdpSize *bool `json:"use_max_udp_size,omitempty"`

	// Use flag for: nxdomain_redirect , nxdomain_redirect_addresses,
	// nxdomain_redirect_addresses_v6, nxdomain_redirect_ttl, nxdomain_log_query,
	// nxdomain_rulesets
	UseNxdomainRedirect *bool `json:"use_nxdomain_redirect,omitempty"`

	// Use flag for: recursion
	UseRecursion *bool `json:"use_recursion,omitempty"`

	// Use flag for: response_rate_limiting
	UseResponseRateLimiting *bool `json:"use_response_rate_limiting,omitempty"`

	// Use flag for: custom_root_name_servers , root_name_server_type
	UseRootNameServer *bool `json:"use_root_name_server,omitempty"`

	// Use flag for: rpz_drop_ip_rule_enabled ,
	// rpz_drop_ip_rule_min_prefix_length_ipv4,
	// rpz_drop_ip_rule_min_prefix_length_ipv6
	UseRpzDropIpRule *bool `json:"use_rpz_drop_ip_rule,omitempty"`

	// Use flag for: rpz_qname_wait_recurse
	UseRpzQnameWaitRecurse *bool `json:"use_rpz_qname_wait_recurse,omitempty"`

	// Use flag for: scavenging_settings , last_queried_acl
	UseScavengingSettings *bool `json:"use_scavenging_settings,omitempty"`

	// Use flag for: sortlist
	UseSortlist *bool `json:"use_sortlist,omitempty"`
}

func (View) ObjectType() string {
	return "view"
}

func (obj View) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"comment", "is_default", "name"}
	}
	return obj.returnFields
}

// Vlan represents Infoblox object vlan.
// References to vlan are object references.
type Vlan struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// List of objects VLAN is assigned to.
	AssignedTo []*Ipv4Network `json:"assigned_to,omitempty"`

	// A descriptive comment for this VLAN.
	Comment *string `json:"comment,omitempty"`

	// Contact information for person/team managing or using VLAN.
	Contact *string `json:"contact,omitempty"`

	// Department where VLAN is used.
	Department *string `json:"department,omitempty"`

	// Description for the VLAN object, may be potentially used for longer VLAN
	// names.
	Description *string `json:"description,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// VLAN ID value.
	Id *uint32 `json:"id,omitempty"`

	// Name of the VLAN.
	Name *string `json:"name,omitempty"`

	// The VLAN View or VLAN Range to which this VLAN belongs.
	Parent *string `json:"parent,omitempty"`

	// When set VLAN can only be assigned to IPAM object manually.
	Reserved *bool `json:"reserved,omitempty"`

	// Status of VLAN object. Can be Assigned, Unassigned, Reserved.
	Status string `json:"status,omitempty"`
}

func (Vlan) ObjectType() string {
	return "vlan"
}

func (obj Vlan) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"id", "name", "parent"}
	}
	return obj.returnFields
}

// Vlanrange represents Infoblox object vlanrange.
// References to vlanrange are object references.
type Vlanrange struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// A descriptive comment for this VLAN Range.
	Comment *string `json:"comment,omitempty"`

	// Vlans delete option. Determines whether all child objects should be removed
	// alongside with the VLAN Range or child objects should be assigned to another
	// parental VLAN Range/View. By default child objects are re-parented.
	DeleteVlans bool `json:"delete_vlans,omitempty"`

	// End ID for VLAN Range.
	EndVlanId *uint32 `json:"end_vlan_id,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// Name of the VLAN Range.
	Name *string `json:"name,omitempty"`

	// If set on creation VLAN objects will be created once VLAN Range created.
	PreCreateVlan *bool `json:"pre_create_vlan,omitempty"`

	// Start ID for VLAN Range.
	StartVlanId *uint32 `json:"start_vlan_id,omitempty"`

	// If set on creation prefix string will be used for VLAN name.
	VlanNamePrefix *string `json:"vlan_name_prefix,omitempty"`

	// The VLAN View to which this VLAN Range belongs.
	VlanView *string `json:"vlan_view,omitempty"`
}

func (Vlanrange) ObjectType() string {
	return "vlanrange"
}

func (obj Vlanrange) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"end_vlan_id", "name", "start_vlan_id", "vlan_view"}
	}
	return obj.returnFields
}

// Vlanview represents Infoblox object vlanview.
// References to vlanview are object references.
type Vlanview struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// When set to true VLAN Ranges under VLAN View can have overlapping ID.
	AllowRangeOverlapping *bool `json:"allow_range_overlapping,omitempty"`

	// A descriptive comment for this VLAN View.
	Comment *string `json:"comment,omitempty"`

	// End ID for VLAN View.
	EndVlanId *uint32 `json:"end_vlan_id,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// Name of the VLAN View.
	Name *string `json:"name,omitempty"`

	// If set on creation VLAN objects will be created once VLAN View created.
	PreCreateVlan *bool `json:"pre_create_vlan,omitempty"`

	// Start ID for VLAN View.
	StartVlanId *uint32 `json:"start_vlan_id,omitempty"`

	// If set on creation prefix string will be used for VLAN name.
	VlanNamePrefix *string `json:"vlan_name_prefix,omitempty"`
}

func (Vlanview) ObjectType() string {
	return "vlanview"
}

func (obj Vlanview) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"end_vlan_id", "name", "start_vlan_id"}
	}
	return obj.returnFields
}

// ZoneAuth represents Infoblox object zone_auth.
// An authoritative zone is a zone for which the local (primary or secondary)
// server references its own data when responding to queries. The local server
// is authoritative for the data in this zone and responds to queries for this
// data without referencing another server.
type ZoneAuth struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The IP address of the server that is serving this zone.
	Address string `json:"address,omitempty"`

	// This field allows the zone to receive GSS-TSIG authenticated DDNS updates
	// from DHCP clients and servers in an AD domain. Note that addresses specified
	// in this field ignore the permission set in the struct which will be set to
	// 'ALLOW'.
	AllowActiveDir []*Addressac `json:"allow_active_dir,omitempty"`

	// The flag that allows to enable or disable fixed RRset ordering for
	// authoritative forward-mapping zones.
	AllowFixedRrsetOrder *bool `json:"allow_fixed_rrset_order,omitempty"`

	// The flag that allows DHCP clients to perform GSS-TSIG signed updates for
	// underscore zones.
	AllowGssTsigForUnderscoreZone *bool `json:"allow_gss_tsig_for_underscore_zone,omitempty"`

	// The flag that enables or disables the zone for GSS-TSIG updates.
	AllowGssTsigZoneUpdates *bool `json:"allow_gss_tsig_zone_updates,omitempty"`

	// Determines whether DNS queries are allowed from a named ACL, or from a list
	// of IPv4/IPv6 addresses, networks, and TSIG keys for the hosts.
	AllowQuery []*Addressac `json:"allow_query,omitempty"`

	// Determines whether zone transfers are allowed from a named ACL, or from a
	// list of IPv4/IPv6 addresses, networks, and TSIG keys for the hosts.
	AllowTransfer []*Addressac `json:"allow_transfer,omitempty"`

	// Determines whether dynamic DNS updates are allowed from a named ACL, or from
	// a list of IPv4/IPv6 addresses, networks, and TSIG keys for the hosts.
	AllowUpdate []*Addressac `json:"allow_update,omitempty"`

	// The list with IP addresses, networks or TSIG keys for clients, from which
	// forwarded dynamic updates are allowed.
	AllowUpdateForwarding *bool `json:"allow_update_forwarding,omitempty"`

	// Additional information for Route53 zone.
	AwsRte53ZoneInfo *Awsrte53zoneinfo `json:"aws_rte53_zone_info,omitempty"`

	// Structure containing all cloud API related information for this object.
	CloudInfo *GridCloudapiInfo `json:"cloud_info,omitempty"`

	// Comment for the zone; maximum 256 characters.
	Comment *string `json:"comment,omitempty"`

	// If this flag is set to True then copy allowed IPs from Allow Transfer to
	// Also Notify.
	CopyXferToNotify *bool `json:"copy_xfer_to_notify,omitempty"`

	// Determines if PTR records are created for hosts automatically, if necessary,
	// when the zone data is imported. This field is meaningful only when
	// import_from is set.
	CreatePtrForBulkHosts *bool `json:"create_ptr_for_bulk_hosts,omitempty"`

	// Determines if PTR records are created for hosts automatically, if necessary,
	// when the zone data is imported. This field is meaningful only when
	// import_from is set.
	CreatePtrForHosts *bool `json:"create_ptr_for_hosts,omitempty"`

	// Determines whether automatic creation of subzones is enabled or not.
	CreateUnderscoreZones *bool `json:"create_underscore_zones,omitempty"`

	// Defines whether creation timestamp of RR should be updated ' when DDNS
	// update happens even if there is no change to ' the RR.
	DdnsForceCreationTimestampUpdate *bool `json:"ddns_force_creation_timestamp_update,omitempty"`

	// The DDNS Principal cluster group name.
	DdnsPrincipalGroup *string `json:"ddns_principal_group,omitempty"`

	// The flag that indicates whether the DDNS principal track is enabled or
	// disabled.
	DdnsPrincipalTracking *bool `json:"ddns_principal_tracking,omitempty"`

	// The flag that indicates whether an option to restrict DDNS update request
	// based on FQDN patterns is enabled or disabled.
	DdnsRestrictPatterns *bool `json:"ddns_restrict_patterns,omitempty"`

	// The unordered list of restriction patterns for an option of to restrict DDNS
	// updates based on FQDN patterns.
	DdnsRestrictPatternsList []string `json:"ddns_restrict_patterns_list,omitempty"`

	// The flag that indicates whether an option to restrict DDNS update request to
	// protected resource records is enabled or disabled.
	DdnsRestrictProtected *bool `json:"ddns_restrict_protected,omitempty"`

	// The flag that indicates whether DDNS update request for principal other than
	// target resource record's principal is restricted.
	DdnsRestrictSecure *bool `json:"ddns_restrict_secure,omitempty"`

	// The flag that indicates whether an option to restrict DDNS update request to
	// resource records which are marked as 'STATIC' is enabled or disabled.
	DdnsRestrictStatic *bool `json:"ddns_restrict_static,omitempty"`

	// Determines whether a zone is disabled or not. When this is set to False, the
	// zone is enabled.
	Disable *bool `json:"disable,omitempty"`

	// Determines whether the name servers that host the zone should forward
	// queries (ended with the domain name of the zone) to any configured
	// forwarders.
	DisableForwarding *bool `json:"disable_forwarding,omitempty"`

	// The displayed name of the DNS zone.
	DisplayDomain string `json:"display_domain,omitempty"`

	// The name of this DNS zone in punycode format. For a reverse zone, this is in
	// "address/cidr" format. For other zones, this is in FQDN format in punycode
	// format.
	DnsFqdn string `json:"dns_fqdn,omitempty"`

	// If this is set to True, DNS integrity check is enabled for this zone.
	DnsIntegrityEnable *bool `json:"dns_integrity_enable,omitempty"`

	// The frequency, in seconds, of DNS integrity checks for this zone.
	DnsIntegrityFrequency *uint32 `json:"dns_integrity_frequency,omitempty"`

	// The Grid member that performs DNS integrity checks for this zone.
	DnsIntegrityMember *string `json:"dns_integrity_member,omitempty"`

	// If this is set to True, more information is logged for DNS integrity checks
	// for this zone.
	DnsIntegrityVerboseLogging *bool `json:"dns_integrity_verbose_logging,omitempty"`

	// The SOA email for the zone in punycode format.
	DnsSoaEmail string `json:"dns_soa_email,omitempty"`

	// This structure contains the DNSSEC key parameters for this zone.
	DnssecKeyParams *Dnsseckeyparams `json:"dnssec_key_params,omitempty"`

	// A list of DNSSEC keys for the zone.
	DnssecKeys []*Dnsseckey `json:"dnssec_keys,omitempty"`

	// The rollover date for the Key Signing Key.
	DnssecKskRolloverDate *UnixTime `json:"dnssec_ksk_rollover_date,omitempty"`

	// The rollover date for the Zone Signing Key.
	DnssecZskRolloverDate *UnixTime `json:"dnssec_zsk_rollover_date,omitempty"`

	// Determines if hosts and bulk hosts are automatically created when the zone
	// data is imported. This field is meaningful only when import_from is set.
	DoHostAbstraction *bool `json:"do_host_abstraction,omitempty"`

	// The value of the check names policy, which indicates the action the
	// appliance takes when it encounters host names that do not comply with the
	// Strict Hostname Checking policy. This value applies only if the host name
	// restriction policy is set to "Strict Hostname Checking".
	EffectiveCheckNamesPolicy string `json:"effective_check_names_policy,omitempty"`

	// The selected hostname policy for records under this zone.
	EffectiveRecordNamePolicy string `json:"effective_record_name_policy,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// The list of external primary servers.
	ExternalPrimaries []NameServer `json:"external_primaries,omitempty"`

	// The list of external secondary servers.
	ExternalSecondaries []NameServer `json:"external_secondaries,omitempty"`

	// The name of this DNS zone. For a reverse zone, this is in "address/cidr"
	// format. For other zones, this is in FQDN format. This value can be in
	// unicode format. Note that for a reverse zone, the corresponding zone_format
	// value should be set.
	Fqdn string `json:"fqdn,omitempty"`

	// The grid primary servers for this zone.
	GridPrimary []*Memberserver `json:"grid_primary,omitempty"`

	// Determines if the server is duplicated with parent delegation.
	GridPrimarySharedWithMsParentDelegation bool `json:"grid_primary_shared_with_ms_parent_delegation,omitempty"`

	// The list with Grid members that are secondary servers for this zone.
	GridSecondaries []*Memberserver `json:"grid_secondaries,omitempty"`

	// The IP address of the Infoblox appliance from which zone data is imported.
	// Setting this address to '255.255.255.255' and do_host_abstraction to 'true'
	// will create Host records from A records in this zone without importing zone
	// data.
	ImportFrom *string `json:"import_from,omitempty"`

	// This flag is set to True if DNSSEC is enabled for the zone.
	IsDnssecEnabled bool `json:"is_dnssec_enabled,omitempty"`

	// Determines if the zone is DNSSEC signed.
	IsDnssecSigned bool `json:"is_dnssec_signed,omitempty"`

	// Determines if multi-master DNS is enabled for the zone.
	IsMultimaster bool `json:"is_multimaster,omitempty"`

	// The time the zone was last queried on.
	LastQueried *UnixTime `json:"last_queried,omitempty"`

	// Determines last queried ACL for the specified IPv4 or IPv6 addresses and
	// networks in scavenging settings.
	LastQueriedAcl []*Addressac `json:"last_queried_acl,omitempty"`

	// If you enable this flag, other administrators cannot make conflicting
	// changes. This is for administration purposes only. The zone will continue to
	// serve DNS data even when it is locked.
	Locked *bool `json:"locked,omitempty"`

	// The name of a superuser or the administrator who locked this zone.
	LockedBy string `json:"locked_by,omitempty"`

	// IPv4 Netmask or IPv6 prefix for this zone.
	MaskPrefix string `json:"mask_prefix,omitempty"`

	// The list of per-member SOA MNAME information.
	MemberSoaMnames []*GridmemberSoamname `json:"member_soa_mnames,omitempty"`

	// The list of per-member SOA serial information.
	MemberSoaSerials []*GridmemberSoaserial `json:"member_soa_serials,omitempty"`

	// The flag that determines whether Active Directory is integrated or not. This
	// field is valid only when ms_managed is "STUB", "AUTH_PRIMARY", or
	// "AUTH_BOTH".
	MsAdIntegrated *bool `json:"ms_ad_integrated,omitempty"`

	// The list of DNS clients that are allowed to perform zone transfers from a
	// Microsoft DNS server. This setting applies only to zones with Microsoft DNS
	// servers that are either primary or secondary servers. This setting does not
	// inherit any value from the Grid or from any member that defines an
	// allow_transfer value. This setting does not apply to any grid member. Use
	// the allow_transfer field to control which DNS clients are allowed to perform
	// zone transfers on Grid members.
	MsAllowTransfer []*Addressac `json:"ms_allow_transfer,omitempty"`

	// Determines which DNS clients are allowed to perform zone transfers from a
	// Microsoft DNS server. Valid values are: "ADDRESS_AC", to use
	// ms_allow_transfer field for specifying IP addresses, networks and
	// Transaction Signature (TSIG) keys for clients that are allowed to do zone
	// transfers. "ANY", to allow any client. "ANY_NS", to allow only the
	// nameservers listed in this zone. "NONE", to deny all zone transfer requests.
	MsAllowTransferMode string `json:"ms_allow_transfer_mode,omitempty"`

	// The list of domain controllers that are allowed to create NS records for
	// authoritative zones.
	MsDcNsRecordCreation []*MsserverDcnsrecordcreation `json:"ms_dc_ns_record_creation,omitempty"`

	// Determines whether an Active Directory-integrated zone with a Microsoft DNS
	// server as primary allows dynamic updates. Valid values are: "SECURE" if the
	// zone allows secure updates only. "NONE" if the zone forbids dynamic updates.
	// "ANY" if the zone accepts both secure and nonsecure updates. This field is
	// valid only if ms_managed is either "AUTH_PRIMARY" or "AUTH_BOTH". If the
	// flag ms_ad_integrated is false, the value "SECURE" is not allowed.
	MsDdnsMode string `json:"ms_ddns_mode,omitempty"`

	// The flag that indicates whether the zone is assigned to a Microsoft DNS
	// server. This flag returns the authoritative name server type of the
	// Microsoft DNS server. Valid values are: "NONE" if the zone is not assigned
	// to any Microsoft DNS server. "STUB" if the zone is assigned to a Microsoft
	// DNS server as a stub zone. "AUTH_PRIMARY" if only the primary server of the
	// zone is a Microsoft DNS server. "AUTH_SECONDARY" if only the secondary
	// server of the zone is a Microsoft DNS server. "AUTH_BOTH" if both the
	// primary and secondary servers of the zone are Microsoft DNS servers.
	MsManaged string `json:"ms_managed,omitempty"`

	// The list with the Microsoft DNS servers that are primary servers for the
	// zone. Although a zone typically has just one primary name server, you can
	// specify up to ten independent servers for a single zone.
	MsPrimaries []*Msdnsserver `json:"ms_primaries,omitempty"`

	// Determines if a Grid member manages the zone served by a Microsoft DNS
	// server in read-only mode. This flag is true when a Grid member manages the
	// zone in read-only mode, false otherwise. When the zone has the ms_read_only
	// flag set to True, no changes can be made to this zone.
	MsReadOnly bool `json:"ms_read_only,omitempty"`

	// The list with the Microsoft DNS servers that are secondary servers for the
	// zone.
	MsSecondaries []*Msdnsserver `json:"ms_secondaries,omitempty"`

	// This flag controls whether this zone is synchronized with Microsoft DNS
	// servers.
	MsSyncDisabled *bool `json:"ms_sync_disabled,omitempty"`

	// The name of MS synchronization master for this zone.
	MsSyncMasterName string `json:"ms_sync_master_name,omitempty"`

	// The list with the associated network/network container information.
	NetworkAssociations []*Ipv4Network `json:"network_associations,omitempty"`

	// The name of the network view in which this zone resides.
	NetworkView string `json:"network_view,omitempty"`

	// The number of seconds in delay with which notify messages are sent to
	// secondaries.
	NotifyDelay *uint32 `json:"notify_delay,omitempty"`

	// The name server group that serves DNS for this zone.
	NsGroup *string `json:"ns_group"`

	// The parent zone of this zone. Note that when searching for reverse zones,
	// the "in-addr.arpa" notation should be used.
	Parent string `json:"parent,omitempty"`

	// The RFC2317 prefix value of this DNS zone. Use this field only when the
	// netmask is greater than 24 bits; that is, for a mask between 25 and 31 bits.
	// Enter a prefix, such as the name of the allocated address block. The prefix
	// can be alphanumeric characters, such as 128/26 , 128-189 , or sub-B.
	Prefix *string `json:"prefix,omitempty"`

	// The type of the primary server.
	PrimaryType string `json:"primary_type,omitempty"`

	// The hostname policy for records under this zone.
	RecordNamePolicy *string `json:"record_name_policy,omitempty"`

	// Determines if this zone is also monitoring resource records.
	RecordsMonitored bool `json:"records_monitored,omitempty"`

	// Restarts the member service.
	RestartIfNeeded *bool `json:"restart_if_needed,omitempty"`

	// The time data collection for Not Queried Resource Record was enabled for
	// this zone.
	RrNotQueriedEnabledTime *UnixTime `json:"rr_not_queried_enabled_time,omitempty"`

	// The scavenging settings.
	ScavengingSettings *SettingScavenging `json:"scavenging_settings,omitempty"`

	// The serial number in the SOA record incrementally changes every time the
	// record is modified. The Infoblox appliance allows you to change the serial
	// number (in the SOA record) for the primary server so it is higher than the
	// secondary server, thereby ensuring zone transfers come from the primary
	// server (as they should). To change the serial number you need to set a new
	// value at "soa_serial_number" and pass "set_soa_serial_number" as True.
	SetSoaSerialNumber *bool `json:"set_soa_serial_number,omitempty"`

	// The Time to Live (TTL) value of the SOA record of this zone. This value is
	// the number of seconds that data is cached.
	SoaDefaultTtl *uint32 `json:"soa_default_ttl,omitempty"`

	// The SOA email value for this zone. This value can be in unicode format.
	SoaEmail *string `json:"soa_email,omitempty"`

	// This setting defines the amount of time, in seconds, after which the
	// secondary server stops giving out answers about the zone because the zone
	// data is too old to be useful. The default is one week.
	SoaExpire *uint32 `json:"soa_expire,omitempty"`

	// The negative Time to Live (TTL) value of the SOA of the zone indicates how
	// long a secondary server can cache data for "Does Not Respond" responses.
	SoaNegativeTtl *uint32 `json:"soa_negative_ttl,omitempty"`

	// This indicates the interval at which a secondary server sends a message to
	// the primary server for a zone to check that its data is current, and
	// retrieve fresh data if it is not.
	SoaRefresh *uint32 `json:"soa_refresh,omitempty"`

	// This indicates how long a secondary server must wait before attempting to
	// recontact the primary server after a connection failure between the two
	// servers occurs.
	SoaRetry *uint32 `json:"soa_retry,omitempty"`

	// The serial number in the SOA record incrementally changes every time the
	// record is modified. The Infoblox appliance allows you to change the serial
	// number (in the SOA record) for the primary server so it is higher than the
	// secondary server, thereby ensuring zone transfers come from the primary
	// server (as they should). To change the serial number you need to set a new
	// value at "soa_serial_number" and pass "set_soa_serial_number" as True.
	SoaSerialNumber *uint32 `json:"soa_serial_number,omitempty"`

	// The associated shared record groups of a DNS zone. If a shared record group
	// is associated with a zone, then all shared records in a shared record group
	// will be shared in the zone.
	Srgs []string `json:"srgs,omitempty"`

	// Use this field to allow or deny dynamic DNS updates that are forwarded from
	// specific IPv4/IPv6 addresses, networks, or a named ACL. You can also provide
	// TSIG keys for clients that are allowed or denied to perform zone updates.
	// This setting overrides the member-level setting.
	UpdateForwarding []*Addressac `json:"update_forwarding,omitempty"`

	// Use flag for: allow_active_dir
	UseAllowActiveDir *bool `json:"use_allow_active_dir,omitempty"`

	// Use flag for: allow_query
	UseAllowQuery *bool `json:"use_allow_query,omitempty"`

	// Use flag for: allow_transfer
	UseAllowTransfer *bool `json:"use_allow_transfer,omitempty"`

	// Use flag for: allow_update
	UseAllowUpdate *bool `json:"use_allow_update,omitempty"`

	// Use flag for: allow_update_forwarding
	UseAllowUpdateForwarding *bool `json:"use_allow_update_forwarding,omitempty"`

	// Apply policy to dynamic updates and inbound zone transfers (This value
	// applies only if the host name restriction policy is set to "Strict Hostname
	// Checking".)
	UseCheckNamesPolicy *bool `json:"use_check_names_policy,omitempty"`

	// Use flag for: copy_xfer_to_notify
	UseCopyXferToNotify *bool `json:"use_copy_xfer_to_notify,omitempty"`

	// Use flag for: ddns_force_creation_timestamp_update
	UseDdnsForceCreationTimestampUpdate *bool `json:"use_ddns_force_creation_timestamp_update,omitempty"`

	// Use flag for: ddns_restrict_patterns_list , ddns_restrict_patterns
	UseDdnsPatternsRestriction *bool `json:"use_ddns_patterns_restriction,omitempty"`

	// Use flag for: ddns_restrict_secure , ddns_principal_tracking,
	// ddns_principal_group
	UseDdnsPrincipalSecurity *bool `json:"use_ddns_principal_security,omitempty"`

	// Use flag for: ddns_restrict_protected
	UseDdnsRestrictProtected *bool `json:"use_ddns_restrict_protected,omitempty"`

	// Use flag for: ddns_restrict_static
	UseDdnsRestrictStatic *bool `json:"use_ddns_restrict_static,omitempty"`

	// Use flag for: dnssec_key_params
	UseDnssecKeyParams *bool `json:"use_dnssec_key_params,omitempty"`

	// This flag controls whether the zone is using an external primary.
	UseExternalPrimary *bool `json:"use_external_primary,omitempty"`

	// Use flag for: soa_default_ttl , soa_expire, soa_negative_ttl, soa_refresh,
	// soa_retry
	UseGridZoneTimer *bool `json:"use_grid_zone_timer,omitempty"`

	// Use flag for: import_from
	UseImportFrom *bool `json:"use_import_from,omitempty"`

	// Use flag for: notify_delay
	UseNotifyDelay *bool `json:"use_notify_delay,omitempty"`

	// Use flag for: record_name_policy
	UseRecordNamePolicy *bool `json:"use_record_name_policy,omitempty"`

	// Use flag for: scavenging_settings , last_queried_acl
	UseScavengingSettings *bool `json:"use_scavenging_settings,omitempty"`

	// Use flag for: soa_email
	UseSoaEmail *bool `json:"use_soa_email,omitempty"`

	// This is true if the zone is associated with a shared record group.
	UsingSrgAssociations bool `json:"using_srg_associations,omitempty"`

	// The name of the DNS view in which the zone resides. Example "external".
	View *string `json:"view,omitempty"`

	// Determines the format of this zone.
	ZoneFormat string `json:"zone_format,omitempty"`

	// The time when "DNS Zones Last Queried" was turned on for this zone.
	ZoneNotQueriedEnabledTime *UnixTime `json:"zone_not_queried_enabled_time,omitempty"`
}

func (ZoneAuth) ObjectType() string {
	return "zone_auth"
}

func (obj ZoneAuth) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"fqdn", "view"}
	}
	return obj.returnFields
}

func NewZoneAuth(za ZoneAuth) *ZoneAuth {
	res := za
	res.returnFields = []string{"extattrs", "fqdn", "view"}
	return &res
}

// ZoneAuthDiscrepancy represents Infoblox object zone_auth_discrepancy.
// This object contains information about discrepancies found when performing a
// DNS integrity check for a zone.
type ZoneAuthDiscrepancy struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// Information about the discrepancy.
	Description string `json:"description,omitempty"`

	// The severity of the discrepancy reported.
	Severity string `json:"severity,omitempty"`

	// The time when the DNS integrity check was last run for this zone.
	Timestamp *UnixTime `json:"timestamp,omitempty"`

	// The reference of the zone during a search. Otherwise, this is the zone
	// object of the zone to which the discrepancy refers.
	Zone string `json:"zone,omitempty"`
}

func (ZoneAuthDiscrepancy) ObjectType() string {
	return "zone_auth_discrepancy"
}

func (obj ZoneAuthDiscrepancy) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"description", "severity", "timestamp", "zone"}
	}
	return obj.returnFields
}

// ZoneDelegated represents Infoblox object zone_delegated.
// Instead of a local name server, remote name servers (which the local server
// knows) maintain delegated zone data. When the local name server receives a
// query for a delegated zone, it either responds with the NS record for the
// delegated zone server (if recursion is disabled on the local server) or it
// queries the delegated zone server on behalf of the resolver (if recursion is
// enabled).
type ZoneDelegated struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The IP address of the server that is serving this zone.
	Address string `json:"address,omitempty"`

	// Comment for the zone; maximum 256 characters.
	Comment *string `json:"comment,omitempty"`

	// This provides information for the remote name server that maintains data for
	// the delegated zone. The Infoblox appliance redirects queries for data for
	// the delegated zone to this remote name server.
	DelegateTo NullableNameServers `json:"delegate_to,omitempty"`

	// You can specify the Time to Live (TTL) values of auto-generated NS and glue
	// records for a delegated zone. This value is the number of seconds that data
	// is cached.
	DelegatedTtl *uint32 `json:"delegated_ttl,omitempty"`

	// Determines whether a zone is disabled or not. When this is set to False, the
	// zone is enabled.
	Disable *bool `json:"disable,omitempty"`

	// The displayed name of the DNS zone.
	DisplayDomain string `json:"display_domain,omitempty"`

	// The name of this DNS zone in punycode format. For a reverse zone, this is in
	// "address/cidr" format. For other zones, this is in FQDN format in punycode
	// format.
	DnsFqdn string `json:"dns_fqdn,omitempty"`

	// This flag controls whether automatic generation of RFC 2317 CNAMEs for
	// delegated reverse zones overwrite existing PTR records. The default behavior
	// is to overwrite all the existing records in the range; this corresponds to
	// "allow_ptr_creation_in_parent" set to False. However, when this flag is set
	// to True the existing PTR records are not overwritten.
	EnableRfc2317Exclusion *bool `json:"enable_rfc2317_exclusion,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// The name of this DNS zone. For a reverse zone, this is in "address/cidr"
	// format. For other zones, this is in FQDN format. This value can be in
	// unicode format. Note that for a reverse zone, the corresponding zone_format
	// value should be set.
	Fqdn string `json:"fqdn,omitempty"`

	// If you enable this flag, other administrators cannot make conflicting
	// changes. This is for administration purposes only. The zone will continue to
	// serve DNS data even when it is locked.
	Locked *bool `json:"locked,omitempty"`

	// The name of a superuser or the administrator who locked this zone.
	LockedBy string `json:"locked_by,omitempty"`

	// IPv4 Netmask or IPv6 prefix for this zone.
	MaskPrefix string `json:"mask_prefix,omitempty"`

	// The flag that determines whether Active Directory is integrated or not. This
	// field is valid only when ms_managed is "STUB", "AUTH_PRIMARY", or
	// "AUTH_BOTH".
	MsAdIntegrated *bool `json:"ms_ad_integrated,omitempty"`

	// Determines whether an Active Directory-integrated zone with a Microsoft DNS
	// server as primary allows dynamic updates. Valid values are: "SECURE" if the
	// zone allows secure updates only. "NONE" if the zone forbids dynamic updates.
	// "ANY" if the zone accepts both secure and nonsecure updates. This field is
	// valid only if ms_managed is either "AUTH_PRIMARY" or "AUTH_BOTH". If the
	// flag ms_ad_integrated is false, the value "SECURE" is not allowed.
	MsDdnsMode string `json:"ms_ddns_mode,omitempty"`

	// The flag that indicates whether the zone is assigned to a Microsoft DNS
	// server. This flag returns the authoritative name server type of the
	// Microsoft DNS server. Valid values are: "NONE" if the zone is not assigned
	// to any Microsoft DNS server. "STUB" if the zone is assigned to a Microsoft
	// DNS server as a stub zone. "AUTH_PRIMARY" if only the primary server of the
	// zone is a Microsoft DNS server. "AUTH_SECONDARY" if only the secondary
	// server of the zone is a Microsoft DNS server. "AUTH_BOTH" if both the
	// primary and secondary servers of the zone are Microsoft DNS servers.
	MsManaged string `json:"ms_managed,omitempty"`

	// Determines if a Grid member manages the zone served by a Microsoft DNS
	// server in read-only mode. This flag is true when a Grid member manages the
	// zone in read-only mode, false otherwise. When the zone has the ms_read_only
	// flag set to True, no changes can be made to this zone.
	MsReadOnly bool `json:"ms_read_only,omitempty"`

	// The name of MS synchronization master for this zone.
	MsSyncMasterName string `json:"ms_sync_master_name,omitempty"`

	// The delegation NS group bound with delegated zone.
	NsGroup *string `json:"ns_group"`

	// The parent zone of this zone. Note that when searching for reverse zones,
	// the "in-addr.arpa" notation should be used.
	Parent string `json:"parent,omitempty"`

	// The RFC2317 prefix value of this DNS zone. Use this field only when the
	// netmask is greater than 24 bits; that is, for a mask between 25 and 31 bits.
	// Enter a prefix, such as the name of the allocated address block. The prefix
	// can be alphanumeric characters, such as 128/26 , 128-189 , or sub-B.
	Prefix *string `json:"prefix,omitempty"`

	// Use flag for: delegated_ttl
	UseDelegatedTtl *bool `json:"use_delegated_ttl,omitempty"`

	// This is true if the zone is associated with a shared record group.
	UsingSrgAssociations bool `json:"using_srg_associations,omitempty"`

	// The name of the DNS view in which the zone resides. Example "external".
	View *string `json:"view,omitempty"`

	// Determines the format of this zone.
	ZoneFormat string `json:"zone_format,omitempty"`
}

func (ZoneDelegated) ObjectType() string {
	return "zone_delegated"
}

func (obj ZoneDelegated) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"delegate_to", "fqdn", "view"}
	}
	return obj.returnFields
}

func NewZoneDelegated(za ZoneDelegated) *ZoneDelegated {
	res := za
	res.SetReturnFields(append(res.ReturnFields(), "comment", "disable", "locked", "ns_group", "delegated_ttl", "use_delegated_ttl", "zone_format", "extattrs"))

	return &res
}

// ZoneForward represents Infoblox object zone_forward.
// When you want to forward queries for data in a particular zone, define the
// zone as a forward zone and specify one or more name servers that can resolve
// queries for the zone. For example, define a forward zone so that the NIOS
// appliance forwards queries about a partners internal site to a name server,
// which the partner hosts, configured just for other partners to access.
type ZoneForward struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The IP address of the server that is serving this zone.
	Address string `json:"address,omitempty"`

	// Comment for the zone; maximum 256 characters.
	Comment *string `json:"comment,omitempty"`

	// Determines whether a zone is disabled or not. When this is set to False, the
	// zone is enabled.
	Disable *bool `json:"disable,omitempty"`

	// Determines whether a auto-generation of NS records in parent zone is
	// disabled or not. When this is set to False, the auto-generation is enabled.
	DisableNsGeneration *bool `json:"disable_ns_generation,omitempty"`

	// The displayed name of the DNS zone.
	DisplayDomain string `json:"display_domain,omitempty"`

	// The name of this DNS zone in punycode format. For a reverse zone, this is in
	// "address/cidr" format. For other zones, this is in FQDN format in punycode
	// format.
	DnsFqdn string `json:"dns_fqdn,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// A forward stub server name server group.
	ExternalNsGroup *string `json:"external_ns_group"`

	// The information for the remote name servers to which you want the Infoblox
	// appliance to forward queries for a specified domain name.
	ForwardTo NullableNameServers `json:"forward_to,omitempty"`

	// Determines if the appliance sends queries to forwarders only, and not to
	// other internal or Internet root servers.
	ForwardersOnly *bool `json:"forwarders_only,omitempty"`

	// The information for the Grid members to which you want the Infoblox
	// appliance to forward queries for a specified domain name.
	ForwardingServers *NullableForwardingServers `json:"forwarding_servers,omitempty"`

	// The name of this DNS zone. For a reverse zone, this is in "address/cidr"
	// format. For other zones, this is in FQDN format. This value can be in
	// unicode format. Note that for a reverse zone, the corresponding zone_format
	// value should be set.
	Fqdn string `json:"fqdn,omitempty"`

	// If you enable this flag, other administrators cannot make conflicting
	// changes. This is for administration purposes only. The zone will continue to
	// serve DNS data even when it is locked.
	Locked *bool `json:"locked,omitempty"`

	// The name of a superuser or the administrator who locked this zone.
	LockedBy string `json:"locked_by,omitempty"`

	// IPv4 Netmask or IPv6 prefix for this zone.
	MaskPrefix string `json:"mask_prefix,omitempty"`

	// The flag that determines whether Active Directory is integrated or not. This
	// field is valid only when ms_managed is "STUB", "AUTH_PRIMARY", or
	// "AUTH_BOTH".
	MsAdIntegrated *bool `json:"ms_ad_integrated,omitempty"`

	// Determines whether an Active Directory-integrated zone with a Microsoft DNS
	// server as primary allows dynamic updates. Valid values are: "SECURE" if the
	// zone allows secure updates only. "NONE" if the zone forbids dynamic updates.
	// "ANY" if the zone accepts both secure and nonsecure updates. This field is
	// valid only if ms_managed is either "AUTH_PRIMARY" or "AUTH_BOTH". If the
	// flag ms_ad_integrated is false, the value "SECURE" is not allowed.
	MsDdnsMode string `json:"ms_ddns_mode,omitempty"`

	// The flag that indicates whether the zone is assigned to a Microsoft DNS
	// server. This flag returns the authoritative name server type of the
	// Microsoft DNS server. Valid values are: "NONE" if the zone is not assigned
	// to any Microsoft DNS server. "STUB" if the zone is assigned to a Microsoft
	// DNS server as a stub zone. "AUTH_PRIMARY" if only the primary server of the
	// zone is a Microsoft DNS server. "AUTH_SECONDARY" if only the secondary
	// server of the zone is a Microsoft DNS server. "AUTH_BOTH" if both the
	// primary and secondary servers of the zone are Microsoft DNS servers.
	MsManaged string `json:"ms_managed,omitempty"`

	// Determines if a Grid member manages the zone served by a Microsoft DNS
	// server in read-only mode. This flag is true when a Grid member manages the
	// zone in read-only mode, false otherwise. When the zone has the ms_read_only
	// flag set to True, no changes can be made to this zone.
	MsReadOnly bool `json:"ms_read_only,omitempty"`

	// The name of MS synchronization master for this zone.
	MsSyncMasterName string `json:"ms_sync_master_name,omitempty"`

	// A forwarding member name server group.
	NsGroup *string `json:"ns_group"`

	// The parent zone of this zone. Note that when searching for reverse zones,
	// the "in-addr.arpa" notation should be used.
	Parent string `json:"parent,omitempty"`

	// The RFC2317 prefix value of this DNS zone. Use this field only when the
	// netmask is greater than 24 bits; that is, for a mask between 25 and 31 bits.
	// Enter a prefix, such as the name of the allocated address block. The prefix
	// can be alphanumeric characters, such as 128/26 , 128-189 , or sub-B.
	Prefix *string `json:"prefix,omitempty"`

	// This is true if the zone is associated with a shared record group.
	UsingSrgAssociations bool `json:"using_srg_associations,omitempty"`

	// The name of the DNS view in which the zone resides. Example "external".
	View *string `json:"view,omitempty"`

	// Determines the format of this zone.
	ZoneFormat string `json:"zone_format,omitempty"`
}

func (ZoneForward) ObjectType() string {
	return "zone_forward"
}

func (obj ZoneForward) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"forward_to", "fqdn", "view"}
	}
	return obj.returnFields
}

// ZoneRp represents Infoblox object zone_rp.
// DNS RPZs (Response Policy Zones), a technology developed by ISC (Internet
// System Consortium) for allowing reputable sources to dynamically communicate
// domain name reputation so you can implement policy controls for DNS lookups.
// You can configure RPZs and define RPZ rules to block DNS resolution for
// malicious or unauthorized domain names, or redirect clients to a walled
// garden by substituting responses. You can assign actions to RPZ rules. For
// example, abc.com can have an action of pass thru or substitute (domain) with
// the domain xyz.com. You can also configure a Grid member to act as a lead
// secondary that receives RPZ updates from external reputation sources and
// redistributes the updates to other Grid members.
type ZoneRp struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The IP address of the server that is serving this zone.
	Address string `json:"address,omitempty"`

	// Comment for the zone; maximum 256 characters.
	Comment *string `json:"comment,omitempty"`

	// Determines whether a zone is disabled or not. When this is set to False, the
	// zone is enabled.
	Disable *bool `json:"disable,omitempty"`

	// The displayed name of the DNS zone.
	DisplayDomain string `json:"display_domain,omitempty"`

	// The SOA email for the zone in punycode format.
	DnsSoaEmail string `json:"dns_soa_email,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// The list of external primary servers.
	ExternalPrimaries []NameServer `json:"external_primaries,omitempty"`

	// The list of external secondary servers.
	ExternalSecondaries []NameServer `json:"external_secondaries,omitempty"`

	// Rules to map fireeye alerts.
	FireeyeRuleMapping *FireeyeRulemapping `json:"fireeye_rule_mapping,omitempty"`

	// The name of this DNS zone in FQDN format.
	Fqdn string `json:"fqdn,omitempty"`

	// The grid primary servers for this zone.
	GridPrimary []*Memberserver `json:"grid_primary,omitempty"`

	// The list with Grid members that are secondary servers for this zone.
	GridSecondaries []*Memberserver `json:"grid_secondaries,omitempty"`

	// If you enable this flag, other administrators cannot make conflicting
	// changes. This is for administration purposes only. The zone will continue to
	// serve DNS data even when it is locked.
	Locked *bool `json:"locked,omitempty"`

	// The name of a superuser or the administrator who locked this zone.
	LockedBy string `json:"locked_by,omitempty"`

	// Determines whether RPZ logging enabled or not at zone level. When this is
	// set to False, the logging is disabled.
	LogRpz *bool `json:"log_rpz,omitempty"`

	// IPv4 Netmask or IPv6 prefix for this zone.
	MaskPrefix string `json:"mask_prefix,omitempty"`

	// The list of per-member SOA MNAME information.
	MemberSoaMnames []*GridmemberSoamname `json:"member_soa_mnames,omitempty"`

	// The list of per-member SOA serial information.
	MemberSoaSerials []*GridmemberSoaserial `json:"member_soa_serials,omitempty"`

	// The name of the network view in which this zone resides.
	NetworkView string `json:"network_view,omitempty"`

	// The name server group that serves DNS for this zone.
	NsGroup *string `json:"ns_group,omitempty"`

	// The parent zone of this zone. Note that when searching for reverse zones,
	// the "in-addr.arpa" notation should be used.
	Parent string `json:"parent,omitempty"`

	// The RFC2317 prefix value of this DNS zone. Use this field only when the
	// netmask is greater than 24 bits; that is, for a mask between 25 and 31 bits.
	// Enter a prefix, such as the name of the allocated address block. The prefix
	// can be alphanumeric characters, such as 128/26 , 128-189 , or sub-B.
	Prefix *string `json:"prefix,omitempty"`

	// The type of the primary server.
	PrimaryType string `json:"primary_type,omitempty"`

	// The hostname policy for records under this zone.
	RecordNamePolicy *string `json:"record_name_policy,omitempty"`

	// Enables the appliance to ignore RPZ-IP triggers with prefix lengths less
	// than the specified minimum prefix length.
	RpzDropIpRuleEnabled *bool `json:"rpz_drop_ip_rule_enabled,omitempty"`

	// The minimum prefix length for IPv4 RPZ-IP triggers. The appliance ignores
	// RPZ-IP triggers with prefix lengths less than the specified minimum IPv4
	// prefix length.
	RpzDropIpRuleMinPrefixLengthIpv4 *uint32 `json:"rpz_drop_ip_rule_min_prefix_length_ipv4,omitempty"`

	// The minimum prefix length for IPv6 RPZ-IP triggers. The appliance ignores
	// RPZ-IP triggers with prefix lengths less than the specified minimum IPv6
	// prefix length.
	RpzDropIpRuleMinPrefixLengthIpv6 *uint32 `json:"rpz_drop_ip_rule_min_prefix_length_ipv6,omitempty"`

	// The timestamp of the last update for zone data.
	RpzLastUpdatedTime *UnixTime `json:"rpz_last_updated_time,omitempty"`

	// The response policy zone override policy.
	RpzPolicy string `json:"rpz_policy,omitempty"`

	// The priority of this response policy zone.
	RpzPriority uint32 `json:"rpz_priority,omitempty"`

	// This number is for UI to identify the end of qualified zone list.
	RpzPriorityEnd uint32 `json:"rpz_priority_end,omitempty"`

	// The severity of this response policy zone.
	RpzSeverity string `json:"rpz_severity,omitempty"`

	// The type of rpz zone.
	RpzType string `json:"rpz_type,omitempty"`

	// The serial number in the SOA record incrementally changes every time the
	// record is modified. The Infoblox appliance allows you to change the serial
	// number (in the SOA record) for the primary server so it is higher than the
	// secondary server, thereby ensuring zone transfers come from the primary
	// server (as they should). To change the serial number you need to set a new
	// value at "soa_serial_number" and pass "set_soa_serial_number" as True.
	SetSoaSerialNumber *bool `json:"set_soa_serial_number,omitempty"`

	// The Time to Live (TTL) value of the SOA record of this zone. This value is
	// the number of seconds that data is cached.
	SoaDefaultTtl *uint32 `json:"soa_default_ttl,omitempty"`

	// The SOA email value for this zone. This value can be in unicode format.
	SoaEmail *string `json:"soa_email,omitempty"`

	// This setting defines the amount of time, in seconds, after which the
	// secondary server stops giving out answers about the zone because the zone
	// data is too old to be useful. The default is one week.
	SoaExpire *uint32 `json:"soa_expire,omitempty"`

	// The negative Time to Live (TTL) value of the SOA of the zone indicates how
	// long a secondary server can cache data for "Does Not Respond" responses.
	SoaNegativeTtl *uint32 `json:"soa_negative_ttl,omitempty"`

	// This indicates the interval at which a secondary server sends a message to
	// the primary server for a zone to check that its data is current, and
	// retrieve fresh data if it is not.
	SoaRefresh *uint32 `json:"soa_refresh,omitempty"`

	// This indicates how long a secondary server must wait before attempting to
	// recontact the primary server after a connection failure between the two
	// servers occurs.
	SoaRetry *uint32 `json:"soa_retry,omitempty"`

	// The serial number in the SOA record incrementally changes every time the
	// record is modified. The Infoblox appliance allows you to change the serial
	// number (in the SOA record) for the primary server so it is higher than the
	// secondary server, thereby ensuring zone transfers come from the primary
	// server (as they should). To change the serial number you need to set a new
	// value at "soa_serial_number" and pass "set_soa_serial_number" as True.
	SoaSerialNumber *uint32 `json:"soa_serial_number,omitempty"`

	// The canonical name of redirect target in substitute policy of response
	// policy zone.
	SubstituteName *string `json:"substitute_name,omitempty"`

	// This flag controls whether the zone is using an external primary.
	UseExternalPrimary *bool `json:"use_external_primary,omitempty"`

	// Use flag for: soa_default_ttl , soa_expire, soa_negative_ttl, soa_refresh,
	// soa_retry
	UseGridZoneTimer *bool `json:"use_grid_zone_timer,omitempty"`

	// Use flag for: log_rpz
	UseLogRpz *bool `json:"use_log_rpz,omitempty"`

	// Use flag for: record_name_policy
	UseRecordNamePolicy *bool `json:"use_record_name_policy,omitempty"`

	// Use flag for: rpz_drop_ip_rule_enabled ,
	// rpz_drop_ip_rule_min_prefix_length_ipv4,
	// rpz_drop_ip_rule_min_prefix_length_ipv6
	UseRpzDropIpRule *bool `json:"use_rpz_drop_ip_rule,omitempty"`

	// Use flag for: soa_email
	UseSoaEmail *bool `json:"use_soa_email,omitempty"`

	// The name of the DNS view in which the zone resides. Example "external".
	View *string `json:"view,omitempty"`
}

func (ZoneRp) ObjectType() string {
	return "zone_rp"
}

func (obj ZoneRp) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"fqdn", "view"}
	}
	return obj.returnFields
}

// ZoneStub represents Infoblox object zone_stub.
// A stub zone contains records that identify the authoritative name servers in
// the zone. It does not contain resource records for resolving IP addresses to
// hosts in the zone. Instead, it contains the following records:
type ZoneStub struct {
	IBBase `json:"-"`

	Ref string `json:"_ref,omitempty"`

	// The IP address of the server that is serving this zone.
	Address string `json:"address,omitempty"`

	// Comment for the zone; maximum 256 characters.
	Comment *string `json:"comment,omitempty"`

	// Determines whether a zone is disabled or not. When this is set to False, the
	// zone is enabled.
	Disable *bool `json:"disable,omitempty"`

	// Determines if the name servers that host the zone should not forward queries
	// that end with the domain name of the zone to any configured forwarders.
	DisableForwarding *bool `json:"disable_forwarding,omitempty"`

	// The displayed name of the DNS zone.
	DisplayDomain string `json:"display_domain,omitempty"`

	// The name of this DNS zone in punycode format. For a reverse zone, this is in
	// "address/cidr" format. For other zones, this is in FQDN format in punycode
	// format.
	DnsFqdn string `json:"dns_fqdn,omitempty"`

	// Extensible attributes associated with the object. For valid values for
	// extensible attributes, see {extattrs:values}.
	Ea EA `json:"extattrs"`

	// A forward stub server name server group.
	ExternalNsGroup *string `json:"external_ns_group,omitempty"`

	// The name of this DNS zone. For a reverse zone, this is in "address/cidr"
	// format. For other zones, this is in FQDN format. This value can be in
	// unicode format. Note that for a reverse zone, the corresponding zone_format
	// value should be set.
	Fqdn string `json:"fqdn,omitempty"`

	// If you enable this flag, other administrators cannot make conflicting
	// changes. This is for administration purposes only. The zone will continue to
	// serve DNS data even when it is locked.
	Locked *bool `json:"locked,omitempty"`

	// The name of a superuser or the administrator who locked this zone.
	LockedBy string `json:"locked_by,omitempty"`

	// IPv4 Netmask or IPv6 prefix for this zone.
	MaskPrefix string `json:"mask_prefix,omitempty"`

	// The flag that determines whether Active Directory is integrated or not. This
	// field is valid only when ms_managed is "STUB", "AUTH_PRIMARY", or
	// "AUTH_BOTH".
	MsAdIntegrated *bool `json:"ms_ad_integrated,omitempty"`

	// Determines whether an Active Directory-integrated zone with a Microsoft DNS
	// server as primary allows dynamic updates. Valid values are: "SECURE" if the
	// zone allows secure updates only. "NONE" if the zone forbids dynamic updates.
	// "ANY" if the zone accepts both secure and nonsecure updates. This field is
	// valid only if ms_managed is either "AUTH_PRIMARY" or "AUTH_BOTH". If the
	// flag ms_ad_integrated is false, the value "SECURE" is not allowed.
	MsDdnsMode string `json:"ms_ddns_mode,omitempty"`

	// The flag that indicates whether the zone is assigned to a Microsoft DNS
	// server. This flag returns the authoritative name server type of the
	// Microsoft DNS server. Valid values are: "NONE" if the zone is not assigned
	// to any Microsoft DNS server. "STUB" if the zone is assigned to a Microsoft
	// DNS server as a stub zone. "AUTH_PRIMARY" if only the primary server of the
	// zone is a Microsoft DNS server. "AUTH_SECONDARY" if only the secondary
	// server of the zone is a Microsoft DNS server. "AUTH_BOTH" if both the
	// primary and secondary servers of the zone are Microsoft DNS servers.
	MsManaged string `json:"ms_managed,omitempty"`

	// Determines if a Grid member manages the zone served by a Microsoft DNS
	// server in read-only mode. This flag is true when a Grid member manages the
	// zone in read-only mode, false otherwise. When the zone has the ms_read_only
	// flag set to True, no changes can be made to this zone.
	MsReadOnly bool `json:"ms_read_only,omitempty"`

	// The name of MS synchronization master for this zone.
	MsSyncMasterName string `json:"ms_sync_master_name,omitempty"`

	// A stub member name server group.
	NsGroup *string `json:"ns_group,omitempty"`

	// The parent zone of this zone. Note that when searching for reverse zones,
	// the "in-addr.arpa" notation should be used.
	Parent string `json:"parent,omitempty"`

	// The RFC2317 prefix value of this DNS zone. Use this field only when the
	// netmask is greater than 24 bits; that is, for a mask between 25 and 31 bits.
	// Enter a prefix, such as the name of the allocated address block. The prefix
	// can be alphanumeric characters, such as 128/26 , 128-189 , or sub-B.
	Prefix *string `json:"prefix,omitempty"`

	// The SOA email for the zone. This value can be in unicode format.
	SoaEmail string `json:"soa_email,omitempty"`

	// This setting defines the amount of time, in seconds, after which the
	// secondary server stops giving out answers about the zone because the zone
	// data is too old to be useful.
	SoaExpire uint32 `json:"soa_expire,omitempty"`

	// The SOA mname value for this zone. The Infoblox appliance allows you to
	// change the name of the primary server on the SOA record that is
	// automatically created when you initially configure a zone. Use this method
	// to change the name of the primary server on the SOA record. For example, you
	// may want to hide the primary server for a zone. If your device is named
	// dns1.zone.tld, and for security reasons, you want to show a secondary server
	// called dns2.zone.tld as the primary server. To do so, you would go to
	// dns1.zone.tld zone (being the true primary) and change the primary server on
	// the SOA to dns2.zone.tld to hide the true identity of the real primary
	// server. This value can be in unicode format.
	SoaMname string `json:"soa_mname,omitempty"`

	// The negative Time to Live (TTL) value of the SOA of the zone indicates how
	// long a secondary server can cache data for "Does Not Respond" responses.
	SoaNegativeTtl uint32 `json:"soa_negative_ttl,omitempty"`

	// This indicates the interval at which a secondary server sends a message to
	// the primary server for a zone to check that its data is current, and
	// retrieve fresh data if it is not.
	SoaRefresh uint32 `json:"soa_refresh,omitempty"`

	// This indicates how long a secondary server must wait before attempting to
	// recontact the primary server after a connection failure between the two
	// servers occurs.
	SoaRetry uint32 `json:"soa_retry,omitempty"`

	// The serial number in the SOA record incrementally changes every time the
	// record is modified. The Infoblox appliance allows you to change the serial
	// number (in the SOA record) for the primary server so it is higher than the
	// secondary server, thereby ensuring zone transfers come from the primary
	// server.
	SoaSerialNumber uint32 `json:"soa_serial_number,omitempty"`

	// The primary servers (masters) of this stub zone.
	StubFrom []NameServer `json:"stub_from,omitempty"`

	// The Grid member servers of this stub zone. Note that the
	// lead/stealth/grid_replicate/
	// preferred_primaries/override_preferred_primaries fields of the struct will
	// be ignored when set in this field.
	StubMembers []*Memberserver `json:"stub_members,omitempty"`

	// The Microsoft DNS servers of this stub zone. Note that the stealth field of
	// the struct will be ignored when set in this field.
	StubMsservers []*Msdnsserver `json:"stub_msservers,omitempty"`

	// This is true if the zone is associated with a shared record group.
	UsingSrgAssociations bool `json:"using_srg_associations,omitempty"`

	// The name of the DNS view in which the zone resides. Example "external".
	View *string `json:"view,omitempty"`

	// Determines the format of this zone.
	ZoneFormat string `json:"zone_format,omitempty"`
}

func (ZoneStub) ObjectType() string {
	return "zone_stub"
}

func (obj ZoneStub) ReturnFields() []string {
	if obj.returnFields == nil {
		obj.returnFields = []string{"fqdn", "stub_from", "view"}
	}
	return obj.returnFields
}

// AdAuthServer represents Infoblox struct ad_auth_server
type AdAuthServer struct {
	// The FQDN (Fully Qualified Domain Name) or IP address of the server.
	FqdnOrIp string `json:"fqdn_or_ip,omitempty"`

	// The authentication port.
	AuthPort uint32 `json:"auth_port,omitempty"`

	// The descriptive comment for the AD authentication server.
	Comment string `json:"comment,omitempty"`

	// Determines if the AD authorization server is disabled.
	Disabled bool `json:"disabled,omitempty"`

	// The type of encryption to use.
	Encryption string `json:"encryption,omitempty"`

	// Determine if the MGMT port is enabled for the AD authentication server.
	MgmtPort bool `json:"mgmt_port,omitempty"`

	// Use flag for: mgmt_port
	UseMgmtPort bool `json:"use_mgmt_port,omitempty"`
}

// Addressac represents Infoblox struct addressac
type Addressac struct {
	// The address this rule applies to or "Any".
	Address string `json:"address,omitempty"`

	// The permission to use for this address.
	Permission string `json:"permission,omitempty"`

	// A generated TSIG key. If the external primary server is a NIOS appliance
	// running DNS One 2.x code, this can be set to :2xCOMPAT.
	TsigKey string `json:"tsig_key,omitempty"`

	// The TSIG key algorithm.
	TsigKeyAlg string `json:"tsig_key_alg,omitempty"`

	// The name of the TSIG key. If 2.x TSIG compatibility is used, this is set to
	// 'tsig_xfer' on retrieval, and ignored on insert or update.
	TsigKeyName string `json:"tsig_key_name,omitempty"`

	// Use flag for: tsig_key_name
	UseTsigKeyName bool `json:"use_tsig_key_name,omitempty"`
}

// AdmingroupAdminsetcommands represents Infoblox struct admingroup:adminsetcommands
type AdmingroupAdminsetcommands struct {
	// If True then CLI user has permission to run the command
	SetAdminGroupAcl bool `json:"set_admin_group_acl,omitempty"`

	// If True then CLI user has permission to run the command
	EtBfd bool `json:"et_bfd,omitempty"`

	// If True then CLI user has permission to run the command
	SetBfd bool `json:"set_bfd,omitempty"`

	// If True then CLI user has permission to run the command
	SetBgp bool `json:"set_bgp,omitempty"`

	// If True then CLI user has permission to run the command
	SetBloxtools bool `json:"set_bloxtools,omitempty"`

	// If True then CLI user has permission to run the command
	SetCleanMscache bool `json:"set_clean_mscache,omitempty"`

	// If True then CLI user has permission to run the command
	SetDebug bool `json:"set_debug,omitempty"`

	// If True then CLI user has permission to run the command
	SetDebugAnalytics bool `json:"set_debug_analytics,omitempty"`

	// If True then CLI user has permission to run the command
	SetDeleteTasksInterval bool `json:"set_delete_tasks_interval,omitempty"`

	// If True then CLI user has permission to run the command
	SetDisableGuiOneClickSupport bool `json:"set_disable_gui_one_click_support,omitempty"`

	// If True then CLI user has permission to run the command
	SetHardwareType bool `json:"set_hardware_type,omitempty"`

	// If True then CLI user has permission to run the command
	SetIbtrap bool `json:"set_ibtrap,omitempty"`

	// If True then CLI user has permission to run the command
	SetLcd bool `json:"set_lcd,omitempty"`

	// If True then CLI user has permission to run the command
	SetLcdSettings bool `json:"set_lcd_settings,omitempty"`

	// If True then CLI user has permission to run the command
	SetLines bool `json:"set_lines,omitempty"`

	// If True then CLI user has permission to run the command
	SetMsMaxConnection bool `json:"set_ms_max_connection,omitempty"`

	// If True then CLI user has permission to run the command
	SetNosafemode bool `json:"set_nosafemode,omitempty"`

	// If True then CLI user has permission to run the command
	SetOcsp bool `json:"set_ocsp,omitempty"`

	// If True then CLI user has permission to run the command
	SetPurgeRestartObjects bool `json:"set_purge_restart_objects,omitempty"`

	// If True then CLI user has permission to run the command
	SetReportingUserCapabilities bool `json:"set_reporting_user_capabilities,omitempty"`

	// If True then CLI user has permission to run the command
	SetRpzRecursiveOnly bool `json:"set_rpz_recursive_only,omitempty"`

	// If True then CLI user has permission to run the command
	SetSafemode bool `json:"set_safemode,omitempty"`

	// If True then CLI user has permission to run the command
	SetScheduled bool `json:"set_scheduled,omitempty"`

	// If True then CLI user has permission to run the command
	SetSnmptrap bool `json:"set_snmptrap,omitempty"`

	// If True then CLI user has permission to run the command
	SetSysname bool `json:"set_sysname,omitempty"`

	// If True then CLI user has permission to run the command
	SetTerm bool `json:"set_term,omitempty"`

	// If True then CLI user has permission to run the command
	SetThresholdtrap bool `json:"set_thresholdtrap,omitempty"`

	// If True then CLI user has permission to run the command
	SetExpertmode bool `json:"set_expertmode,omitempty"`

	// If True then CLI user has permission to run the command
	SetMaintenancemode bool `json:"set_maintenancemode,omitempty"`

	// If True then CLI user has permission to run the command
	SetTransferReportingData bool `json:"set_transfer_reporting_data,omitempty"`

	// If True then CLI user has permission to run the command
	SetTransferSupportbundle bool `json:"set_transfer_supportbundle,omitempty"`

	// If True then CLI user has permission to run the command
	SetAnalyticsDatabaseDump bool `json:"set_analytics_database_dump,omitempty"`

	// If True then CLI user has permission to run the command
	SetAnalyticsParameter bool `json:"set_analytics_parameter,omitempty"`

	// If True then CLI user has permission to run the command
	SetCollectOldLogs bool `json:"set_collect_old_logs,omitempty"`

	// If True then CLI user has permission to run the command
	SetCoreFilesQuota bool `json:"set_core_files_quota,omitempty"`

	// If True then CLI user has permission to run the command
	SetHsmGroup bool `json:"set_hsm_group,omitempty"`

	// If True then CLI user has permission to run the command
	SetWred bool `json:"set_wred,omitempty"`

	// If True then CLI user has permission to run the command
	SetEnableDohKeyLogging bool `json:"set_enable_doh_key_logging,omitempty"`

	// If True then CLI user has permission to run the command
	SetEnableDotKeyLogging bool `json:"set_enable_dot_key_logging,omitempty"`

	// If True then CLI user has permission to run the command
	SetHotfix bool `json:"set_hotfix,omitempty"`

	// If True then CLI user has permission to run the command
	SetMgm bool `json:"set_mgm,omitempty"`

	// If True then CLI user has permission to run the command
	SetNtpStratum bool `json:"set_ntp_stratum,omitempty"`

	// If True then CLI user has permission to run the command
	SetPcDomain bool `json:"set_pc_domain,omitempty"`

	// If True then CLI user has permission to run the command
	SetReportFrequency bool `json:"set_report_frequency,omitempty"`

	// If True then enable all fields
	EnableAll bool `json:"enable_all,omitempty"`

	// If True then disable all fields
	DisableAll bool `json:"disable_all,omitempty"`
}

// AdmingroupAdminshowcommands represents Infoblox struct admingroup:adminshowcommands
type AdmingroupAdminshowcommands struct {
	// If True then CLI user has permission to run the command
	ShowAdminGroupAcl bool `json:"show_admin_group_acl,omitempty"`

	// If True then CLI user has permission to run the command
	ShowAnalyticsParameter bool `json:"show_analytics_parameter,omitempty"`

	// If True then CLI user has permission to run the command
	ShowArp bool `json:"show_arp,omitempty"`

	// If True then CLI user has permission to run the command
	ShowBfd bool `json:"show_bfd,omitempty"`

	// If True then CLI user has permission to run the command
	ShowBgp bool `json:"show_bgp,omitempty"`

	// If True then CLI user has permission to run the command
	ShowBloxtools bool `json:"show_bloxtools,omitempty"`

	// If True then CLI user has permission to run the command
	ShowCapacity bool `json:"show_capacity,omitempty"`

	// If True then CLI user has permission to run the command
	ShowClusterdInfo bool `json:"show_clusterd_info,omitempty"`

	// If True then CLI user has permission to run the command
	ShowConfig bool `json:"show_config,omitempty"`

	// If True then CLI user has permission to run the command
	ShowCpu bool `json:"show_cpu,omitempty"`

	// If True then CLI user has permission to run the command
	ShowDate bool `json:"show_date,omitempty"`

	// If True then CLI user has permission to run the command
	ShowDebug bool `json:"show_debug,omitempty"`

	// If True then CLI user has permission to run the command
	ShowDebugAnalytics bool `json:"show_debug_analytics,omitempty"`

	// If True then CLI user has permission to run the command
	ShowDeleteTasksInterval bool `json:"show_delete_tasks_interval,omitempty"`

	// If True then CLI user has permission to run the command
	ShowDisk bool `json:"show_disk,omitempty"`

	// If True then CLI user has permission to run the command
	ShowFile bool `json:"show_file,omitempty"`

	// If True then CLI user has permission to run the command
	ShowHardwareType bool `json:"show_hardware_type,omitempty"`

	// If True then CLI user has permission to run the command
	ShowHardwareStatus bool `json:"show_hardware_status,omitempty"`

	// If True then CLI user has permission to run the command
	ShowHwid bool `json:"show_hwid,omitempty"`

	// If True then CLI user has permission to run the command
	ShowIbtrap bool `json:"show_ibtrap,omitempty"`

	// If True then CLI user has permission to run the command
	ShowLcd bool `json:"show_lcd,omitempty"`

	// If True then CLI user has permission to run the command
	ShowLcdInfo bool `json:"show_lcd_info,omitempty"`

	// If True then CLI user has permission to run the command
	ShowLcdSettings bool `json:"show_lcd_settings,omitempty"`

	// If True then CLI user has permission to run the command
	ShowLog bool `json:"show_log,omitempty"`

	// If True then CLI user has permission to run the command
	ShowLogfiles bool `json:"show_logfiles,omitempty"`

	// If True then CLI user has permission to run the command
	ShowMemory bool `json:"show_memory,omitempty"`

	// If True then CLI user has permission to run the command
	ShowNtp bool `json:"show_ntp,omitempty"`

	// If True then CLI user has permission to run the command
	ShowReportingUserCapabilities bool `json:"show_reporting_user_capabilities,omitempty"`

	// If True then CLI user has permission to run the command
	ShowRpzRecursiveOnly bool `json:"show_rpz_recursive_only,omitempty"`

	// If True then CLI user has permission to run the command
	ShowScheduled bool `json:"show_scheduled,omitempty"`

	// If True then CLI user has permission to run the command
	ShowSnmp bool `json:"show_snmp,omitempty"`

	// If True then CLI user has permission to run the command
	ShowStatus bool `json:"show_status,omitempty"`

	// If True then CLI user has permission to run the command
	ShowTechSupport bool `json:"show_tech_support,omitempty"`

	// If True then CLI user has permission to run the command
	ShowTemperature bool `json:"show_temperature,omitempty"`

	// If True then CLI user has permission to run the command
	ShowThresholdtrap bool `json:"show_thresholdtrap,omitempty"`

	// If True then CLI user has permission to run the command
	ShowUpgradeHistory bool `json:"show_upgrade_history,omitempty"`

	// If True then CLI user has permission to run the command
	ShowUptime bool `json:"show_uptime,omitempty"`

	// If True then CLI user has permission to run the command
	ShowVersion bool `json:"show_version,omitempty"`

	// If True then CLI user has permission to run the command
	ShowAnalyticsDatabaseDumps bool `json:"show_analytics_database_dumps,omitempty"`

	// If True then CLI user has permission to run the command
	ShowCores bool `json:"show_cores,omitempty"`

	// If True then CLI user has permission to run the command
	ShowCoresummary bool `json:"show_coresummary,omitempty"`

	// If True then CLI user has permission to run the command
	ShowCspThreatDb bool `json:"show_csp_threat_db,omitempty"`

	// If True then CLI user has permission to run the command
	ShowHsmGroup bool `json:"show_hsm_group,omitempty"`

	// If True then CLI user has permission to run the command
	ShowHsmInfo bool `json:"show_hsm_info,omitempty"`

	// If True then CLI user has permission to run the command
	ShowPmap bool `json:"show_pmap,omitempty"`

	// If True then CLI user has permission to run the command
	ShowProcess bool `json:"show_process,omitempty"`

	// If True then CLI user has permission to run the command
	ShowPstack bool `json:"show_pstack,omitempty"`

	// If True then CLI user has permission to run the command
	ShowSafenetSupportInfo bool `json:"show_safenet_support_info,omitempty"`

	// If True then CLI user has permission to run the command
	ShowWredStats bool `json:"show_wred_stats,omitempty"`

	// If True then CLI user has permission to run the command
	ShowWredStatus bool `json:"show_wred_status,omitempty"`

	// If True then CLI user has permission to run the command
	ShowNtpStratum bool `json:"show_ntp_stratum,omitempty"`

	// If True then CLI user has permission to run the command
	ShowPcDomain bool `json:"show_pc_domain,omitempty"`

	// If True then CLI user has permission to run the command
	ShowReportFrequency bool `json:"show_report_frequency,omitempty"`

	// If True then enable all fields
	EnableAll bool `json:"enable_all,omitempty"`

	// If True then disable all fields
	DisableAll bool `json:"disable_all,omitempty"`
}

// AdmingroupAdmintoplevelcommands represents Infoblox struct admingroup:admintoplevelcommands
type AdmingroupAdmintoplevelcommands struct {
	// If True then CLI user has permission to run the command
	Ps bool `json:"ps,omitempty"`

	// If True then CLI user has permission to run the command
	Iostat bool `json:"iostat,omitempty"`

	// If True then CLI user has permission to run the command
	Netstat bool `json:"netstat,omitempty"`

	// If True then CLI user has permission to run the command
	Vmstat bool `json:"vmstat,omitempty"`

	// If True then CLI user has permission to run the command
	Tcpdump bool `json:"tcpdump,omitempty"`

	// If True then CLI user has permission to run the command
	Rndc bool `json:"rndc,omitempty"`

	// If True then CLI user has permission to run the command
	Sar bool `json:"sar,omitempty"`

	// If True then CLI user has permission to run the command
	Resilver bool `json:"resilver,omitempty"`

	// If True then CLI user has permission to run the command
	RestartProduct bool `json:"restart_product,omitempty"`

	// If True then CLI user has permission to run the command
	Scrape bool `json:"scrape,omitempty"`

	// If True then CLI user has permission to run the command
	SamlRestart bool `json:"saml_restart,omitempty"`

	// If True then CLI user has permission to run the command
	Synctime bool `json:"synctime,omitempty"`

	// If True then enable all fields
	EnableAll bool `json:"enable_all,omitempty"`

	// If True then disable all fields
	DisableAll bool `json:"disable_all,omitempty"`
}

// AdmingroupCloudsetcommands represents Infoblox struct admingroup:cloudsetcommands
type AdmingroupCloudsetcommands struct {
	// If True then CLI user has permission to run the command
	SetCloudServicesPortalForceRefresh bool `json:"set_cloud_services_portal_force_refresh,omitempty"`

	// If True then CLI user has permission to run the command
	SetCloudServicesPortal bool `json:"set_cloud_services_portal,omitempty"`

	// If True then enable all fields
	EnableAll bool `json:"enable_all,omitempty"`

	// If True then disable all fields
	DisableAll bool `json:"disable_all,omitempty"`
}

// AdmingroupCloudshowcommands represents Infoblox struct admingroup:cloudshowcommands
type AdmingroupCloudshowcommands struct {
	// If True then CLI user has permission to run the command
	ShowCloudServicesPortal bool `json:"show_cloud_services_portal,omitempty"`

	// If True then enable all fields
	EnableAll bool `json:"enable_all,omitempty"`

	// If True then disable all fields
	DisableAll bool `json:"disable_all,omitempty"`
}

// AdmingroupDatabasesetcommands represents Infoblox struct admingroup:databasesetcommands
type AdmingroupDatabasesetcommands struct {
	// If True then CLI user has permission to run the command
	SetNamedMaxJournalSize bool `json:"set_named_max_journal_size,omitempty"`

	// If True then CLI user has permission to run the command
	SetTxnTrace bool `json:"set_txn_trace,omitempty"`

	// If True then CLI user has permission to run the command
	SetDatabaseTransfer bool `json:"set_database_transfer,omitempty"`

	// If True then CLI user has permission to run the command
	SetDbRollover bool `json:"set_db_rollover,omitempty"`

	// If True then CLI user has permission to run the command
	SetDbSnapshot bool `json:"set_db_snapshot,omitempty"`

	// If True then CLI user has permission to run the command
	SetDbsize bool `json:"set_dbsize,omitempty"`

	// If True then CLI user has permission to run the command
	SetDebugTools bool `json:"set_debug_tools,omitempty"`

	// If True then CLI user has permission to run the command
	SetCircTxnTrace bool `json:"set_circ_txn_trace,omitempty"`

	// If True then enable all fields
	EnableAll bool `json:"enable_all,omitempty"`

	// If True then disable all fields
	DisableAll bool `json:"disable_all,omitempty"`
}

// AdmingroupDatabaseshowcommands represents Infoblox struct admingroup:databaseshowcommands
type AdmingroupDatabaseshowcommands struct {
	// If True then CLI user has permission to run the command
	ShowNamedMaxJournalSize bool `json:"show_named_max_journal_size,omitempty"`

	// If True then CLI user has permission to run the command
	ShowTxnTrace bool `json:"show_txn_trace,omitempty"`

	// If True then CLI user has permission to run the command
	ShowDatabaseTransferStatus bool `json:"show_database_transfer_status,omitempty"`

	// If True then CLI user has permission to run the command
	ShowBackup bool `json:"show_backup,omitempty"`

	// If True then CLI user has permission to run the command
	ShowDbPh bool `json:"show_db_ph,omitempty"`

	// If True then CLI user has permission to run the command
	ShowDbsize bool `json:"show_dbsize,omitempty"`

	// If True then CLI user has permission to run the command
	ShowIbdbstat bool `json:"show_ibdbstat,omitempty"`

	// If True then enable all fields
	EnableAll bool `json:"enable_all,omitempty"`

	// If True then disable all fields
	DisableAll bool `json:"disable_all,omitempty"`
}

// AdmingroupDhcpsetcommands represents Infoblox struct admingroup:dhcpsetcommands
type AdmingroupDhcpsetcommands struct {
	// If True then CLI user has permission to run the command
	SetDhcpdRecvSockBufSize bool `json:"set_dhcpd_recv_sock_buf_size,omitempty"`

	// If True then CLI user has permission to run the command
	SetLogTxnId bool `json:"set_log_txn_id,omitempty"`

	// If True then CLI user has permission to run the command
	SetOverloadBootp bool `json:"set_overload_bootp,omitempty"`

	// If True then CLI user has permission to run the command
	SetRegenerateDhcpUpdaterKeys bool `json:"set_regenerate_dhcp_updater_keys,omitempty"`

	// If True then enable all fields
	EnableAll bool `json:"enable_all,omitempty"`

	// If True then disable all fields
	DisableAll bool `json:"disable_all,omitempty"`
}

// AdmingroupDhcpshowcommands represents Infoblox struct admingroup:dhcpshowcommands
type AdmingroupDhcpshowcommands struct {
	// If True then CLI user has permission to run the command
	ShowDhcpGssTsig bool `json:"show_dhcp_gss_tsig,omitempty"`

	// If True then CLI user has permission to run the command
	ShowDhcpv6GssTsig bool `json:"show_dhcpv6_gss_tsig,omitempty"`

	// If True then CLI user has permission to run the command
	ShowDhcpdRecvSockBufSize bool `json:"show_dhcpd_recv_sock_buf_size,omitempty"`

	// If True then CLI user has permission to run the command
	ShowOverloadBootp bool `json:"show_overload_bootp,omitempty"`

	// If True then CLI user has permission to run the command
	ShowLogTxnId bool `json:"show_log_txn_id,omitempty"`

	// If True then enable all fields
	EnableAll bool `json:"enable_all,omitempty"`

	// If True then disable all fields
	DisableAll bool `json:"disable_all,omitempty"`
}

// AdmingroupDnssetcommands represents Infoblox struct admingroup:dnssetcommands
type AdmingroupDnssetcommands struct {
	// If True then CLI user has permission to run the command
	SetDns bool `json:"set_dns,omitempty"`

	// If True then CLI user has permission to run the command
	SetDnsRrl bool `json:"set_dns_rrl,omitempty"`

	// If True then CLI user has permission to run the command
	SetEnableDnstap bool `json:"set_enable_dnstap,omitempty"`

	// If True then CLI user has permission to run the command
	SetEnableMatchRecursiveOnly bool `json:"set_enable_match_recursive_only,omitempty"`

	// If True then CLI user has permission to run the command
	SetExtraDnsNameValidations bool `json:"set_extra_dns_name_validations,omitempty"`

	// If True then CLI user has permission to run the command
	SetLogGuestLookups bool `json:"set_log_guest_lookups,omitempty"`

	// If True then CLI user has permission to run the command
	SetMaxRecursionDepth bool `json:"set_max_recursion_depth,omitempty"`

	// If True then CLI user has permission to run the command
	SetMaxRecursionQueries bool `json:"set_max_recursion_queries,omitempty"`

	// If True then CLI user has permission to run the command
	SetMonitor bool `json:"set_monitor,omitempty"`

	// If True then CLI user has permission to run the command
	SetMsDnsReportsSyncInterval bool `json:"set_ms_dns_reports_sync_interval,omitempty"`

	// If True then CLI user has permission to run the command
	SetMsStickyIp bool `json:"set_ms_sticky_ip,omitempty"`

	// If True then CLI user has permission to run the command
	SetRestartAnycastWithDnsRestart bool `json:"set_restart_anycast_with_dns_restart,omitempty"`

	// If True then CLI user has permission to run the command
	SetDnsAccel bool `json:"set_dns_accel,omitempty"`

	// If True then CLI user has permission to run the command
	SetDnsAccelDebug bool `json:"set_dns_accel_debug,omitempty"`

	// If True then CLI user has permission to run the command
	SetDnsAutoGen bool `json:"set_dns_auto_gen,omitempty"`

	// If True then CLI user has permission to run the command
	SetAllowQueryDomain bool `json:"set_allow_query_domain,omitempty"`

	// If True then enable all fields
	EnableAll bool `json:"enable_all,omitempty"`

	// If True then disable all fields
	DisableAll bool `json:"disable_all,omitempty"`
}

// AdmingroupDnsshowcommands represents Infoblox struct admingroup:dnsshowcommands
type AdmingroupDnsshowcommands struct {
	// If True then CLI user has permission to run the command
	ShowLogGuestLookups bool `json:"show_log_guest_lookups,omitempty"`

	// If True then CLI user has permission to run the command
	ShowDnsGssTsig bool `json:"show_dns_gss_tsig,omitempty"`

	// If True then CLI user has permission to run the command
	ShowDns bool `json:"show_dns,omitempty"`

	// If True then CLI user has permission to run the command
	ShowDnstapStats bool `json:"show_dnstap_stats,omitempty"`

	// If True then CLI user has permission to run the command
	ShowDnstapStatus bool `json:"show_dnstap_status,omitempty"`

	// If True then CLI user has permission to run the command
	ShowDnsOverTlsConfig bool `json:"show_dns_over_tls_config,omitempty"`

	// If True then CLI user has permission to run the command
	ShowDnsOverTlsStatus bool `json:"show_dns_over_tls_status,omitempty"`

	// If True then CLI user has permission to run the command
	ShowDnsOverTlsStats bool `json:"show_dns_over_tls_stats,omitempty"`

	// If True then CLI user has permission to run the command
	ShowDohConfig bool `json:"show_doh_config,omitempty"`

	// If True then CLI user has permission to run the command
	ShowDohStatus bool `json:"show_doh_status,omitempty"`

	// If True then CLI user has permission to run the command
	ShowDohStats bool `json:"show_doh_stats,omitempty"`

	// If True then CLI user has permission to run the command
	ShowExtraDnsNameValidations bool `json:"show_extra_dns_name_validations,omitempty"`

	// If True then CLI user has permission to run the command
	ShowMsStickyIp bool `json:"show_ms_sticky_ip,omitempty"`

	// If True then CLI user has permission to run the command
	ShowDnsRrl bool `json:"show_dns_rrl,omitempty"`

	// If True then CLI user has permission to run the command
	ShowEnableMatchRecursiveOnly bool `json:"show_enable_match_recursive_only,omitempty"`

	// If True then CLI user has permission to run the command
	ShowMaxRecursionDepth bool `json:"show_max_recursion_depth,omitempty"`

	// If True then CLI user has permission to run the command
	ShowMaxRecursionQueries bool `json:"show_max_recursion_queries,omitempty"`

	// If True then CLI user has permission to run the command
	ShowMonitor bool `json:"show_monitor,omitempty"`

	// If True then CLI user has permission to run the command
	ShowQueryCapture bool `json:"show_query_capture,omitempty"`

	// If True then CLI user has permission to run the command
	ShowDtcEa bool `json:"show_dtc_ea,omitempty"`

	// If True then CLI user has permission to run the command
	ShowDtcGeoip bool `json:"show_dtc_geoip,omitempty"`

	// If True then CLI user has permission to run the command
	ShowRestartAnycastWithDnsRestart bool `json:"show_restart_anycast_with_dns_restart,omitempty"`

	// If True then CLI user has permission to run the command
	ShowDnsAccel bool `json:"show_dns_accel,omitempty"`

	// If True then CLI user has permission to run the command
	ShowDnsAccelDebug bool `json:"show_dns_accel_debug,omitempty"`

	// If True then CLI user has permission to run the command
	ShowAllowQueryDomain bool `json:"show_allow_query_domain,omitempty"`

	// If True then CLI user has permission to run the command
	ShowAllowQueryDomainViews bool `json:"show_allow_query_domain_views,omitempty"`

	// If True then enable all fields
	EnableAll bool `json:"enable_all,omitempty"`

	// If True then disable all fields
	DisableAll bool `json:"disable_all,omitempty"`
}

// AdmingroupDnstoplevelcommands represents Infoblox struct admingroup:dnstoplevelcommands
type AdmingroupDnstoplevelcommands struct {
	// If True then CLI user has permission to run the command
	DdnsAdd bool `json:"ddns_add,omitempty"`

	// If True then CLI user has permission to run the command
	DdnsDelete bool `json:"ddns_delete,omitempty"`

	// If True then CLI user has permission to run the command
	Delete bool `json:"delete,omitempty"`

	// If True then CLI user has permission to run the command
	DnsARecordDelete bool `json:"dns_a_record_delete,omitempty"`

	// If True then enable all fields
	EnableAll bool `json:"enable_all,omitempty"`

	// If True then disable all fields
	DisableAll bool `json:"disable_all,omitempty"`
}

// AdmingroupDockersetcommands represents Infoblox struct admingroup:dockersetcommands
type AdmingroupDockersetcommands struct {
	// If True then CLI user has permission to run the command
	SetDockerBridge bool `json:"set_docker_bridge,omitempty"`

	// If True then enable all fields
	EnableAll bool `json:"enable_all,omitempty"`

	// If True then disable all fields
	DisableAll bool `json:"disable_all,omitempty"`
}

// AdmingroupDockershowcommands represents Infoblox struct admingroup:dockershowcommands
type AdmingroupDockershowcommands struct {
	// If True then CLI user has permission to run the command
	ShowDockerBridge bool `json:"show_docker_bridge,omitempty"`

	// If True then enable all fields
	EnableAll bool `json:"enable_all,omitempty"`

	// If True then disable all fields
	DisableAll bool `json:"disable_all,omitempty"`
}

// AdmingroupGridsetcommands represents Infoblox struct admingroup:gridsetcommands
type AdmingroupGridsetcommands struct {
	// If True then CLI user has permission to run the command
	SetDefaultRevertWindow bool `json:"set_default_revert_window,omitempty"`

	// If True then CLI user has permission to run the command
	SetDscp bool `json:"set_dscp,omitempty"`

	// If True then CLI user has permission to run the command
	SetMembership bool `json:"set_membership,omitempty"`

	// If True then CLI user has permission to run the command
	SetNogrid bool `json:"set_nogrid,omitempty"`

	// If True then CLI user has permission to run the command
	SetNomastergrid bool `json:"set_nomastergrid,omitempty"`

	// If True then CLI user has permission to run the command
	SetPromoteMaster bool `json:"set_promote_master,omitempty"`

	// If True then CLI user has permission to run the command
	SetRevertGrid bool `json:"set_revert_grid,omitempty"`

	// If True then CLI user has permission to run the command
	SetToken bool `json:"set_token,omitempty"`

	// If True then CLI user has permission to run the command
	SetTestPromoteMaster bool `json:"set_test_promote_master,omitempty"`

	// If True then enable all fields
	EnableAll bool `json:"enable_all,omitempty"`

	// If True then disable all fields
	DisableAll bool `json:"disable_all,omitempty"`
}

// AdmingroupGridshowcommands represents Infoblox struct admingroup:gridshowcommands
type AdmingroupGridshowcommands struct {
	// If True then CLI user has permission to run the command
	ShowTestPromoteMaster bool `json:"show_test_promote_master,omitempty"`

	// If True then CLI user has permission to run the command
	ShowToken bool `json:"show_token,omitempty"`

	// If True then enable all fields
	EnableAll bool `json:"enable_all,omitempty"`

	// If True then disable all fields
	DisableAll bool `json:"disable_all,omitempty"`

	// If True then CLI user has permission to run the command
	ShowDscp bool `json:"show_dscp,omitempty"`
}

// AdmingroupLicensingsetcommands represents Infoblox struct admingroup:licensingsetcommands
type AdmingroupLicensingsetcommands struct {
	// If True then CLI user has permission to run the command
	SetLicense bool `json:"set_license,omitempty"`

	// If True then CLI user has permission to run the command
	SetReportingResetLicense bool `json:"set_reporting_reset_license,omitempty"`

	// If True then CLI user has permission to run the command
	SetTempLicense bool `json:"set_temp_license,omitempty"`

	// If True then enable all fields
	EnableAll bool `json:"enable_all,omitempty"`

	// If True then disable all fields
	DisableAll bool `json:"disable_all,omitempty"`
}

// AdmingroupLicensingshowcommands represents Infoblox struct admingroup:licensingshowcommands
type AdmingroupLicensingshowcommands struct {
	// If True then CLI user has permission to run the command
	ShowLicense bool `json:"show_license,omitempty"`

	// If True then CLI user has permission to run the command
	ShowLicensePoolContainer bool `json:"show_license_pool_container,omitempty"`

	// If True then CLI user has permission to run the command
	ShowLicenseUid bool `json:"show_license_uid,omitempty"`

	// If True then enable all fields
	EnableAll bool `json:"enable_all,omitempty"`

	// If True then disable all fields
	DisableAll bool `json:"disable_all,omitempty"`
}

// AdmingroupLockoutsetting represents Infoblox struct admingroup:lockoutsetting
type AdmingroupLockoutsetting struct {
	// Enable/disable sequential failed login attempts lockout for local users
	EnableSequentialFailedLoginAttemptsLockout bool `json:"enable_sequential_failed_login_attempts_lockout,omitempty"`

	// The number of failed login attempts
	SequentialAttempts uint32 `json:"sequential_attempts,omitempty"`

	// Time period the account remains locked after sequential failed login attempt
	// lockout.
	FailedLockoutDuration uint32 `json:"failed_lockout_duration,omitempty"`

	// Never unlock option is also provided and if set then user account is locked
	// forever and only super user can unlock this account
	NeverUnlockUser bool `json:"never_unlock_user,omitempty"`
}

// AdmingroupMachinecontroltoplevelcommands represents Infoblox struct admingroup:machinecontroltoplevelcommands
type AdmingroupMachinecontroltoplevelcommands struct {
	// If True then CLI user has permission to run the command
	Reboot bool `json:"reboot,omitempty"`

	// If True then CLI user has permission to run the command
	Reset bool `json:"reset,omitempty"`

	// If True then CLI user has permission to run the command
	Shutdown bool `json:"shutdown,omitempty"`

	// If True then CLI user has permission to run the command
	Restart bool `json:"restart,omitempty"`

	// If True then enable all fields
	EnableAll bool `json:"enable_all,omitempty"`

	// If True then disable all fields
	DisableAll bool `json:"disable_all,omitempty"`
}

// AdmingroupNetworkingsetcommands represents Infoblox struct admingroup:networkingsetcommands
type AdmingroupNetworkingsetcommands struct {
	// If True then CLI user has permission to run the command
	SetConnectionLimit bool `json:"set_connection_limit,omitempty"`

	// If True then CLI user has permission to run the command
	SetDefaultRoute bool `json:"set_default_route,omitempty"`

	// If True then CLI user has permission to run the command
	SetInterface bool `json:"set_interface,omitempty"`

	// If True then CLI user has permission to run the command
	SetIpRateLimit bool `json:"set_ip_rate_limit,omitempty"`

	// If True then CLI user has permission to run the command
	SetIpv6DisableOnDad bool `json:"set_ipv6_disable_on_dad,omitempty"`

	// If True then CLI user has permission to run the command
	SetIpv6Neighbor bool `json:"set_ipv6_neighbor,omitempty"`

	// If True then CLI user has permission to run the command
	SetIpv6Ospf bool `json:"set_ipv6_ospf,omitempty"`

	// If True then CLI user has permission to run the command
	SetIpv6Status bool `json:"set_ipv6_status,omitempty"`

	// If True then CLI user has permission to run the command
	SetLom bool `json:"set_lom,omitempty"`

	// If True then CLI user has permission to run the command
	SetMldVersion1 bool `json:"set_mld_version_1,omitempty"`

	// If True then CLI user has permission to run the command
	SetNamedRecvSockBufSize bool `json:"set_named_recv_sock_buf_size,omitempty"`

	// If True then CLI user has permission to run the command
	SetNamedTcpClientsLimit bool `json:"set_named_tcp_clients_limit,omitempty"`

	// If True then CLI user has permission to run the command
	SetNetwork bool `json:"set_network,omitempty"`

	// If True then CLI user has permission to run the command
	SetOspf bool `json:"set_ospf,omitempty"`

	// If True then CLI user has permission to run the command
	SetPrompt bool `json:"set_prompt,omitempty"`

	// If True then CLI user has permission to run the command
	SetRemoteConsole bool `json:"set_remote_console,omitempty"`

	// If True then CLI user has permission to run the command
	SetStaticRoute bool `json:"set_static_route,omitempty"`

	// If True then CLI user has permission to run the command
	SetTcpTimestamps bool `json:"set_tcp_timestamps,omitempty"`

	// If True then CLI user has permission to run the command
	SetTrafficCapture bool `json:"set_traffic_capture,omitempty"`

	// If True then CLI user has permission to run the command
	SetWinsForwarding bool `json:"set_wins_forwarding,omitempty"`

	// If True then enable all fields
	EnableAll bool `json:"enable_all,omitempty"`

	// If True then disable all fields
	DisableAll bool `json:"disable_all,omitempty"`
}

// AdmingroupNetworkingshowcommands represents Infoblox struct admingroup:networkingshowcommands
type AdmingroupNetworkingshowcommands struct {
	// If True then CLI user has permission to run the command
	ShowConnectionLimit bool `json:"show_connection_limit,omitempty"`

	// If True then CLI user has permission to run the command
	ShowConnections bool `json:"show_connections,omitempty"`

	// If True then CLI user has permission to run the command
	ShowInterface bool `json:"show_interface,omitempty"`

	// If True then CLI user has permission to run the command
	ShowIpRateLimit bool `json:"show_ip_rate_limit,omitempty"`

	// If True then CLI user has permission to run the command
	ShowIpv6Bgp bool `json:"show_ipv6_bgp,omitempty"`

	// If True then CLI user has permission to run the command
	ShowIpv6DisableOnDad bool `json:"show_ipv6_disable_on_dad,omitempty"`

	// If True then CLI user has permission to run the command
	ShowIpv6Neighbor bool `json:"show_ipv6_neighbor,omitempty"`

	// If True then CLI user has permission to run the command
	ShowIpv6Ospf bool `json:"show_ipv6_ospf,omitempty"`

	// If True then CLI user has permission to run the command
	ShowLom bool `json:"show_lom,omitempty"`

	// If True then CLI user has permission to run the command
	ShowMldVersion bool `json:"show_mld_version,omitempty"`

	// If True then CLI user has permission to run the command
	ShowNamedRecvSockBufSize bool `json:"show_named_recv_sock_buf_size,omitempty"`

	// If True then CLI user has permission to run the command
	ShowNamedTcpClientsLimit bool `json:"show_named_tcp_clients_limit,omitempty"`

	// If True then CLI user has permission to run the command
	ShowNetwork bool `json:"show_network,omitempty"`

	// If True then CLI user has permission to run the command
	ShowOspf bool `json:"show_ospf,omitempty"`

	// If True then CLI user has permission to run the command
	ShowRemoteConsole bool `json:"show_remote_console,omitempty"`

	// If True then CLI user has permission to run the command
	ShowRoutes bool `json:"show_routes,omitempty"`

	// If True then CLI user has permission to run the command
	ShowStaticRoutes bool `json:"show_static_routes,omitempty"`

	// If True then CLI user has permission to run the command
	ShowTcpTimestamps bool `json:"show_tcp_timestamps,omitempty"`

	// If True then CLI user has permission to run the command
	ShowTrafficCaptureStatus bool `json:"show_traffic_capture_status,omitempty"`

	// If True then CLI user has permission to run the command
	ShowWinsForwarding bool `json:"show_wins_forwarding,omitempty"`

	// If True then CLI user has permission to run the command
	ShowDefaultRoute bool `json:"show_default_route,omitempty"`

	// If True then CLI user has permission to run the command
	ShowIproute bool `json:"show_iproute,omitempty"`

	// If True then CLI user has permission to run the command
	ShowIprule bool `json:"show_iprule,omitempty"`

	// If True then CLI user has permission to run the command
	ShowIptables bool `json:"show_iptables,omitempty"`

	// If True then CLI user has permission to run the command
	ShowMtuSize bool `json:"show_mtu_size,omitempty"`

	// If True then CLI user has permission to run the command
	ShowNetworkConnectivity bool `json:"show_network_connectivity,omitempty"`

	// If True then CLI user has permission to run the command
	ShowTrafficfiles bool `json:"show_trafficfiles,omitempty"`

	// If True then CLI user has permission to run the command
	ShowInterfaceStats bool `json:"show_interface_stats,omitempty"`

	// If True then enable all fields
	EnableAll bool `json:"enable_all,omitempty"`

	// If True then disable all fields
	DisableAll bool `json:"disable_all,omitempty"`
}

// AdmingroupPasswordsetting represents Infoblox struct admingroup:passwordsetting
type AdmingroupPasswordsetting struct {
	// Whether password expiry enabled or not.
	ExpireEnable bool `json:"expire_enable,omitempty"`

	// The days that password must expire
	ExpireDays uint32 `json:"expire_days,omitempty"`

	// Days to show up reminder prior to expiration
	ReminderDays uint32 `json:"reminder_days,omitempty"`
}

// AdmingroupSamlsetting represents Infoblox struct admingroup:samlsetting
type AdmingroupSamlsetting struct {
	// Whether or not auto create user.
	AutoCreateUser bool `json:"auto_create_user,omitempty"`

	// Whether or not persist auto created user after logout.
	PersistAutoCreatedUser bool `json:"persist_auto_created_user,omitempty"`
}

// AdmingroupSecuritysetcommands represents Infoblox struct admingroup:securitysetcommands
type AdmingroupSecuritysetcommands struct {
	// If True then CLI user has permission to run the command
	SetAdp bool `json:"set_adp,omitempty"`

	// If True then CLI user has permission to run the command
	SetApacheHttpsCert bool `json:"set_apache_https_cert,omitempty"`

	// If True then CLI user has permission to run the command
	SetCcMode bool `json:"set_cc_mode,omitempty"`

	// If True then CLI user has permission to run the command
	SetCertificateAuthAdmins bool `json:"set_certificate_auth_admins,omitempty"`

	// If True then CLI user has permission to run the command
	SetCertificateAuthServices bool `json:"set_certificate_auth_services,omitempty"`

	// If True then CLI user has permission to run the command
	SetCheckAuthNs bool `json:"set_check_auth_ns,omitempty"`

	// If True then CLI user has permission to run the command
	SetCheckSslCertificate bool `json:"set_check_ssl_certificate,omitempty"`

	// If True then CLI user has permission to run the command
	SetDisableHttpsCertRegeneration bool `json:"set_disable_https_cert_regeneration,omitempty"`

	// If True then CLI user has permission to run the command
	SetFipsMode bool `json:"set_fips_mode,omitempty"`

	// If True then CLI user has permission to run the command
	SetReportingCert bool `json:"set_reporting_cert,omitempty"`

	// If True then CLI user has permission to run the command
	SetSecurity bool `json:"set_security,omitempty"`

	// If True then CLI user has permission to run the command
	SetSessionTimeout bool `json:"set_session_timeout,omitempty"`

	// If True then CLI user has permission to run the command
	SetSubscriberSecureData bool `json:"set_subscriber_secure_data,omitempty"`

	// If True then CLI user has permission to run the command
	SetSupportAccess bool `json:"set_support_access,omitempty"`

	// If True then CLI user has permission to run the command
	SetSupportInstall bool `json:"set_support_install,omitempty"`

	// If True then CLI user has permission to run the command
	SetAdpDebug bool `json:"set_adp_debug,omitempty"`

	// If True then CLI user has permission to run the command
	SetSupportTimeout bool `json:"set_support_timeout,omitempty"`

	// If True then enable all fields
	EnableAll bool `json:"enable_all,omitempty"`

	// If True then disable all fields
	DisableAll bool `json:"disable_all,omitempty"`
}

// AdmingroupSecurityshowcommands represents Infoblox struct admingroup:securityshowcommands
type AdmingroupSecurityshowcommands struct {
	// If True then CLI user has permission to run the command
	ShowFipsMode bool `json:"show_fips_mode,omitempty"`

	// If True then CLI user has permission to run the command
	ShowCcMode bool `json:"show_cc_mode,omitempty"`

	// If True then CLI user has permission to run the command
	ShowCertificateAuthAdmins bool `json:"show_certificate_auth_admins,omitempty"`

	// If True then CLI user has permission to run the command
	ShowCertificateAuthServices bool `json:"show_certificate_auth_services,omitempty"`

	// If True then CLI user has permission to run the command
	ShowCheckAuthNs bool `json:"show_check_auth_ns,omitempty"`

	// If True then CLI user has permission to run the command
	ShowCheckSslCertificate bool `json:"show_check_ssl_certificate,omitempty"`

	// If True then CLI user has permission to run the command
	ShowSecurity bool `json:"show_security,omitempty"`

	// If True then CLI user has permission to run the command
	ShowSessionTimeout bool `json:"show_session_timeout,omitempty"`

	// If True then CLI user has permission to run the command
	ShowSubscriberSecureData bool `json:"show_subscriber_secure_data,omitempty"`

	// If True then CLI user has permission to run the command
	ShowSupportAccess bool `json:"show_support_access,omitempty"`

	// If True then CLI user has permission to run the command
	ShowVpnCertDates bool `json:"show_vpn_cert_dates,omitempty"`

	// If True then CLI user has permission to run the command
	ShowAdp bool `json:"show_adp,omitempty"`

	// If True then CLI user has permission to run the command
	ShowAdpDebug bool `json:"show_adp_debug,omitempty"`

	// If True then CLI user has permission to run the command
	ShowSupportTimeout bool `json:"show_support_timeout,omitempty"`

	// If True then enable all fields
	EnableAll bool `json:"enable_all,omitempty"`

	// If True then disable all fields
	DisableAll bool `json:"disable_all,omitempty"`
}

// AdmingroupTroubleshootingtoplevelcommands represents Infoblox struct admingroup:troubleshootingtoplevelcommands
type AdmingroupTroubleshootingtoplevelcommands struct {
	// If True then CLI user has permission to run the command
	Ping bool `json:"ping,omitempty"`

	// If True then CLI user has permission to run the command
	Ping6 bool `json:"ping6,omitempty"`

	// If True then CLI user has permission to run the command
	Strace bool `json:"strace,omitempty"`

	// If True then CLI user has permission to run the command
	Traceroute bool `json:"traceroute,omitempty"`

	// If True then CLI user has permission to run the command
	TrafficCapture bool `json:"traffic_capture,omitempty"`

	// If True then CLI user has permission to run the command
	Dig bool `json:"dig,omitempty"`

	// If True then CLI user has permission to run the command
	Rotate bool `json:"rotate,omitempty"`

	// If True then CLI user has permission to run the command
	Snmpwalk bool `json:"snmpwalk,omitempty"`

	// If True then CLI user has permission to run the command
	Snmpget bool `json:"snmpget,omitempty"`

	// If True then CLI user has permission to run the command
	Console bool `json:"console,omitempty"`

	// If True then CLI user has permission to run the command
	Tracepath bool `json:"tracepath,omitempty"`

	// If True then enable all fields
	EnableAll bool `json:"enable_all,omitempty"`

	// If True then disable all fields
	DisableAll bool `json:"disable_all,omitempty"`
}

// Adsites represents Infoblox struct adsites
type Adsites struct {
	// Flag to override MS Server default IP site link
	UseDefaultIpSiteLink bool `json:"use_default_ip_site_link,omitempty"`

	// Default IP site link for sites created from NIOS
	DefaultIpSiteLink string `json:"default_ip_site_link,omitempty"`

	// Flag to override login name and password from the MS Server
	UseLogin bool `json:"use_login,omitempty"`

	// Microsoft Server login name, with optional
	LoginName string `json:"login_name,omitempty"`

	// Microsoft Server login password.
	LoginPassword string `json:"login_password,omitempty"`

	// Flag to override synchronization interval from the MS Server
	UseSynchronizationMinDelay bool `json:"use_synchronization_min_delay,omitempty"`

	// Minimum number of minutes between two synchronizations
	SynchronizationMinDelay uint32 `json:"synchronization_min_delay,omitempty"`

	// Flag to override cluster LDAP timeoutMS Server
	UseLdapTimeout bool `json:"use_ldap_timeout,omitempty"`

	// Timeout in seconds for LDAP connections for this MS Server
	LdapTimeout uint32 `json:"ldap_timeout,omitempty"`

	// TCP port for LDAP connections for this
	LdapAuthPort uint32 `json:"ldap_auth_port,omitempty"`

	// Encryption for LDAP connections for this MS Server
	LdapEncryption string `json:"ldap_encryption,omitempty"`

	// Controls whether the Sites of this MS Server are to be synchronized by the
	// assigned managing member or not
	Managed bool `json:"managed,omitempty"`

	// Enable/disable read-only synchronization of Sites for this Active Directory
	// domain
	ReadOnly bool `json:"read_only,omitempty"`

	// Timestamp of the last synchronization attempt
	LastSyncTs *UnixTime `json:"last_sync_ts,omitempty"`

	// Status of the last synchronization attempt
	LastSyncStatus string `json:"last_sync_status,omitempty"`

	// The detailed status of the last synchronization attempt.
	LastSyncDetail string `json:"last_sync_detail,omitempty"`

	// Flag indicating if the server supports IPv6
	SupportsIpv6 bool `json:"supports_ipv6,omitempty"`
}

// Awsrte53recordinfo represents Infoblox struct awsrte53recordinfo
type Awsrte53recordinfo struct {
	// DNS name of the alias target.
	AliasTargetDnsName string `json:"alias_target_dns_name,omitempty"`

	// Hosted zone ID of the alias target.
	AliasTargetHostedZoneId string `json:"alias_target_hosted_zone_id,omitempty"`

	// Indicates if Amazon Route 53 evaluates the health of the alias target.
	AliasTargetEvaluateTargetHealth bool `json:"alias_target_evaluate_target_health,omitempty"`

	// Indicates whether this is the primary or secondary resource record for
	// Amazon Route 53 failover routing.
	Failover string `json:"failover,omitempty"`

	// Continent code for Amazon Route 53 geolocation routing.
	GeolocationContinentCode string `json:"geolocation_continent_code,omitempty"`

	// Country code for Amazon Route 53 geolocation routing.
	GeolocationCountryCode string `json:"geolocation_country_code,omitempty"`

	// Subdivision code for Amazon Route 53 geolocation routing.
	GeolocationSubdivisionCode string `json:"geolocation_subdivision_code,omitempty"`

	// ID of the health check that Amazon Route 53 performs for this resource
	// record.
	HealthCheckId string `json:"health_check_id,omitempty"`

	// Amazon EC2 region where this resource record resides for latency routing.
	Region string `json:"region,omitempty"`

	// An identifier that differentiates records with the same DNS name and type
	// for weighted, latency, geolocation, and failover routing.
	SetIdentifier string `json:"set_identifier,omitempty"`

	// Type of Amazon Route 53 resource record.
	Type string `json:"type,omitempty"`

	// Value that determines the portion of traffic for this record in weighted
	// routing. The range is from 0 to 255.
	Weight uint32 `json:"weight,omitempty"`
}

// Awsrte53task represents Infoblox struct awsrte53task
type Awsrte53task struct {
	// The name of this task.
	Name string `json:"name,omitempty"`

	// Indicates if the task is enabled or disabled.
	Disabled bool `json:"disabled,omitempty"`

	// Indicate the sync status of this task.
	State string `json:"state,omitempty"`

	// State message for the task.
	StateMsg string `json:"state_msg,omitempty"`

	// Filter for this task.
	Filter string `json:"filter,omitempty"`

	// Periodic interval for this task.
	ScheduleInterval uint32 `json:"schedule_interval,omitempty"`

	// Units for the schedule interval.
	ScheduleUnits string `json:"schedule_units,omitempty"`

	// Reference to associated AWS user whose credentials are to be used for this
	// task.
	AwsUser string `json:"aws_user,omitempty"`

	// The timestamp when the last state was logged.
	StatusTimestamp *UnixTime `json:"status_timestamp,omitempty"`

	// The timestamp when the task was started last.
	LastRun *UnixTime `json:"last_run,omitempty"`

	// Indicates whether public zones are synchronized.
	SyncPublicZones bool `json:"sync_public_zones,omitempty"`

	// Indicates whether private zones are synchronized.
	SyncPrivateZones bool `json:"sync_private_zones,omitempty"`

	// The number of zones synchronized by this task.
	ZoneCount uint32 `json:"zone_count,omitempty"`

	// Credentials type used for connecting to the cloud management platform.
	CredentialsType string `json:"credentials_type,omitempty"`
}

// Awsrte53zoneinfo represents Infoblox struct awsrte53zoneinfo
type Awsrte53zoneinfo struct {
	// List of AWS VPC strings that are associated with this zone.
	AssociatedVpcs []string `json:"associated_vpcs,omitempty"`

	// User specified caller reference when zone was created.
	CallerReference string `json:"caller_reference,omitempty"`

	// ID of delegation set associated with this zone.
	DelegationSetId string `json:"delegation_set_id,omitempty"`

	// AWS route 53 assigned ID for this zone.
	HostedZoneId string `json:"hosted_zone_id,omitempty"`

	// List of AWS name servers that are authoritative for this domain name.
	NameServers []string `json:"name_servers,omitempty"`

	// Number of resource record sets in the hosted zone.
	RecordSetCount uint32 `json:"record_set_count,omitempty"`

	// Indicates whether private or public zone.
	Type string `json:"type,omitempty"`
}

// Bgpas represents Infoblox struct bgpas
type Bgpas struct {
	// The number of this autonomous system.
	As uint32 `json:"as,omitempty"`

	// The AS keepalive timer (in seconds). The valid value is from 1 to 21845.
	Keepalive uint32 `json:"keepalive,omitempty"`

	// The AS holddown timer (in seconds). The valid value is from 3 to 65535.
	Holddown uint32 `json:"holddown,omitempty"`

	// The BGP neighbors for this AS.
	Neighbors []*Bgpneighbor `json:"neighbors,omitempty"`

	// Determines if link detection on the interface is enabled or not.
	LinkDetect bool `json:"link_detect,omitempty"`
}

// Bgpneighbor represents Infoblox struct bgpneighbor
type Bgpneighbor struct {
	// The interface that sends BGP advertisement information.
	Interface string `json:"interface,omitempty"`

	// The IP address of the BGP neighbor.
	NeighborIp string `json:"neighbor_ip,omitempty"`

	// The remote AS number of the BGP neighbor.
	RemoteAs uint32 `json:"remote_as,omitempty"`

	// The BGP authentication mode.
	AuthenticationMode string `json:"authentication_mode,omitempty"`

	// The password for a BGP neighbor. This is required only if
	// authentication_mode is set to "MD5". When the password is entered, the value
	// is preserved even if authentication_mode is changed to "NONE". This is a
	// write-only attribute.
	BgpNeighborPass string `json:"bgp_neighbor_pass,omitempty"`

	// User comments for this BGP neighbor.
	Comment string `json:"comment,omitempty"`

	// Determines if the multi-hop support is enabled or not.
	Multihop bool `json:"multihop,omitempty"`

	// The Time To Live (TTL) value for multi-hop. Valid values are between 1 and
	// 255.
	MultihopTtl uint32 `json:"multihop_ttl,omitempty"`

	// The BFD template name.
	BfdTemplate string `json:"bfd_template,omitempty"`

	// Determines if BFD is enabled or not.
	EnableBfd bool `json:"enable_bfd,omitempty"`
}

// CapacityreportObjectcount represents Infoblox struct capacityreport:objectcount
type CapacityreportObjectcount struct {
	// Object type name.
	TypeName string `json:"type_name,omitempty"`

	// Number of object type instances created.
	Count uint32 `json:"count,omitempty"`
}

// CaptiveportalFile represents Infoblox struct captiveportal:file
type CaptiveportalFile struct {
	// The name of the uploaded file.
	Name string `json:"name,omitempty"`

	// The type of the uploaded file.
	Type string `json:"type,omitempty"`
}

// Changedobject represents Infoblox struct changedobject
type Changedobject struct {
	// This is a description of the action that is applied to this object.
	Action string `json:"action,omitempty"`

	// The object name.
	Name string `json:"name,omitempty"`

	// A value of the object type, this may contain objects that are not yet
	// available in WAPI.
	Type string `json:"type,omitempty"`

	// The object type. This is undefined if the object is not yet supported.
	ObjectType string `json:"object_type,omitempty"`

	// A list of properties that are being changed.
	Properties []string `json:"properties,omitempty"`
}

// CiscoiseEaassociation represents Infoblox struct ciscoise:eaassociation
type CiscoiseEaassociation struct {
	// The Cisco ISE attribute name that is enabled for publishsing from a Cisco
	// ISE endpoint.
	Name string `json:"name,omitempty"`

	// The name of the extensible attribute definition object the Cisco ISE
	// attribute that is enabled for subscription is mapped on.
	MappedEa string `json:"mapped_ea,omitempty"`
}

// CiscoisePublishsetting represents Infoblox struct ciscoise:publishsetting
type CiscoisePublishsetting struct {
	// The list of NIOS extensible attributes enalbed for publishsing to Cisco ISE
	// endpoint.
	EnabledAttributes []string `json:"enabled_attributes,omitempty"`
}

// CiscoiseSubscribesetting represents Infoblox struct ciscoise:subscribesetting
type CiscoiseSubscribesetting struct {
	// The list of Cisco ISE attributes allowed for subscription.
	EnabledAttributes []string `json:"enabled_attributes,omitempty"`

	// The list of NIOS extensible attributes to Cisco ISE attributes mappings.
	MappedEaAttributes []*CiscoiseEaassociation `json:"mapped_ea_attributes,omitempty"`
}

// Clientsubnetdomain represents Infoblox struct clientsubnetdomain
type Clientsubnetdomain struct {
	// The FQDN that represents the ECS zone domain name.
	Domain string `json:"domain,omitempty"`

	// The ECS domain name permission.
	Permission string `json:"permission,omitempty"`
}

// Dhcpddns represents Infoblox struct dhcpddns
type Dhcpddns struct {
	// Indicate matching type.
	ZoneMatch string `json:"zone_match,omitempty"`

	// The ref of a DNS zone.
	DnsGridZone string `json:"dns_grid_zone,omitempty"`

	// The name of a Grid member.
	DnsGridPrimary string `json:"dns_grid_primary,omitempty"`

	// The name of external zone in FQDN format.
	DnsExtZone string `json:"dns_ext_zone,omitempty"`

	// The IP address of the External server. Valid when zone_match is "EXTERNAL"
	// or "ANY_EXTERNAL".
	DnsExtPrimary string `json:"dns_ext_primary,omitempty"`
}

// Dhcpmember represents Infoblox struct dhcpmember
type Dhcpmember struct {
	// The IPv4 Address of the Grid Member.
	Ipv4Addr string `json:"ipv4addr,omitempty"`

	// The IPv6 Address of the Grid Member.
	Ipv6Addr string `json:"ipv6addr,omitempty"`

	// The Grid member name
	Name string `json:"name,omitempty"`
}

// Dhcpoption represents Infoblox struct dhcpoption
type Dhcpoption struct {
	// Name of the DHCP option.
	Name string `json:"name,omitempty"`

	// The code of the DHCP option.
	Num uint32 `json:"num,omitempty"`

	// The name of the space this DHCP option is associated to.
	VendorClass string `json:"vendor_class,omitempty"`

	// Value of the DHCP option
	Value string `json:"value,omitempty"`

	// Only applies to special options that are displayed separately from other
	// options and have a use flag. These options are: * routers * router-templates
	// * domain-name-servers * domain-name * broadcast-address *
	// broadcast-address-offset * dhcp-lease-time * dhcp6.name-servers
	UseOption bool `json:"use_option,omitempty"`
}

// Dhcpserver represents Infoblox struct dhcpserver
type Dhcpserver struct {
	// Flag to override login name and password from the MS Server
	UseLogin bool `json:"use_login,omitempty"`

	// Microsoft Server login name
	LoginName string `json:"login_name,omitempty"`

	// Microsoft Server login password
	LoginPassword string `json:"login_password,omitempty"`

	// flag indicating if the DNS service is managed
	Managed bool `json:"managed,omitempty"`

	// Defines what control to apply on the DNS server
	NextSyncControl string `json:"next_sync_control,omitempty"`

	// Status of the Microsoft DNS Service
	Status string `json:"status,omitempty"`

	// Timestamp of the last update
	StatusLastUpdated *UnixTime `json:"status_last_updated,omitempty"`

	// Override enable monitoring inherited from grid level
	UseEnableMonitoring bool `json:"use_enable_monitoring,omitempty"`

	// Flag indicating if the DNS service is monitored and controlled
	EnableMonitoring bool `json:"enable_monitoring,omitempty"`

	// Override setting for Enable Invalid Mac Address
	UseEnableInvalidMac bool `json:"use_enable_invalid_mac,omitempty"`

	// Enable Invalid Mac Address
	EnableInvalidMac bool `json:"enable_invalid_mac,omitempty"`

	// Flag indicating if the DHCP supports Failover
	SupportsFailover bool `json:"supports_failover,omitempty"`

	// Flag to override synchronization interval from the MS Server
	UseSynchronizationMinDelay bool `json:"use_synchronization_min_delay,omitempty"`

	// Minimum number of minutes between two synchronizations
	SynchronizationMinDelay uint32 `json:"synchronization_min_delay,omitempty"`
}

// DiscoveryAdvancedpollsetting represents Infoblox struct discovery:advancedpollsetting
type DiscoveryAdvancedpollsetting struct {
	// The TCP scan method.
	TcpScanTechnique string `json:"tcp_scan_technique,omitempty"`

	// The ping timeout in seconds.
	PingTimeout uint32 `json:"ping_timeout,omitempty"`

	// The number of ping retries.
	PingRetries uint32 `json:"ping_retries,omitempty"`

	// The number of days a device remains in database after it is no longer found
	// in network.
	PurgeExpiredDeviceData uint32 `json:"purge_expired_device_data,omitempty"`

	// Determines if purge of expired end host data is enabled.
	EnablePurgeExpiredEndhostData bool `json:"enable_purge_expired_endhost_data,omitempty"`

	// The number of days a end host remains in database after it is no longer
	// found in network.
	PurgeExpiredEndhostData uint32 `json:"purge_expired_endhost_data,omitempty"`

	// The ARP aggregate limit.
	ArpAggregateLimit uint32 `json:"arp_aggregate_limit,omitempty"`

	// Route limit.
	RouteLimit uint32 `json:"route_limit,omitempty"`

	// The hourly wait interval between ping sweeps for individual discovery
	// ranges.
	PingSweepInterval uint32 `json:"ping_sweep_interval,omitempty"`

	// The refresh interval in seconds for ARP cache.
	ArpCacheRefreshInterval uint32 `json:"arp_cache_refresh_interval,omitempty"`

	// Determines if polling and authenticating using SNMPv2c or later is enabled.
	PollingAuthenticateSnmpv2cOrLaterOnly bool `json:"polling_authenticate_snmpv2c_or_later_only,omitempty"`

	// Determines if discovery of networks that are not in IPAM is disabled.
	DisableDiscoveryOutsideIpam bool `json:"disable_discovery_outside_ipam,omitempty"`

	// Determines if DHCP router is used as seed for discovery.
	DhcpRouterAsSeed bool `json:"dhcp_router_as_seed,omitempty"`

	// Determines if syslogging of IPAM sync events is enabled.
	SyslogIpamEvents bool `json:"syslog_ipam_events,omitempty"`

	// Determines if syslogging of Network sync events is enabled.
	SyslogNetworkEvents bool `json:"syslog_network_events,omitempty"`
}

// DiscoveryAdvancedsdnpollsettings represents Infoblox struct discovery:advancedsdnpollsettings
type DiscoveryAdvancedsdnpollsettings struct {
	// Policy of mapping SDN networks to network views. To obtain mapping table use
	// the object discovery:sdnnetwork
	NetworksMappingPolicy string `json:"networks_mapping_policy,omitempty"`

	// Disable discovery of SDN subnets that are not in IPAM.
	DisableSdnDiscoveryOutsideIpam bool `json:"disable_sdn_discovery_outside_ipam,omitempty"`
}

// DiscoveryAdvisorsetting represents Infoblox struct discovery:advisorsetting
type DiscoveryAdvisorsetting struct {
	// Use proxy server if true.
	EnableProxy bool `json:"enable_proxy,omitempty"`

	// Host name or ip address of the proxy server.
	ProxyAddress string `json:"proxy_address,omitempty"`

	// Port number the proxy listens on.
	ProxyPort uint32 `json:"proxy_port,omitempty"`

	// Is proxy authorization required?
	UseProxyUsernamePasswd bool `json:"use_proxy_username_passwd,omitempty"`

	// Proxy username.
	ProxyUsername string `json:"proxy_username,omitempty"`

	// Proxy password.
	ProxyPassword string `json:"proxy_password,omitempty"`

	// Application execution interval in seconds. Must be greater than or equal to
	// 86400 seconds (1 day).
	ExecutionInterval uint32 `json:"execution_interval,omitempty"`

	// Application execution hour.
	ExecutionHour uint32 `json:"execution_hour,omitempty"`

	// The type of the network interface on consolidator member.
	NetworkInterfaceType string `json:"network_interface_type,omitempty"`

	// The interface for Advisor application on consolidator member.
	NetworkInterfaceVirtualIp string `json:"network_interface_virtual_ip,omitempty"`

	// Host name or ip address of the Advisor server
	Address string `json:"address,omitempty"`

	// Port number the Advisor server listens on
	Port uint32 `json:"port,omitempty"`

	// Authentication type used for Advisor server
	AuthType string `json:"auth_type,omitempty"`

	// Advisor AUTH token
	AuthToken string `json:"auth_token,omitempty"`

	// Username for Advisor server
	Username string `json:"username,omitempty"`

	// Password for Advisor server
	Password string `json:"password,omitempty"`

	// Advisor minimal severity
	MinSeverity string `json:"min_severity,omitempty"`

	// Timestamp of the Advisor last execution attempt'
	LastExecTime *UnixTime `json:"last_exec_time,omitempty"`

	// Result of the last execution attempt of Advisor
	LastExecStatus string `json:"last_exec_status,omitempty"`

	// Details of the last execution attempt of Advisor. Describes the error or
	// warning with a string
	LastExecDetails string `json:"last_exec_details,omitempty"`

	// Timestamp of the Advisor last Run Now attempt'
	LastRunNowTime *UnixTime `json:"last_run_now_time,omitempty"`

	// Result of the last Run Now attempt of Advisor
	LastRunNowStatus string `json:"last_run_now_status,omitempty"`

	// Details of the last Run Now attempt of Advisor. Describes the error or
	// warning with a string
	LastRunNowDetails string `json:"last_run_now_details,omitempty"`
}

// DiscoveryAutoconversionsetting represents Infoblox struct discovery:autoconversionsetting
type DiscoveryAutoconversionsetting struct {
	// The network view name which contains discovered data for convert.
	NetworkView string `json:"network_view,omitempty"`

	// The object type used to define the converted object.
	Type string `json:"type,omitempty"`

	// Template string used to generate host names.
	Format string `json:"format,omitempty"`

	// The string that contains condition of use the auto conversion settings.
	Condition string `json:"condition,omitempty"`

	// The comment.
	Comment string `json:"comment,omitempty"`
}

// DiscoveryBasicpollsettings represents Infoblox struct discovery:basicpollsettings
type DiscoveryBasicpollsettings struct {
	// Determines whether port scanning is enabled or not.
	PortScanning bool `json:"port_scanning,omitempty"`

	// Determines whether device profile is enabled or not.
	DeviceProfile bool `json:"device_profile,omitempty"`

	// Determines whether SNMP collection is enabled or not.
	SnmpCollection bool `json:"snmp_collection,omitempty"`

	// Determines whether CLI collection is enabled or not.
	CliCollection bool `json:"cli_collection,omitempty"`

	// Determines whether netbios scanning is enabled or not.
	NetbiosScanning bool `json:"netbios_scanning,omitempty"`

	// Determines whether complete ping sweep is enabled or not.
	CompletePingSweep bool `json:"complete_ping_sweep,omitempty"`

	// Determines whether smart subnet ping sweep is enabled or not.
	SmartSubnetPingSweep bool `json:"smart_subnet_ping_sweep,omitempty"`

	// Determines whether auto ARP refresh before switch port polling is enabled or
	// not.
	AutoArpRefreshBeforeSwitchPortPolling bool `json:"auto_arp_refresh_before_switch_port_polling,omitempty"`

	// A switch port data collection polling mode.
	SwitchPortDataCollectionPolling string `json:"switch_port_data_collection_polling,omitempty"`

	// A Schedule Setting struct that determines switch port data collection
	// polling schedule.
	SwitchPortDataCollectionPollingSchedule *SettingSchedule `json:"switch_port_data_collection_polling_schedule,omitempty"`

	// Indicates the interval for switch port data collection polling.
	SwitchPortDataCollectionPollingInterval uint32 `json:"switch_port_data_collection_polling_interval,omitempty"`

	// Credential group.
	CredentialGroup string `json:"credential_group,omitempty"`
}

// DiscoveryBasicsdnpollsettings represents Infoblox struct discovery:basicsdnpollsettings
type DiscoveryBasicsdnpollsettings struct {
	// Enable/disable SDN discovery.
	SdnDiscovery bool `json:"sdn_discovery,omitempty"`

	// Default network view to map collected SDN networks.
	DefaultNetworkView string `json:"default_network_view,omitempty"`

	// SDN end host polling mode.
	EndHostPolling string `json:"end_host_polling,omitempty"`

	// Valid SDN end host polling interval in seconds. Must be between 1800 and
	// 86400 seconds.
	EndHostPollingInterval uint32 `json:"end_host_polling_interval,omitempty"`

	// A Schedule Setting struct that determines SDN end host polling schedule.
	EndHostPollingSchedule *SettingSchedule `json:"end_host_polling_schedule,omitempty"`
}

// DiscoveryClicredential represents Infoblox struct discovery:clicredential
type DiscoveryClicredential struct {
	// The CLI user name.
	User string `json:"user,omitempty"`

	// The CLI password.
	Password string `json:"password,omitempty"`

	// The type of the credential.
	CredentialType string `json:"credential_type,omitempty"`

	// The commment for the credential.
	Comment string `json:"comment,omitempty"`

	// The Credentials ID.
	Id uint32 `json:"id,omitempty"`

	// Group for the CLI credential.
	CredentialGroup string `json:"credential_group,omitempty"`
}

// DiscoveryDevicePortstatistics represents Infoblox struct discovery:device:portstatistics
type DiscoveryDevicePortstatistics struct {
	// The total number of available interfaces on this device.
	InterfacesCount uint32 `json:"interfaces_count,omitempty"`

	// The total number of interfaces which have both administrative and operating
	// states as 'UP'.
	AdminUpOperUpCount uint32 `json:"admin_up_oper_up_count,omitempty"`

	// The total number of interfaces which have administrative state 'UP' and oper
	// state 'DOWN'.
	AdminUpOperDownCount uint32 `json:"admin_up_oper_down_count,omitempty"`

	// The total number of interfaces which have administrative state 'DOWN' and
	// operating state 'DOWN'.
	AdminDownOperDownCount uint32 `json:"admin_down_oper_down_count,omitempty"`
}

// DiscoveryIfaddrinfo represents Infoblox struct discovery:ifaddrinfo
type DiscoveryIfaddrinfo struct {
	// The IPv4 Address or IPv6 Address of the device.
	Address string `json:"address,omitempty"`

	// The ref to IPv4/Ipv6 Address.
	AddressObject string `json:"address_object,omitempty"`

	// The network to which this device belongs, in IPv4 Address/CIDR format.
	Network string `json:"network,omitempty"`
}

// DiscoveryNetworkinfo represents Infoblox struct discovery:networkinfo
type DiscoveryNetworkinfo struct {
	// The ref to the network to which the management IP address belongs.
	Network string `json:"network,omitempty"`

	// The Network address in format address/cidr.
	NetworkStr string `json:"network_str,omitempty"`
}

// DiscoveryPort represents Infoblox struct discovery:port
type DiscoveryPort struct {
	// The discovery port number.
	Port uint32 `json:"port,omitempty"`

	// The discovery port type.
	Type string `json:"type,omitempty"`

	// The comment for this discovery port.
	Comment string `json:"comment,omitempty"`
}

// DiscoveryPortConfigAdminstatus represents Infoblox struct discovery:port:config:adminstatus
type DiscoveryPortConfigAdminstatus struct {
	// The configured admin status value.
	Status string `json:"status,omitempty"`

	// The associated port control task details.
	Details *DiscoveryPortControlTaskdetails `json:"details,omitempty"`
}

// DiscoveryPortConfigDescription represents Infoblox struct discovery:port:config:description
type DiscoveryPortConfigDescription struct {
	// The configured description value.
	Description string `json:"description,omitempty"`

	// The associated port control task details.
	Details *DiscoveryPortControlTaskdetails `json:"details,omitempty"`
}

// DiscoveryPortConfigVlaninfo represents Infoblox struct discovery:port:config:vlaninfo
type DiscoveryPortConfigVlaninfo struct {
	// The configured data VLAN ID and the name of the interface.
	DataVlanInfo *DiscoveryVlaninfo `json:"data_vlan_info,omitempty"`

	// The configured voice VLAN id and name of interface.
	VoiceVlanInfo *DiscoveryVlaninfo `json:"voice_vlan_info,omitempty"`

	// The associated port control task details.
	Details *DiscoveryPortControlTaskdetails `json:"details,omitempty"`
}

// DiscoveryPortControlTaskdetails represents Infoblox struct discovery:port:control:taskdetails
type DiscoveryPortControlTaskdetails struct {
	// The ID of the associated port control task.
	Id uint32 `json:"id,omitempty"`

	// The task status of the associated port control task.
	Status string `json:"status,omitempty"`

	// True if this port control task is completed and matched with current
	// discovered value.
	IsSynchronized bool `json:"is_synchronized,omitempty"`
}

// DiscoveryScaninterface represents Infoblox struct discovery:scaninterface
type DiscoveryScaninterface struct {
	// The name of the network view associated with the network discovery probing
	// member.
	NetworkView string `json:"network_view,omitempty"`

	// The probing interface associated with the network discovery probing member.
	Type string `json:"type,omitempty"`

	// The virtual ip for discovery scan interface on network discovery probing
	// member.
	ScanVirtualIp string `json:"scan_virtual_ip,omitempty"`
}

// DiscoverySdnconfig represents Infoblox struct discovery:sdnconfig
type DiscoverySdnconfig struct {
	// Type of SDN controller.
	SdnType string `json:"sdn_type,omitempty"`

	// SDN controller IP addresses or FQDNs.
	Addresses []string `json:"addresses,omitempty"`

	// The network view associated with SDN controller.
	NetworkView string `json:"network_view,omitempty"`

	// The connection protocol. Valid values are 'HTTP' and 'HTTPS'.
	Protocol string `json:"protocol,omitempty"`

	// Unique configuration handle.
	Handle string `json:"handle,omitempty"`

	// SDN controller login password.
	Password string `json:"password,omitempty"`

	// SDN controller login name.
	Username string `json:"username,omitempty"`

	// SDN controller API key.
	ApiKey string `json:"api_key,omitempty"`

	// True if controller is on-premises, otherwise we consider it is in cloud.
	OnPrem bool `json:"on_prem,omitempty"`

	// Use global proxy settings to access SDN controller.
	UseGlobalProxy bool `json:"use_global_proxy,omitempty"`

	// Additional information about the SDN configuration.
	Comment string `json:"comment,omitempty"`

	// The type of the network interface on discovery member used for SDN
	// controller discovery
	NetworkInterfaceType string `json:"network_interface_type,omitempty"`

	// Virtual IP of VLAN network interface on discovery member
	NetworkInterfaceVirtualIp string `json:"network_interface_virtual_ip,omitempty"`

	// Unique key of SDN controller structure. Must be specified for existing
	// sdn_config structures, otherwise they will be removed. If not specified, new
	// structure will be created.
	Uuid string `json:"uuid,omitempty"`
}

// DiscoverySeedrouter represents Infoblox struct discovery:seedrouter
type DiscoverySeedrouter struct {
	// Address of the seed router.
	Address string `json:"address,omitempty"`

	// The network view name.
	NetworkView string `json:"network_view,omitempty"`

	// Description of the seed router.
	Comment string `json:"comment,omitempty"`
}

// DiscoverySnmp3credential represents Infoblox struct discovery:snmp3credential
type DiscoverySnmp3credential struct {
	// The SNMPv3 user name.
	User string `json:"user,omitempty"`

	// Authentication protocol for the SNMPv3 user.
	AuthenticationProtocol string `json:"authentication_protocol,omitempty"`

	// Authentication password for the SNMPv3 user.
	AuthenticationPassword string `json:"authentication_password,omitempty"`

	// Privacy protocol for the SNMPv3 user.
	PrivacyProtocol string `json:"privacy_protocol,omitempty"`

	// Privacy password for the SNMPv3 user.
	PrivacyPassword string `json:"privacy_password,omitempty"`

	// Comments for the SNMPv3 user.
	Comment string `json:"comment,omitempty"`

	// Group for the SNMPv3 credential.
	CredentialGroup string `json:"credential_group,omitempty"`
}

// DiscoverySnmpcredential represents Infoblox struct discovery:snmpcredential
type DiscoverySnmpcredential struct {
	// The public community string.
	CommunityString string `json:"community_string,omitempty"`

	// Comments for the SNMPv1 and SNMPv2 users.
	Comment string `json:"comment,omitempty"`

	// Group for the SNMPv1 and SNMPv2 credential.
	CredentialGroup string `json:"credential_group,omitempty"`
}

// DiscoveryStatusinfo represents Infoblox struct discovery:statusinfo
type DiscoveryStatusinfo struct {
	// The overall status of the device.
	Status string `json:"status,omitempty"`

	// The detailed message.
	Message string `json:"message,omitempty"`

	// The timestamp when the status was generated.
	Timestamp *UnixTime `json:"timestamp,omitempty"`
}

// DiscoveryVlaninfo represents Infoblox struct discovery:vlaninfo
type DiscoveryVlaninfo struct {
	// The Vlan ID.
	Id uint32 `json:"id,omitempty"`

	// The Vlan name.
	Name string `json:"name,omitempty"`
}

// DiscoveryVrfmappingrule represents Infoblox struct discovery:vrfmappingrule
type DiscoveryVrfmappingrule struct {
	// The name of the network view associated with the VRF mapping rule.
	NetworkView string `json:"network_view,omitempty"`

	// Extended POSIX regular expression matching the VRF name. The regular
	// expression string should contain the leading caret anchor ^ and the trailing
	// dollar anchor $ symbols.
	Criteria string `json:"criteria,omitempty"`

	// The comment.
	Comment string `json:"comment,omitempty"`
}

// Discoverydata represents Infoblox struct discoverydata
type Discoverydata struct {
	// The model name of the end device in the vendor terminology.
	DeviceModel string `json:"device_model,omitempty"`

	// The system name of the interface associated with the discovered IP address.
	DevicePortName string `json:"device_port_name,omitempty"`

	// The hardware type of the interface associated with the discovered IP
	// address.
	DevicePortType string `json:"device_port_type,omitempty"`

	// The type of end host in vendor terminology.
	DeviceType string `json:"device_type,omitempty"`

	// The vendor name of the end host.
	DeviceVendor string `json:"device_vendor,omitempty"`

	// The name of the network device associated with the discovered IP address.
	DiscoveredName string `json:"discovered_name,omitempty"`

	// Specifies whether the IP address was discovered by a NetMRI or NIOS
	// discovery process.
	Discoverer string `json:"discoverer,omitempty"`

	// For IPv6 address only. The DHCP unique identifier of the discovered host.
	// This is an optional field, and data might not be included.
	Duid string `json:"duid,omitempty"`

	// The date and time the IP address was first discovered in Epoch seconds
	// format.
	FirstDiscovered *UnixTime `json:"first_discovered,omitempty"`

	// The port redundant group number.
	IprgNo uint32 `json:"iprg_no,omitempty"`

	// The status for the IP address within port redundant group.
	IprgState string `json:"iprg_state,omitempty"`

	// The port redundant group type.
	IprgType string `json:"iprg_type,omitempty"`

	// The date and time the IP address was last discovered in Epoch seconds
	// format.
	LastDiscovered *UnixTime `json:"last_discovered,omitempty"`

	// The discovered MAC address for the host. This is the unique identifier of a
	// network device. The discovery acquires the MAC address for hosts that are
	// located on the same network as the Grid member that is running the
	// discovery. This can also be the MAC address of a virtual entity on a
	// specified vSphere server.
	MacAddress string `json:"mac_address,omitempty"`

	// The management IP address of the end host that has more than one IP.
	MgmtIpAddress string `json:"mgmt_ip_address,omitempty"`

	// The name returned in the NetBIOS reply or the name you manually register for
	// the discovered host.
	NetbiosName string `json:"netbios_name,omitempty"`

	// A textual description of the switch that is connected to the end device.
	NetworkComponentDescription string `json:"network_component_description,omitempty"`

	// The IPv4 Address or IPv6 Address of the switch that is connected to the end
	// device.
	NetworkComponentIp string `json:"network_component_ip,omitempty"`

	// Model name of the switch port connected to the end host in vendor
	// terminology.
	NetworkComponentModel string `json:"network_component_model,omitempty"`

	// If a reverse lookup was successful for the IP address associated with this
	// switch, the host name is displayed in this field.
	NetworkComponentName string `json:"network_component_name,omitempty"`

	// A textual description of the switch port that is connected to the end
	// device.
	NetworkComponentPortDescription string `json:"network_component_port_description,omitempty"`

	// The name of the switch port connected to the end device.
	NetworkComponentPortName string `json:"network_component_port_name,omitempty"`

	// The number of the switch port connected to the end device.
	NetworkComponentPortNumber string `json:"network_component_port_number,omitempty"`

	// Identifies the switch that is connected to the end device.
	NetworkComponentType string `json:"network_component_type,omitempty"`

	// The vendor name of the switch port connected to the end host.
	NetworkComponentVendor string `json:"network_component_vendor,omitempty"`

	// The list of opened ports on the IP address, represented as: "TCP: 21,22,23
	// UDP: 137,139". Limited to max total 1000 ports.
	OpenPorts string `json:"open_ports,omitempty"`

	// The operating system of the detected host or virtual entity. The OS can be
	// one of the following: * Microsoft for all discovered hosts that have a
	// non-null value in the MAC addresses using the NetBIOS discovery method. * A
	// value that a TCP discovery returns. * The OS of a virtual entity on a
	// vSphere server.
	Os string `json:"os,omitempty"`

	// The negotiated or operational duplex setting of the switch port connected to
	// the end device.
	PortDuplex string `json:"port_duplex,omitempty"`

	// The link status of the switch port connected to the end device. Indicates
	// whether it is connected.
	PortLinkStatus string `json:"port_link_status,omitempty"`

	// The interface speed, in Mbps, of the switch port.
	PortSpeed string `json:"port_speed,omitempty"`

	// The operational status of the switch port. Indicates whether the port is up
	// or down.
	PortStatus string `json:"port_status,omitempty"`

	// The type of switch port.
	PortType string `json:"port_type,omitempty"`

	// The description of the VLAN of the switch port that is connected to the end
	// device.
	PortVlanDescription string `json:"port_vlan_description,omitempty"`

	// The name of the VLAN of the switch port.
	PortVlanName string `json:"port_vlan_name,omitempty"`

	// The ID of the VLAN of the switch port.
	PortVlanNumber string `json:"port_vlan_number,omitempty"`

	// The name of the physical network adapter through which the virtual entity is
	// connected to the appliance.
	VAdapter string `json:"v_adapter,omitempty"`

	// The name of the VMware cluster to which the virtual entity belongs.
	VCluster string `json:"v_cluster,omitempty"`

	// The name of the vSphere datacenter or container to which the virtual entity
	// belongs.
	VDatacenter string `json:"v_datacenter,omitempty"`

	// The name of the virtual entity.
	VEntityName string `json:"v_entity_name,omitempty"`

	// The virtual entity type. This can be blank or one of the following: Virtual
	// Machine, Virtual Host, or Virtual Center. Virtual Center represents a VMware
	// vCenter server.
	VEntityType string `json:"v_entity_type,omitempty"`

	// The name of the VMware server on which the virtual entity was discovered.
	VHost string `json:"v_host,omitempty"`

	// The name of the switch to which the virtual entity is connected.
	VSwitch string `json:"v_switch,omitempty"`

	// Name of the virtual machine.
	VmiName string `json:"vmi_name,omitempty"`

	// ID of the virtual machine.
	VmiId string `json:"vmi_id,omitempty"`

	// Port group which the virtual machine belongs to.
	VlanPortGroup string `json:"vlan_port_group,omitempty"`

	// Name of the virtual switch.
	VswitchName string `json:"vswitch_name,omitempty"`

	// ID of the virtual switch.
	VswitchId string `json:"vswitch_id,omitempty"`

	// Type of the virtual switch: standard or distributed.
	VswitchType string `json:"vswitch_type,omitempty"`

	// Indicates the virtual switch has IPV6 enabled.
	VswitchIpv6Enabled bool `json:"vswitch_ipv6_enabled,omitempty"`

	// Name of the network adapter on the virtual switch connected with the virtual
	// machine.
	VportName string `json:"vport_name,omitempty"`

	// MAC address of the network adapter on the virtual switch where the virtual
	// machine connected to.
	VportMacAddress string `json:"vport_mac_address,omitempty"`

	// Link status of the network adapter on the virtual switch where the virtual
	// machine connected to.
	VportLinkStatus string `json:"vport_link_status,omitempty"`

	// Configured speed of the network adapter on the virtual switch where the
	// virtual machine connected to. Unit is kb.
	VportConfSpeed string `json:"vport_conf_speed,omitempty"`

	// Configured mode of the network adapter on the virtual switch where the
	// virtual machine connected to.
	VportConfMode string `json:"vport_conf_mode,omitempty"`

	// Actual speed of the network adapter on the virtual switch where the virtual
	// machine connected to. Unit is kb.
	VportSpeed string `json:"vport_speed,omitempty"`

	// Actual mode of the network adapter on the virtual switch where the virtual
	// machine connected to.
	VportMode string `json:"vport_mode,omitempty"`

	// Type of the network segment on which the current virtual machine/vport
	// connected to.
	VswitchSegmentType string `json:"vswitch_segment_type,omitempty"`

	// Name of the network segment on which the current virtual machine/vport
	// connected to.
	VswitchSegmentName string `json:"vswitch_segment_name,omitempty"`

	// ID of the network segment on which the current virtual machine/vport
	// connected to.
	VswitchSegmentId string `json:"vswitch_segment_id,omitempty"`

	// Port group of the network segment on which the current virtual machine/vport
	// connected to.
	VswitchSegmentPortGroup string `json:"vswitch_segment_port_group,omitempty"`

	// Numer of available ports reported by the virtual switch on which the virtual
	// machine/vport connected to.
	VswitchAvailablePortsCount uint32 `json:"vswitch_available_ports_count,omitempty"`

	// Type of virtual tunnel endpoint (VTEP) in the virtual switch.
	VswitchTepType string `json:"vswitch_tep_type,omitempty"`

	// IP address of the virtual tunnel endpoint (VTEP) in the virtual switch.
	VswitchTepIp string `json:"vswitch_tep_ip,omitempty"`

	// Port group of the virtual tunnel endpoint (VTEP) in the virtual switch.
	VswitchTepPortGroup string `json:"vswitch_tep_port_group,omitempty"`

	// VLAN of the virtual tunnel endpoint (VTEP) in the virtual switch.
	VswitchTepVlan string `json:"vswitch_tep_vlan,omitempty"`

	// DHCP server of the virtual tunnel endpoint (VTEP) in the virtual switch.
	VswitchTepDhcpServer string `json:"vswitch_tep_dhcp_server,omitempty"`

	// Muticast address of the virtual tunnel endpoint (VTEP) in the virtual
	// swtich.
	VswitchTepMulticast string `json:"vswitch_tep_multicast,omitempty"`

	// IP address of the physical node on which the virtual machine is hosted.
	VmhostIpAddress string `json:"vmhost_ip_address,omitempty"`

	// Name of the physical node on which the virtual machine is hosted.
	VmhostName string `json:"vmhost_name,omitempty"`

	// MAC address of the physical node on which the virtual machine is hosted.
	VmhostMacAddress string `json:"vmhost_mac_address,omitempty"`

	// CIDR subnet of the physical node on which the virtual machine is hosted.
	VmhostSubnetCidr uint32 `json:"vmhost_subnet_cidr,omitempty"`

	// List of all physical port names used by the virtual switch on the physical
	// node on which the virtual machine is hosted. Represented as:
	// "eth1,eth2,eth3".
	VmhostNicNames string `json:"vmhost_nic_names,omitempty"`

	// ID of the tenant which virtual machine belongs to.
	VmiTenantId string `json:"vmi_tenant_id,omitempty"`

	// If the IP is coming from a Cloud environment, the Cloud Management Platform
	// type.
	CmpType string `json:"cmp_type,omitempty"`

	// Discovered IP address type.
	VmiIpType string `json:"vmi_ip_type,omitempty"`

	// Private IP address of the virtual machine.
	VmiPrivateAddress string `json:"vmi_private_address,omitempty"`

	// Indicates whether the IP address is a public address.
	VmiIsPublicAddress bool `json:"vmi_is_public_address,omitempty"`

	// The Cisco ISE SSID.
	CiscoIseSsid string `json:"cisco_ise_ssid,omitempty"`

	// The Endpoint Profile created in Cisco ISE.
	CiscoIseEndpointProfile string `json:"cisco_ise_endpoint_profile,omitempty"`

	// The Cisco ISE connection session state.
	CiscoIseSessionState string `json:"cisco_ise_session_state,omitempty"`

	// The Cisco ISE security group name.
	CiscoIseSecurityGroup string `json:"cisco_ise_security_group,omitempty"`

	// The name of the discovery task.
	TaskName string `json:"task_name,omitempty"`

	// Location of the network component on which the IP address was discovered.
	NetworkComponentLocation string `json:"network_component_location,omitempty"`

	// Contact information from the network component on which the IP address was
	// discovered.
	NetworkComponentContact string `json:"network_component_contact,omitempty"`

	// Location of device on which the IP address was discovered.
	DeviceLocation string `json:"device_location,omitempty"`

	// Contact information from device on which the IP address was discovered.
	DeviceContact string `json:"device_contact,omitempty"`

	// Discovered name of Wireless Access Point.
	ApName string `json:"ap_name,omitempty"`

	// Discovered IP address of Wireless Access Point.
	ApIpAddress string `json:"ap_ip_address,omitempty"`

	// Service set identifier (SSID) associated with Wireless Access Point.
	ApSsid string `json:"ap_ssid,omitempty"`

	// Discovered bridge domain.
	BridgeDomain string `json:"bridge_domain,omitempty"`

	// A comma-separated list of the discovered endpoint groups.
	EndpointGroups string `json:"endpoint_groups,omitempty"`

	// Discovered tenant.
	Tenant string `json:"tenant,omitempty"`

	// The name of the VRF.
	VrfName string `json:"vrf_name,omitempty"`

	// Description of the VRF.
	VrfDescription string `json:"vrf_description,omitempty"`

	// Route distinguisher of the VRF.
	VrfRd string `json:"vrf_rd,omitempty"`

	// The BGP autonomous system number.
	BgpAs uint32 `json:"bgp_as,omitempty"`
}

// Discoverytaskport represents Infoblox struct discoverytaskport
type Discoverytaskport struct {
	// The TCP port number.
	Number uint32 `json:"number,omitempty"`

	// The TCP port descriptive comment.
	Comment string `json:"comment,omitempty"`
}

// Discoverytaskvserver represents Infoblox struct discoverytaskvserver
type Discoverytaskvserver struct {
	// The disable flag of a vSphere server.
	Disable bool `json:"disable,omitempty"`

	// The connection protocol of a vSphere server.
	ConnectionProtocol string `json:"connection_protocol,omitempty"`

	// The FQDN (Fully Qualified Domain Name) or IP address of the vShpere server.
	FqdnOrIp string `json:"fqdn_or_ip,omitempty"`

	// The user password on the vSphere server.
	Password string `json:"password,omitempty"`

	// The connection port that the vSphere server uses.
	Port uint32 `json:"port,omitempty"`

	// The user name on the vSphere server.
	Username string `json:"username,omitempty"`
}

// Dnsseckey represents Infoblox struct dnsseckey
type Dnsseckey struct {
	// The tag of the key for the zone.
	Tag uint32 `json:"tag,omitempty"`

	// The status of the key for the zone.
	Status string `json:"status,omitempty"`

	// The next event date for the key, the rollover date for an active key or the
	// removal date for an already rolled one.
	NextEventDate *UnixTime `json:"next_event_date,omitempty"`

	// The key type.
	Type string `json:"type,omitempty"`

	// The public-key encryption algorithm.
	Algorithm string `json:"algorithm,omitempty"`

	// The Base-64 encoding of the public key.
	PublicKey string `json:"public_key,omitempty"`
}

// Dnsseckeyalgorithm represents Infoblox struct dnsseckeyalgorithm
type Dnsseckeyalgorithm struct {
	// The signing key algorithm.
	Algorithm string `json:"algorithm,omitempty"`

	// The signing key size, in bits.
	Size uint32 `json:"size,omitempty"`
}

// Dnsseckeyparams represents Infoblox struct dnsseckeyparams
type Dnsseckeyparams struct {
	// If set to True, automatic rollovers for the signing key is enabled.
	EnableKskAutoRollover bool `json:"enable_ksk_auto_rollover,omitempty"`

	// Key Signing Key algorithm. Deprecated.
	KskAlgorithm string `json:"ksk_algorithm,omitempty"`

	// A list of Key Signing Key Algorithms.
	KskAlgorithms []*Dnsseckeyalgorithm `json:"ksk_algorithms,omitempty"`

	// Key Signing Key rollover interval, in seconds.
	KskRollover uint32 `json:"ksk_rollover,omitempty"`

	// Key Signing Key size, in bits. Deprecated.
	KskSize uint32 `json:"ksk_size,omitempty"`

	// NSEC (next secure) types.
	NextSecureType string `json:"next_secure_type,omitempty"`

	// This field controls events for which users will be notified.
	KskRolloverNotificationConfig string `json:"ksk_rollover_notification_config,omitempty"`

	// Enable SNMP notifications for KSK related events.
	KskSnmpNotificationEnabled bool `json:"ksk_snmp_notification_enabled,omitempty"`

	// Enable email notifications for KSK related events.
	KskEmailNotificationEnabled bool `json:"ksk_email_notification_enabled,omitempty"`

	// The minimum length for NSEC3 salts.
	Nsec3SaltMinLength uint32 `json:"nsec3_salt_min_length,omitempty"`

	// The maximum length for NSEC3 salts.
	Nsec3SaltMaxLength uint32 `json:"nsec3_salt_max_length,omitempty"`

	// The number of iterations used for hashing NSEC3.
	Nsec3Iterations uint32 `json:"nsec3_iterations,omitempty"`

	// Signature expiration time, in seconds.
	SignatureExpiration uint32 `json:"signature_expiration,omitempty"`

	// Zone Signing Key algorithm. Deprecated.
	ZskAlgorithm string `json:"zsk_algorithm,omitempty"`

	// A list of Zone Signing Key Algorithms.
	ZskAlgorithms []*Dnsseckeyalgorithm `json:"zsk_algorithms,omitempty"`

	// Zone Signing Key rollover interval, in seconds.
	ZskRollover uint32 `json:"zsk_rollover,omitempty"`

	// Zone Signing Key rollover mechanism.
	ZskRolloverMechanism string `json:"zsk_rollover_mechanism,omitempty"`

	// Zone Signing Key size, in bits. Deprecated.
	ZskSize uint32 `json:"zsk_size,omitempty"`
}

// Dnssectrustedkey represents Infoblox struct dnssectrustedkey
type Dnssectrustedkey struct {
	// The FQDN of the domain for which the member validates responses to recursive
	// queries.
	Fqdn string `json:"fqdn,omitempty"`

	// The DNSSEC algorithm used to generate the key.
	Algorithm string `json:"algorithm,omitempty"`

	// The DNSSEC key.
	Key string `json:"key,omitempty"`

	// The secure entry point flag, if set it means this is a KSK configuration.
	SecureEntryPoint bool `json:"secure_entry_point,omitempty"`

	// Responses must be DNSSEC secure for this hierarchy/domain.
	DnssecMustBeSecure bool `json:"dnssec_must_be_secure,omitempty"`
}

// Dnsserver represents Infoblox struct dnsserver
type Dnsserver struct {
	// Flag to override login name and password from the MS Server
	UseLogin bool `json:"use_login,omitempty"`

	// Microsoft Server login name
	LoginName string `json:"login_name,omitempty"`

	// Microsoft Server login password
	LoginPassword string `json:"login_password,omitempty"`

	// flag indicating if the DNS service is managed
	Managed bool `json:"managed,omitempty"`

	// Defines what control to apply on the DNS server
	NextSyncControl string `json:"next_sync_control,omitempty"`

	// Status of the Microsoft DNS Service
	Status string `json:"status,omitempty"`

	// Detailed status of the DNS status
	StatusDetail string `json:"status_detail,omitempty"`

	// Timestamp of the last update
	StatusLastUpdated *UnixTime `json:"status_last_updated,omitempty"`

	// Timestamp of the last synchronization attempt
	LastSyncTs *UnixTime `json:"last_sync_ts,omitempty"`

	// Status of the last synchronization attempt
	LastSyncStatus string `json:"last_sync_status,omitempty"`

	// Detailled status of the last synchronization attempt
	LastSyncDetail string `json:"last_sync_detail,omitempty"`

	// Ordered list of IP addresses to forward queries to
	Forwarders string `json:"forwarders,omitempty"`

	// Flag indicating if the server supports IPv6
	SupportsIpv6 bool `json:"supports_ipv6,omitempty"`

	// Flag indicating if the server supports reverse IPv6 zones
	SupportsIpv6Reverse bool `json:"supports_ipv6_reverse,omitempty"`

	// Flag indicating if the server supports DNAME records
	SupportsRrDname bool `json:"supports_rr_dname,omitempty"`

	// Flag indicating if the server supports
	SupportsDnssec bool `json:"supports_dnssec,omitempty"`

	// Flag indicating if the server supports AD integrated zones
	SupportsActiveDirectory bool `json:"supports_active_directory,omitempty"`

	// MS Server ip address
	Address string `json:"address,omitempty"`

	// Flag indicating if the server supports NAPTR records
	SupportsRrNaptr bool `json:"supports_rr_naptr,omitempty"`

	// Override enable monitoring inherited from grid level
	UseEnableMonitoring bool `json:"use_enable_monitoring,omitempty"`

	// Flag indicating if the DNS service is monitored and controlled
	EnableMonitoring bool `json:"enable_monitoring,omitempty"`

	// Flag to override synchronization interval from the MS Server
	UseSynchronizationMinDelay bool `json:"use_synchronization_min_delay,omitempty"`

	// Minimum number of minutes between two synchronizations
	SynchronizationMinDelay uint32 `json:"synchronization_min_delay,omitempty"`

	// Override enable reports data inherited from grid level
	UseEnableDnsReportsSync bool `json:"use_enable_dns_reports_sync,omitempty"`

	// Enable or Disable MS DNS data for reports from this MS Server
	EnableDnsReportsSync bool `json:"enable_dns_reports_sync,omitempty"`
}

// Dnstapsetting represents Infoblox struct dnstapsetting
type Dnstapsetting struct {
	// Address of DNSTAP receiver.
	DnstapReceiverAddress string `json:"dnstap_receiver_address,omitempty"`

	// DNSTAP receiver port number.
	DnstapReceiverPort uint32 `json:"dnstap_receiver_port,omitempty"`

	// DNSTAP id string.
	DnstapIdentity string `json:"dnstap_identity,omitempty"`

	// DNSTAP version.
	DnstapVersion string `json:"dnstap_version,omitempty"`
}

// DtcHealth represents Infoblox struct dtc:health
type DtcHealth struct {
	// The availability color status.
	Availability string `json:"availability,omitempty"`

	// The enabled state of the object.
	EnabledState string `json:"enabled_state,omitempty"`

	// The textual description of the object's status.
	Description string `json:"description,omitempty"`
}

// DtcMonitorSnmpOid represents Infoblox struct dtc:monitor:snmp:oid
type DtcMonitorSnmpOid struct {
	// The SNMP OID value for DTC SNMP Monitor health checks.
	Oid string `json:"oid,omitempty"`

	// The comment for a DTC SNMP Health Monitor OID object.
	Comment string `json:"comment,omitempty"`

	// The value of the condition type for DTC SNMP Monitor health check results.
	Type string `json:"type,omitempty"`

	// The condition of the validation result for an SNMP health check. The
	// following conditions can be applied to the health check results: 'ANY'
	// accepts any response; 'EXACT' accepts result equal to 'first'; 'LEQ' accepts
	// result which is less than 'first'; 'GEQ' accepts result which is greater
	// than 'first'; 'RANGE' accepts result value of which is between 'first' and
	// 'last'.
	Condition string `json:"condition,omitempty"`

	// The condition's first term to match against the SNMP health check result.
	First string `json:"first,omitempty"`

	// The condition's second term to match against the SNMP health check result
	// with 'RANGE' condition.
	Last string `json:"last,omitempty"`
}

// DtcPoolConsolidatedMonitorHealth represents Infoblox struct dtc:pool:consolidated_monitor_health
type DtcPoolConsolidatedMonitorHealth struct {
	// Members whose monitor statuses are shared across other members in a pool.
	Members []string `json:"members,omitempty"`

	// Monitor whose statuses are shared across other members in a pool.
	Monitor string `json:"monitor,omitempty"`

	// Servers assigned to a pool with monitor defined are healthy if ANY or ALL
	// members report healthy status.
	Availability string `json:"availability,omitempty"`

	// Flag for switching health performing and sharing behavior to perform health
	// checks on each DTC grid member that serves related LBDN(s) and send them
	// across all DTC grid members from both selected and non-selected lists.
	FullHealthCommunication bool `json:"full_health_communication,omitempty"`
}

// DtcPoolLink represents Infoblox struct dtc:pool:link
type DtcPoolLink struct {
	// The pool to link with.
	Pool string `json:"pool,omitempty"`

	// The weight of pool.
	Ratio uint32 `json:"ratio,omitempty"`
}

// DtcServerLink represents Infoblox struct dtc:server:link
type DtcServerLink struct {
	// The server to link with.
	Server string `json:"server,omitempty"`

	// The weight of server.
	Ratio uint32 `json:"ratio,omitempty"`
}

// DtcServerMonitor represents Infoblox struct dtc:server:monitor
type DtcServerMonitor struct {
	// The monitor related to server.
	Monitor string `json:"monitor,omitempty"`

	// IP address or FQDN of the server used for monitoring.
	Host string `json:"host,omitempty"`
}

// DtcTopologyRuleSource represents Infoblox struct dtc:topology:rule:source
type DtcTopologyRuleSource struct {
	// The source type.
	SourceType string `json:"source_type,omitempty"`

	// The operation used to match the value.
	SourceOp string `json:"source_op,omitempty"`

	// The source value.
	SourceValue string `json:"source_value,omitempty"`
}

// DxlEndpointBroker represents Infoblox struct dxl:endpoint:broker
type DxlEndpointBroker struct {
	// The FQDN for the DXL endpoint broker.
	HostName string `json:"host_name,omitempty"`

	// The IPv4 Address or IPv6 Address for the DXL endpoint broker.
	Address string `json:"address,omitempty"`

	// The communication port for the DXL endpoint broker.
	Port uint32 `json:"port,omitempty"`

	// The unique identifier for the DXL endpoint.
	UniqueId string `json:"unique_id,omitempty"`
}

// Eaexpressionop represents Infoblox struct eaexpressionop
type Eaexpressionop struct {
	// The operation name.
	Op string `json:"op,omitempty"`

	// The name of the Extensible Attribute Definition object which is used as the
	// first operand value.
	Op1 string `json:"op1,omitempty"`

	// The first operand type.
	Op1Type string `json:"op1_type,omitempty"`

	// The second operand value.
	Op2 string `json:"op2,omitempty"`

	// The second operand type.
	Op2Type string `json:"op2_type,omitempty"`
}

// Exclusionrange represents Infoblox struct exclusionrange
type Exclusionrange struct {
	// The IPv4 Address starting address of the exclusion range.
	StartAddress string `json:"start_address,omitempty"`

	// The IPv4 Address ending address of the exclusion range.
	EndAddress string `json:"end_address,omitempty"`

	// Comment for the exclusion range; maximum 256 characters.
	Comment string `json:"comment,omitempty"`
}

// Exclusionrangetemplate represents Infoblox struct exclusionrangetemplate
type Exclusionrangetemplate struct {
	// The address offset of the DHCP exclusion range template.
	Offset uint32 `json:"offset,omitempty"`

	// The number of addresses in the DHCP exclusion range template.
	NumberOfAddresses uint32 `json:"number_of_addresses,omitempty"`

	// A descriptive comment of a DHCP exclusion range template.
	Comment string `json:"comment,omitempty"`
}

// Expressionop represents Infoblox struct expressionop
type Expressionop struct {
	// The operation name.
	Op string `json:"op,omitempty"`

	// The first operand value.
	Op1 string `json:"op1,omitempty"`

	// The first operand type.
	Op1Type string `json:"op1_type,omitempty"`

	// The second operand value.
	Op2 string `json:"op2,omitempty"`

	// The second operand type.
	Op2Type string `json:"op2_type,omitempty"`
}

// ExtensibleattributedefDescendants represents Infoblox struct extensibleattributedef:descendants
type ExtensibleattributedefDescendants struct {
	// This option describes which action must be taken if the extensible attribute
	// exists for both the parent and descendant objects: * INHERIT: inherit the
	// extensible attribute from the parent object. * RETAIN: retain the value of
	// an extensible attribute that was set for the child object. * CONVERT: the
	// value of the extensible attribute must be copied from the parent object.
	OptionWithEa string `json:"option_with_ea,omitempty"`

	// This option describes which action must be taken if the extensible attribute
	// exists for the parent, but is absent from the descendant object: * INHERIT:
	// inherit the extensible attribute from the parent object. * NOT_INHERIT: do
	// nothing.
	OptionWithoutEa string `json:"option_without_ea,omitempty"`

	// This option describes which action must be taken if the extensible attribute
	// exists for the descendant, but is absent for the parent object: * RETAIN:
	// retain the extensible attribute value for the descendant object. * REMOVE:
	// remove this extensible attribute from the descendant object.
	OptionDeleteEa string `json:"option_delete_ea,omitempty"`
}

// EADefListValue represents Infoblox struct extensibleattributedef:listvalues
type EADefListValue struct {
	// Enum value
	Value string `json:"value,omitempty"`
}

// NameServer represents Infoblox struct extserver
type NameServer struct {
	// The IPv4 Address or IPv6 Address of the server.
	Address string `json:"address,omitempty"`

	// A resolvable domain name for the external DNS server.
	Name string `json:"name,omitempty"`

	// This flag represents whether the name server is shared with the parent
	// Microsoft primary zone's delegation server.
	SharedWithMsParentDelegation bool `json:"shared_with_ms_parent_delegation,omitempty"`

	// Set this flag to hide the NS record for the primary name server from DNS
	// queries.
	Stealth bool `json:"stealth,omitempty"`

	// A generated TSIG key.
	TsigKey string `json:"tsig_key,omitempty"`

	// The TSIG key algorithm.
	TsigKeyAlg string `json:"tsig_key_alg,omitempty"`

	// The TSIG key name.
	TsigKeyName string `json:"tsig_key_name,omitempty"`

	// Use flag for: tsig_key_name
	UseTsigKeyName bool `json:"use_tsig_key_name,omitempty"`
}

// Extsyslogbackupserver represents Infoblox struct extsyslogbackupserver
type Extsyslogbackupserver struct {
	// The IPv4 or IPv6 address of the backup syslog server.
	Address string `json:"address,omitempty"`

	// The directory path for the replication of the rotated syslog files.
	DirectoryPath string `json:"directory_path,omitempty"`

	// If set to True, the syslog backup server is enabled.
	Enable bool `json:"enable,omitempty"`

	// The password of the backup syslog server.
	Password string `json:"password,omitempty"`

	// The port used to connect to the backup syslog server.
	Port uint32 `json:"port,omitempty"`

	// The transport protocol used to connect to the backup syslog server.
	Protocol string `json:"protocol,omitempty"`

	// The username of the backup syslog server.
	Username string `json:"username,omitempty"`
}

// Filetransfersetting represents Infoblox struct filetransfersetting
type Filetransfersetting struct {
	// The directory to save the captured DNS queries and responses.
	Directory string `json:"directory,omitempty"`

	// The host name of the destination server for DNS capture transfer.
	Host string `json:"host,omitempty"`

	// The password to access the destination server directory.
	Password string `json:"password,omitempty"`

	// The transfer protocol for the captured DNS queries and responses.
	Type string `json:"type,omitempty"`

	// The username to access the destination server directory.
	Username string `json:"username,omitempty"`

	// Transfer scp port.
	Port uint32 `json:"port,omitempty"`
}

// Filterrule represents Infoblox struct filterrule
type Filterrule struct {
	// The name of the DHCP filter.
	Filter string `json:"filter,omitempty"`

	// The permission to be applied.
	Permission string `json:"permission,omitempty"`
}

// FireeyeAlertmap represents Infoblox struct fireeye:alertmap
type FireeyeAlertmap struct {
	// The type of Fireeye Alert.
	AlertType string `json:"alert_type,omitempty"`

	// The RPZ rule for the alert.
	RpzRule string `json:"rpz_rule,omitempty"`

	// The expiration Lifetime of alert type. The 32-bit unsigned integer
	// represents the amount of seconds this alert type will live for. 0 means the
	// alert will never expire.
	Lifetime uint32 `json:"lifetime,omitempty"`
}

// FireeyeRulemapping represents Infoblox struct fireeye:rulemapping
type FireeyeRulemapping struct {
	// The override setting for APT alerts.
	AptOverride string `json:"apt_override,omitempty"`

	// The FireEye alert mapping.
	FireeyeAlertMapping []*FireeyeAlertmap `json:"fireeye_alert_mapping,omitempty"`

	// The domain name to be substituted, this is applicable only when apt_override
	// is set to "SUBSTITUTE".
	SubstitutedDomainName string `json:"substituted_domain_name,omitempty"`
}

// Forwardingmemberserver represents Infoblox struct forwardingmemberserver
type Forwardingmemberserver struct {
	// The name of this Grid member in FQDN format.
	Name string `json:"name,omitempty"`

	// Determines if the appliance sends queries to forwarders only, and not to
	// other internal or Internet root servers.
	ForwardersOnly bool `json:"forwarders_only,omitempty"`

	// The information for the remote name server to which you want the Infoblox
	// appliance to forward queries for a specified domain name.
	ForwardTo NullableNameServers `json:"forward_to,omitempty"`

	// Use flag for: forward_to
	UseOverrideForwarders bool `json:"use_override_forwarders"`
}

// GridAttackdetect represents Infoblox struct grid:attackdetect
type GridAttackdetect struct {
	// Determines if DNS attack detection is enabled or not.
	Enable bool `json:"enable,omitempty"`

	// The high threshold value (in percentage) for starting DNS attack detection.
	High uint32 `json:"high,omitempty"`

	// The maximum number of events that have occurred before processing DNS attack
	// detection.
	IntervalMax uint32 `json:"interval_max,omitempty"`

	// The minimum number of events that have occurred before processing DNS attack
	// detection.
	IntervalMin uint32 `json:"interval_min,omitempty"`

	// The time interval between detection processing.
	IntervalTime uint32 `json:"interval_time,omitempty"`

	// The low threshold value (in percentage) for starting DNS attack detection.
	Low uint32 `json:"low,omitempty"`
}

// GridAttackmitigation represents Infoblox struct grid:attackmitigation
type GridAttackmitigation struct {
	// Configuration for detecting changes for the Cache Hit Ratio (CHR) of
	// recursive queries.
	DetectChr *GridAttackdetect `json:"detect_chr,omitempty"`

	// The cache utilization (in percentage) when Cache Hit Ratio (CHR) starts.
	DetectChrGrace uint32 `json:"detect_chr_grace,omitempty"`

	// Configuration for detecting NXDOMAIN responses from up-stream servers to all
	// incoming recursive responses.
	DetectNxdomainResponses *GridAttackdetect `json:"detect_nxdomain_responses,omitempty"`

	// Configuration for detecting the UDP packet drop rate.
	DetectUdpDrop *GridAttackdetect `json:"detect_udp_drop,omitempty"`

	// The minimum time interval (in seconds) between changes in attack status.
	Interval uint32 `json:"interval,omitempty"`

	// Enable or disable the mitigation of possible NXDOMAIN attacks by splitting
	// the Lease Recently Used (LRU) list into NX (non-existent) RRsets and all
	// other RRsets, and by removing the least recently used items from the LRU
	// list for NX RRsets before removing items for other RRsets.
	MitigateNxdomainLru bool `json:"mitigate_nxdomain_lru,omitempty"`
}

// GridAutoblackhole represents Infoblox struct grid:autoblackhole
type GridAutoblackhole struct {
	// Enables or disables the configuration of the maximum number of concurrent
	// recursive queries the appliance sends to each upstream DNS server.
	EnableFetchesPerServer bool `json:"enable_fetches_per_server,omitempty"`

	// Enables or disables the configuration of the maximum number of concurrent
	// recursive queries the appliance sends to each DNS zone.
	EnableFetchesPerZone bool `json:"enable_fetches_per_zone,omitempty"`

	// Enables or disables the holddown configuration when the appliance stops
	// sending queries to non-responsive servers.
	EnableHolddown bool `json:"enable_holddown,omitempty"`

	// The maximum number of concurrent recursive queries the appliance sends to a
	// single upstream name server before blocking additional queries to that
	// server.
	FetchesPerServer uint32 `json:"fetches_per_server,omitempty"`

	// The maximum number of concurrent recursive queries that a server sends for
	// its domains.
	FetchesPerZone uint32 `json:"fetches_per_zone,omitempty"`

	// Determines how often (in number of recursive responses) the appliance
	// recalculates the average timeout ratio for each DNS server.
	FpsFreq uint32 `json:"fps_freq,omitempty"`

	// The holddown duration for non-responsive servers.
	Holddown uint32 `json:"holddown,omitempty"`

	// The number of consecutive timeouts before holding down a non-responsive
	// server.
	HolddownThreshold uint32 `json:"holddown_threshold,omitempty"`

	// The minimum time (in seconds) that needs to be passed before a timeout
	// occurs. Note that only these timeouts are counted towards the number of
	// consecutive timeouts.
	HolddownTimeout uint32 `json:"holddown_timeout,omitempty"`
}

// GridCloudapiGatewayConfig represents Infoblox struct grid:cloudapi:gateway:config
type GridCloudapiGatewayConfig struct {
	// Enable Gateway Service.
	EnableProxyService bool `json:"enable_proxy_service,omitempty"`

	// Gateway port
	Port uint32 `json:"port,omitempty"`

	// List of Gateway FQDN to AWS Endpoint Mapping.
	EndpointMapping []*GridCloudapiGatewayEndpointmapping `json:"endpoint_mapping,omitempty"`
}

// GridCloudapiGatewayEndpointmapping represents Infoblox struct grid:cloudapi:gateway:endpointmapping
type GridCloudapiGatewayEndpointmapping struct {
	// Gateway FQDN.
	GatewayFqdn string `json:"gateway_fqdn,omitempty"`

	// Endpoint FQDN.
	EndpointFqdn string `json:"endpoint_fqdn,omitempty"`
}

// GridCloudapiInfo represents Infoblox struct grid:cloudapi:info
type GridCloudapiInfo struct {
	// The Cloud Platform Appliance to which authority of the object is delegated.
	DelegatedMember *Dhcpmember `json:"delegated_member,omitempty"`

	// Indicates the scope of delegation for the object. This can be one of the
	// following: NONE (outside any delegation), ROOT (the delegation point),
	// SUBTREE (within the scope of a delegation), RECLAIMING (within the scope of
	// a delegation being reclaimed, either as the delegation point or in the
	// subtree).
	DelegatedScope string `json:"delegated_scope,omitempty"`

	// Indicates the root of the delegation if delegated_scope is SUBTREE or
	// RECLAIMING. This is not set otherwise.
	DelegatedRoot string `json:"delegated_root,omitempty"`

	// Determines whether the object was created by the cloud adapter or not.
	OwnedByAdaptor bool `json:"owned_by_adaptor,omitempty"`

	// Indicates the cloud origin of the object.
	Usage string `json:"usage,omitempty"`

	// Reference to the tenant object associated with the object, if any.
	Tenant string `json:"tenant,omitempty"`

	// Indicates the specified cloud management platform.
	MgmtPlatform string `json:"mgmt_platform,omitempty"`

	// Type of authority over the object.
	AuthorityType string `json:"authority_type,omitempty"`
}

// GridCloudapiUser represents Infoblox struct grid:cloudapi:user
type GridCloudapiUser struct {
	// Determines whether this is a remote admin user.
	IsRemote bool `json:"is_remote,omitempty"`

	// Username that matches a remote administrator who can perform cloud API
	// requests on the Cloud Platform Appliance.
	RemoteAdmin string `json:"remote_admin,omitempty"`

	// Local administrator who can perform cloud API requests on the Cloud Platform
	// Appliance.
	LocalAdmin string `json:"local_admin,omitempty"`
}

// GridConsentbannersetting represents Infoblox struct grid:consentbannersetting
type GridConsentbannersetting struct {
	// Determines whether the consent banner is enabled.
	Enable bool `json:"enable,omitempty"`

	// The message included in the consent banner.
	Message string `json:"message,omitempty"`
}

// GridCspapiconfig represents Infoblox struct grid:cspapiconfig
type GridCspapiconfig struct {
	// The url for the CspApiConfig.
	Url string `json:"url,omitempty"`

	// The user name for the CspApiConfig.
	Username string `json:"username,omitempty"`

	// The password for the CspApiConfig.
	Password string `json:"password,omitempty"`
}

// GridCspgridsetting represents Infoblox struct grid:cspgridsetting
type GridCspgridsetting struct {
	// Join token required to connect to a cluster
	CspJoinToken string `json:"csp_join_token,omitempty"`

	// IP address of DNS resolver in DFP
	CspDnsResolver string `json:"csp_dns_resolver,omitempty"`

	// HTTP Proxy IP address of CSP Portal
	CspHttpsProxy string `json:"csp_https_proxy,omitempty"`
}

// GridDnsFixedrrsetorderfqdn represents Infoblox struct grid:dns:fixedrrsetorderfqdn
type GridDnsFixedrrsetorderfqdn struct {
	// The FQDN of the fixed RRset configuration item.
	Fqdn string `json:"fqdn,omitempty"`

	// The record type for the specified FQDN in the fixed RRset configuration.
	RecordType string `json:"record_type,omitempty"`
}

// GridInformationalbannersetting represents Infoblox struct grid:informationalbannersetting
type GridInformationalbannersetting struct {
	// Determines whether the display of the informational level banner is enabled.
	Enable bool `json:"enable,omitempty"`

	// The message included in the informational level banner.
	Message string `json:"message,omitempty"`

	// The color for the informational level banner.
	Color string `json:"color,omitempty"`
}

// GridLicensesubpool represents Infoblox struct grid:licensesubpool
type GridLicensesubpool struct {
	// The license string for the license subpool.
	Key string `json:"key,omitempty"`

	// The total number of dynamic licenses allowed for this license subpool.
	Installed uint32 `json:"installed,omitempty"`

	// License expiration date.
	ExpiryDate *UnixTime `json:"expiry_date,omitempty"`
}

// GridLockoutsetting represents Infoblox struct grid:lockoutsetting
type GridLockoutsetting struct {
	// Enable/disable sequential failed login attempts lockout for local users
	EnableSequentialFailedLoginAttemptsLockout bool `json:"enable_sequential_failed_login_attempts_lockout,omitempty"`

	// The number of failed login attempts
	SequentialAttempts uint32 `json:"sequential_attempts,omitempty"`

	// Time period the account remains locked after sequential failed login attempt
	// lockout.
	FailedLockoutDuration uint32 `json:"failed_lockout_duration,omitempty"`

	// Never unlock option is also provided and if set then user account is locked
	// forever and only super user can unlock this account
	NeverUnlockUser bool `json:"never_unlock_user,omitempty"`
}

// GridLoggingcategories represents Infoblox struct grid:loggingcategories
type GridLoggingcategories struct {
	// Determines whether the DTC GSLB activity is captured or not.
	LogDtcGslb bool `json:"log_dtc_gslb,omitempty"`

	// Determines whether the DTC health monitoring information is captured or not.
	LogDtcHealth bool `json:"log_dtc_health,omitempty"`

	// Determines whether the BIND messages that are not specifically classified
	// are captured or not.
	LogGeneral bool `json:"log_general,omitempty"`

	// Determines whether the client requests are captured or not.
	LogClient bool `json:"log_client,omitempty"`

	// Determines whether the configuration file parsing is captured or not.
	LogConfig bool `json:"log_config,omitempty"`

	// Determines whether the BIND's internal database processes are captured or
	// not.
	LogDatabase bool `json:"log_database,omitempty"`

	// Determines whether the DNSSEC-signed responses are captured or not.
	LogDnssec bool `json:"log_dnssec,omitempty"`

	// Determines whether the bad delegation instances are captured or not.
	LogLameServers bool `json:"log_lame_servers,omitempty"`

	// Determines whether the network operation messages are captured or not.
	LogNetwork bool `json:"log_network,omitempty"`

	// Determines whether the asynchronous zone change notification messages are
	// captured or not.
	LogNotify bool `json:"log_notify,omitempty"`

	// Determines whether the query messages are captured or not.
	LogQueries bool `json:"log_queries,omitempty"`

	// Determines whether the query rewrite messages are captured or not.
	LogQueryRewrite bool `json:"log_query_rewrite,omitempty"`

	// Determines whether the response messages are captured or not.
	LogResponses bool `json:"log_responses,omitempty"`

	// Determines whether the DNS resolution instances, including recursive queries
	// from resolvers are captured or not.
	LogResolver bool `json:"log_resolver,omitempty"`

	// Determines whether the approved and denied requests are captured or not.
	LogSecurity bool `json:"log_security,omitempty"`

	// Determines whether the dynamic update instances are captured or not.
	LogUpdate bool `json:"log_update,omitempty"`

	// Determines whether the zone transfer messages from the remote name servers
	// to the appliance are captured or not.
	LogXferIn bool `json:"log_xfer_in,omitempty"`

	// Determines whether the zone transfer messages from the Infoblox appliance to
	// remote name servers are captured or not.
	LogXferOut bool `json:"log_xfer_out,omitempty"`

	// Determines whether the security update messages are captured or not.
	LogUpdateSecurity bool `json:"log_update_security,omitempty"`

	// Determines whether the rate limit messages are captured or not.
	LogRateLimit bool `json:"log_rate_limit,omitempty"`

	// Determines whether the Response Policy Zone messages are captured or not.
	LogRpz bool `json:"log_rpz,omitempty"`
}

// NTPSetting represents Infoblox struct grid:ntp
type NTPSetting struct {
	// Determines whether NTP is enabled on the Grid.
	EnableNTP bool `json:"enable_ntp,omitempty"`

	// The list of NTP servers configured on a Grid.
	NTPServers []*NTPserver `json:"ntp_servers,omitempty"`

	// The list of NTP authentication keys used to authenticate NTP clients.
	NTPKeys []*Ntpkey `json:"ntp_keys,omitempty"`

	// The NTP access control settings.
	NTPAcl *Ntpaccess `json:"ntp_acl,omitempty"`

	// Determines whether the Kiss-o'-Death packets are enabled.
	NTPKod bool `json:"ntp_kod,omitempty"`

	// Grid level GM local NTP stratum.
	GmLocalNtpStratum uint32 `json:"gm_local_ntp_stratum,omitempty"`

	// Local NTP stratum for non-GM members.
	LocalNtpStratum uint32 `json:"local_ntp_stratum,omitempty"`

	// This flag controls whether gm_local_ntp_stratum value be set to a default
	// value
	UseDefaultStratum bool `json:"use_default_stratum,omitempty"`
}

// GridResponseratelimiting represents Infoblox struct grid:responseratelimiting
type GridResponseratelimiting struct {
	// Determines if the response rate limiting is enabled or not.
	EnableRrl bool `json:"enable_rrl,omitempty"`

	// Determines if logging for response rate limiting without dropping any
	// requests is enabled or not.
	LogOnly bool `json:"log_only,omitempty"`

	// The number of responses per client per second.
	ResponsesPerSecond uint32 `json:"responses_per_second,omitempty"`

	// The time interval in seconds over which responses are tracked.
	Window uint32 `json:"window,omitempty"`

	// The response rate limiting slip. Note that if slip is not equal to 0 every
	// n-th rate-limited UDP request is sent a truncated response instead of being
	// dropped.
	Slip uint32 `json:"slip,omitempty"`
}

// GridRestartbannersetting represents Infoblox struct grid:restartbannersetting
type GridRestartbannersetting struct {
	// If set to True, the restart banner is enabled.
	Enabled bool `json:"enabled,omitempty"`

	// If set to True, the user is required to input name before restarting the
	// services.
	EnableDoubleConfirmation bool `json:"enable_double_confirmation,omitempty"`
}

// GridServicerestart represents Infoblox struct grid:servicerestart
type GridServicerestart struct {
	// The time duration to delay a restart for a restart group.
	Delay uint32 `json:"delay,omitempty"`

	// The duration of timeout for a restart group. The value "-1" means infinite.
	Timeout int `json:"timeout,omitempty"`

	// Determines whether the Grid should try to restart offline member.
	RestartOffline bool `json:"restart_offline,omitempty"`
}

// GridServicerestartGroupSchedule represents Infoblox struct grid:servicerestart:group:schedule
type GridServicerestartGroupSchedule struct {
	// The list of applicable services for the restart.
	Services []string `json:"services,omitempty"`

	// The restart method for a Grid restart.
	Mode string `json:"mode,omitempty"`

	// The Schedule Setting struct that determines the schedule for the restart.
	Schedule *SettingSchedule `json:"schedule,omitempty"`

	// Determines if the Restart Group should have a force restart.
	Force bool `json:"force,omitempty"`
}

// GridmemberSoamname represents Infoblox struct gridmember_soamname
type GridmemberSoamname struct {
	// The grid primary server for the zone. Only one of "grid_primary" or
	// "ms_server_primary" should be set when modifying or creating the object.
	GridPrimary string `json:"grid_primary,omitempty"`

	// The primary MS server for the zone. Only one of "grid_primary" or
	// "ms_server_primary" should be set when modifying or creating the object.
	MsServerPrimary string `json:"ms_server_primary,omitempty"`

	// Master's SOA MNAME. This value can be in unicode format.
	Mname string `json:"mname,omitempty"`

	// Master's SOA MNAME in punycode format.
	DnsMname string `json:"dns_mname,omitempty"`
}

// GridmemberSoaserial represents Infoblox struct gridmember_soaserial
type GridmemberSoaserial struct {
	// The grid primary server for the zone. Only one of "grid_primary" or
	// "ms_server_primary" will be set when the object is retrieved from the
	// server.
	GridPrimary string `json:"grid_primary,omitempty"`

	// The primary MS server for the zone. Only one of "grid_primary" or
	// "ms_server_primary" will be set when the object is retrieved from the
	// server.
	MsServerPrimary string `json:"ms_server_primary,omitempty"`

	// The SOA serial number.
	Serial uint32 `json:"serial,omitempty"`
}

// Hotfix represents Infoblox struct hotfix
type Hotfix struct {
	// The status text of the hotfix.
	StatusText string `json:"status_text,omitempty"`

	// Unique ID of the hotfix.
	UniqueId string `json:"unique_id,omitempty"`
}

// HsmSafenet represents Infoblox struct hsm:safenet
type HsmSafenet struct {
	// The HSM SafeNet device IPv4 Address or FQDN.
	Name string `json:"name,omitempty"`

	// The HSM SafeNet device partition serial number (PSN).
	PartitionSerialNumber string `json:"partition_serial_number,omitempty"`

	// Determines whether the HSM SafeNet device is disabled.
	Disable bool `json:"disable,omitempty"`

	// Partition ID that is displayed after the appliance has successfully
	// connected to the HSM SafeNet device.
	PartitionId string `json:"partition_id,omitempty"`

	// Determines whether the HSM SafeNet device is FIPS compliant.
	IsFipsCompliant bool `json:"is_fips_compliant,omitempty"`

	// The token returned by the uploadinit function call in object fileop for a
	// SafeNet HSM device certificate.
	ServerCert string `json:"server_cert,omitempty"`

	// The HSM SafeNet device partition capacity percentage used.
	PartitionCapacity uint32 `json:"partition_capacity,omitempty"`

	// The HSM SafeNet device status.
	Status string `json:"status,omitempty"`
}

// HsmThales represents Infoblox struct hsm:thales
type HsmThales struct {
	// The IPv4 Address of the Thales HSM device.
	RemoteIp string `json:"remote_ip,omitempty"`

	// The Thales HSM device destination port.
	RemotePort uint32 `json:"remote_port,omitempty"`

	// The Thales HSM device status.
	Status string `json:"status,omitempty"`

	// The Thales HSM device electronic serial number.
	RemoteEsn string `json:"remote_esn,omitempty"`

	// The Thales HSM device public key digest.
	Keyhash string `json:"keyhash,omitempty"`

	// Determines whether the Thales HSM device is disabled.
	Disable bool `json:"disable,omitempty"`
}

// Interface represents Infoblox struct interface
type Interface struct {
	// Determines if anycast for the Interface object is enabled or not.
	Anycast bool `json:"anycast,omitempty"`

	// The IPv4 network settings of the Grid Member.
	Ipv4NetworkSetting *SettingNetwork `json:"ipv4_network_setting,omitempty"`

	// The IPv6 network settings of the Grid Member.
	Ipv6NetworkSetting *Ipv6setting `json:"ipv6_network_setting,omitempty"`

	// A descriptive comment of this structure.
	Comment string `json:"comment,omitempty"`

	// Determines if the BGP advertisement setting is enabled for this interface or
	// not.
	EnableBgp bool `json:"enable_bgp,omitempty"`

	// Determines if the OSPF advertisement setting is enabled for this interface
	// or not.
	EnableOspf bool `json:"enable_ospf,omitempty"`

	// The interface type for the Interface object.
	Interface string `json:"interface,omitempty"`
}

// Ipv6networksetting represents Infoblox struct ipv6networksetting
type Ipv6networksetting struct {
	// IPv6 address.
	Address string `json:"address,omitempty"`

	// IPv6 CIDR
	Cidr uint32 `json:"cidr,omitempty"`

	// Gateway address.
	Gateway string `json:"gateway,omitempty"`
}

// Ipv6setting represents Infoblox struct ipv6setting
type Ipv6setting struct {
	// Determines if IPv6 networking should be enabled.
	Enabled bool `json:"enabled,omitempty"`

	// IPv6 address.
	VirtualIp string `json:"virtual_ip,omitempty"`

	// IPv6 cidr prefix
	CidrPrefix uint32 `json:"cidr_prefix,omitempty"`

	// Gateway address.
	Gateway string `json:"gateway,omitempty"`

	// Determines if automatic router configuration should be enabled.
	AutoRouterConfigEnabled bool `json:"auto_router_config_enabled,omitempty"`

	// The identifier for the VLAN. Valid values are from 1 to 4096.
	VlanId uint32 `json:"vlan_id,omitempty"`

	// Determines if the current address is the primary VLAN address or not.
	Primary bool `json:"primary,omitempty"`

	// The DSCP (Differentiated Services Code Point) value determines relative
	// priorities for the type of services on your network. The appliance
	// implements QoS (Quality of Service) rules based on this configuration. Valid
	// values are from 0 to 63.
	Dscp uint32 `json:"dscp,omitempty"`

	// Use flag for: dscp
	UseDscp bool `json:"use_dscp,omitempty"`
}

// Lan2portsetting represents Infoblox struct lan2portsetting
type Lan2portsetting struct {
	// If the 'enabled' field is set to True, this defines the virtual router ID
	// for the LAN2 port.
	VirtualRouterId uint32 `json:"virtual_router_id,omitempty"`

	// If this field is set to True, then it has its own IP settings. Otherwise,
	// port redundancy mechanism is used, in which the LAN1 and LAN2 ports share
	// the same IP settings for failover purposes.
	Enabled bool `json:"enabled,omitempty"`

	// If the 'enable' field is set to True, this defines IPv4 network settings for
	// LAN2.
	NetworkSetting *SettingNetwork `json:"network_setting,omitempty"`

	// If the 'enable' field is set to True, this defines IPv6 network settings for
	// the LAN2 port.
	V6NetworkSetting *Ipv6setting `json:"v6_network_setting,omitempty"`

	// Determines if NIC failover is enabled or not.
	NicFailoverEnabled bool `json:"nic_failover_enabled,omitempty"`

	// Prefer LAN1 when available.
	NicFailoverEnablePrimary bool `json:"nic_failover_enable_primary,omitempty"`

	// Default route failover for LAN1 and LAN2.
	DefaultRouteFailoverEnabled bool `json:"default_route_failover_enabled,omitempty"`
}

// Lanhaportsetting represents Infoblox struct lanhaportsetting
type Lanhaportsetting struct {
	// Public IPv4 address for the LAN1 interface.
	MgmtLan string `json:"mgmt_lan,omitempty"`

	// Public IPv6 address for the LAN1 interface.
	MgmtIpv6addr string `json:"mgmt_ipv6addr,omitempty"`

	// HA IP address.
	HaIpAddress string `json:"ha_ip_address,omitempty"`

	// Physical port settings for the LAN interface.
	LanPortSetting *Physicalportsetting `json:"lan_port_setting,omitempty"`

	// Physical port settings for the HA interface.
	HaPortSetting *Physicalportsetting `json:"ha_port_setting,omitempty"`
}

// LdapEamapping represents Infoblox struct ldap_eamapping
type LdapEamapping struct {
	// The LDAP attribute name.
	Name string `json:"name,omitempty"`

	// The name of the extensible attribute definition object to which the LDAP
	// attribute is mapped.
	MappedEa string `json:"mapped_ea,omitempty"`
}

// LdapServer represents Infoblox struct ldap_server
type LdapServer struct {
	// The IP address or FQDN of the LDAP server.
	Address string `json:"address,omitempty"`

	// The authentication type for the LDAP server.
	AuthenticationType string `json:"authentication_type,omitempty"`

	// The base DN for the LDAP server.
	BaseDn string `json:"base_dn,omitempty"`

	// The user password for authentication.
	BindPassword string `json:"bind_password,omitempty"`

	// The user DN for authentication.
	BindUserDn string `json:"bind_user_dn,omitempty"`

	// The LDAP descriptive comment.
	Comment string `json:"comment,omitempty"`

	// Determines if the LDAP server is disabled.
	Disable bool `json:"disable,omitempty"`

	// The LDAP server encryption type.
	Encryption string `json:"encryption,omitempty"`

	// The LDAP server port.
	Port uint32 `json:"port,omitempty"`

	// Determines if the connection via the MGMT interface is allowed.
	UseMgmtPort bool `json:"use_mgmt_port,omitempty"`

	// The LDAP server version.
	Version string `json:"version,omitempty"`
}

// Logicfilterrule represents Infoblox struct logicfilterrule
type Logicfilterrule struct {
	// The filter name.
	Filter string `json:"filter,omitempty"`

	// The filter type. Valid values are: * MAC * NAC * Option
	Type string `json:"type,omitempty"`
}

// Lomnetworkconfig represents Infoblox struct lomnetworkconfig
type Lomnetworkconfig struct {
	// The IPv4 Address of the Grid member.
	Address string `json:"address,omitempty"`

	// The default gateway for the Grid member.
	Gateway string `json:"gateway,omitempty"`

	// The subnet mask for the Grid member.
	SubnetMask string `json:"subnet_mask,omitempty"`

	// Determines if the physical node supports LOM or not.
	IsLomCapable bool `json:"is_lom_capable,omitempty"`
}

// Lomuser represents Infoblox struct lomuser
type Lomuser struct {
	// The LOM user name.
	Name string `json:"name,omitempty"`

	// The LOM user password.
	Password string `json:"password,omitempty"`

	// The LOM user role which specifies the list of actions that are allowed for
	// the user.
	Role string `json:"role,omitempty"`

	// Determines whether the LOM user is disabled.
	Disable bool `json:"disable,omitempty"`

	// The descriptive comment for the LOM user.
	Comment string `json:"comment,omitempty"`
}

// MemberCspmembersetting represents Infoblox struct member:cspmembersetting
type MemberCspmembersetting struct {
	// Overrides grid join token
	UseCspJoinToken bool `json:"use_csp_join_token,omitempty"`

	// Overrides CSP DNS Resolver
	UseCspDnsResolver bool `json:"use_csp_dns_resolver,omitempty"`

	// Overrides grid https proxy
	UseCspHttpsProxy bool `json:"use_csp_https_proxy,omitempty"`

	// Join token required to connect to a cluster
	CspJoinToken string `json:"csp_join_token,omitempty"`

	// IP address of DNS resolver in DFP
	CspDnsResolver string `json:"csp_dns_resolver,omitempty"`

	// HTTP Proxy IP address of CSP Portal
	CspHttpsProxy string `json:"csp_https_proxy,omitempty"`
}

// MemberDnsgluerecordaddr represents Infoblox struct member:dnsgluerecordaddr
type MemberDnsgluerecordaddr struct {
	// Determines if empty view with recursion enabled will be written into the
	// conf file.
	AttachEmptyRecursiveView bool `json:"attach_empty_recursive_view,omitempty"`

	// The address the appliance uses to generate the glue record.
	GlueRecordAddress string `json:"glue_record_address,omitempty"`

	// The name of the DNS View in which the record resides. Example: "external".
	View string `json:"view,omitempty"`

	// The address choice for auto-created glue records for this view.
	GlueAddressChoice string `json:"glue_address_choice,omitempty"`
}

// MemberDnsip represents Infoblox struct member:dnsip
type MemberDnsip struct {
	// The additional IP address of the member.
	IpAddress string `json:"ip_address,omitempty"`
}

// MemberNtp represents Infoblox struct member:ntp
type MemberNtp struct {
	// Determines whether the NTP service is enabled on the member.
	EnableNTP bool `json:"enable_ntp,omitempty"`

	// The list of NTP servers configured on a member.
	NTPServers []*NTPserver `json:"ntp_servers,omitempty"`

	// The list of NTP authentication keys used to authenticate NTP clients.
	NTPKeys []*Ntpkey `json:"ntp_keys,omitempty"`

	// The NTP access control settings.
	NTPAcl *Ntpaccess `json:"ntp_acl,omitempty"`

	// Determines whether the Kiss-o'-Death packets are enabled or disabled.
	NTPKod bool `json:"ntp_kod,omitempty"`

	// Determines whether the use of the external NTP servers is enabled for the
	// member.
	EnableExternalNtpServers bool `json:"enable_external_ntp_servers,omitempty"`

	// Determines whether the Grid Master is excluded as an NTP server.
	ExcludeGridMasterNtpServer bool `json:"exclude_grid_master_ntp_server,omitempty"`

	// Override Grid level NTP stratum.
	UseLocalNtpStratum bool `json:"use_local_ntp_stratum,omitempty"`

	// Vnode level local NTP stratum.
	LocalNtpStratum uint32 `json:"local_ntp_stratum,omitempty"`

	// Vnode level default stratum.
	UseDefaultStratum bool `json:"use_default_stratum,omitempty"`

	// Use flag for: ntp_servers
	UseNtpServers bool `json:"use_ntp_servers,omitempty"`

	// Use flag for: ntp_keys
	UseNtpKeys bool `json:"use_ntp_keys,omitempty"`

	// Use flag for: ntp_acl
	UseNtpAcl bool `json:"use_ntp_acl,omitempty"`

	// Use flag for: ntp_kod
	UseNtpKod bool `json:"use_ntp_kod,omitempty"`
}

// Memberserver represents Infoblox struct memberserver
type Memberserver struct {
	// The grid member name.
	Name string `json:"name,omitempty"`

	// This flag governs whether the specified Grid member is in stealth mode or
	// not. If set to True, the member is in stealth mode. This flag is ignored if
	// the struct is specified as part of a stub zone.
	Stealth bool `json:"stealth,omitempty"`

	// The flag represents DNS zone transfers if set to True, and ID Grid
	// Replication if set to False. This flag is ignored if the struct is specified
	// as part of a stub zone or if it is set as grid_member in an authoritative
	// zone.
	GridReplicate bool `json:"grid_replicate,omitempty"`

	// This flag controls whether the Grid lead secondary server performs zone
	// transfers to non lead secondaries. This flag is ignored if the struct is
	// specified as grid_member in an authoritative zone.
	Lead bool `json:"lead,omitempty"`

	// The primary preference list with Grid member names and\or External Server
	// extserver structs for this member.
	PreferredPrimaries []NameServer `json:"preferred_primaries,omitempty"`

	// This flag represents whether the preferred_primaries field values of this
	// member are used.
	EnablePreferredPrimaries bool `json:"enable_preferred_primaries,omitempty"`
}

// Memberservicecommunication represents Infoblox struct memberservicecommunication
type Memberservicecommunication struct {
	// The service for a Grid member.
	Service string `json:"service,omitempty"`

	// Communication type.
	Type string `json:"type,omitempty"`

	// The option for communication type.
	Option string `json:"option,omitempty"`
}

// Memberservicestatus represents Infoblox struct memberservicestatus
type Memberservicestatus struct {
	// The description of the current service status.
	Description string `json:"description,omitempty"`

	// The service status.
	Status string `json:"status,omitempty"`

	// The service identifier.
	Service string `json:"service,omitempty"`
}

// Mgmtportsetting represents Infoblox struct mgmtportsetting
type Mgmtportsetting struct {
	// Determines if MGMT port settings should be enabled.
	Enabled bool `json:"enabled,omitempty"`

	// Determines if VPN on the MGMT port is enabled or not.
	VpnEnabled bool `json:"vpn_enabled,omitempty"`

	// Determines if security access on the MGMT port is enabled or not.
	SecurityAccessEnabled bool `json:"security_access_enabled,omitempty"`
}

// Monitoreddomains represents Infoblox struct monitoreddomains
type Monitoreddomains struct {
	// Domain name (FQDN to Query).
	DomainName string `json:"domain_name,omitempty"`

	// Record type(record to query).
	RecordType string `json:"record_type,omitempty"`
}

// Msdhcpoption represents Infoblox struct msdhcpoption
type Msdhcpoption struct {
	// The code of the DHCP option.
	Num uint32 `json:"num,omitempty"`

	// Value of the DHCP option.
	Value string `json:"value,omitempty"`

	// The name of the DHCP option.
	Name string `json:"name,omitempty"`

	// The name of the vendor class with which this DHCP option is associated.
	VendorClass string `json:"vendor_class,omitempty"`

	// The name of the user class with which this DHCP option is associated.
	UserClass string `json:"user_class,omitempty"`

	// The DHCP option type. Valid values are: * "16-bit signed integer" * "16-bit
	// unsigned integer" * "32-bit signed integer" * "32-bit unsigned integer" *
	// "64-bit unsigned integer" * "8-bit signed integer" * "8-bit unsigned integer
	// (1,2,4,8)" * "8-bit unsigned integer" * "array of 16-bit integer" * "array
	// of 16-bit unsigned integer" * "array of 32-bit integer" * "array of 32-bit
	// unsigned integer" * "array of 64-bit unsigned integer" * "array of 8-bit
	// integer" * "array of 8-bit unsigned integer" * "array of ip-address pair" *
	// "array of ip-address" * "array of string" * "binary" * "boolean array of
	// ip-address" * "boolean" * "boolean-text" * "domain-list" * "domain-name" *
	// "encapsulated" * "ip-address" * "string" * "text"
	Type string `json:"type,omitempty"`
}

// Msdhcpserver represents Infoblox struct msdhcpserver
type Msdhcpserver struct {
	// The IPv4 Address or FQDN of the Microsoft server.
	Ipv4Addr string `json:"ipv4addr,omitempty"`
}

// Msdnsserver represents Infoblox struct msdnsserver
type Msdnsserver struct {
	// The address of the server.
	Address string `json:"address,omitempty"`

	// This flag indicates if this server is a synchronization master.
	IsMaster bool `json:"is_master,omitempty"`

	// This address is used when generating the NS record in the zone, which can be
	// different in case of multihomed hosts.
	NsIp string `json:"ns_ip,omitempty"`

	// This name is used when generating the NS record in the zone, which can be
	// different in case of multihomed hosts.
	NsName string `json:"ns_name,omitempty"`

	// Set this flag to hide the NS record for the primary name server from DNS
	// queries.
	Stealth bool `json:"stealth,omitempty"`

	// This flag represents whether the name server is shared with the parent
	// Microsoft primary zone's delegation server.
	SharedWithMsParentDelegation bool `json:"shared_with_ms_parent_delegation,omitempty"`
}

// MsserverAduser represents Infoblox struct msserver:aduser
type MsserverAduser struct {
	// The login name of the Microsoft Server.
	LoginName string `json:"login_name,omitempty"`

	// The login password of the DHCP Microsoft Server.
	LoginPassword string `json:"login_password,omitempty"`

	// Determines whether the Active Directory user synchronization is enabled or
	// not.
	EnableUserSync bool `json:"enable_user_sync,omitempty"`

	// The minimum number of minutes between two synchronizations.
	SynchronizationInterval uint32 `json:"synchronization_interval,omitempty"`

	// Timestamp of the last synchronization attempt.
	LastSyncTime *UnixTime `json:"last_sync_time,omitempty"`

	// The status of the last synchronization attempt.
	LastSyncStatus string `json:"last_sync_status,omitempty"`

	// The detailed status of the last synchronization attempt.
	LastSyncDetail string `json:"last_sync_detail,omitempty"`

	// Timestamp of the last successful synchronization attempt.
	LastSuccessSyncTime *UnixTime `json:"last_success_sync_time,omitempty"`

	// Flag to override login name and password from MS server
	UseLogin bool `json:"use_login,omitempty"`

	// Flag to override AD User sync from grid level
	UseEnableAdUserSync bool `json:"use_enable_ad_user_sync,omitempty"`

	// Flag to override synchronization interval from the MS Server
	UseSynchronizationMinDelay bool `json:"use_synchronization_min_delay,omitempty"`

	// Use flag for: enable_user_sync
	UseEnableUserSync bool `json:"use_enable_user_sync,omitempty"`

	// Use flag for: synchronization_interval
	UseSynchronizationInterval bool `json:"use_synchronization_interval,omitempty"`
}

// MsserverAduserData represents Infoblox struct msserver:aduser:data
type MsserverAduserData struct {
	// The number of active users.
	ActiveUsersCount uint32 `json:"active_users_count,omitempty"`
}

// MsserverDcnsrecordcreation represents Infoblox struct msserver:dcnsrecordcreation
type MsserverDcnsrecordcreation struct {
	// The IPv4 address of the domain controller that is allowed to create NS
	// records.
	Address string `json:"address,omitempty"`

	// Optional user comment.
	Comment string `json:"comment,omitempty"`
}

// Natsetting represents Infoblox struct natsetting
type Natsetting struct {
	// Determines if NAT should be enabled.
	Enabled bool `json:"enabled,omitempty"`

	// External IP address for NAT.
	ExternalVirtualIp string `json:"external_virtual_ip,omitempty"`

	// The NAT group.
	Group string `json:"group,omitempty"`
}

// NetworkviewAssocmember represents Infoblox struct networkview:assocmember
type NetworkviewAssocmember struct {
	// The member object associated with a network view.
	Member string `json:"member,omitempty"`

	// The list of failover objects associated with each member.
	Failovers []string `json:"failovers,omitempty"`
}

// Nodeinfo represents Infoblox struct nodeinfo
type Nodeinfo struct {
	// The service status list of the Grid Member.
	ServiceStatus []*Servicestatus `json:"service_status,omitempty"`

	// The OID of the physical node.
	PhysicalOid string `json:"physical_oid,omitempty"`

	// Status about the node of an HA pair.
	HaStatus string `json:"ha_status,omitempty"`

	// The platform on which NIOS is running on.
	Hwplatform string `json:"hwplatform,omitempty"`

	// Hardware ID.
	Hwid string `json:"hwid,omitempty"`

	// Hardware model.
	Hwmodel string `json:"hwmodel,omitempty"`

	// Hardware type.
	Hwtype string `json:"hwtype,omitempty"`

	// True if node is Paid NIOS.
	PaidNios bool `json:"paid_nios,omitempty"`

	// Network settings for the MGMT port of the node.
	MgmtNetworkSetting *SettingNetwork `json:"mgmt_network_setting,omitempty"`

	// LAN/HA port settings for the node.
	LanHaPortSetting *Lanhaportsetting `json:"lan_ha_port_setting,omitempty"`

	// Physical port settings for the MGMT interface.
	MgmtPhysicalSetting *Physicalportsetting `json:"mgmt_physical_setting,omitempty"`

	// Physical port settings for the LAN2 interface.
	Lan2PhysicalSetting *Physicalportsetting `json:"lan2_physical_setting,omitempty"`

	// The NAT external IP address for the node.
	NatExternalIp string `json:"nat_external_ip,omitempty"`

	// The network settings for the IPv6 MGMT port of the node.
	V6MgmtNetworkSetting *Ipv6setting `json:"v6_mgmt_network_setting,omitempty"`
}

// NotificationRestTemplateinstance represents Infoblox struct notification:rest:templateinstance
type NotificationRestTemplateinstance struct {
	// The name of the REST API template parameter.
	Template string `json:"template,omitempty"`

	// The notification REST template parameters.
	Parameters []*NotificationRestTemplateparameter `json:"parameters,omitempty"`
}

// NotificationRestTemplateparameter represents Infoblox struct notification:rest:templateparameter
type NotificationRestTemplateparameter struct {
	// The name of the REST API template parameter.
	Name string `json:"name,omitempty"`

	// The value of the REST API template parameter.
	Value string `json:"value,omitempty"`

	// The default value of the REST API template parameter.
	DefaultValue string `json:"default_value,omitempty"`

	// The syntax of the REST API template parameter.
	Syntax string `json:"syntax,omitempty"`
}

// NotificationRuleexpressionop represents Infoblox struct notification:ruleexpressionop
type NotificationRuleexpressionop struct {
	// Rule expression type.
	Op string `json:"op,omitempty"`

	// Rule expression first operand value.
	Op1 string `json:"op1,omitempty"`

	// Rule expression first operand type.
	Op1Type string `json:"op1_type,omitempty"`

	// Rule expression second operand.
	Op2 string `json:"op2,omitempty"`

	// Rule expression second operand type.
	Op2Type string `json:"op2_type,omitempty"`
}

// Ntpac represents Infoblox struct ntpac
type Ntpac struct {
	// The client address/network with access control.
	AddressAc *Addressac `json:"address_ac,omitempty"`

	// The type of service with access control.
	Service string `json:"service,omitempty"`
}

// Ntpaccess represents Infoblox struct ntpaccess
type Ntpaccess struct {
	// The NTP access control list type.
	AclType string `json:"acl_type,omitempty"`

	// The list of NTP access control items.
	AcList []*Ntpac `json:"ac_list,omitempty"`

	// The NTP access named ACL.
	NamedAcl string `json:"named_acl,omitempty"`

	// The type of service with access control for the assigned named ACL.
	Service string `json:"service,omitempty"`
}

// Ntpkey represents Infoblox struct ntpkey
type Ntpkey struct {
	// The NTP authentication key identifier.
	Number uint32 `json:"number,omitempty"`

	// The NTP authentication key string.
	String string `json:"string,omitempty"`

	// The NTP authentication key type.
	Type string `json:"type,omitempty"`
}

// NTPserver represents Infoblox struct ntpserver
type NTPserver struct {
	// The NTP server IP address or FQDN.
	Address string `json:"address,omitempty"`

	// Determines whether the NTP authentication is enabled.
	EnableAuthentication bool `json:"enable_authentication,omitempty"`

	// The NTP authentication key number.
	NtpKeyNumber uint32 `json:"ntp_key_number,omitempty"`

	// Determines whether the NTP server is a preferred one or not.
	Preferred bool `json:"preferred,omitempty"`

	// Determines whether the BURST operation mode is enabled. In BURST operating
	// mode, when the external server is reachable and a valid source of
	// synchronization is available, NTP sends a burst of 8 packets with a 2 second
	// interval between packets.
	Burst bool `json:"burst,omitempty"`

	// Determines whether the IBURST operation mode is enabled. In IBURST operating
	// mode, when the external server is unreachable, NTP server sends a burst of 8
	// packets with a 2 second interval between packets.
	IBurst bool `json:"iburst,omitempty"`
}

// Nxdomainrule represents Infoblox struct nxdomainrule
type Nxdomainrule struct {
	// The action to perform when a domain name matches the pattern defined in this
	// Ruleset.
	Action string `json:"action,omitempty"`

	// The pattern that is used to match the domain name.
	Pattern string `json:"pattern,omitempty"`
}

// Objectschangestrackingsetting represents Infoblox struct objectschangestrackingsetting
type Objectschangestrackingsetting struct {
	// Determines whether the objects changes tracking feature is enabled or not.
	Enable bool `json:"enable,omitempty"`

	// Determines the percentage of completion for objects changes tracking.
	EnableCompletion uint32 `json:"enable_completion,omitempty"`

	// Determines the objects changes tracking enable state.
	State string `json:"state,omitempty"`

	// Maximum time period in seconds to track the deleted objects changes. You can
	// enter a value from 7200 - 604800 seconds.
	MaxTimeToTrack uint32 `json:"max_time_to_track,omitempty"`

	// Maximum number of deleted objects retained for tracking. You can enter a
	// value from 2000 - 20000.
	MaxObjsToTrack uint32 `json:"max_objs_to_track,omitempty"`
}

// OcspResponder represents Infoblox struct ocsp_responder
type OcspResponder struct {
	// The FQDN (Fully Qualified Domain Name) or IP address of the server.
	FqdnOrIp string `json:"fqdn_or_ip,omitempty"`

	// The port used for connecting.
	Port uint32 `json:"port,omitempty"`

	// The descriptive comment for the OCSP authentication responder.
	Comment string `json:"comment,omitempty"`

	// Determines if this OCSP authentication responder is disabled.
	Disabled bool `json:"disabled,omitempty"`

	// The reference to the OCSP responder certificate.
	Certificate string `json:"certificate,omitempty"`

	// The token returned by the uploadinit function call in object fileop.
	CertificateToken string `json:"certificate_token,omitempty"`
}

// Option60matchrule represents Infoblox struct option60matchrule
type Option60matchrule struct {
	// The match value for this DHCP Option 60 match rule.
	MatchValue string `json:"match_value,omitempty"`

	// The option space for this DHCP Option 60 match rule.
	OptionSpace string `json:"option_space,omitempty"`

	// Determines if the match value is a substring.
	IsSubstring bool `json:"is_substring,omitempty"`

	// The offset of match value for this DHCP Option 60 match rule.
	SubstringOffset uint32 `json:"substring_offset,omitempty"`

	// The length of match value for this DHCP Option 60 match rule.
	SubstringLength uint32 `json:"substring_length,omitempty"`
}

// Ospf represents Infoblox struct ospf
type Ospf struct {
	// The area ID value of the OSPF settings.
	AreaId string `json:"area_id,omitempty"`

	// The OSPF area type.
	AreaType string `json:"area_type,omitempty"`

	// The authentication password to use for OSPF. The authentication key is valid
	// only when authentication type is "SIMPLE" or "MESSAGE_DIGEST".
	AuthenticationKey string `json:"authentication_key,omitempty"`

	// The authentication type used for the OSPF advertisement.
	AuthenticationType string `json:"authentication_type,omitempty"`

	// Determines if auto calculate cost is enabled or not.
	AutoCalcCostEnabled bool `json:"auto_calc_cost_enabled,omitempty"`

	// A descriptive comment of the OSPF configuration.
	Comment string `json:"comment,omitempty"`

	// The cost metric associated with the OSPF advertisement.
	Cost uint32 `json:"cost,omitempty"`

	// The dead interval value of OSPF (in seconds). The dead interval describes
	// the time to wait before declaring the device is unavailable and down.
	DeadInterval uint32 `json:"dead_interval,omitempty"`

	// The hello interval value of OSPF. The hello interval specifies how often to
	// send OSPF hello advertisement, in seconds.
	HelloInterval uint32 `json:"hello_interval,omitempty"`

	// The interface that sends out OSPF advertisement information.
	Interface string `json:"interface,omitempty"`

	// The OSPF protocol version. Specify "true" if the IPv4 version of OSPF is
	// used, or "false" if the IPv6 version of OSPF is used.
	IsIpv4 bool `json:"is_ipv4,omitempty"`

	// The hash key identifier to use for "MESSAGE_DIGEST" authentication. The hash
	// key identifier is valid only when authentication type is "MESSAGE_DIGEST".
	KeyId uint32 `json:"key_id,omitempty"`

	// The retransmit interval time of OSPF (in seconds). The retransmit interval
	// describes the time to wait before retransmitting OSPF advertisement.
	RetransmitInterval uint32 `json:"retransmit_interval,omitempty"`

	// The transmit delay value of OSPF (in seconds). The transmit delay describes
	// the time to wait before sending an advertisement.
	TransmitDelay uint32 `json:"transmit_delay,omitempty"`

	// The VLAN used as the advertising interface for sending OSPF announcements.
	AdvertiseInterfaceVlan string `json:"advertise_interface_vlan,omitempty"`

	// Determines BFD template name.
	BfdTemplate string `json:"bfd_template,omitempty"`

	// Determines if the BFD is enabled or not.
	EnableBfd bool `json:"enable_bfd,omitempty"`
}

// OutboundCloudclientEvent represents Infoblox struct outbound:cloudclient:event
type OutboundCloudclientEvent struct {
	// The event type enum rpz and analytics.
	EventType string `json:"event_type,omitempty"`

	// Determines if the event type is enabled or not.
	Enabled bool `json:"enabled,omitempty"`
}

// ParentalcontrolAbs represents Infoblox struct parentalcontrol:abs
type ParentalcontrolAbs struct {
	// The IP address of addional blocking server.
	IpAddress string `json:"ip_address,omitempty"`

	// The blocking policy for the addional blocking server.
	BlockingPolicy string `json:"blocking_policy,omitempty"`
}

// ParentalcontrolMsp represents Infoblox struct parentalcontrol:msp
type ParentalcontrolMsp struct {
	// The IPv4 Address of MSP.
	IpAddress string `json:"ip_address,omitempty"`
}

// ParentalcontrolNasgateway represents Infoblox struct parentalcontrol:nasgateway
type ParentalcontrolNasgateway struct {
	// The name of NAS gateway.
	Name string `json:"name,omitempty"`

	// The IPv4 Address of NAS gateway.
	IpAddress string `json:"ip_address,omitempty"`

	// The protocol MD5 phrase.
	SharedSecret string `json:"shared_secret,omitempty"`

	// Determines whether an acknowledge needs to be sent.
	SendAck bool `json:"send_ack,omitempty"`

	// The message rate per server.
	MessageRate uint32 `json:"message_rate,omitempty"`

	// The human readable comment for NAS gateway.
	Comment string `json:"comment,omitempty"`
}

// ParentalcontrolSitemember represents Infoblox struct parentalcontrol:sitemember
type ParentalcontrolSitemember struct {
	// The Grid member name.
	Name string `json:"name,omitempty"`

	// The type of member.
	Type string `json:"type,omitempty"`
}

// ParentalcontrolSpm represents Infoblox struct parentalcontrol:spm
type ParentalcontrolSpm struct {
	// The IPv4 Address of SPM.
	IpAddress string `json:"ip_address,omitempty"`
}

// Physicalportsetting represents Infoblox struct physicalportsetting
type Physicalportsetting struct {
	// Enable or disalbe the auto port setting.
	AutoPortSettingEnabled bool `json:"auto_port_setting_enabled,omitempty"`

	// The port speed; if speed is 1000, duplex is FULL.
	Speed string `json:"speed,omitempty"`

	// The port duplex; if speed is 1000, duplex must be FULL.
	Duplex string `json:"duplex,omitempty"`
}

// Preprovision represents Infoblox struct preprovision
type Preprovision struct {
	// An array of structures that describe the hardware being pre-provisioned.
	HardwareInfo []*Preprovisionhardware `json:"hardware_info,omitempty"`

	// An array of license types the pre-provisioned member should have in order to
	// join the Grid, or the licenses that must be allocated to the member when it
	// joins the Grid using the token-based authentication.
	Licenses []string `json:"licenses,omitempty"`
}

// Preprovisionhardware represents Infoblox struct preprovisionhardware
type Preprovisionhardware struct {
	// Hardware type.
	Hwtype string `json:"hwtype,omitempty"`

	// Hardware model - for IB-4010 are Rev1, Rev2; for IB-4030 are Rev1, Rev2; for
	// PT-4000 is Rev2; for IB-VNIOS are IB-VM-100, IB-VM-810, IB-VM-820,
	// IB-VM-RSP, IB-VM-1410, IB-VM-1420, IB-VM-2210, IB-VM-2220, IB-VM-4010,
	// CP-V800, CP-V1400, CP-V2200. Note that you cannot specify hwmodel for
	// following hardware types: IB-FLEX, IB-V2215, IB-V1425, IB-V4025, IB-V4015,
	// IB-V1415, IB-V815, IB-V825, IB-V2225, CP-V805, CP-V1405, CP-V2205.
	Hwmodel string `json:"hwmodel,omitempty"`
}

// PropertiesBlackoutsetting represents Infoblox struct properties:blackoutsetting
type PropertiesBlackoutsetting struct {
	// Determines whether a blackout is enabled or not.
	EnableBlackout bool `json:"enable_blackout,omitempty"`

	// The blackout duration in seconds; minimum value is 1 minute.
	BlackoutDuration uint32 `json:"blackout_duration,omitempty"`

	// A Schedule Setting struct that determines blackout schedule.
	BlackoutSchedule *SettingSchedule `json:"blackout_schedule,omitempty"`
}

// Queriesuser represents Infoblox struct queriesuser
type Queriesuser struct {
	// The SNMPv3 user.
	User string `json:"user,omitempty"`

	// A descriptive comment for this queries user.
	Comment string `json:"comment,omitempty"`
}

// RadiusServer represents Infoblox struct radius:server
type RadiusServer struct {
	// The accounting port.
	AcctPort uint32 `json:"acct_port,omitempty"`

	// The authorization port.
	AuthPort uint32 `json:"auth_port,omitempty"`

	// The authentication protocol.
	AuthType string `json:"auth_type,omitempty"`

	// The RADIUS descriptive comment.
	Comment string `json:"comment,omitempty"`

	// Determines whether the RADIUS server is disabled.
	Disable bool `json:"disable,omitempty"`

	// The FQDN or the IP address of the RADIUS server that is used for
	// authentication.
	Address string `json:"address,omitempty"`

	// The shared secret that the NIOS appliance and the RADIUS server use to
	// encrypt and decrypt their messages.
	SharedSecret string `json:"shared_secret,omitempty"`

	// Determines whether RADIUS accounting is enabled.
	UseAccounting bool `json:"use_accounting,omitempty"`

	// Determines whether connection via the management interface is allowed.
	UseMgmtPort bool `json:"use_mgmt_port,omitempty"`
}

// Rdatasubfield represents Infoblox struct rdatasubfield
type Rdatasubfield struct {
	// String representation of subfield value.
	FieldValue string `json:"field_value,omitempty"`

	// Type of field. "B": unsigned 8-bit integer, "S": unsigned 16-bit integer,
	// "I": unsigned 32-bit integer. "H": BASE64, "6": an IPv6 address, "4": an
	// IPv4 address, "N": a domain name, "T": text string, "X": opaque binary data
	FieldType string `json:"field_type,omitempty"`

	// The 'size of 'length' sub-sub field to be included in RDATA.
	IncludeLength string `json:"include_length,omitempty"`
}

// Remoteddnszone represents Infoblox struct remoteddnszone
type Remoteddnszone struct {
	// The FQDN of the remote server.
	Fqdn string `json:"fqdn,omitempty"`

	// The remote server IP address.
	ServerAddress string `json:"server_address,omitempty"`

	// The principal name in which GSS-TSIG for dynamic updates is enabled.
	GssTsigDnsPrincipal string `json:"gss_tsig_dns_principal,omitempty"`

	// The domain in which GSS-TSIG for dynamic updates is enabled.
	GssTsigDomain string `json:"gss_tsig_domain,omitempty"`

	// The TSIG key value.
	TsigKey string `json:"tsig_key,omitempty"`

	// The TSIG key alorithm name.
	TsigKeyAlg string `json:"tsig_key_alg,omitempty"`

	// The name of the TSIG key. The key name entered here must match the TSIG key
	// name on the external name server.
	TsigKeyName string `json:"tsig_key_name,omitempty"`

	// The key type to be used.
	KeyType string `json:"key_type,omitempty"`
}

// SamlIdp represents Infoblox struct saml:idp
type SamlIdp struct {
	// SAML Identity Provider type.
	IdpType string `json:"idp_type,omitempty"`

	// The SAML Identity Provider descriptive comment.
	Comment string `json:"comment,omitempty"`

	// Identity Provider Metadata URL.
	MetadataUrl string `json:"metadata_url,omitempty"`

	// The token returned by the uploadinit function call in object fileop.
	MetadataToken string `json:"metadata_token,omitempty"`

	// The SAML groupname optional user group attribute.
	Groupname string `json:"groupname,omitempty"`

	// host name or IP address of the GM
	SsoRedirectUrl string `json:"sso_redirect_url,omitempty"`
}

// Scheduledbackup represents Infoblox struct scheduledbackup
type Scheduledbackup struct {
	// The status of the scheduled backup.
	Status string `json:"status,omitempty"`

	// The state for scheduled backup or restore operation.
	Execute string `json:"execute,omitempty"`

	// The scheduled backup operation.
	Operation string `json:"operation,omitempty"`

	// The destination of the backup files.
	BackupType string `json:"backup_type,omitempty"`

	// Determines whether the local backup performed before uploading backup to
	// remote storage.
	KeepLocalCopy bool `json:"keep_local_copy,omitempty"`

	// The frequency of backups.
	BackupFrequency string `json:"backup_frequency,omitempty"`

	// The day of the week when the backup is performed.
	Weekday string `json:"weekday,omitempty"`

	// The hour of the day past 12:00 AM the backup is performed.
	HourOfDay uint32 `json:"hour_of_day,omitempty"`

	// The minute of the hour when the backup is performed.
	MinutesPastHour uint32 `json:"minutes_past_hour,omitempty"`

	// The user name on the backup server.
	Username string `json:"username,omitempty"`

	// The user password on the backup server.
	Password string `json:"password,omitempty"`

	// The IP address of the backup server.
	BackupServer string `json:"backup_server,omitempty"`

	// The directory path to the backup file stored on the server.
	Path string `json:"path,omitempty"`

	// The destination of the restore files.
	RestoreType string `json:"restore_type,omitempty"`

	// The IP address of the restore server.
	RestoreServer string `json:"restore_server,omitempty"`

	// The user name on the restore server.
	RestoreUsername string `json:"restore_username,omitempty"`

	// The password on the restore server.
	RestorePassword string `json:"restore_password,omitempty"`

	// The directory path to the restored file on the server.
	RestorePath string `json:"restore_path,omitempty"`

	// Determines whether the restore of the NIOS data is enabled.
	NiosData bool `json:"nios_data,omitempty"`

	// Determines whether the restore the NetMRI data is enabled.
	DiscoveryData bool `json:"discovery_data,omitempty"`

	// Determines whether the restore of the Splunk application data is enabled.
	SplunkAppData bool `json:"splunk_app_data,omitempty"`

	// Determines whether the scheduled backup is enabled.
	Enable bool `json:"enable,omitempty"`

	// If set, scp backup support based on keys
	UseKeys bool `json:"use_keys,omitempty"`

	// If set, scp backup support based on keys type
	KeyType string `json:"key_type,omitempty"`

	// If set, scp backup support to upload keys
	UploadKeys bool `json:"upload_keys,omitempty"`

	// If set, scp backup support to download keys
	DownloadKeys bool `json:"download_keys,omitempty"`
}

// Servicestatus represents Infoblox struct servicestatus
type Servicestatus struct {
	// The description of the current service status.
	Description string `json:"description,omitempty"`

	// The service status.
	Status string `json:"status,omitempty"`

	// The service identifier.
	Service string `json:"service,omitempty"`
}

// SettingAtpoutbound represents Infoblox struct setting:atpoutbound
type SettingAtpoutbound struct {
	// Flag to enable using DNS query FQDN for Outbound.
	EnableQueryFqdn bool `json:"enable_query_fqdn,omitempty"`

	// Max domain level for DNS Query FQDN
	QueryFqdnLimit uint32 `json:"query_fqdn_limit,omitempty"`
}

// SettingAutomatedtrafficcapture represents Infoblox struct setting:automatedtrafficcapture
type SettingAutomatedtrafficcapture struct {
	// Enable automated traffic capture based on monitoring thresholds.
	TrafficCaptureEnable bool `json:"traffic_capture_enable,omitempty"`

	// Destination of traffic capture files. Save traffic capture locally or upload
	// to remote server using FTP or SCP.
	Destination string `json:"destination,omitempty"`

	// The time interval on which traffic will be captured(in sec).
	Duration uint32 `json:"duration,omitempty"`

	// Enable automatic download for support bundle.
	IncludeSupportBundle bool `json:"include_support_bundle,omitempty"`

	// Save traffic capture files locally.
	KeepLocalCopy bool `json:"keep_local_copy,omitempty"`

	// IP Address of the destination host.
	DestinationHost string `json:"destination_host,omitempty"`

	// Directory to store the traffic capture files on the remote server.
	TrafficCaptureDirectory string `json:"traffic_capture_directory,omitempty"`

	// Directory to store the support bundle on the remote server.
	SupportBundleDirectory string `json:"support_bundle_directory,omitempty"`

	// User name for accessing the FTP/SCP server.
	Username string `json:"username,omitempty"`

	// Password for accessing the FTP/SCP server. This field is not readable.
	Password string `json:"password,omitempty"`
}

// SettingDnsresolver represents Infoblox struct setting:dnsresolver
type SettingDnsresolver struct {
	// The resolvers of a Grid member. The Grid member sends queries to the first
	// name server address in the list. The second name server address is used if
	// first one does not response.
	Resolvers []string `json:"resolvers,omitempty"`

	// The Search Domain Group, which is a group of domain names that the Infoblox
	// device can add to partial queries that do not specify a domain name. Note
	// that you can set this parameter only when prefer_resolver or
	// alternate_resolver is set.
	SearchDomains []string `json:"search_domains,omitempty"`
}

// SettingDynamicratio represents Infoblox struct setting:dynamicratio
type SettingDynamicratio struct {
	// The method of the DTC dynamic ratio load balancing.
	Method string `json:"method,omitempty"`

	// The DTC monitor output of which will be used for dynamic ratio load
	// balancing.
	Monitor string `json:"monitor,omitempty"`

	// The metric of the DTC SNMP monitor that will be used for dynamic weighing.
	MonitorMetric string `json:"monitor_metric,omitempty"`

	// The DTC monitor weight. 'PRIORITY' means that all clients will be forwarded
	// to the least loaded server. 'RATIO' means that distribution will be
	// calculated based on dynamic weights.
	MonitorWeighing string `json:"monitor_weighing,omitempty"`

	// Determines whether the inverted values of the DTC SNMP monitor metric will
	// be used.
	InvertMonitorMetric bool `json:"invert_monitor_metric,omitempty"`
}

// SettingEmail represents Infoblox struct setting:email
type SettingEmail struct {
	// Determines if email notification is enabled or not.
	Enabled bool `json:"enabled,omitempty"`

	// The email address of a Grid Member for 'from' field in notification.
	FromAddress string `json:"from_address,omitempty"`

	// The notification email address of a Grid member.
	Address string `json:"address,omitempty"`

	// Determines if email relay is enabled or not.
	RelayEnabled bool `json:"relay_enabled,omitempty"`

	// The relay name or IP address.
	Relay string `json:"relay,omitempty"`

	// Password to validate from address
	Password string `json:"password,omitempty"`

	// SMTP over TLS
	Smtps bool `json:"smtps,omitempty"`

	// SMTP port number
	PortNumber uint32 `json:"port_number,omitempty"`

	// Enable or disable SMTP auth
	UseAuthentication bool `json:"use_authentication,omitempty"`
}

// SettingHttpproxyserver represents Infoblox struct setting:httpproxyserver
type SettingHttpproxyserver struct {
	// The address of the HTTP proxy server.
	Address string `json:"address,omitempty"`

	// The port on which the HTTP proxy server listens.
	Port uint32 `json:"port,omitempty"`

	// Determines if the HTTP proxy server is enabled or not.
	EnableProxy bool `json:"enable_proxy,omitempty"`

	// Determines if HTTPS content inspection by the HTTP proxy server is enabled
	// or not.
	EnableContentInspection bool `json:"enable_content_inspection,omitempty"`

	// Determines if the CNAME record query verification is enabled or not.
	VerifyCname bool `json:"verify_cname,omitempty"`

	// The descriptive comment for the HTTP proxy server configuration.
	Comment string `json:"comment,omitempty"`

	// The user name for the HTTP proxy server.
	Username string `json:"username,omitempty"`

	// The password for the HTTP proxy server.
	Password string `json:"password,omitempty"`

	// The token returned by the uploadinit function call in object fileop for the
	// CA certificate file used in the content inspection by an HTTP proxy server.
	Certificate string `json:"certificate,omitempty"`

	// Determines if username and password for HTTP Proxy Server connectivity is
	// used or not.
	EnableUsernameAndPassword bool `json:"enable_username_and_password,omitempty"`
}

// SettingInactivelockout represents Infoblox struct setting:inactivelockout
type SettingInactivelockout struct {
	// Enable/disable the account inactivity lockout.
	AccountInactivityLockoutEnable bool `json:"account_inactivity_lockout_enable,omitempty"`

	// Number of days after which account gets locked out if user does not login.
	InactiveDays uint32 `json:"inactive_days,omitempty"`

	// The number of days before the account lockout date when the appliance sends
	// a reminder.
	ReminderDays uint32 `json:"reminder_days,omitempty"`

	// Enable/disable reactivating user account by logging in from serial console.
	ReactivateViaSerialConsoleEnable bool `json:"reactivate_via_serial_console_enable,omitempty"`

	// Enable/disable reactivating user account by logging in from remote console.
	ReactivateViaRemoteConsoleEnable bool `json:"reactivate_via_remote_console_enable,omitempty"`
}

// SettingIpamThreshold represents Infoblox struct setting:ipam:threshold
type SettingIpamThreshold struct {
	// Indicates the percentage point which triggers the email/SNMP trap sending.
	TriggerValue uint32 `json:"trigger_value,omitempty"`

	// Indicates the percentage point which resets the email/SNMP trap sending.
	ResetValue uint32 `json:"reset_value,omitempty"`
}

// SettingIpamTrap represents Infoblox struct setting:ipam:trap
type SettingIpamTrap struct {
	// Determines whether sending warnings by email is enabled or not.
	EnableEmailWarnings bool `json:"enable_email_warnings,omitempty"`

	// Determines whether sending warnings by SNMP is enabled or not.
	EnableSnmpWarnings bool `json:"enable_snmp_warnings,omitempty"`
}

// SettingMsserver represents Infoblox struct setting:msserver
type SettingMsserver struct {
	// The logging of synchronization messages to the syslog or mslog.
	LogDestination string `json:"log_destination,omitempty"`

	// Determines if the invalid MAC address synchronization for DHCP leases and
	// fixed addresses is enabled or not.
	EnableInvalidMac bool `json:"enable_invalid_mac,omitempty"`

	// Determines the maximum number of connections to Microsoft servers.
	MaxConnection uint32 `json:"max_connection,omitempty"`

	// Determines the timeout value (in seconds) for RPC connections to all
	// Microsoft servers.
	RpcTimeout uint32 `json:"rpc_timeout,omitempty"`

	// Determines if the monitoring and control of DHCP service on all Microsoft
	// servers in the Grid is enabled or not.
	EnableDhcpMonitoring bool `json:"enable_dhcp_monitoring,omitempty"`

	// Determines if the monitoring and control of DNS service on all Microsoft
	// servers in the Grid is enabled or not.
	EnableDnsMonitoring bool `json:"enable_dns_monitoring,omitempty"`

	// Determines an LDAP connection timeout interval (in seconds) for all
	// Microsoft servers.
	LdapTimeout uint32 `json:"ldap_timeout,omitempty"`

	// The default IP site link for sites created on NIOS for all Microsoft
	// servers.
	DefaultIpSiteLink string `json:"default_ip_site_link,omitempty"`

	// Determines if the Network Users creation is enabled or not.
	EnableNetworkUsers bool `json:"enable_network_users,omitempty"`

	// Determines if Active Directory user synchronization for all Microsoft
	// servers in the Grid is enabled or not.
	EnableAdUserSync bool `json:"enable_ad_user_sync,omitempty"`

	// Determines the default timeout value (in seconds) for Active Directory user
	// synchronization for all Microsoft servers.
	AdUserDefaultTimeout uint32 `json:"ad_user_default_timeout,omitempty"`

	// Determines if synchronization of DNS reporting data from all Microsoft
	// servers in the Grid is enabled or not.
	EnableDnsReportsSync bool `json:"enable_dns_reports_sync,omitempty"`
}

// SettingNetwork represents Infoblox struct setting:network
type SettingNetwork struct {
	// The IPv4 Address of the Grid Member.
	Address string `json:"address,omitempty"`

	// The default gateway for the Grid Member.
	Gateway string `json:"gateway,omitempty"`

	// The subnet mask for the Grid Member.
	SubnetMask string `json:"subnet_mask,omitempty"`

	// The identifier for the VLAN. Valid values are from 1 to 4096.
	VlanId uint32 `json:"vlan_id,omitempty"`

	// Determines if the current address is the primary VLAN address or not.
	Primary bool `json:"primary,omitempty"`

	// The DSCP (Differentiated Services Code Point) value determines relative
	// priorities for the type of services on your network. The appliance
	// implements QoS (Quality of Service) rules based on this configuration. Valid
	// values are from 0 to 63.
	Dscp uint32 `json:"dscp,omitempty"`

	// Use flag for: dscp
	UseDscp bool `json:"use_dscp,omitempty"`
}

// SettingPassword represents Infoblox struct setting:password
type SettingPassword struct {
	// The minimum length of the password.
	PasswordMinLength uint32 `json:"password_min_length,omitempty"`

	// The minimum number of lowercase characters.
	NumLowerChar uint32 `json:"num_lower_char,omitempty"`

	// The minimum number of uppercase characters.
	NumUpperChar uint32 `json:"num_upper_char,omitempty"`

	// The minimum number of numeric characters.
	NumNumericChar uint32 `json:"num_numeric_char,omitempty"`

	// The minimum number of symbol characters. The allowed characters are ! @ # $
	// % ^ & * ( ).
	NumSymbolChar uint32 `json:"num_symbol_char,omitempty"`

	// The minimum number of characters that must be changed when revising an admin
	// password.
	CharsToChange uint32 `json:"chars_to_change,omitempty"`

	// The number of days of the password expiration period (if enabled).
	ExpireDays uint32 `json:"expire_days,omitempty"`

	// The number of days before the password expiration date when the appliance
	// sends a reminder.
	ReminderDays uint32 `json:"reminder_days,omitempty"`

	// If set to True, all new users must change their passwords when they first
	// log in to the system, and existing users must change the passwords that were
	// just reset.
	ForceResetEnable bool `json:"force_reset_enable,omitempty"`

	// If set to True, password expiration is enabled.
	ExpireEnable bool `json:"expire_enable,omitempty"`

	// Enable/disable the password history.
	HistoryEnable bool `json:"history_enable,omitempty"`

	// Number of saved passwords if password history is enabled. Can be set between
	// 1 to 20.
	NumPasswordsSaved uint32 `json:"num_passwords_saved,omitempty"`

	// Minimum password age in days before password can be updated. Can be set
	// between 1 to 9998 days.
	MinPasswordAge uint32 `json:"min_password_age,omitempty"`
}

// SettingScavenging represents Infoblox struct setting:scavenging
type SettingScavenging struct {
	// This flag indicates if the resource record scavenging is enabled or not.
	EnableScavenging bool `json:"enable_scavenging,omitempty"`

	// This flag indicates if the recurrent resource record scavenging is enabled
	// or not.
	EnableRecurrentScavenging bool `json:"enable_recurrent_scavenging,omitempty"`

	// This flag indicates if the automatic resource record scavenging is enabled
	// or not.
	EnableAutoReclamation bool `json:"enable_auto_reclamation,omitempty"`

	// This flag indicates if the resource record last queried monitoring in
	// affected zones is enabled or not.
	EnableRrLastQueried bool `json:"enable_rr_last_queried,omitempty"`

	// This flag indicates if the last queried monitoring for affected zones is
	// enabled or not.
	EnableZoneLastQueried bool `json:"enable_zone_last_queried,omitempty"`

	// This flag indicates if the associated resource record scavenging is enabled
	// or not.
	ReclaimAssociatedRecords bool `json:"reclaim_associated_records,omitempty"`

	// Schedule setting for cloud discovery task.
	ScavengingSchedule *SettingSchedule `json:"scavenging_schedule,omitempty"`

	// The expression list. The particular record is treated as reclaimable if
	// expression condition evaluates to 'true' for given record if scavenging
	// hasn't been manually disabled on a given resource record.
	ExpressionList []*Expressionop `json:"expression_list,omitempty"`

	// The extensible attributes expression list. The particular record is treated
	// as reclaimable if extensible attributes expression condition evaluates to
	// 'true' for given record if scavenging hasn't been manually disabled on a
	// given resource record.
	EaExpressionList []*Eaexpressionop `json:"ea_expression_list,omitempty"`
}

// SettingSchedule represents Infoblox struct setting:schedule
type SettingSchedule struct {
	// Days of the week when scheduling is triggered.
	Weekdays []string `json:"weekdays,omitempty"`

	// The time zone for the schedule.
	TimeZone string `json:"time_zone,omitempty"`

	// The recurring time for the schedule in Epoch seconds format. This field is
	// obsolete and is preserved only for backward compatibility purposes. Please
	// use other applicable fields to define the recurring schedule. DO NOT use
	// recurring_time together with these fields. If you use recurring_time with
	// other fields to define the recurring schedule, recurring_time has priority
	// over year, hour_of_day, and minutes_past_hour and will override the values
	// of these fields, although it does not override month and day_of_month. In
	// this case, the recurring time value might be different than the intended
	// value that you define.
	RecurringTime *UnixTime `json:"recurring_time,omitempty"`

	// The frequency for the scheduled task.
	Frequency string `json:"frequency,omitempty"`

	// The number of frequency to wait before repeating the scheduled task.
	Every uint32 `json:"every,omitempty"`

	// The minutes past the hour for the scheduled task.
	MinutesPastHour uint32 `json:"minutes_past_hour,omitempty"`

	// The hour of day for the scheduled task.
	HourOfDay uint32 `json:"hour_of_day,omitempty"`

	// The year for the scheduled task.
	Year uint32 `json:"year,omitempty"`

	// The month for the scheduled task.
	Month uint32 `json:"month,omitempty"`

	// The day of the month for the scheduled task.
	DayOfMonth uint32 `json:"day_of_month,omitempty"`

	// Indicates if the scheduled task will be repeated or run only once.
	Repeat string `json:"repeat,omitempty"`

	// If set to True, the scheduled task is disabled.
	Disable bool `json:"disable,omitempty"`
}

// SettingSecurity represents Infoblox struct setting:security
type SettingSecurity struct {
	// If set to True, rolling of audit logs is enabled.
	AuditLogRollingEnable bool `json:"audit_log_rolling_enable,omitempty"`

	// A list of access control settings used for security access.
	AdminAccessItems []*Addressac `json:"admin_access_items,omitempty"`

	// If set to True, HTTP connections are redirected to HTTPS.
	HttpRedirectEnable bool `json:"http_redirect_enable,omitempty"`

	// If set to True, the LCD buttons on the front panel of the NIOS appliance can
	// be used for IP address settings of the LAN1 port.
	LcdInputEnable bool `json:"lcd_input_enable,omitempty"`

	// If set to True, the login banner is enabled.
	LoginBannerEnable bool `json:"login_banner_enable,omitempty"`

	// The login banner text.
	LoginBannerText string `json:"login_banner_text,omitempty"`

	// If set to True, superuser admins can access the Infoblox CLI from a remote
	// location using an SSH (Secure Shell) v2 client.
	RemoteConsoleAccessEnable bool `json:"remote_console_access_enable,omitempty"`

	// If set to True, HTTP access restrictions are enabled.
	SecurityAccessEnable bool `json:"security_access_enable,omitempty"`

	// If set to True, remote console access restrictions will be enabled.
	SecurityAccessRemoteConsoleEnable bool `json:"security_access_remote_console_enable,omitempty"`

	// The session timeout interval in seconds.
	SessionTimeout uint32 `json:"session_timeout,omitempty"`

	// If set to False, SSH access is permanently disabled.
	SshPermEnable bool `json:"ssh_perm_enable,omitempty"`

	// If set to True, support access for the Grid has been enabled.
	SupportAccessEnable bool `json:"support_access_enable,omitempty"`

	// Information string to be used for support access requests.
	SupportAccessInfo string `json:"support_access_info,omitempty"`

	// Whether concurrent login allowed gridlevel
	DisableConcurrentLogin bool `json:"disable_concurrent_login,omitempty"`

	// The Admin Group security settings.
	InactivityLockoutSetting *SettingInactivelockout `json:"inactivity_lockout_setting,omitempty"`
}

// SettingSecuritybanner represents Infoblox struct setting:securitybanner
type SettingSecuritybanner struct {
	// The security level color.
	Color string `json:"color,omitempty"`

	// The security level.
	Level string `json:"level,omitempty"`

	// The classification message to be displayed.
	Message string `json:"message,omitempty"`

	// If set to True, the security banner will be displayed on the header and
	// footer of the Grid Manager screen, including the Login screen.
	Enable bool `json:"enable,omitempty"`
}

// SettingSnmp represents Infoblox struct setting:snmp
type SettingSnmp struct {
	// The engine ID of the appliance that manages the SNMP agent.
	EngineId []string `json:"engine_id,omitempty"`

	// The community string for SNMP queries.
	QueriesCommunityString string `json:"queries_community_string,omitempty"`

	// If set to True, SNMP queries are enabled.
	QueriesEnable bool `json:"queries_enable,omitempty"`

	// If set to True, SNMPv3 queries are enabled.
	Snmpv3QueriesEnable bool `json:"snmpv3_queries_enable,omitempty"`

	// A list of SNMPv3 queries users.
	Snmpv3QueriesUsers []*Queriesuser `json:"snmpv3_queries_users,omitempty"`

	// If set to True, SNMPv3 traps are enabled.
	Snmpv3TrapsEnable bool `json:"snmpv3_traps_enable,omitempty"`

	// The name of the contact person for the appliance. Second value is applicable
	// only for HA pair. Otherwise second value is ignored.
	Syscontact []string `json:"syscontact,omitempty"`

	// Useful information about the appliance. Second value is applicable only for
	// HA pair. Otherwise second value is ignored.
	Sysdescr []string `json:"sysdescr,omitempty"`

	// The physical location of the appliance. Second value is applicable only for
	// HA pair. Otherwise second value is ignored.
	Syslocation []string `json:"syslocation,omitempty"`

	// The FQDN (Fully Qualified Domain Name) of the appliance. Second value is
	// applicable only for HA pair. Otherwise second value is ignored.
	Sysname []string `json:"sysname,omitempty"`

	// A list of trap receivers.
	TrapReceivers []*Trapreceiver `json:"trap_receivers,omitempty"`

	// A string the NIOS appliance sends to the management system together with its
	// traps. Note that this community string must match exactly what you enter in
	// the management system.
	TrapsCommunityString string `json:"traps_community_string,omitempty"`

	// If set to True, SNMP traps are enabled.
	TrapsEnable bool `json:"traps_enable,omitempty"`
}

// SettingSyslogproxy represents Infoblox struct setting:syslogproxy
type SettingSyslogproxy struct {
	// If set to True, the member receives syslog messages from specified devices,
	// such as syslog servers and routers, and then forwards these messages to an
	// external syslog server.
	Enable bool `json:"enable,omitempty"`

	// If set to True, the appliance can receive messages from other devices via
	// TCP.
	TcpEnable bool `json:"tcp_enable,omitempty"`

	// The TCP port the appliance must listen on.
	TcpPort uint32 `json:"tcp_port,omitempty"`

	// If set to True, the appliance can receive messages from other devices via
	// UDP.
	UdpEnable bool `json:"udp_enable,omitempty"`

	// The UDP port the appliance must listen on.
	UdpPort uint32 `json:"udp_port,omitempty"`

	// This list controls the IP addresses and networks that are allowed to access
	// the syslog proxy.
	ClientAcls []*Addressac `json:"client_acls,omitempty"`
}

// SettingTrafficcapturechr represents Infoblox struct setting:trafficcapturechr
type SettingTrafficcapturechr struct {
	// Enable triggering automated traffic capture based on cache hit ratio
	// thresholds.
	ChrTriggerEnable bool `json:"chr_trigger_enable,omitempty"`

	// DNS Cache hit ratio threshold(%) below which traffic capture will be
	// triggered.
	ChrThreshold uint32 `json:"chr_threshold,omitempty"`

	// DNS Cache hit ratio threshold(%) above which traffic capture will be
	// triggered.
	ChrReset uint32 `json:"chr_reset,omitempty"`

	// Minimum DNS cache utilization threshold(%) for triggering traffic capture
	// based on DNS cache hit ratio.
	ChrMinCacheUtilization uint32 `json:"chr_min_cache_utilization,omitempty"`
}

// SettingTrafficcaptureqps represents Infoblox struct setting:trafficcaptureqps
type SettingTrafficcaptureqps struct {
	// Enable triggering automated traffic capture based on DNS queries per second
	// threshold.
	QpsTriggerEnable bool `json:"qps_trigger_enable,omitempty"`

	// DNS queries per second threshold below which traffic capture will be
	// triggered.
	QpsThreshold uint32 `json:"qps_threshold,omitempty"`

	// DNS queries per second threshold below which traffic capture will be
	// stopped.
	QpsReset uint32 `json:"qps_reset,omitempty"`
}

// SettingTriggerrecdnslatency represents Infoblox struct setting:triggerrecdnslatency
type SettingTriggerrecdnslatency struct {
	// Enable triggering automated traffic capture based on recursive DNS latency.
	RecDnsLatencyTriggerEnable bool `json:"rec_dns_latency_trigger_enable,omitempty"`

	// Recursive DNS latency below which traffic capture will be triggered.
	RecDnsLatencyThreshold uint32 `json:"rec_dns_latency_threshold,omitempty"`

	// Recursive DNS latency above which traffic capture will be stopped.
	RecDnsLatencyReset uint32 `json:"rec_dns_latency_reset,omitempty"`

	// The local IP DNS service is listen on ( for recursive DNS latency trigger).
	RecDnsLatencyListenOnSource string `json:"rec_dns_latency_listen_on_source,omitempty"`

	// The DNS listen-on IP address used if rec_dns_latency_listen_on_source is IP.
	RecDnsLatencyListenOnIp string `json:"rec_dns_latency_listen_on_ip,omitempty"`

	// List of domains monitored by 'Recursive DNS Latency Threshold' trigger.
	KpiMonitoredDomains []*Monitoreddomains `json:"kpi_monitored_domains,omitempty"`
}

// SettingTriggerrecqueries represents Infoblox struct setting:triggerrecqueries
type SettingTriggerrecqueries struct {
	// Enable triggering automated traffic capture based on outgoing recursive
	// queries count.
	RecursiveClientsCountTriggerEnable bool `json:"recursive_clients_count_trigger_enable,omitempty"`

	// Concurrent outgoing recursive queries count below which traffic capture will
	// be triggered.
	RecursiveClientsCountThreshold uint32 `json:"recursive_clients_count_threshold,omitempty"`

	// Concurrent outgoing recursive queries count below which traffic capture will
	// be stopped.
	RecursiveClientsCountReset uint32 `json:"recursive_clients_count_reset,omitempty"`
}

// SettingTriggeruthdnslatency represents Infoblox struct setting:triggeruthdnslatency
type SettingTriggeruthdnslatency struct {
	// Enabling trigger automated traffic capture based on authoritative DNS
	// latency.
	AuthDnsLatencyTriggerEnable bool `json:"auth_dns_latency_trigger_enable,omitempty"`

	// Authoritative DNS latency below which traffic capture will be triggered.
	AuthDnsLatencyThreshold uint32 `json:"auth_dns_latency_threshold,omitempty"`

	// Authoritative DNS latency above which traffic capture will stopped.
	AuthDnsLatencyReset uint32 `json:"auth_dns_latency_reset,omitempty"`

	// The local IP DNS service is listen on (for authoritative DNS latency
	// trigger).
	AuthDnsLatencyListenOnSource string `json:"auth_dns_latency_listen_on_source,omitempty"`

	// The DNS listen-on IP address used if auth_dns_latency_on_source is IP.
	AuthDnsLatencyListenOnIp string `json:"auth_dns_latency_listen_on_ip,omitempty"`
}

// SettingViewaddress represents Infoblox struct setting:viewaddress
type SettingViewaddress struct {
	// The reference to DNS View
	ViewName string `json:"view_name,omitempty"`

	// Determines which IP address is used as the source for DDNS notify and
	// transfer operations.
	DnsNotifyTransferSource string `json:"dns_notify_transfer_source,omitempty"`

	// The source address used if dns_notify_transfer_source type is "IP".
	DnsNotifyTransferSourceAddress string `json:"dns_notify_transfer_source_address,omitempty"`

	// Determines which IP address is used as the source for DDNS query operations.
	DnsQuerySourceInterface string `json:"dns_query_source_interface,omitempty"`

	// The source address used if dns_query_source_interface type is "IP".
	DnsQuerySourceAddress string `json:"dns_query_source_address,omitempty"`

	// Determines if the notify source port for a view is enabled or not.
	EnableNotifySourcePort bool `json:"enable_notify_source_port,omitempty"`

	// The source port for notify messages. When requesting zone transfers from the
	// primary server, some secondary DNS servers use the source port number (the
	// primary server used to send the notify message) as the destination port
	// number in the zone transfer request. This setting overrides Grid static
	// source port settings. Valid values are between 1 and 63999. The default is
	// selected by BIND.
	NotifySourcePort uint32 `json:"notify_source_port,omitempty"`

	// Determines if the query source port for a view is enabled or not.
	EnableQuerySourcePort bool `json:"enable_query_source_port,omitempty"`

	// The source port for queries. Specifying a source port number for recursive
	// queries ensures that a firewall will allow the response. Valid values are
	// between 1 and 63999. The default is selected by BIND.
	QuerySourcePort uint32 `json:"query_source_port,omitempty"`

	// Specifies the number of seconds of delay the notify messages are sent to
	// secondaries.
	NotifyDelay uint32 `json:"notify_delay,omitempty"`

	// Use flag for: enable_notify_source_port , notify_source_port,
	// enable_query_source_port, query_source_port
	UseSourcePorts bool `json:"use_source_ports,omitempty"`

	// Use flag for: notify_delay
	UseNotifyDelay bool `json:"use_notify_delay,omitempty"`
}

// SmartfolderGroupby represents Infoblox struct smartfolder:groupby
type SmartfolderGroupby struct {
	// The name of the Smart Folder grouping attribute.
	Value string `json:"value,omitempty"`

	// The type of the Smart Folder grouping attribute value.
	ValueType string `json:"value_type,omitempty"`

	// Determines whether the grouping is enabled.
	EnableGrouping bool `json:"enable_grouping,omitempty"`
}

// SmartfolderQueryitem represents Infoblox struct smartfolder:queryitem
type SmartfolderQueryitem struct {
	// The Smart Folder query name.
	Name string `json:"name,omitempty"`

	// The Smart Folder query field type.
	FieldType string `json:"field_type,omitempty"`

	// The Smart Folder operator used in query.
	Operator string `json:"operator,omitempty"`

	// Determines whether the query operator should match.
	OpMatch bool `json:"op_match,omitempty"`

	// The Smart Folder query value type.
	ValueType string `json:"value_type,omitempty"`

	// The Smart Folder query value.
	Value *SmartfolderQueryitemvalue `json:"value,omitempty"`
}

// SmartfolderQueryitemvalue represents Infoblox struct smartfolder:queryitemvalue
type SmartfolderQueryitemvalue struct {
	// The integer value of the Smart Folder query.
	ValueInteger int `json:"value_integer,omitempty"`

	// The string value of the Smart Folder query.
	ValueString string `json:"value_string,omitempty"`

	// The timestamp value of the Smart Folder query.
	ValueDate *UnixTime `json:"value_date,omitempty"`

	// The boolean value of the Smart Folder query.
	ValueBoolean bool `json:"value_boolean,omitempty"`
}

// Sortlist represents Infoblox struct sortlist
type Sortlist struct {
	// The source address of a sortlist object.
	Address string `json:"address,omitempty"`

	// The match list of a sortlist.
	MatchList []string `json:"match_list,omitempty"`
}

// SshKey represents Infoblox struct ssh_key
type SshKey struct {
	// Unique identifier for the key
	KeyName string `json:"key_name,omitempty"`

	// ssh_key_types
	KeyType string `json:"key_type,omitempty"`

	// ssh key text
	KeyValue string `json:"key_value,omitempty"`
}

// SyslogEndpointServers represents Infoblox struct syslog:endpoint:servers
type SyslogEndpointServers struct {
	// Syslog Server IP address
	Address string `json:"address,omitempty"`

	// Connection type values
	ConnectionType string `json:"connection_type,omitempty"`

	// The port this server listens on.
	Port uint32 `json:"port,omitempty"`

	// List of hostnames
	Hostname string `json:"hostname,omitempty"`

	// Format vlues for syslog endpoint server
	Format string `json:"format,omitempty"`

	// Facility values for syslog endpoint server
	Facility string `json:"facility,omitempty"`

	// Severity values for syslog endpoint server.
	Severity string `json:"severity,omitempty"`

	// Reference for creating sysog endpoint server.
	Certificate string `json:"certificate,omitempty"`

	// The token returned by the uploadinit function call in object fileop.
	CertificateToken string `json:"certificate_token,omitempty"`
}

// Syslogserver represents Infoblox struct syslogserver
type Syslogserver struct {
	// The server address.
	Address string `json:"address,omitempty"`

	// Reference to the underlying X509Certificate object grid:x509certificate.
	Certificate string `json:"certificate,omitempty"`

	// The token returned by the uploadinit function call in object fileop.
	CertificateToken string `json:"certificate_token,omitempty"`

	// The connection type for communicating with this server.
	ConnectionType string `json:"connection_type,omitempty"`

	// The port this server listens on.
	Port uint32 `json:"port,omitempty"`

	// The local interface through which the appliance sends syslog messages to the
	// syslog server.
	LocalInterface string `json:"local_interface,omitempty"`

	// The source of syslog messages to be sent to the external syslog server. If
	// set to 'INTERNAL', only messages the appliance generates will be sent to the
	// syslog server. If set to 'EXTERNAL', the appliance sends syslog messages
	// that it receives from other devices, such as syslog servers and routers. If
	// set to 'ANY', the appliance sends both internal and external syslog
	// messages.
	MessageSource string `json:"message_source,omitempty"`

	// Identify the node in the syslog message.
	MessageNodeId string `json:"message_node_id,omitempty"`

	// The severity filter. The appliance sends log messages of the specified
	// severity and above to the external syslog server.
	Severity string `json:"severity,omitempty"`

	// The list of all syslog logging categories.
	CategoryList []string `json:"category_list,omitempty"`

	// The list of selected syslog logging categories. The appliance forwards
	// syslog messages that belong to the selected categories.
	OnlyCategoryList bool `json:"only_category_list,omitempty"`
}

// TacacsplusServer represents Infoblox struct tacacsplus:server
type TacacsplusServer struct {
	// The valid IP address or FQDN of the TACACS+ server.
	Address string `json:"address,omitempty"`

	// The TACACS+ server port.
	Port uint32 `json:"port,omitempty"`

	// The secret key with which to connect to the TACACS+ server.
	SharedSecret string `json:"shared_secret,omitempty"`

	// The authentication protocol.
	AuthType string `json:"auth_type,omitempty"`

	// The TACACS+ descriptive comment.
	Comment string `json:"comment,omitempty"`

	// Determines whether the TACACS+ server is disabled.
	Disable bool `json:"disable,omitempty"`

	// Determines whether the TACACS+ server is connected via the management
	// interface.
	UseMgmtPort bool `json:"use_mgmt_port,omitempty"`

	// Determines whether the TACACS+ accounting server is used.
	UseAccounting bool `json:"use_accounting,omitempty"`
}

// TaxiiRpzconfig represents Infoblox struct taxii:rpzconfig
type TaxiiRpzconfig struct {
	// The STIX collection name.
	CollectionName string `json:"collection_name,omitempty"`

	// The reference to the RPZ in which rules are created through the Taxii
	// protocol requests.
	Zone string `json:"zone,omitempty"`
}

// ThreatprotectionNatport represents Infoblox struct threatprotection:natport
type ThreatprotectionNatport struct {
	// The start port value for the NAT port configuration object.
	StartPort uint32 `json:"start_port,omitempty"`

	// The end port value for the NAT port configuration object.
	EndPort uint32 `json:"end_port,omitempty"`

	// The block size for the NAT Port configuration object.
	BlockSize uint32 `json:"block_size,omitempty"`
}

// ThreatprotectionNatrule represents Infoblox struct threatprotection:natrule
type ThreatprotectionNatrule struct {
	// The rule type for the threat protection NAT mapping rule.
	RuleType string `json:"rule_type,omitempty"`

	// The IP address for the threat protection NAT mapping rule.
	Address string `json:"address,omitempty"`

	// The network address for the threat protection NAT mapping rule.
	Network string `json:"network,omitempty"`

	// The network CIDR for the threat protection NAT mapping rule.
	Cidr uint32 `json:"cidr,omitempty"`

	// The start address for the range of the threat protection NAT mapping rule.
	StartAddress string `json:"start_address,omitempty"`

	// The end address for the range of the threat protection NAT mapping rule.
	EndAddress string `json:"end_address,omitempty"`

	// The NAT port configuration for the threat protection NAT mapping rule.
	NatPorts []*ThreatprotectionNatport `json:"nat_ports,omitempty"`
}

// ThreatprotectionRuleconfig represents Infoblox struct threatprotection:ruleconfig
type ThreatprotectionRuleconfig struct {
	// The rule action.
	Action string `json:"action,omitempty"`

	// The rule log severity.
	LogSeverity string `json:"log_severity,omitempty"`

	// The threat protection rule parameters.
	Params []*ThreatprotectionRuleparam `json:"params,omitempty"`
}

// ThreatprotectionRuleparam represents Infoblox struct threatprotection:ruleparam
type ThreatprotectionRuleparam struct {
	// The rule parameter name.
	Name string `json:"name,omitempty"`

	// The rule parameter description.
	Description string `json:"description,omitempty"`

	// The rule parameter syntax.
	Syntax string `json:"syntax,omitempty"`

	// The rule parameter value.
	Value string `json:"value,omitempty"`

	// The rule parameter minimum.
	Min uint32 `json:"min,omitempty"`

	// The rule parameter maximum.
	Max uint32 `json:"max,omitempty"`

	// Determines if parameter value is editable at member level.
	ReadOnly bool `json:"read_only,omitempty"`

	// The rule parameter enum values.
	EnumValues []string `json:"enum_values,omitempty"`
}

// ThreatprotectionStatinfo represents Infoblox struct threatprotection:statinfo
type ThreatprotectionStatinfo struct {
	// The timestamp when data was collected.
	Timestamp *UnixTime `json:"timestamp,omitempty"`

	// The number of critical events.
	Critical uint64 `json:"critical,omitempty"`

	// The number of major events.
	Major uint64 `json:"major,omitempty"`

	// The number of warning events.
	Warning uint64 `json:"warning,omitempty"`

	// The number of informational events.
	Informational uint64 `json:"informational,omitempty"`

	// The total number of events.
	Total uint64 `json:"total,omitempty"`
}

// Thresholdtrap represents Infoblox struct thresholdtrap
type Thresholdtrap struct {
	// Determines the type of a given trap.
	TrapType string `json:"trap_type,omitempty"`

	// Determines the threshold value to reset the trap.
	TrapReset uint32 `json:"trap_reset,omitempty"`

	// Determines the threshold value to trigger the trap.
	TrapTrigger uint32 `json:"trap_trigger,omitempty"`
}

// Trapnotification represents Infoblox struct trapnotification
type Trapnotification struct {
	// Determines the type of a given trap.
	TrapType string `json:"trap_type,omitempty"`

	// Determines if the email notifications for the given trap are enabled or not.
	EnableEmail bool `json:"enable_email,omitempty"`

	// Determines if the trap is enabled or not.
	EnableTrap bool `json:"enable_trap,omitempty"`
}

// Trapreceiver represents Infoblox struct trapreceiver
type Trapreceiver struct {
	// The address of the trap receiver.
	Address string `json:"address,omitempty"`

	// The SNMPv3 user for this trap receiver.
	User string `json:"user,omitempty"`

	// A descriptive comment for this trap receiver.
	Comment string `json:"comment,omitempty"`
}

// Tsigac represents Infoblox struct tsigac
type Tsigac struct {
	// The address this rule applies to or "Any".
	Address string `json:"address,omitempty"`

	// The permission to use for this address.
	Permission string `json:"permission,omitempty"`

	// A generated TSIG key. If the external primary server is a NIOS appliance
	// running DNS One 2.x code, this can be set to :2xCOMPAT.
	TsigKey string `json:"tsig_key,omitempty"`

	// The TSIG key algorithm.
	TsigKeyAlg string `json:"tsig_key_alg,omitempty"`

	// The name of the TSIG key. If 2.x TSIG compatibility is used, this is set to
	// 'tsig_xfer' on retrieval, and ignored on insert or update.
	TsigKeyName string `json:"tsig_key_name,omitempty"`

	// Use flag for: tsig_key_name
	UseTsigKeyName bool `json:"use_tsig_key_name,omitempty"`
}

// Updatesdownloadmemberconfig represents Infoblox struct updatesdownloadmemberconfig
type Updatesdownloadmemberconfig struct {
	// The name of the updates download member.
	Member string `json:"member,omitempty"`

	// The source interface for updates download requests.
	Interface string `json:"interface,omitempty"`

	// Determines if the updates download member is online or not.
	IsOnline bool `json:"is_online,omitempty"`
}

// UpgradegroupMember represents Infoblox struct upgradegroup:member
type UpgradegroupMember struct {
	// The upgrade group member name.
	Member string `json:"member,omitempty"`

	// The upgrade group member time zone.
	TimeZone string `json:"time_zone,omitempty"`
}

// UpgradegroupSchedule represents Infoblox struct upgradegroup:schedule
type UpgradegroupSchedule struct {
	// The upgrade group name.
	Name string `json:"name,omitempty"`

	// The time zone for scheduling operations.
	TimeZone string `json:"time_zone,omitempty"`

	// The distribution dependent group name.
	DistributionDependentGroup string `json:"distribution_dependent_group,omitempty"`

	// The upgrade dependent group name.
	UpgradeDependentGroup string `json:"upgrade_dependent_group,omitempty"`

	// The time of the next scheduled distribution.
	DistributionTime *UnixTime `json:"distribution_time,omitempty"`

	// The time of the next scheduled upgrade.
	UpgradeTime *UnixTime `json:"upgrade_time,omitempty"`
}

// Upgradestep represents Infoblox struct upgradestep
type Upgradestep struct {
	// The status value of a step.
	StatusValue string `json:"status_value,omitempty"`

	// The status text that describes a step.
	StatusText string `json:"status_text,omitempty"`
}

// Vlanlink represents Infoblox struct vlanlink
type Vlanlink struct {
	// VLAN ID value.
	Id uint32 `json:"id,omitempty"`

	// Name of the VLAN.
	Name string `json:"name,omitempty"`
}

// Vtftpdirmember represents Infoblox struct vtftpdirmember
type Vtftpdirmember struct {
	// The Grid member on which to create the virtual TFTP directory.
	Member string `json:"member,omitempty"`

	// The IP type of the virtual TFTP root directory.
	IpType string `json:"ip_type,omitempty"`

	// The IP address of the clients which will see the virtual TFTP directory as
	// the root directory.
	Address string `json:"address,omitempty"`

	// The start IP address of the range within which the clients will see the
	// virtual TFTP directory as the root directory.
	StartAddress string `json:"start_address,omitempty"`

	// The end IP address of the range within which the clients will see the
	// virtual TFTP directory as the root directory.
	EndAddress string `json:"end_address,omitempty"`

	// The IP address of network the clients from which will see the virtual TFTP
	// directory as the root directory.
	Network string `json:"network,omitempty"`

	// The CIDR of network the clients from which will see the virtual TFTP
	// directory as the root directory.
	Cidr uint32 `json:"cidr,omitempty"`
}

// Zoneassociation represents Infoblox struct zoneassociation
type Zoneassociation struct {
	// The FQDN of the authoritative forward zone.
	Fqdn string `json:"fqdn,omitempty"`

	// True if this is the default zone.
	IsDefault bool `json:"is_default,omitempty"`

	// The view to which the zone belongs. If a view is not specified, the default
	// view is used.
	View string `json:"view,omitempty"`
}

// ZoneNameServer represents Infoblox struct zonenameserver
type ZoneNameServer struct {
	// The address of the Zone Name Server.
	Address string `json:"address,omitempty"`

	// Flag to indicate if ptr records need to be auto created.
	AutoCreatePtr bool `json:"auto_create_ptr,omitempty"`
}
