// Code generated by azure-service-operator-codegen. DO NOT EDIT.
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT license.
package arm

// FirewallPolicy Resource.
type FirewallPolicy_STATUS struct {
	// Etag: A unique read-only string that changes whenever the resource is updated.
	Etag *string `json:"etag,omitempty"`

	// Id: Resource ID.
	Id *string `json:"id,omitempty"`

	// Identity: The identity of the firewall policy.
	Identity *ManagedServiceIdentity_STATUS `json:"identity,omitempty"`

	// Location: Resource location.
	Location *string `json:"location,omitempty"`

	// Name: Resource name.
	Name *string `json:"name,omitempty"`

	// Properties: Properties of the firewall policy.
	Properties *FirewallPolicyPropertiesFormat_STATUS `json:"properties,omitempty"`

	// Tags: Resource tags.
	Tags map[string]string `json:"tags,omitempty"`

	// Type: Resource type.
	Type *string `json:"type,omitempty"`
}

// Firewall Policy definition.
type FirewallPolicyPropertiesFormat_STATUS struct {
	// BasePolicy: The parent firewall policy from which rules are inherited.
	BasePolicy *SubResource_STATUS `json:"basePolicy,omitempty"`

	// ChildPolicies: List of references to Child Firewall Policies.
	ChildPolicies []SubResource_STATUS `json:"childPolicies,omitempty"`

	// DnsSettings: DNS Proxy Settings definition.
	DnsSettings *DnsSettings_STATUS `json:"dnsSettings,omitempty"`

	// ExplicitProxy: Explicit Proxy Settings definition.
	ExplicitProxy *ExplicitProxy_STATUS `json:"explicitProxy,omitempty"`

	// Firewalls: List of references to Azure Firewalls that this Firewall Policy is associated with.
	Firewalls []SubResource_STATUS `json:"firewalls,omitempty"`

	// Insights: Insights on Firewall Policy.
	Insights *FirewallPolicyInsights_STATUS `json:"insights,omitempty"`

	// IntrusionDetection: The configuration for Intrusion detection.
	IntrusionDetection *FirewallPolicyIntrusionDetection_STATUS `json:"intrusionDetection,omitempty"`

	// ProvisioningState: The provisioning state of the firewall policy resource.
	ProvisioningState *ProvisioningState_STATUS `json:"provisioningState,omitempty"`

	// RuleCollectionGroups: List of references to FirewallPolicyRuleCollectionGroups.
	RuleCollectionGroups []SubResource_STATUS `json:"ruleCollectionGroups,omitempty"`

	// Size: A read-only string that represents the size of the FirewallPolicyPropertiesFormat in MB. (ex 0.5MB)
	Size *string `json:"size,omitempty"`

	// Sku: The Firewall Policy SKU.
	Sku *FirewallPolicySku_STATUS `json:"sku,omitempty"`

	// Snat: The private IP addresses/IP ranges to which traffic will not be SNAT.
	Snat *FirewallPolicySNAT_STATUS `json:"snat,omitempty"`

	// Sql: SQL Settings definition.
	Sql *FirewallPolicySQL_STATUS `json:"sql,omitempty"`

	// ThreatIntelMode: The operation mode for Threat Intelligence.
	ThreatIntelMode *AzureFirewallThreatIntelMode_STATUS `json:"threatIntelMode,omitempty"`

	// ThreatIntelWhitelist: ThreatIntel Whitelist for Firewall Policy.
	ThreatIntelWhitelist *FirewallPolicyThreatIntelWhitelist_STATUS `json:"threatIntelWhitelist,omitempty"`

	// TransportSecurity: TLS Configuration definition.
	TransportSecurity *FirewallPolicyTransportSecurity_STATUS `json:"transportSecurity,omitempty"`
}

// Identity for the resource.
type ManagedServiceIdentity_STATUS struct {
	// PrincipalId: The principal id of the system assigned identity. This property will only be provided for a system assigned
	// identity.
	PrincipalId *string `json:"principalId,omitempty"`

	// TenantId: The tenant id of the system assigned identity. This property will only be provided for a system assigned
	// identity.
	TenantId *string `json:"tenantId,omitempty"`

	// Type: The type of identity used for the resource. The type 'SystemAssigned, UserAssigned' includes both an implicitly
	// created identity and a set of user assigned identities. The type 'None' will remove any identities from the virtual
	// machine.
	Type *ManagedServiceIdentity_Type_STATUS `json:"type,omitempty"`

	// UserAssignedIdentities: The list of user identities associated with resource. The user identity dictionary key
	// references will be ARM resource ids in the form:
	// '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'.
	UserAssignedIdentities map[string]ManagedServiceIdentity_UserAssignedIdentities_STATUS `json:"userAssignedIdentities,omitempty"`
}

// DNS Proxy Settings in Firewall Policy.
type DnsSettings_STATUS struct {
	// EnableProxy: Enable DNS Proxy on Firewalls attached to the Firewall Policy.
	EnableProxy *bool `json:"enableProxy,omitempty"`

	// RequireProxyForNetworkRules: FQDNs in Network Rules are supported when set to true.
	RequireProxyForNetworkRules *bool `json:"requireProxyForNetworkRules,omitempty"`

	// Servers: List of Custom DNS Servers.
	Servers []string `json:"servers,omitempty"`
}

// Explicit Proxy Settings in Firewall Policy.
type ExplicitProxy_STATUS struct {
	// EnableExplicitProxy: When set to true, explicit proxy mode is enabled.
	EnableExplicitProxy *bool `json:"enableExplicitProxy,omitempty"`

	// EnablePacFile: When set to true, pac file port and url needs to be provided.
	EnablePacFile *bool `json:"enablePacFile,omitempty"`

	// HttpPort: Port number for explicit proxy http protocol, cannot be greater than 64000.
	HttpPort *int `json:"httpPort,omitempty"`

	// HttpsPort: Port number for explicit proxy https protocol, cannot be greater than 64000.
	HttpsPort *int `json:"httpsPort,omitempty"`

	// PacFile: SAS URL for PAC file.
	PacFile *string `json:"pacFile,omitempty"`

	// PacFilePort: Port number for firewall to serve PAC file.
	PacFilePort *int `json:"pacFilePort,omitempty"`
}

// Firewall Policy Insights.
type FirewallPolicyInsights_STATUS struct {
	// IsEnabled: A flag to indicate if the insights are enabled on the policy.
	IsEnabled *bool `json:"isEnabled,omitempty"`

	// LogAnalyticsResources: Workspaces needed to configure the Firewall Policy Insights.
	LogAnalyticsResources *FirewallPolicyLogAnalyticsResources_STATUS `json:"logAnalyticsResources,omitempty"`

	// RetentionDays: Number of days the insights should be enabled on the policy.
	RetentionDays *int `json:"retentionDays,omitempty"`
}

// Configuration for intrusion detection mode and rules.
type FirewallPolicyIntrusionDetection_STATUS struct {
	// Configuration: Intrusion detection configuration properties.
	Configuration *FirewallPolicyIntrusionDetectionConfiguration_STATUS `json:"configuration,omitempty"`

	// Mode: Intrusion detection general state. When attached to a parent policy, the firewall's effective IDPS mode is the
	// stricter mode of the two.
	Mode *FirewallPolicyIntrusionDetectionStateOptions_STATUS `json:"mode,omitempty"`

	// Profile: IDPS profile name. When attached to a parent policy, the firewall's effective profile is the profile name of
	// the parent policy.
	Profile *FirewallPolicyIntrusionDetectionProfileOptions_STATUS `json:"profile,omitempty"`
}

// SKU of Firewall policy.
type FirewallPolicySku_STATUS struct {
	// Tier: Tier of Firewall Policy.
	Tier *FirewallPolicySku_Tier_STATUS `json:"tier,omitempty"`
}

// The private IP addresses/IP ranges to which traffic will not be SNAT.
type FirewallPolicySNAT_STATUS struct {
	// AutoLearnPrivateRanges: The operation mode for automatically learning private ranges to not be SNAT
	AutoLearnPrivateRanges *FirewallPolicySNAT_AutoLearnPrivateRanges_STATUS `json:"autoLearnPrivateRanges,omitempty"`

	// PrivateRanges: List of private IP addresses/IP address ranges to not be SNAT.
	PrivateRanges []string `json:"privateRanges,omitempty"`
}

// SQL Settings in Firewall Policy.
type FirewallPolicySQL_STATUS struct {
	// AllowSqlRedirect: A flag to indicate if SQL Redirect traffic filtering is enabled. Turning on the flag requires no rule
	// using port 11000-11999.
	AllowSqlRedirect *bool `json:"allowSqlRedirect,omitempty"`
}

// ThreatIntel Whitelist for Firewall Policy.
type FirewallPolicyThreatIntelWhitelist_STATUS struct {
	// Fqdns: List of FQDNs for the ThreatIntel Whitelist.
	Fqdns []string `json:"fqdns,omitempty"`

	// IpAddresses: List of IP addresses for the ThreatIntel Whitelist.
	IpAddresses []string `json:"ipAddresses,omitempty"`
}

// Configuration needed to perform TLS termination & initiation.
type FirewallPolicyTransportSecurity_STATUS struct {
	// CertificateAuthority: The CA used for intermediate CA generation.
	CertificateAuthority *FirewallPolicyCertificateAuthority_STATUS `json:"certificateAuthority,omitempty"`
}

type ManagedServiceIdentity_Type_STATUS string

const (
	ManagedServiceIdentity_Type_STATUS_None                       = ManagedServiceIdentity_Type_STATUS("None")
	ManagedServiceIdentity_Type_STATUS_SystemAssigned             = ManagedServiceIdentity_Type_STATUS("SystemAssigned")
	ManagedServiceIdentity_Type_STATUS_SystemAssignedUserAssigned = ManagedServiceIdentity_Type_STATUS("SystemAssigned, UserAssigned")
	ManagedServiceIdentity_Type_STATUS_UserAssigned               = ManagedServiceIdentity_Type_STATUS("UserAssigned")
)

// Mapping from string to ManagedServiceIdentity_Type_STATUS
var managedServiceIdentity_Type_STATUS_Values = map[string]ManagedServiceIdentity_Type_STATUS{
	"none":                         ManagedServiceIdentity_Type_STATUS_None,
	"systemassigned":               ManagedServiceIdentity_Type_STATUS_SystemAssigned,
	"systemassigned, userassigned": ManagedServiceIdentity_Type_STATUS_SystemAssignedUserAssigned,
	"userassigned":                 ManagedServiceIdentity_Type_STATUS_UserAssigned,
}

type ManagedServiceIdentity_UserAssignedIdentities_STATUS struct {
	// ClientId: The client id of user assigned identity.
	ClientId *string `json:"clientId,omitempty"`

	// PrincipalId: The principal id of user assigned identity.
	PrincipalId *string `json:"principalId,omitempty"`
}

// Trusted Root certificates properties for tls.
type FirewallPolicyCertificateAuthority_STATUS struct {
	// KeyVaultSecretId: Secret Id of (base-64 encoded unencrypted pfx) 'Secret' or 'Certificate' object stored in KeyVault.
	KeyVaultSecretId *string `json:"keyVaultSecretId,omitempty"`

	// Name: Name of the CA certificate.
	Name *string `json:"name,omitempty"`
}

// The operation for configuring intrusion detection.
type FirewallPolicyIntrusionDetectionConfiguration_STATUS struct {
	// BypassTrafficSettings: List of rules for traffic to bypass.
	BypassTrafficSettings []FirewallPolicyIntrusionDetectionBypassTrafficSpecifications_STATUS `json:"bypassTrafficSettings,omitempty"`

	// PrivateRanges: IDPS Private IP address ranges are used to identify traffic direction (i.e. inbound, outbound, etc.). By
	// default, only ranges defined by IANA RFC 1918 are considered private IP addresses. To modify default ranges, specify
	// your Private IP address ranges with this property
	PrivateRanges []string `json:"privateRanges,omitempty"`

	// SignatureOverrides: List of specific signatures states.
	SignatureOverrides []FirewallPolicyIntrusionDetectionSignatureSpecification_STATUS `json:"signatureOverrides,omitempty"`
}

// Possible Intrusion Detection profile values.
type FirewallPolicyIntrusionDetectionProfileOptions_STATUS string

const (
	FirewallPolicyIntrusionDetectionProfileOptions_STATUS_Advanced = FirewallPolicyIntrusionDetectionProfileOptions_STATUS("Advanced")
	FirewallPolicyIntrusionDetectionProfileOptions_STATUS_Basic    = FirewallPolicyIntrusionDetectionProfileOptions_STATUS("Basic")
	FirewallPolicyIntrusionDetectionProfileOptions_STATUS_Extended = FirewallPolicyIntrusionDetectionProfileOptions_STATUS("Extended")
	FirewallPolicyIntrusionDetectionProfileOptions_STATUS_Standard = FirewallPolicyIntrusionDetectionProfileOptions_STATUS("Standard")
)

// Mapping from string to FirewallPolicyIntrusionDetectionProfileOptions_STATUS
var firewallPolicyIntrusionDetectionProfileOptions_STATUS_Values = map[string]FirewallPolicyIntrusionDetectionProfileOptions_STATUS{
	"advanced": FirewallPolicyIntrusionDetectionProfileOptions_STATUS_Advanced,
	"basic":    FirewallPolicyIntrusionDetectionProfileOptions_STATUS_Basic,
	"extended": FirewallPolicyIntrusionDetectionProfileOptions_STATUS_Extended,
	"standard": FirewallPolicyIntrusionDetectionProfileOptions_STATUS_Standard,
}

// Possible state values.
type FirewallPolicyIntrusionDetectionStateOptions_STATUS string

const (
	FirewallPolicyIntrusionDetectionStateOptions_STATUS_Alert = FirewallPolicyIntrusionDetectionStateOptions_STATUS("Alert")
	FirewallPolicyIntrusionDetectionStateOptions_STATUS_Deny  = FirewallPolicyIntrusionDetectionStateOptions_STATUS("Deny")
	FirewallPolicyIntrusionDetectionStateOptions_STATUS_Off   = FirewallPolicyIntrusionDetectionStateOptions_STATUS("Off")
)

// Mapping from string to FirewallPolicyIntrusionDetectionStateOptions_STATUS
var firewallPolicyIntrusionDetectionStateOptions_STATUS_Values = map[string]FirewallPolicyIntrusionDetectionStateOptions_STATUS{
	"alert": FirewallPolicyIntrusionDetectionStateOptions_STATUS_Alert,
	"deny":  FirewallPolicyIntrusionDetectionStateOptions_STATUS_Deny,
	"off":   FirewallPolicyIntrusionDetectionStateOptions_STATUS_Off,
}

// Log Analytics Resources for Firewall Policy Insights.
type FirewallPolicyLogAnalyticsResources_STATUS struct {
	// DefaultWorkspaceId: The default workspace Id for Firewall Policy Insights.
	DefaultWorkspaceId *SubResource_STATUS `json:"defaultWorkspaceId,omitempty"`

	// Workspaces: List of workspaces for Firewall Policy Insights.
	Workspaces []FirewallPolicyLogAnalyticsWorkspace_STATUS `json:"workspaces,omitempty"`
}

type FirewallPolicySku_Tier_STATUS string

const (
	FirewallPolicySku_Tier_STATUS_Basic    = FirewallPolicySku_Tier_STATUS("Basic")
	FirewallPolicySku_Tier_STATUS_Premium  = FirewallPolicySku_Tier_STATUS("Premium")
	FirewallPolicySku_Tier_STATUS_Standard = FirewallPolicySku_Tier_STATUS("Standard")
)

// Mapping from string to FirewallPolicySku_Tier_STATUS
var firewallPolicySku_Tier_STATUS_Values = map[string]FirewallPolicySku_Tier_STATUS{
	"basic":    FirewallPolicySku_Tier_STATUS_Basic,
	"premium":  FirewallPolicySku_Tier_STATUS_Premium,
	"standard": FirewallPolicySku_Tier_STATUS_Standard,
}

type FirewallPolicySNAT_AutoLearnPrivateRanges_STATUS string

const (
	FirewallPolicySNAT_AutoLearnPrivateRanges_STATUS_Disabled = FirewallPolicySNAT_AutoLearnPrivateRanges_STATUS("Disabled")
	FirewallPolicySNAT_AutoLearnPrivateRanges_STATUS_Enabled  = FirewallPolicySNAT_AutoLearnPrivateRanges_STATUS("Enabled")
)

// Mapping from string to FirewallPolicySNAT_AutoLearnPrivateRanges_STATUS
var firewallPolicySNAT_AutoLearnPrivateRanges_STATUS_Values = map[string]FirewallPolicySNAT_AutoLearnPrivateRanges_STATUS{
	"disabled": FirewallPolicySNAT_AutoLearnPrivateRanges_STATUS_Disabled,
	"enabled":  FirewallPolicySNAT_AutoLearnPrivateRanges_STATUS_Enabled,
}

// Intrusion detection bypass traffic specification.
type FirewallPolicyIntrusionDetectionBypassTrafficSpecifications_STATUS struct {
	// Description: Description of the bypass traffic rule.
	Description *string `json:"description,omitempty"`

	// DestinationAddresses: List of destination IP addresses or ranges for this rule.
	DestinationAddresses []string `json:"destinationAddresses,omitempty"`

	// DestinationIpGroups: List of destination IpGroups for this rule.
	DestinationIpGroups []string `json:"destinationIpGroups,omitempty"`

	// DestinationPorts: List of destination ports or ranges.
	DestinationPorts []string `json:"destinationPorts,omitempty"`

	// Name: Name of the bypass traffic rule.
	Name *string `json:"name,omitempty"`

	// Protocol: The rule bypass protocol.
	Protocol *FirewallPolicyIntrusionDetectionBypassTrafficProtocol_STATUS `json:"protocol,omitempty"`

	// SourceAddresses: List of source IP addresses or ranges for this rule.
	SourceAddresses []string `json:"sourceAddresses,omitempty"`

	// SourceIpGroups: List of source IpGroups for this rule.
	SourceIpGroups []string `json:"sourceIpGroups,omitempty"`
}

// Intrusion detection signatures specification states.
type FirewallPolicyIntrusionDetectionSignatureSpecification_STATUS struct {
	// Id: Signature id.
	Id *string `json:"id,omitempty"`

	// Mode: The signature state.
	Mode *FirewallPolicyIntrusionDetectionStateOptions_STATUS `json:"mode,omitempty"`
}

// Log Analytics Workspace for Firewall Policy Insights.
type FirewallPolicyLogAnalyticsWorkspace_STATUS struct {
	// Region: Region to configure the Workspace.
	Region *string `json:"region,omitempty"`

	// WorkspaceId: The workspace Id for Firewall Policy Insights.
	WorkspaceId *SubResource_STATUS `json:"workspaceId,omitempty"`
}

// Possible intrusion detection bypass traffic protocols.
type FirewallPolicyIntrusionDetectionBypassTrafficProtocol_STATUS string

const (
	FirewallPolicyIntrusionDetectionBypassTrafficProtocol_STATUS_ANY  = FirewallPolicyIntrusionDetectionBypassTrafficProtocol_STATUS("ANY")
	FirewallPolicyIntrusionDetectionBypassTrafficProtocol_STATUS_ICMP = FirewallPolicyIntrusionDetectionBypassTrafficProtocol_STATUS("ICMP")
	FirewallPolicyIntrusionDetectionBypassTrafficProtocol_STATUS_TCP  = FirewallPolicyIntrusionDetectionBypassTrafficProtocol_STATUS("TCP")
	FirewallPolicyIntrusionDetectionBypassTrafficProtocol_STATUS_UDP  = FirewallPolicyIntrusionDetectionBypassTrafficProtocol_STATUS("UDP")
)

// Mapping from string to FirewallPolicyIntrusionDetectionBypassTrafficProtocol_STATUS
var firewallPolicyIntrusionDetectionBypassTrafficProtocol_STATUS_Values = map[string]FirewallPolicyIntrusionDetectionBypassTrafficProtocol_STATUS{
	"any":  FirewallPolicyIntrusionDetectionBypassTrafficProtocol_STATUS_ANY,
	"icmp": FirewallPolicyIntrusionDetectionBypassTrafficProtocol_STATUS_ICMP,
	"tcp":  FirewallPolicyIntrusionDetectionBypassTrafficProtocol_STATUS_TCP,
	"udp":  FirewallPolicyIntrusionDetectionBypassTrafficProtocol_STATUS_UDP,
}
