/*
 * Copyright (c) Microsoft Corporation. All rights reserved.
 * Licensed under the MIT License. See License.txt in the project root for
 * license information.
 * 
 * Code generated by Microsoft (R) AutoRest Code Generator 0.16.0.0
 * Changes may cause incorrect behavior and will be lost if the code is
 * regenerated.
// TODO: Include PageTemplateModels here too?? Probably
 */


/**
 * @class
 * Initializes a new instance of the ApplicationGatewaySku class.
 * @constructor
 * SKU of application gateway
 * @member {string} [name] Gets or sets name of application gateway SKU.
 * Possible values include: 'Standard_Small', 'Standard_Medium',
 * 'Standard_Large'
 * 
 * @member {string} [tier] Gets or sets tier of application gateway. Possible
 * values include: 'Standard'
 * 
 * @member {number} [capacity] Gets or sets capacity (instance count) of
 * application gateway
 * 
 */
export interface ApplicationGatewaySku {
    name?: string;
    tier?: string;
    capacity?: number;
}

/**
 * @class
 * Initializes a new instance of the SubResource class.
 * @constructor
 * @member {string} [id] Resource Id
 * 
 */
export interface SubResource extends BaseResource {
    id?: string;
}

/**
 * @class
 * Initializes a new instance of the ApplicationGatewayIPConfiguration class.
 * @constructor
 * IP configuration of application gateway
 * @member {object} [subnet] Gets or sets the reference of the subnet
 * resource.A subnet from where appliation gateway gets its private address
 * 
 * @member {string} [subnet.id] Resource Id
 * 
 * @member {string} [provisioningState] Gets or sets Provisioning state of the
 * application gateway subnet resource Updating/Deleting/Failed
 * 
 * @member {string} [name] Gets name of the resource that is unique within a
 * resource group. This name can be used to access the resource
 * 
 * @member {string} [etag] A unique read-only string that changes whenever the
 * resource is updated
 * 
 */
export interface ApplicationGatewayIPConfiguration extends SubResource {
    subnet?: SubResource;
    provisioningState?: string;
    name?: string;
    etag?: string;
}

/**
 * @class
 * Initializes a new instance of the ApplicationGatewaySslCertificate class.
 * @constructor
 * SSL certificates of application gateway
 * @member {string} [data] Gets or sets the certificate data
 * 
 * @member {string} [password] Gets or sets the certificate password
 * 
 * @member {string} [publicCertData] Gets or sets the certificate public data
 * 
 * @member {string} [provisioningState] Gets or sets Provisioning state of the
 * ssl certificate resource Updating/Deleting/Failed
 * 
 * @member {string} [name] Gets name of the resource that is unique within a
 * resource group. This name can be used to access the resource
 * 
 * @member {string} [etag] A unique read-only string that changes whenever the
 * resource is updated
 * 
 */
export interface ApplicationGatewaySslCertificate extends SubResource {
    data?: string;
    password?: string;
    publicCertData?: string;
    provisioningState?: string;
    name?: string;
    etag?: string;
}

/**
 * @class
 * Initializes a new instance of the ApplicationGatewayFrontendIPConfiguration class.
 * @constructor
 * Frontend IP configuration of application gateway
 * @member {string} [privateIPAddress] Gets or sets the privateIPAddress of
 * the Network Interface IP Configuration
 * 
 * @member {string} [privateIPAllocationMethod] Gets or sets PrivateIP
 * allocation method (Static/Dynamic). Possible values include: 'Static',
 * 'Dynamic'
 * 
 * @member {object} [subnet] Gets or sets the reference of the subnet resource
 * 
 * @member {string} [subnet.id] Resource Id
 * 
 * @member {object} [publicIPAddress] Gets or sets the reference of the
 * PublicIP resource
 * 
 * @member {string} [publicIPAddress.id] Resource Id
 * 
 * @member {string} [provisioningState] Gets or sets Provisioning state of the
 * PublicIP resource Updating/Deleting/Failed
 * 
 * @member {string} [name] Gets name of the resource that is unique within a
 * resource group. This name can be used to access the resource
 * 
 * @member {string} [etag] A unique read-only string that changes whenever the
 * resource is updated
 * 
 */
export interface ApplicationGatewayFrontendIPConfiguration extends SubResource {
    privateIPAddress?: string;
    privateIPAllocationMethod?: string;
    subnet?: SubResource;
    publicIPAddress?: SubResource;
    provisioningState?: string;
    name?: string;
    etag?: string;
}

/**
 * @class
 * Initializes a new instance of the ApplicationGatewayFrontendPort class.
 * @constructor
 * Frontend Port of application gateway
 * @member {number} [port] Gets or sets the frontend port
 * 
 * @member {string} [provisioningState] Gets or sets Provisioning state of the
 * frontend port resource Updating/Deleting/Failed
 * 
 * @member {string} [name] Gets name of the resource that is unique within a
 * resource group. This name can be used to access the resource
 * 
 * @member {string} [etag] A unique read-only string that changes whenever the
 * resource is updated
 * 
 */
export interface ApplicationGatewayFrontendPort extends SubResource {
    port?: number;
    provisioningState?: string;
    name?: string;
    etag?: string;
}

/**
 * @class
 * Initializes a new instance of the ApplicationGatewayBackendAddress class.
 * @constructor
 * Backend Address of application gateway
 * @member {string} [fqdn] Gets or sets the dns name
 * 
 * @member {string} [ipAddress] Gets or sets the ip address
 * 
 */
export interface ApplicationGatewayBackendAddress {
    fqdn?: string;
    ipAddress?: string;
}

/**
 * @class
 * Initializes a new instance of the NetworkInterfaceIPConfiguration class.
 * @constructor
 * IPConfiguration in a NetworkInterface
 * @member {array} [applicationGatewayBackendAddressPools] Gets or sets the
 * reference of ApplicationGatewayBackendAddressPool resource
 * 
 * @member {array} [loadBalancerBackendAddressPools] Gets or sets the
 * reference of LoadBalancerBackendAddressPool resource
 * 
 * @member {array} [loadBalancerInboundNatRules] Gets or sets list of
 * references of LoadBalancerInboundNatRules
 * 
 * @member {string} [privateIPAddress]
 * 
 * @member {string} [privateIPAllocationMethod] Gets or sets PrivateIP
 * allocation method (Static/Dynamic). Possible values include: 'Static',
 * 'Dynamic'
 * 
 * @member {string} [privateIPAddressVersion] Gets or sets PrivateIP address
 * version (IPv4/IPv6). Possible values include: 'IPv4', 'IPv6'
 * 
 * @member {object} [subnet]
 * 
 * @member {string} [subnet.addressPrefix] Gets or sets Address prefix for the
 * subnet.
 * 
 * @member {object} [subnet.networkSecurityGroup] Gets or sets the reference
 * of the NetworkSecurityGroup resource
 * 
 * @member {array} [subnet.networkSecurityGroup.securityRules] Gets or sets
 * Security rules of network security group
 * 
 * @member {array} [subnet.networkSecurityGroup.defaultSecurityRules] Gets or
 * sets Default security rules of network security group
 * 
 * @member {array} [subnet.networkSecurityGroup.networkInterfaces] Gets
 * collection of references to Network Interfaces
 * 
 * @member {array} [subnet.networkSecurityGroup.subnets] Gets collection of
 * references to subnets
 * 
 * @member {string} [subnet.networkSecurityGroup.resourceGuid] Gets or sets
 * resource guid property of the network security group resource
 * 
 * @member {string} [subnet.networkSecurityGroup.provisioningState] Gets or
 * sets Provisioning state of the PublicIP resource Updating/Deleting/Failed
 * 
 * @member {string} [subnet.networkSecurityGroup.etag] Gets a unique read-only
 * string that changes whenever the resource is updated
 * 
 * @member {object} [subnet.routeTable] Gets or sets the reference of the
 * RouteTable resource
 * 
 * @member {array} [subnet.routeTable.routes] Gets or sets Routes in a Route
 * Table
 * 
 * @member {array} [subnet.routeTable.subnets] Gets collection of references
 * to subnets
 * 
 * @member {string} [subnet.routeTable.provisioningState] Gets or sets
 * Provisioning state of the resource Updating/Deleting/Failed
 * 
 * @member {string} [subnet.routeTable.etag] Gets a unique read-only string
 * that changes whenever the resource is updated
 * 
 * @member {array} [subnet.ipConfigurations] Gets array of references to the
 * network interface IP configurations using subnet
 * 
 * @member {string} [subnet.provisioningState] Gets or sets Provisioning state
 * of the PublicIP resource Updating/Deleting/Failed
 * 
 * @member {string} [subnet.name] Gets name of the resource that is unique
 * within a resource group. This name can be used to access the resource
 * 
 * @member {string} [subnet.etag] A unique read-only string that changes
 * whenever the resource is updated
 * 
 * @member {object} [publicIPAddress]
 * 
 * @member {string} [publicIPAddress.publicIPAllocationMethod] Gets or sets
 * PublicIP allocation method (Static/Dynamic). Possible values include:
 * 'Static', 'Dynamic'
 * 
 * @member {string} [publicIPAddress.publicIPAddressVersion] Gets or sets
 * PublicIP address version (IPv4/IPv6). Possible values include: 'IPv4',
 * 'IPv6'
 * 
 * @member {object} [publicIPAddress.ipConfiguration]
 * 
 * @member {string} [publicIPAddress.ipConfiguration.privateIPAddress] Gets or
 * sets the privateIPAddress of the IP Configuration
 * 
 * @member {string}
 * [publicIPAddress.ipConfiguration.privateIPAllocationMethod] Gets or sets
 * PrivateIP allocation method (Static/Dynamic). Possible values include:
 * 'Static', 'Dynamic'
 * 
 * @member {object} [publicIPAddress.ipConfiguration.subnet] Gets or sets the
 * reference of the subnet resource
 * 
 * @member {string} [publicIPAddress.ipConfiguration.subnet.addressPrefix]
 * Gets or sets Address prefix for the subnet.
 * 
 * @member {object}
 * [publicIPAddress.ipConfiguration.subnet.networkSecurityGroup] Gets or sets
 * the reference of the NetworkSecurityGroup resource
 * 
 * @member {array}
 * [publicIPAddress.ipConfiguration.subnet.networkSecurityGroup.securityRules]
 * Gets or sets Security rules of network security group
 * 
 * @member {array}
 * [publicIPAddress.ipConfiguration.subnet.networkSecurityGroup.defaultSecurityRules]
 * Gets or sets Default security rules of network security group
 * 
 * @member {array}
 * [publicIPAddress.ipConfiguration.subnet.networkSecurityGroup.networkInterfaces]
 * Gets collection of references to Network Interfaces
 * 
 * @member {array}
 * [publicIPAddress.ipConfiguration.subnet.networkSecurityGroup.subnets] Gets
 * collection of references to subnets
 * 
 * @member {string}
 * [publicIPAddress.ipConfiguration.subnet.networkSecurityGroup.resourceGuid]
 * Gets or sets resource guid property of the network security group resource
 * 
 * @member {string}
 * [publicIPAddress.ipConfiguration.subnet.networkSecurityGroup.provisioningState]
 * Gets or sets Provisioning state of the PublicIP resource
 * Updating/Deleting/Failed
 * 
 * @member {string}
 * [publicIPAddress.ipConfiguration.subnet.networkSecurityGroup.etag] Gets a
 * unique read-only string that changes whenever the resource is updated
 * 
 * @member {object} [publicIPAddress.ipConfiguration.subnet.routeTable] Gets
 * or sets the reference of the RouteTable resource
 * 
 * @member {array} [publicIPAddress.ipConfiguration.subnet.routeTable.routes]
 * Gets or sets Routes in a Route Table
 * 
 * @member {array} [publicIPAddress.ipConfiguration.subnet.routeTable.subnets]
 * Gets collection of references to subnets
 * 
 * @member {string}
 * [publicIPAddress.ipConfiguration.subnet.routeTable.provisioningState] Gets
 * or sets Provisioning state of the resource Updating/Deleting/Failed
 * 
 * @member {string} [publicIPAddress.ipConfiguration.subnet.routeTable.etag]
 * Gets a unique read-only string that changes whenever the resource is
 * updated
 * 
 * @member {array} [publicIPAddress.ipConfiguration.subnet.ipConfigurations]
 * Gets array of references to the network interface IP configurations using
 * subnet
 * 
 * @member {string} [publicIPAddress.ipConfiguration.subnet.provisioningState]
 * Gets or sets Provisioning state of the PublicIP resource
 * Updating/Deleting/Failed
 * 
 * @member {string} [publicIPAddress.ipConfiguration.subnet.name] Gets name of
 * the resource that is unique within a resource group. This name can be used
 * to access the resource
 * 
 * @member {string} [publicIPAddress.ipConfiguration.subnet.etag] A unique
 * read-only string that changes whenever the resource is updated
 * 
 * @member {object} [publicIPAddress.ipConfiguration.publicIPAddress] Gets or
 * sets the reference of the PublicIP resource
 * 
 * @member {string} [publicIPAddress.ipConfiguration.provisioningState] Gets
 * or sets Provisioning state of the PublicIP resource
 * Updating/Deleting/Failed
 * 
 * @member {string} [publicIPAddress.ipConfiguration.name] Gets name of the
 * resource that is unique within a resource group. This name can be used to
 * access the resource
 * 
 * @member {string} [publicIPAddress.ipConfiguration.etag] A unique read-only
 * string that changes whenever the resource is updated
 * 
 * @member {object} [publicIPAddress.dnsSettings] Gets or sets FQDN of the DNS
 * record associated with the public IP address
 * 
 * @member {string} [publicIPAddress.dnsSettings.domainNameLabel] Gets or sets
 * the Domain name label.The concatenation of the domain name label and the
 * regionalized DNS zone make up the fully qualified domain name associated
 * with the public IP address. If a domain name label is specified, an A DNS
 * record is created for the public IP in the Microsoft Azure DNS system.
 * 
 * @member {string} [publicIPAddress.dnsSettings.fqdn] Gets the FQDN, Fully
 * qualified domain name of the A DNS record associated with the public IP.
 * This is the concatenation of the domainNameLabel and the regionalized DNS
 * zone.
 * 
 * @member {string} [publicIPAddress.dnsSettings.reverseFqdn] Gets or Sests
 * the Reverse FQDN. A user-visible, fully qualified domain name that
 * resolves to this public IP address. If the reverseFqdn is specified, then
 * a PTR DNS record is created pointing from the IP address in the
 * in-addr.arpa domain to the reverse FQDN.
 * 
 * @member {string} [publicIPAddress.ipAddress]
 * 
 * @member {number} [publicIPAddress.idleTimeoutInMinutes] Gets or sets the
 * Idletimeout of the public IP address
 * 
 * @member {string} [publicIPAddress.resourceGuid] Gets or sets resource guid
 * property of the PublicIP resource
 * 
 * @member {string} [publicIPAddress.provisioningState] Gets or sets
 * Provisioning state of the PublicIP resource Updating/Deleting/Failed
 * 
 * @member {string} [publicIPAddress.etag] Gets a unique read-only string that
 * changes whenever the resource is updated
 * 
 * @member {string} [provisioningState]
 * 
 * @member {string} [name] Gets name of the resource that is unique within a
 * resource group. This name can be used to access the resource
 * 
 * @member {string} [etag] A unique read-only string that changes whenever the
 * resource is updated
 * 
 */
export interface NetworkInterfaceIPConfiguration extends SubResource {
    applicationGatewayBackendAddressPools?: ApplicationGatewayBackendAddressPool[];
    loadBalancerBackendAddressPools?: BackendAddressPool[];
    loadBalancerInboundNatRules?: InboundNatRule[];
    privateIPAddress?: string;
    privateIPAllocationMethod?: string;
    privateIPAddressVersion?: string;
    subnet?: Subnet;
    publicIPAddress?: PublicIPAddress;
    provisioningState?: string;
    name?: string;
    etag?: string;
}

/**
 * @class
 * Initializes a new instance of the ApplicationGatewayBackendAddressPool class.
 * @constructor
 * Backend Address Pool of application gateway
 * @member {array} [backendIPConfigurations] Gets collection of references to
 * IPs defined in NICs
 * 
 * @member {array} [backendAddresses] Gets or sets the backend addresses
 * 
 * @member {string} [provisioningState] Gets or sets Provisioning state of the
 * backend address pool resource Updating/Deleting/Failed
 * 
 * @member {string} [name] Gets name of the resource that is unique within a
 * resource group. This name can be used to access the resource
 * 
 * @member {string} [etag] A unique read-only string that changes whenever the
 * resource is updated
 * 
 */
export interface ApplicationGatewayBackendAddressPool extends SubResource {
    backendIPConfigurations?: NetworkInterfaceIPConfiguration[];
    backendAddresses?: ApplicationGatewayBackendAddress[];
    provisioningState?: string;
    name?: string;
    etag?: string;
}

/**
 * @class
 * Initializes a new instance of the BackendAddressPool class.
 * @constructor
 * Pool of backend IP addresseses
 * @member {array} [backendIPConfigurations] Gets collection of references to
 * IPs defined in NICs
 * 
 * @member {array} [loadBalancingRules] Gets Load Balancing rules that use
 * this Backend Address Pool
 * 
 * @member {object} [outboundNatRule] Gets outbound rules that use this
 * Backend Address Pool
 * 
 * @member {string} [outboundNatRule.id] Resource Id
 * 
 * @member {string} [provisioningState] Provisioning state of the PublicIP
 * resource Updating/Deleting/Failed
 * 
 * @member {string} [name] Gets name of the resource that is unique within a
 * resource group. This name can be used to access the resource
 * 
 * @member {string} [etag] A unique read-only string that changes whenever the
 * resource is updated
 * 
 */
export interface BackendAddressPool extends SubResource {
    backendIPConfigurations?: NetworkInterfaceIPConfiguration[];
    loadBalancingRules?: SubResource[];
    outboundNatRule?: SubResource;
    provisioningState?: string;
    name?: string;
    etag?: string;
}

/**
 * @class
 * Initializes a new instance of the InboundNatRule class.
 * @constructor
 * Inbound NAT rule of the loadbalancer
 * @member {object} [frontendIPConfiguration] Gets or sets a reference to
 * frontend IP Addresses
 * 
 * @member {string} [frontendIPConfiguration.id] Resource Id
 * 
 * @member {object} [backendIPConfiguration] Gets or sets a reference to a
 * private ip address defined on a NetworkInterface of a VM. Traffic sent to
 * frontendPort of each of the frontendIPConfigurations is forwarded to the
 * backed IP
 * 
 * @member {array}
 * [backendIPConfiguration.applicationGatewayBackendAddressPools] Gets or
 * sets the reference of ApplicationGatewayBackendAddressPool resource
 * 
 * @member {array} [backendIPConfiguration.loadBalancerBackendAddressPools]
 * Gets or sets the reference of LoadBalancerBackendAddressPool resource
 * 
 * @member {array} [backendIPConfiguration.loadBalancerInboundNatRules] Gets
 * or sets list of references of LoadBalancerInboundNatRules
 * 
 * @member {string} [backendIPConfiguration.privateIPAddress]
 * 
 * @member {string} [backendIPConfiguration.privateIPAllocationMethod] Gets or
 * sets PrivateIP allocation method (Static/Dynamic). Possible values
 * include: 'Static', 'Dynamic'
 * 
 * @member {string} [backendIPConfiguration.privateIPAddressVersion] Gets or
 * sets PrivateIP address version (IPv4/IPv6). Possible values include:
 * 'IPv4', 'IPv6'
 * 
 * @member {object} [backendIPConfiguration.subnet]
 * 
 * @member {string} [backendIPConfiguration.subnet.addressPrefix] Gets or sets
 * Address prefix for the subnet.
 * 
 * @member {object} [backendIPConfiguration.subnet.networkSecurityGroup] Gets
 * or sets the reference of the NetworkSecurityGroup resource
 * 
 * @member {array}
 * [backendIPConfiguration.subnet.networkSecurityGroup.securityRules] Gets or
 * sets Security rules of network security group
 * 
 * @member {array}
 * [backendIPConfiguration.subnet.networkSecurityGroup.defaultSecurityRules]
 * Gets or sets Default security rules of network security group
 * 
 * @member {array}
 * [backendIPConfiguration.subnet.networkSecurityGroup.networkInterfaces]
 * Gets collection of references to Network Interfaces
 * 
 * @member {array}
 * [backendIPConfiguration.subnet.networkSecurityGroup.subnets] Gets
 * collection of references to subnets
 * 
 * @member {string}
 * [backendIPConfiguration.subnet.networkSecurityGroup.resourceGuid] Gets or
 * sets resource guid property of the network security group resource
 * 
 * @member {string}
 * [backendIPConfiguration.subnet.networkSecurityGroup.provisioningState]
 * Gets or sets Provisioning state of the PublicIP resource
 * Updating/Deleting/Failed
 * 
 * @member {string} [backendIPConfiguration.subnet.networkSecurityGroup.etag]
 * Gets a unique read-only string that changes whenever the resource is
 * updated
 * 
 * @member {object} [backendIPConfiguration.subnet.routeTable] Gets or sets
 * the reference of the RouteTable resource
 * 
 * @member {array} [backendIPConfiguration.subnet.routeTable.routes] Gets or
 * sets Routes in a Route Table
 * 
 * @member {array} [backendIPConfiguration.subnet.routeTable.subnets] Gets
 * collection of references to subnets
 * 
 * @member {string}
 * [backendIPConfiguration.subnet.routeTable.provisioningState] Gets or sets
 * Provisioning state of the resource Updating/Deleting/Failed
 * 
 * @member {string} [backendIPConfiguration.subnet.routeTable.etag] Gets a
 * unique read-only string that changes whenever the resource is updated
 * 
 * @member {array} [backendIPConfiguration.subnet.ipConfigurations] Gets array
 * of references to the network interface IP configurations using subnet
 * 
 * @member {string} [backendIPConfiguration.subnet.provisioningState] Gets or
 * sets Provisioning state of the PublicIP resource Updating/Deleting/Failed
 * 
 * @member {string} [backendIPConfiguration.subnet.name] Gets name of the
 * resource that is unique within a resource group. This name can be used to
 * access the resource
 * 
 * @member {string} [backendIPConfiguration.subnet.etag] A unique read-only
 * string that changes whenever the resource is updated
 * 
 * @member {object} [backendIPConfiguration.publicIPAddress]
 * 
 * @member {string}
 * [backendIPConfiguration.publicIPAddress.publicIPAllocationMethod] Gets or
 * sets PublicIP allocation method (Static/Dynamic). Possible values include:
 * 'Static', 'Dynamic'
 * 
 * @member {string}
 * [backendIPConfiguration.publicIPAddress.publicIPAddressVersion] Gets or
 * sets PublicIP address version (IPv4/IPv6). Possible values include:
 * 'IPv4', 'IPv6'
 * 
 * @member {object} [backendIPConfiguration.publicIPAddress.ipConfiguration]
 * 
 * @member {string}
 * [backendIPConfiguration.publicIPAddress.ipConfiguration.privateIPAddress]
 * Gets or sets the privateIPAddress of the IP Configuration
 * 
 * @member {string}
 * [backendIPConfiguration.publicIPAddress.ipConfiguration.privateIPAllocationMethod]
 * Gets or sets PrivateIP allocation method (Static/Dynamic). Possible values
 * include: 'Static', 'Dynamic'
 * 
 * @member {object}
 * [backendIPConfiguration.publicIPAddress.ipConfiguration.subnet] Gets or
 * sets the reference of the subnet resource
 * 
 * @member {string}
 * [backendIPConfiguration.publicIPAddress.ipConfiguration.subnet.addressPrefix]
 * Gets or sets Address prefix for the subnet.
 * 
 * @member {object}
 * [backendIPConfiguration.publicIPAddress.ipConfiguration.subnet.networkSecurityGroup]
 * Gets or sets the reference of the NetworkSecurityGroup resource
 * 
 * @member {array}
 * [backendIPConfiguration.publicIPAddress.ipConfiguration.subnet.networkSecurityGroup.securityRules]
 * Gets or sets Security rules of network security group
 * 
 * @member {array}
 * [backendIPConfiguration.publicIPAddress.ipConfiguration.subnet.networkSecurityGroup.defaultSecurityRules]
 * Gets or sets Default security rules of network security group
 * 
 * @member {array}
 * [backendIPConfiguration.publicIPAddress.ipConfiguration.subnet.networkSecurityGroup.networkInterfaces]
 * Gets collection of references to Network Interfaces
 * 
 * @member {array}
 * [backendIPConfiguration.publicIPAddress.ipConfiguration.subnet.networkSecurityGroup.subnets]
 * Gets collection of references to subnets
 * 
 * @member {string}
 * [backendIPConfiguration.publicIPAddress.ipConfiguration.subnet.networkSecurityGroup.resourceGuid]
 * Gets or sets resource guid property of the network security group resource
 * 
 * @member {string}
 * [backendIPConfiguration.publicIPAddress.ipConfiguration.subnet.networkSecurityGroup.provisioningState]
 * Gets or sets Provisioning state of the PublicIP resource
 * Updating/Deleting/Failed
 * 
 * @member {string}
 * [backendIPConfiguration.publicIPAddress.ipConfiguration.subnet.networkSecurityGroup.etag]
 * Gets a unique read-only string that changes whenever the resource is
 * updated
 * 
 * @member {object}
 * [backendIPConfiguration.publicIPAddress.ipConfiguration.subnet.routeTable]
 * Gets or sets the reference of the RouteTable resource
 * 
 * @member {array}
 * [backendIPConfiguration.publicIPAddress.ipConfiguration.subnet.routeTable.routes]
 * Gets or sets Routes in a Route Table
 * 
 * @member {array}
 * [backendIPConfiguration.publicIPAddress.ipConfiguration.subnet.routeTable.subnets]
 * Gets collection of references to subnets
 * 
 * @member {string}
 * [backendIPConfiguration.publicIPAddress.ipConfiguration.subnet.routeTable.provisioningState]
 * Gets or sets Provisioning state of the resource Updating/Deleting/Failed
 * 
 * @member {string}
 * [backendIPConfiguration.publicIPAddress.ipConfiguration.subnet.routeTable.etag]
 * Gets a unique read-only string that changes whenever the resource is
 * updated
 * 
 * @member {array}
 * [backendIPConfiguration.publicIPAddress.ipConfiguration.subnet.ipConfigurations]
 * Gets array of references to the network interface IP configurations using
 * subnet
 * 
 * @member {string}
 * [backendIPConfiguration.publicIPAddress.ipConfiguration.subnet.provisioningState]
 * Gets or sets Provisioning state of the PublicIP resource
 * Updating/Deleting/Failed
 * 
 * @member {string}
 * [backendIPConfiguration.publicIPAddress.ipConfiguration.subnet.name] Gets
 * name of the resource that is unique within a resource group. This name can
 * be used to access the resource
 * 
 * @member {string}
 * [backendIPConfiguration.publicIPAddress.ipConfiguration.subnet.etag] A
 * unique read-only string that changes whenever the resource is updated
 * 
 * @member {object}
 * [backendIPConfiguration.publicIPAddress.ipConfiguration.publicIPAddress]
 * Gets or sets the reference of the PublicIP resource
 * 
 * @member {string}
 * [backendIPConfiguration.publicIPAddress.ipConfiguration.provisioningState]
 * Gets or sets Provisioning state of the PublicIP resource
 * Updating/Deleting/Failed
 * 
 * @member {string}
 * [backendIPConfiguration.publicIPAddress.ipConfiguration.name] Gets name of
 * the resource that is unique within a resource group. This name can be used
 * to access the resource
 * 
 * @member {string}
 * [backendIPConfiguration.publicIPAddress.ipConfiguration.etag] A unique
 * read-only string that changes whenever the resource is updated
 * 
 * @member {object} [backendIPConfiguration.publicIPAddress.dnsSettings] Gets
 * or sets FQDN of the DNS record associated with the public IP address
 * 
 * @member {string}
 * [backendIPConfiguration.publicIPAddress.dnsSettings.domainNameLabel] Gets
 * or sets the Domain name label.The concatenation of the domain name label
 * and the regionalized DNS zone make up the fully qualified domain name
 * associated with the public IP address. If a domain name label is
 * specified, an A DNS record is created for the public IP in the Microsoft
 * Azure DNS system.
 * 
 * @member {string} [backendIPConfiguration.publicIPAddress.dnsSettings.fqdn]
 * Gets the FQDN, Fully qualified domain name of the A DNS record associated
 * with the public IP. This is the concatenation of the domainNameLabel and
 * the regionalized DNS zone.
 * 
 * @member {string}
 * [backendIPConfiguration.publicIPAddress.dnsSettings.reverseFqdn] Gets or
 * Sests the Reverse FQDN. A user-visible, fully qualified domain name that
 * resolves to this public IP address. If the reverseFqdn is specified, then
 * a PTR DNS record is created pointing from the IP address in the
 * in-addr.arpa domain to the reverse FQDN.
 * 
 * @member {string} [backendIPConfiguration.publicIPAddress.ipAddress]
 * 
 * @member {number}
 * [backendIPConfiguration.publicIPAddress.idleTimeoutInMinutes] Gets or sets
 * the Idletimeout of the public IP address
 * 
 * @member {string} [backendIPConfiguration.publicIPAddress.resourceGuid] Gets
 * or sets resource guid property of the PublicIP resource
 * 
 * @member {string} [backendIPConfiguration.publicIPAddress.provisioningState]
 * Gets or sets Provisioning state of the PublicIP resource
 * Updating/Deleting/Failed
 * 
 * @member {string} [backendIPConfiguration.publicIPAddress.etag] Gets a
 * unique read-only string that changes whenever the resource is updated
 * 
 * @member {string} [backendIPConfiguration.provisioningState]
 * 
 * @member {string} [backendIPConfiguration.name] Gets name of the resource
 * that is unique within a resource group. This name can be used to access
 * the resource
 * 
 * @member {string} [backendIPConfiguration.etag] A unique read-only string
 * that changes whenever the resource is updated
 * 
 * @member {string} [protocol] Gets or sets the transport potocol for the
 * external endpoint. Possible values are Udp or Tcp. Possible values
 * include: 'Udp', 'Tcp'
 * 
 * @member {number} [frontendPort] Gets or sets the port for the external
 * endpoint. You can spcify any port number you choose, but the port numbers
 * specified for each role in the service must be unique. Possible values
 * range between 1 and 65535, inclusive
 * 
 * @member {number} [backendPort] Gets or sets a port used for internal
 * connections on the endpoint. The localPort attribute maps the eternal port
 * of the endpoint to an internal port on a role. This is useful in scenarios
 * where a role must communicate to an internal compotnent on a port that is
 * different from the one that is exposed externally. If not specified, the
 * value of localPort is the same as the port attribute. Set the value of
 * localPort to '*' to automatically assign an unallocated port that is
 * discoverable using the runtime API
 * 
 * @member {number} [idleTimeoutInMinutes] Gets or sets the timeout for the
 * Tcp idle connection. The value can be set between 4 and 30 minutes. The
 * default value is 4 minutes. This emlement is only used when the protocol
 * is set to Tcp
 * 
 * @member {boolean} [enableFloatingIP] Configures a virtual machine's
 * endpoint for the floating IP capability required to configure a SQL
 * AlwaysOn availability Group. This setting is required when using the SQL
 * Always ON availability Groups in SQL server. This setting can't be changed
 * after you create the endpoint
 * 
 * @member {string} [provisioningState] Gets or sets Provisioning state of the
 * PublicIP resource Updating/Deleting/Failed
 * 
 * @member {string} [name] Gets name of the resource that is unique within a
 * resource group. This name can be used to access the resource
 * 
 * @member {string} [etag] A unique read-only string that changes whenever the
 * resource is updated
 * 
 */
export interface InboundNatRule extends SubResource {
    frontendIPConfiguration?: SubResource;
    backendIPConfiguration?: NetworkInterfaceIPConfiguration;
    protocol?: string;
    frontendPort?: number;
    backendPort?: number;
    idleTimeoutInMinutes?: number;
    enableFloatingIP?: boolean;
    provisioningState?: string;
    name?: string;
    etag?: string;
}

/**
 * @class
 * Initializes a new instance of the Subnet class.
 * @constructor
 * Subnet in a VirtualNework resource
 * @member {string} [addressPrefix] Gets or sets Address prefix for the subnet.
 * 
 * @member {object} [networkSecurityGroup] Gets or sets the reference of the
 * NetworkSecurityGroup resource
 * 
 * @member {array} [networkSecurityGroup.securityRules] Gets or sets Security
 * rules of network security group
 * 
 * @member {array} [networkSecurityGroup.defaultSecurityRules] Gets or sets
 * Default security rules of network security group
 * 
 * @member {array} [networkSecurityGroup.networkInterfaces] Gets collection of
 * references to Network Interfaces
 * 
 * @member {array} [networkSecurityGroup.subnets] Gets collection of
 * references to subnets
 * 
 * @member {string} [networkSecurityGroup.resourceGuid] Gets or sets resource
 * guid property of the network security group resource
 * 
 * @member {string} [networkSecurityGroup.provisioningState] Gets or sets
 * Provisioning state of the PublicIP resource Updating/Deleting/Failed
 * 
 * @member {string} [networkSecurityGroup.etag] Gets a unique read-only string
 * that changes whenever the resource is updated
 * 
 * @member {object} [routeTable] Gets or sets the reference of the RouteTable
 * resource
 * 
 * @member {array} [routeTable.routes] Gets or sets Routes in a Route Table
 * 
 * @member {array} [routeTable.subnets] Gets collection of references to
 * subnets
 * 
 * @member {string} [routeTable.provisioningState] Gets or sets Provisioning
 * state of the resource Updating/Deleting/Failed
 * 
 * @member {string} [routeTable.etag] Gets a unique read-only string that
 * changes whenever the resource is updated
 * 
 * @member {array} [ipConfigurations] Gets array of references to the network
 * interface IP configurations using subnet
 * 
 * @member {string} [provisioningState] Gets or sets Provisioning state of the
 * PublicIP resource Updating/Deleting/Failed
 * 
 * @member {string} [name] Gets name of the resource that is unique within a
 * resource group. This name can be used to access the resource
 * 
 * @member {string} [etag] A unique read-only string that changes whenever the
 * resource is updated
 * 
 */
export interface Subnet extends SubResource {
    addressPrefix?: string;
    networkSecurityGroup?: NetworkSecurityGroup;
    routeTable?: RouteTable;
    ipConfigurations?: IPConfiguration[];
    provisioningState?: string;
    name?: string;
    etag?: string;
}

/**
 * @class
 * Initializes a new instance of the Resource class.
 * @constructor
 * @member {string} [id] Resource Id
 * 
 * @member {string} [name] Resource name
 * 
 * @member {string} [type] Resource type
 * 
 * @member {string} [location] Resource location
 * 
 * @member {object} [tags] Resource tags
 * 
 */
export interface Resource extends BaseResource {
    id?: string;
    name?: string;
    type?: string;
    location?: string;
    tags?: { [propertyName: string]: string };
}

/**
 * @class
 * Initializes a new instance of the NetworkSecurityGroup class.
 * @constructor
 * NetworkSecurityGroup resource
 * @member {array} [securityRules] Gets or sets Security rules of network
 * security group
 * 
 * @member {array} [defaultSecurityRules] Gets or sets Default security rules
 * of network security group
 * 
 * @member {array} [networkInterfaces] Gets collection of references to
 * Network Interfaces
 * 
 * @member {array} [subnets] Gets collection of references to subnets
 * 
 * @member {string} [resourceGuid] Gets or sets resource guid property of the
 * network security group resource
 * 
 * @member {string} [provisioningState] Gets or sets Provisioning state of the
 * PublicIP resource Updating/Deleting/Failed
 * 
 * @member {string} [etag] Gets a unique read-only string that changes
 * whenever the resource is updated
 * 
 */
export interface NetworkSecurityGroup extends Resource {
    securityRules?: SecurityRule[];
    defaultSecurityRules?: SecurityRule[];
    networkInterfaces?: NetworkInterface[];
    subnets?: Subnet[];
    resourceGuid?: string;
    provisioningState?: string;
    etag?: string;
}

/**
 * @class
 * Initializes a new instance of the SecurityRule class.
 * @constructor
 * Network security rule
 * @member {string} [description] Gets or sets a description for this rule.
 * Restricted to 140 chars.
 * 
 * @member {string} protocol Gets or sets Network protocol this rule applies
 * to. Can be Tcp, Udp or All(*). Possible values include: 'Tcp', 'Udp', '*'
 * 
 * @member {string} [sourcePortRange] Gets or sets Source Port or Range.
 * Integer or range between 0 and 65535. Asterix '*' can also be used to
 * match all ports.
 * 
 * @member {string} [destinationPortRange] Gets or sets Destination Port or
 * Range. Integer or range between 0 and 65535. Asterix '*' can also be used
 * to match all ports.
 * 
 * @member {string} sourceAddressPrefix Gets or sets source address prefix.
 * CIDR or source IP range. Asterix '*' can also be used to match all source
 * IPs. Default tags such as 'VirtualNetwork', 'AzureLoadBalancer' and
 * 'Internet' can also be used. If this is an ingress rule, specifies where
 * network traffic originates from.
 * 
 * @member {string} destinationAddressPrefix Gets or sets destination address
 * prefix. CIDR or source IP range. Asterix '*' can also be used to match all
 * source IPs. Default tags such as 'VirtualNetwork', 'AzureLoadBalancer' and
 * 'Internet' can also be used.
 * 
 * @member {string} access Gets or sets network traffic is allowed or denied.
 * Possible values are 'Allow' and 'Deny'. Possible values include: 'Allow',
 * 'Deny'
 * 
 * @member {number} [priority] Gets or sets the priority of the rule. The
 * value can be between 100 and 4096. The priority number must be unique for
 * each rule in the collection. The lower the priority number, the higher the
 * priority of the rule.
 * 
 * @member {string} direction Gets or sets the direction of the rule.InBound
 * or Outbound. The direction specifies if rule will be evaluated on incoming
 * or outcoming traffic. Possible values include: 'Inbound', 'Outbound'
 * 
 * @member {string} [provisioningState] Gets or sets Provisioning state of the
 * PublicIP resource Updating/Deleting/Failed
 * 
 * @member {string} [name] Gets name of the resource that is unique within a
 * resource group. This name can be used to access the resource
 * 
 * @member {string} [etag] A unique read-only string that changes whenever the
 * resource is updated
 * 
 */
export interface SecurityRule extends SubResource {
    description?: string;
    protocol: string;
    sourcePortRange?: string;
    destinationPortRange?: string;
    sourceAddressPrefix: string;
    destinationAddressPrefix: string;
    access: string;
    priority?: number;
    direction: string;
    provisioningState?: string;
    name?: string;
    etag?: string;
}

/**
 * @class
 * Initializes a new instance of the NetworkInterface class.
 * @constructor
 * A NetworkInterface in a resource group
 * @member {object} [virtualMachine] Gets or sets the reference of a
 * VirtualMachine
 * 
 * @member {string} [virtualMachine.id] Resource Id
 * 
 * @member {object} [networkSecurityGroup] Gets or sets the reference of the
 * NetworkSecurityGroup resource
 * 
 * @member {array} [networkSecurityGroup.securityRules] Gets or sets Security
 * rules of network security group
 * 
 * @member {array} [networkSecurityGroup.defaultSecurityRules] Gets or sets
 * Default security rules of network security group
 * 
 * @member {array} [networkSecurityGroup.networkInterfaces] Gets collection of
 * references to Network Interfaces
 * 
 * @member {array} [networkSecurityGroup.subnets] Gets collection of
 * references to subnets
 * 
 * @member {string} [networkSecurityGroup.resourceGuid] Gets or sets resource
 * guid property of the network security group resource
 * 
 * @member {string} [networkSecurityGroup.provisioningState] Gets or sets
 * Provisioning state of the PublicIP resource Updating/Deleting/Failed
 * 
 * @member {string} [networkSecurityGroup.etag] Gets a unique read-only string
 * that changes whenever the resource is updated
 * 
 * @member {array} [ipConfigurations] Gets or sets list of IPConfigurations of
 * the NetworkInterface
 * 
 * @member {object} [dnsSettings] Gets or sets DNS Settings in
 * NetworkInterface
 * 
 * @member {array} [dnsSettings.dnsServers] Gets or sets list of DNS servers
 * IP addresses
 * 
 * @member {array} [dnsSettings.appliedDnsServers] Gets or sets list of
 * Applied DNS servers IP addresses
 * 
 * @member {string} [dnsSettings.internalDnsNameLabel] Gets or sets the
 * Internal DNS name
 * 
 * @member {string} [dnsSettings.internalFqdn] Gets or sets the internal fqdn.
 * 
 * @member {string} [dnsSettings.internalDomainNameSuffix] Gets or sets
 * internal domain name suffix of the NIC.
 * 
 * @member {string} [macAddress] Gets the MAC Address of the network interface
 * 
 * @member {boolean} [primary] Gets whether this is a primary NIC on a virtual
 * machine
 * 
 * @member {boolean} [enableIPForwarding] Gets or sets whether IPForwarding is
 * enabled on the NIC
 * 
 * @member {string} [resourceGuid] Gets or sets resource guid property of the
 * network interface resource
 * 
 * @member {string} [provisioningState] Gets or sets Provisioning state of the
 * PublicIP resource Updating/Deleting/Failed
 * 
 * @member {string} [etag] Gets a unique read-only string that changes
 * whenever the resource is updated
 * 
 */
export interface NetworkInterface extends Resource {
    virtualMachine?: SubResource;
    networkSecurityGroup?: NetworkSecurityGroup;
    ipConfigurations?: NetworkInterfaceIPConfiguration[];
    dnsSettings?: NetworkInterfaceDnsSettings;
    macAddress?: string;
    primary?: boolean;
    enableIPForwarding?: boolean;
    resourceGuid?: string;
    provisioningState?: string;
    etag?: string;
}

/**
 * @class
 * Initializes a new instance of the NetworkInterfaceDnsSettings class.
 * @constructor
 * Dns Settings of a network interface
 * @member {array} [dnsServers] Gets or sets list of DNS servers IP addresses
 * 
 * @member {array} [appliedDnsServers] Gets or sets list of Applied DNS
 * servers IP addresses
 * 
 * @member {string} [internalDnsNameLabel] Gets or sets the Internal DNS name
 * 
 * @member {string} [internalFqdn] Gets or sets the internal fqdn.
 * 
 * @member {string} [internalDomainNameSuffix] Gets or sets internal domain
 * name suffix of the NIC.
 * 
 */
export interface NetworkInterfaceDnsSettings {
    dnsServers?: string[];
    appliedDnsServers?: string[];
    internalDnsNameLabel?: string;
    internalFqdn?: string;
    internalDomainNameSuffix?: string;
}

/**
 * @class
 * Initializes a new instance of the RouteTable class.
 * @constructor
 * RouteTable resource
 * @member {array} [routes] Gets or sets Routes in a Route Table
 * 
 * @member {array} [subnets] Gets collection of references to subnets
 * 
 * @member {string} [provisioningState] Gets or sets Provisioning state of the
 * resource Updating/Deleting/Failed
 * 
 * @member {string} [etag] Gets a unique read-only string that changes
 * whenever the resource is updated
 * 
 */
export interface RouteTable extends Resource {
    routes?: Route[];
    subnets?: Subnet[];
    provisioningState?: string;
    etag?: string;
}

/**
 * @class
 * Initializes a new instance of the Route class.
 * @constructor
 * Route resource
 * @member {string} [addressPrefix] Gets or sets the destination CIDR to which
 * the route applies.
 * 
 * @member {string} nextHopType Gets or sets the type of Azure hop the packet
 * should be sent to. Possible values include: 'VirtualNetworkGateway',
 * 'VnetLocal', 'Internet', 'VirtualAppliance', 'None'
 * 
 * @member {string} [nextHopIpAddress] Gets or sets the IP address packets
 * should be forwarded to. Next hop values are only allowed in routes where
 * the next hop type is VirtualAppliance.
 * 
 * @member {string} [provisioningState] Gets or sets Provisioning state of the
 * resource Updating/Deleting/Failed
 * 
 * @member {string} [name] Gets name of the resource that is unique within a
 * resource group. This name can be used to access the resource
 * 
 * @member {string} [etag] A unique read-only string that changes whenever the
 * resource is updated
 * 
 */
export interface Route extends SubResource {
    addressPrefix?: string;
    nextHopType: string;
    nextHopIpAddress?: string;
    provisioningState?: string;
    name?: string;
    etag?: string;
}

/**
 * @class
 * Initializes a new instance of the IPConfiguration class.
 * @constructor
 * IPConfiguration
 * @member {string} [privateIPAddress] Gets or sets the privateIPAddress of
 * the IP Configuration
 * 
 * @member {string} [privateIPAllocationMethod] Gets or sets PrivateIP
 * allocation method (Static/Dynamic). Possible values include: 'Static',
 * 'Dynamic'
 * 
 * @member {object} [subnet] Gets or sets the reference of the subnet resource
 * 
 * @member {string} [subnet.addressPrefix] Gets or sets Address prefix for the
 * subnet.
 * 
 * @member {object} [subnet.networkSecurityGroup] Gets or sets the reference
 * of the NetworkSecurityGroup resource
 * 
 * @member {array} [subnet.networkSecurityGroup.securityRules] Gets or sets
 * Security rules of network security group
 * 
 * @member {array} [subnet.networkSecurityGroup.defaultSecurityRules] Gets or
 * sets Default security rules of network security group
 * 
 * @member {array} [subnet.networkSecurityGroup.networkInterfaces] Gets
 * collection of references to Network Interfaces
 * 
 * @member {array} [subnet.networkSecurityGroup.subnets] Gets collection of
 * references to subnets
 * 
 * @member {string} [subnet.networkSecurityGroup.resourceGuid] Gets or sets
 * resource guid property of the network security group resource
 * 
 * @member {string} [subnet.networkSecurityGroup.provisioningState] Gets or
 * sets Provisioning state of the PublicIP resource Updating/Deleting/Failed
 * 
 * @member {string} [subnet.networkSecurityGroup.etag] Gets a unique read-only
 * string that changes whenever the resource is updated
 * 
 * @member {object} [subnet.routeTable] Gets or sets the reference of the
 * RouteTable resource
 * 
 * @member {array} [subnet.routeTable.routes] Gets or sets Routes in a Route
 * Table
 * 
 * @member {array} [subnet.routeTable.subnets] Gets collection of references
 * to subnets
 * 
 * @member {string} [subnet.routeTable.provisioningState] Gets or sets
 * Provisioning state of the resource Updating/Deleting/Failed
 * 
 * @member {string} [subnet.routeTable.etag] Gets a unique read-only string
 * that changes whenever the resource is updated
 * 
 * @member {array} [subnet.ipConfigurations] Gets array of references to the
 * network interface IP configurations using subnet
 * 
 * @member {string} [subnet.provisioningState] Gets or sets Provisioning state
 * of the PublicIP resource Updating/Deleting/Failed
 * 
 * @member {string} [subnet.name] Gets name of the resource that is unique
 * within a resource group. This name can be used to access the resource
 * 
 * @member {string} [subnet.etag] A unique read-only string that changes
 * whenever the resource is updated
 * 
 * @member {object} [publicIPAddress] Gets or sets the reference of the
 * PublicIP resource
 * 
 * @member {string} [publicIPAddress.publicIPAllocationMethod] Gets or sets
 * PublicIP allocation method (Static/Dynamic). Possible values include:
 * 'Static', 'Dynamic'
 * 
 * @member {string} [publicIPAddress.publicIPAddressVersion] Gets or sets
 * PublicIP address version (IPv4/IPv6). Possible values include: 'IPv4',
 * 'IPv6'
 * 
 * @member {object} [publicIPAddress.ipConfiguration]
 * 
 * @member {object} [publicIPAddress.dnsSettings] Gets or sets FQDN of the DNS
 * record associated with the public IP address
 * 
 * @member {string} [publicIPAddress.dnsSettings.domainNameLabel] Gets or sets
 * the Domain name label.The concatenation of the domain name label and the
 * regionalized DNS zone make up the fully qualified domain name associated
 * with the public IP address. If a domain name label is specified, an A DNS
 * record is created for the public IP in the Microsoft Azure DNS system.
 * 
 * @member {string} [publicIPAddress.dnsSettings.fqdn] Gets the FQDN, Fully
 * qualified domain name of the A DNS record associated with the public IP.
 * This is the concatenation of the domainNameLabel and the regionalized DNS
 * zone.
 * 
 * @member {string} [publicIPAddress.dnsSettings.reverseFqdn] Gets or Sests
 * the Reverse FQDN. A user-visible, fully qualified domain name that
 * resolves to this public IP address. If the reverseFqdn is specified, then
 * a PTR DNS record is created pointing from the IP address in the
 * in-addr.arpa domain to the reverse FQDN.
 * 
 * @member {string} [publicIPAddress.ipAddress]
 * 
 * @member {number} [publicIPAddress.idleTimeoutInMinutes] Gets or sets the
 * Idletimeout of the public IP address
 * 
 * @member {string} [publicIPAddress.resourceGuid] Gets or sets resource guid
 * property of the PublicIP resource
 * 
 * @member {string} [publicIPAddress.provisioningState] Gets or sets
 * Provisioning state of the PublicIP resource Updating/Deleting/Failed
 * 
 * @member {string} [publicIPAddress.etag] Gets a unique read-only string that
 * changes whenever the resource is updated
 * 
 * @member {string} [provisioningState] Gets or sets Provisioning state of the
 * PublicIP resource Updating/Deleting/Failed
 * 
 * @member {string} [name] Gets name of the resource that is unique within a
 * resource group. This name can be used to access the resource
 * 
 * @member {string} [etag] A unique read-only string that changes whenever the
 * resource is updated
 * 
 */
export interface IPConfiguration extends SubResource {
    privateIPAddress?: string;
    privateIPAllocationMethod?: string;
    subnet?: Subnet;
    publicIPAddress?: PublicIPAddress;
    provisioningState?: string;
    name?: string;
    etag?: string;
}

/**
 * @class
 * Initializes a new instance of the PublicIPAddress class.
 * @constructor
 * PublicIPAddress resource
 * @member {string} [publicIPAllocationMethod] Gets or sets PublicIP
 * allocation method (Static/Dynamic). Possible values include: 'Static',
 * 'Dynamic'
 * 
 * @member {string} [publicIPAddressVersion] Gets or sets PublicIP address
 * version (IPv4/IPv6). Possible values include: 'IPv4', 'IPv6'
 * 
 * @member {object} [ipConfiguration]
 * 
 * @member {string} [ipConfiguration.privateIPAddress] Gets or sets the
 * privateIPAddress of the IP Configuration
 * 
 * @member {string} [ipConfiguration.privateIPAllocationMethod] Gets or sets
 * PrivateIP allocation method (Static/Dynamic). Possible values include:
 * 'Static', 'Dynamic'
 * 
 * @member {object} [ipConfiguration.subnet] Gets or sets the reference of the
 * subnet resource
 * 
 * @member {string} [ipConfiguration.subnet.addressPrefix] Gets or sets
 * Address prefix for the subnet.
 * 
 * @member {object} [ipConfiguration.subnet.networkSecurityGroup] Gets or sets
 * the reference of the NetworkSecurityGroup resource
 * 
 * @member {array} [ipConfiguration.subnet.networkSecurityGroup.securityRules]
 * Gets or sets Security rules of network security group
 * 
 * @member {array}
 * [ipConfiguration.subnet.networkSecurityGroup.defaultSecurityRules] Gets or
 * sets Default security rules of network security group
 * 
 * @member {array}
 * [ipConfiguration.subnet.networkSecurityGroup.networkInterfaces] Gets
 * collection of references to Network Interfaces
 * 
 * @member {array} [ipConfiguration.subnet.networkSecurityGroup.subnets] Gets
 * collection of references to subnets
 * 
 * @member {string} [ipConfiguration.subnet.networkSecurityGroup.resourceGuid]
 * Gets or sets resource guid property of the network security group resource
 * 
 * @member {string}
 * [ipConfiguration.subnet.networkSecurityGroup.provisioningState] Gets or
 * sets Provisioning state of the PublicIP resource Updating/Deleting/Failed
 * 
 * @member {string} [ipConfiguration.subnet.networkSecurityGroup.etag] Gets a
 * unique read-only string that changes whenever the resource is updated
 * 
 * @member {object} [ipConfiguration.subnet.routeTable] Gets or sets the
 * reference of the RouteTable resource
 * 
 * @member {array} [ipConfiguration.subnet.routeTable.routes] Gets or sets
 * Routes in a Route Table
 * 
 * @member {array} [ipConfiguration.subnet.routeTable.subnets] Gets collection
 * of references to subnets
 * 
 * @member {string} [ipConfiguration.subnet.routeTable.provisioningState] Gets
 * or sets Provisioning state of the resource Updating/Deleting/Failed
 * 
 * @member {string} [ipConfiguration.subnet.routeTable.etag] Gets a unique
 * read-only string that changes whenever the resource is updated
 * 
 * @member {array} [ipConfiguration.subnet.ipConfigurations] Gets array of
 * references to the network interface IP configurations using subnet
 * 
 * @member {string} [ipConfiguration.subnet.provisioningState] Gets or sets
 * Provisioning state of the PublicIP resource Updating/Deleting/Failed
 * 
 * @member {string} [ipConfiguration.subnet.name] Gets name of the resource
 * that is unique within a resource group. This name can be used to access
 * the resource
 * 
 * @member {string} [ipConfiguration.subnet.etag] A unique read-only string
 * that changes whenever the resource is updated
 * 
 * @member {object} [ipConfiguration.publicIPAddress] Gets or sets the
 * reference of the PublicIP resource
 * 
 * @member {string} [ipConfiguration.provisioningState] Gets or sets
 * Provisioning state of the PublicIP resource Updating/Deleting/Failed
 * 
 * @member {string} [ipConfiguration.name] Gets name of the resource that is
 * unique within a resource group. This name can be used to access the
 * resource
 * 
 * @member {string} [ipConfiguration.etag] A unique read-only string that
 * changes whenever the resource is updated
 * 
 * @member {object} [dnsSettings] Gets or sets FQDN of the DNS record
 * associated with the public IP address
 * 
 * @member {string} [dnsSettings.domainNameLabel] Gets or sets the Domain name
 * label.The concatenation of the domain name label and the regionalized DNS
 * zone make up the fully qualified domain name associated with the public IP
 * address. If a domain name label is specified, an A DNS record is created
 * for the public IP in the Microsoft Azure DNS system.
 * 
 * @member {string} [dnsSettings.fqdn] Gets the FQDN, Fully qualified domain
 * name of the A DNS record associated with the public IP. This is the
 * concatenation of the domainNameLabel and the regionalized DNS zone.
 * 
 * @member {string} [dnsSettings.reverseFqdn] Gets or Sests the Reverse FQDN.
 * A user-visible, fully qualified domain name that resolves to this public
 * IP address. If the reverseFqdn is specified, then a PTR DNS record is
 * created pointing from the IP address in the in-addr.arpa domain to the
 * reverse FQDN.
 * 
 * @member {string} [ipAddress]
 * 
 * @member {number} [idleTimeoutInMinutes] Gets or sets the Idletimeout of the
 * public IP address
 * 
 * @member {string} [resourceGuid] Gets or sets resource guid property of the
 * PublicIP resource
 * 
 * @member {string} [provisioningState] Gets or sets Provisioning state of the
 * PublicIP resource Updating/Deleting/Failed
 * 
 * @member {string} [etag] Gets a unique read-only string that changes
 * whenever the resource is updated
 * 
 */
export interface PublicIPAddress extends Resource {
    publicIPAllocationMethod?: string;
    publicIPAddressVersion?: string;
    ipConfiguration?: IPConfiguration;
    dnsSettings?: PublicIPAddressDnsSettings;
    ipAddress?: string;
    idleTimeoutInMinutes?: number;
    resourceGuid?: string;
    provisioningState?: string;
    etag?: string;
}

/**
 * @class
 * Initializes a new instance of the PublicIPAddressDnsSettings class.
 * @constructor
 * Contains FQDN of the DNS record associated with the public IP address
 * @member {string} [domainNameLabel] Gets or sets the Domain name label.The
 * concatenation of the domain name label and the regionalized DNS zone make
 * up the fully qualified domain name associated with the public IP address.
 * If a domain name label is specified, an A DNS record is created for the
 * public IP in the Microsoft Azure DNS system.
 * 
 * @member {string} [fqdn] Gets the FQDN, Fully qualified domain name of the A
 * DNS record associated with the public IP. This is the concatenation of the
 * domainNameLabel and the regionalized DNS zone.
 * 
 * @member {string} [reverseFqdn] Gets or Sests the Reverse FQDN. A
 * user-visible, fully qualified domain name that resolves to this public IP
 * address. If the reverseFqdn is specified, then a PTR DNS record is created
 * pointing from the IP address in the in-addr.arpa domain to the reverse
 * FQDN.
 * 
 */
export interface PublicIPAddressDnsSettings {
    domainNameLabel?: string;
    fqdn?: string;
    reverseFqdn?: string;
}

/**
 * @class
 * Initializes a new instance of the ApplicationGatewayBackendHttpSettings class.
 * @constructor
 * Backend address pool settings of application gateway
 * @member {number} [port] Gets or sets the port
 * 
 * @member {string} [protocol] Gets or sets the protocol. Possible values
 * include: 'Http', 'Https'
 * 
 * @member {string} [cookieBasedAffinity] Gets or sets the cookie affinity.
 * Possible values include: 'Enabled', 'Disabled'
 * 
 * @member {number} [requestTimeout] Gets or sets request timeout
 * 
 * @member {object} [probe] Gets or sets probe resource of application gateway
 * 
 * @member {string} [probe.id] Resource Id
 * 
 * @member {string} [provisioningState] Gets or sets Provisioning state of the
 * backend http settings resource Updating/Deleting/Failed
 * 
 * @member {string} [name] Gets name of the resource that is unique within a
 * resource group. This name can be used to access the resource
 * 
 * @member {string} [etag] A unique read-only string that changes whenever the
 * resource is updated
 * 
 */
export interface ApplicationGatewayBackendHttpSettings extends SubResource {
    port?: number;
    protocol?: string;
    cookieBasedAffinity?: string;
    requestTimeout?: number;
    probe?: SubResource;
    provisioningState?: string;
    name?: string;
    etag?: string;
}

/**
 * @class
 * Initializes a new instance of the ApplicationGatewayHttpListener class.
 * @constructor
 * Http listener of application gateway
 * @member {object} [frontendIPConfiguration] Gets or sets frontend IP
 * configuration resource of application gateway
 * 
 * @member {string} [frontendIPConfiguration.id] Resource Id
 * 
 * @member {object} [frontendPort] Gets or sets frontend port resource of
 * application gateway
 * 
 * @member {string} [frontendPort.id] Resource Id
 * 
 * @member {string} [protocol] Gets or sets the protocol. Possible values
 * include: 'Http', 'Https'
 * 
 * @member {string} [hostName] Gets or sets the host name of http listener
 * 
 * @member {object} [sslCertificate] Gets or sets ssl certificate resource of
 * application gateway
 * 
 * @member {string} [sslCertificate.id] Resource Id
 * 
 * @member {boolean} [requireServerNameIndication] Gets or sets the
 * requireServerNameIndication of http listener
 * 
 * @member {string} [provisioningState] Gets or sets Provisioning state of the
 * http listener resource Updating/Deleting/Failed
 * 
 * @member {string} [name] Gets name of the resource that is unique within a
 * resource group. This name can be used to access the resource
 * 
 * @member {string} [etag] A unique read-only string that changes whenever the
 * resource is updated
 * 
 */
export interface ApplicationGatewayHttpListener extends SubResource {
    frontendIPConfiguration?: SubResource;
    frontendPort?: SubResource;
    protocol?: string;
    hostName?: string;
    sslCertificate?: SubResource;
    requireServerNameIndication?: boolean;
    provisioningState?: string;
    name?: string;
    etag?: string;
}

/**
 * @class
 * Initializes a new instance of the ApplicationGatewayPathRule class.
 * @constructor
 * Path rule of URL path map of application gateway
 * @member {array} [paths] Gets or sets the path rules of URL path map
 * 
 * @member {object} [backendAddressPool] Gets or sets backend address pool
 * resource of URL path map
 * 
 * @member {string} [backendAddressPool.id] Resource Id
 * 
 * @member {object} [backendHttpSettings] Gets or sets backend http settings
 * resource of URL path map
 * 
 * @member {string} [backendHttpSettings.id] Resource Id
 * 
 * @member {string} [provisioningState] Gets or sets path rule of URL path map
 * resource Updating/Deleting/Failed
 * 
 * @member {string} [name] Gets name of the resource that is unique within a
 * resource group. This name can be used to access the resource
 * 
 * @member {string} [etag] A unique read-only string that changes whenever the
 * resource is updated
 * 
 */
export interface ApplicationGatewayPathRule extends SubResource {
    paths?: string[];
    backendAddressPool?: SubResource;
    backendHttpSettings?: SubResource;
    provisioningState?: string;
    name?: string;
    etag?: string;
}

/**
 * @class
 * Initializes a new instance of the ApplicationGatewayProbe class.
 * @constructor
 * Probe of application gateway
 * @member {string} [protocol] Gets or sets the protocol. Possible values
 * include: 'Http', 'Https'
 * 
 * @member {string} [host] Gets or sets the host to send probe to
 * 
 * @member {string} [path] Gets or sets the relative path of probe
 * 
 * @member {number} [interval] Gets or sets probing interval in seconds
 * 
 * @member {number} [timeout] Gets or sets probing timeout in seconds
 * 
 * @member {number} [unhealthyThreshold] Gets or sets probing unhealthy
 * threshold
 * 
 * @member {string} [provisioningState] Gets or sets Provisioning state of the
 * backend http settings resource Updating/Deleting/Failed
 * 
 * @member {string} [name] Gets name of the resource that is unique within a
 * resource group. This name can be used to access the resource
 * 
 * @member {string} [etag] A unique read-only string that changes whenever the
 * resource is updated
 * 
 */
export interface ApplicationGatewayProbe extends SubResource {
    protocol?: string;
    host?: string;
    path?: string;
    interval?: number;
    timeout?: number;
    unhealthyThreshold?: number;
    provisioningState?: string;
    name?: string;
    etag?: string;
}

/**
 * @class
 * Initializes a new instance of the ApplicationGatewayRequestRoutingRule class.
 * @constructor
 * Request routing rule of application gateway
 * @member {string} [ruleType] Gets or sets the rule type. Possible values
 * include: 'Basic', 'PathBasedRouting'
 * 
 * @member {object} [backendAddressPool] Gets or sets backend address pool
 * resource of application gateway
 * 
 * @member {string} [backendAddressPool.id] Resource Id
 * 
 * @member {object} [backendHttpSettings] Gets or sets frontend port resource
 * of application gateway
 * 
 * @member {string} [backendHttpSettings.id] Resource Id
 * 
 * @member {object} [httpListener] Gets or sets http listener resource of
 * application gateway
 * 
 * @member {string} [httpListener.id] Resource Id
 * 
 * @member {object} [urlPathMap] Gets or sets url path map resource of
 * application gateway
 * 
 * @member {string} [urlPathMap.id] Resource Id
 * 
 * @member {string} [provisioningState] Gets or sets Provisioning state of the
 * request routing rule resource Updating/Deleting/Failed
 * 
 * @member {string} [name] Gets name of the resource that is unique within a
 * resource group. This name can be used to access the resource
 * 
 * @member {string} [etag] A unique read-only string that changes whenever the
 * resource is updated
 * 
 */
export interface ApplicationGatewayRequestRoutingRule extends SubResource {
    ruleType?: string;
    backendAddressPool?: SubResource;
    backendHttpSettings?: SubResource;
    httpListener?: SubResource;
    urlPathMap?: SubResource;
    provisioningState?: string;
    name?: string;
    etag?: string;
}

/**
 * @class
 * Initializes a new instance of the ApplicationGatewayUrlPathMap class.
 * @constructor
 * UrlPathMap of application gateway
 * @member {object} [defaultBackendAddressPool] Gets or sets default backend
 * address pool resource of URL path map
 * 
 * @member {string} [defaultBackendAddressPool.id] Resource Id
 * 
 * @member {object} [defaultBackendHttpSettings] Gets or sets default backend
 * http settings resource of URL path map
 * 
 * @member {string} [defaultBackendHttpSettings.id] Resource Id
 * 
 * @member {array} [pathRules] Gets or sets path rule of URL path map resource
 * 
 * @member {string} [provisioningState] Gets or sets Provisioning state of the
 * backend http settings resource Updating/Deleting/Failed
 * 
 * @member {string} [name] Gets name of the resource that is unique within a
 * resource group. This name can be used to access the resource
 * 
 * @member {string} [etag] A unique read-only string that changes whenever the
 * resource is updated
 * 
 */
export interface ApplicationGatewayUrlPathMap extends SubResource {
    defaultBackendAddressPool?: SubResource;
    defaultBackendHttpSettings?: SubResource;
    pathRules?: ApplicationGatewayPathRule[];
    provisioningState?: string;
    name?: string;
    etag?: string;
}

/**
 * @class
 * Initializes a new instance of the ApplicationGateway class.
 * @constructor
 * ApplicationGateways resource
 * @member {object} [sku] Gets or sets sku of application gateway resource
 * 
 * @member {string} [sku.name] Gets or sets name of application gateway SKU.
 * Possible values include: 'Standard_Small', 'Standard_Medium',
 * 'Standard_Large'
 * 
 * @member {string} [sku.tier] Gets or sets tier of application gateway.
 * Possible values include: 'Standard'
 * 
 * @member {number} [sku.capacity] Gets or sets capacity (instance count) of
 * application gateway
 * 
 * @member {string} [operationalState] Gets operational state of application
 * gateway resource. Possible values include: 'Stopped', 'Starting',
 * 'Running', 'Stopping'
 * 
 * @member {array} [gatewayIPConfigurations] Gets or sets subnets of
 * application gateway resource
 * 
 * @member {array} [sslCertificates] Gets or sets ssl certificates of
 * application gateway resource
 * 
 * @member {array} [frontendIPConfigurations] Gets or sets frontend IP
 * addresses of application gateway resource
 * 
 * @member {array} [frontendPorts] Gets or sets frontend ports of application
 * gateway resource
 * 
 * @member {array} [probes] Gets or sets probes of application gateway resource
 * 
 * @member {array} [backendAddressPools] Gets or sets backend address pool of
 * application gateway resource
 * 
 * @member {array} [backendHttpSettingsCollection] Gets or sets backend http
 * settings of application gateway resource
 * 
 * @member {array} [httpListeners] Gets or sets HTTP listeners of application
 * gateway resource
 * 
 * @member {array} [urlPathMaps] Gets or sets URL path map of application
 * gateway resource
 * 
 * @member {array} [requestRoutingRules] Gets or sets request routing rules of
 * application gateway resource
 * 
 * @member {string} [resourceGuid] Gets or sets resource guid property of the
 * ApplicationGateway resource
 * 
 * @member {string} [provisioningState] Gets or sets Provisioning state of the
 * ApplicationGateway resource Updating/Deleting/Failed
 * 
 * @member {string} [etag] Gets a unique read-only string that changes
 * whenever the resource is updated
 * 
 */
export interface ApplicationGateway extends Resource {
    sku?: ApplicationGatewaySku;
    operationalState?: string;
    gatewayIPConfigurations?: ApplicationGatewayIPConfiguration[];
    sslCertificates?: ApplicationGatewaySslCertificate[];
    frontendIPConfigurations?: ApplicationGatewayFrontendIPConfiguration[];
    frontendPorts?: ApplicationGatewayFrontendPort[];
    probes?: ApplicationGatewayProbe[];
    backendAddressPools?: ApplicationGatewayBackendAddressPool[];
    backendHttpSettingsCollection?: ApplicationGatewayBackendHttpSettings[];
    httpListeners?: ApplicationGatewayHttpListener[];
    urlPathMaps?: ApplicationGatewayUrlPathMap[];
    requestRoutingRules?: ApplicationGatewayRequestRoutingRule[];
    resourceGuid?: string;
    provisioningState?: string;
    etag?: string;
}

/**
 * @class
 * Initializes a new instance of the ExpressRouteCircuitAuthorization class.
 * @constructor
 * Authorization in a ExpressRouteCircuit resource
 * @member {string} [authorizationKey] Gets or sets the authorization key
 * 
 * @member {string} [authorizationUseStatus] Gets or sets
 * AuthorizationUseStatus. Possible values include: 'Available', 'InUse'
 * 
 * @member {string} [provisioningState] Gets or sets Provisioning state of the
 * PublicIP resource Updating/Deleting/Failed
 * 
 * @member {string} [name] Gets name of the resource that is unique within a
 * resource group. This name can be used to access the resource
 * 
 * @member {string} [etag] A unique read-only string that changes whenever the
 * resource is updated
 * 
 */
export interface ExpressRouteCircuitAuthorization extends SubResource {
    authorizationKey?: string;
    authorizationUseStatus?: string;
    provisioningState?: string;
    name?: string;
    etag?: string;
}

/**
 * @class
 * Initializes a new instance of the ExpressRouteCircuitPeeringConfig class.
 * @constructor
 * Specfies the peering config
 * @member {array} [advertisedPublicPrefixes] Gets or sets the reference of
 * AdvertisedPublicPrefixes
 * 
 * @member {string} [advertisedPublicPrefixesState] Gets or sets
 * AdvertisedPublicPrefixState of the Peering resource . Possible values
 * include: 'NotConfigured', 'Configuring', 'Configured', 'ValidationNeeded'
 * 
 * @member {number} [customerASN] Gets or Sets CustomerAsn of the peering.
 * 
 * @member {string} [routingRegistryName] Gets or Sets RoutingRegistryName of
 * the config.
 * 
 */
export interface ExpressRouteCircuitPeeringConfig {
    advertisedPublicPrefixes?: string[];
    advertisedPublicPrefixesState?: string;
    customerASN?: number;
    routingRegistryName?: string;
}

/**
 * @class
 * Initializes a new instance of the ExpressRouteCircuitStats class.
 * @constructor
 * Contains Stats associated with the peering
 * @member {number} [primarybytesIn] Gets BytesIn of the peering.
 * 
 * @member {number} [primarybytesOut] Gets BytesOut of the peering.
 * 
 * @member {number} [secondarybytesIn] Gets BytesIn of the peering.
 * 
 * @member {number} [secondarybytesOut] Gets BytesOut of the peering.
 * 
 */
export interface ExpressRouteCircuitStats {
    primarybytesIn?: number;
    primarybytesOut?: number;
    secondarybytesIn?: number;
    secondarybytesOut?: number;
}

/**
 * @class
 * Initializes a new instance of the ExpressRouteCircuitPeering class.
 * @constructor
 * Peering in a ExpressRouteCircuit resource
 * @member {string} [peeringType] Gets or sets PeeringType. Possible values
 * include: 'AzurePublicPeering', 'AzurePrivatePeering', 'MicrosoftPeering'
 * 
 * @member {string} [state] Gets or sets state of Peering. Possible values
 * include: 'Disabled', 'Enabled'
 * 
 * @member {number} [azureASN] Gets or sets the azure ASN
 * 
 * @member {number} [peerASN] Gets or sets the peer ASN
 * 
 * @member {string} [primaryPeerAddressPrefix] Gets or sets the primary
 * address prefix
 * 
 * @member {string} [secondaryPeerAddressPrefix] Gets or sets the secondary
 * address prefix
 * 
 * @member {string} [primaryAzurePort] Gets or sets the primary port
 * 
 * @member {string} [secondaryAzurePort] Gets or sets the secondary port
 * 
 * @member {string} [sharedKey] Gets or sets the shared key
 * 
 * @member {number} [vlanId] Gets or sets the vlan id
 * 
 * @member {object} [microsoftPeeringConfig] Gets or sets the mircosoft
 * peering config
 * 
 * @member {array} [microsoftPeeringConfig.advertisedPublicPrefixes] Gets or
 * sets the reference of AdvertisedPublicPrefixes
 * 
 * @member {string} [microsoftPeeringConfig.advertisedPublicPrefixesState]
 * Gets or sets AdvertisedPublicPrefixState of the Peering resource .
 * Possible values include: 'NotConfigured', 'Configuring', 'Configured',
 * 'ValidationNeeded'
 * 
 * @member {number} [microsoftPeeringConfig.customerASN] Gets or Sets
 * CustomerAsn of the peering.
 * 
 * @member {string} [microsoftPeeringConfig.routingRegistryName] Gets or Sets
 * RoutingRegistryName of the config.
 * 
 * @member {object} [stats] Gets or peering stats
 * 
 * @member {number} [stats.primarybytesIn] Gets BytesIn of the peering.
 * 
 * @member {number} [stats.primarybytesOut] Gets BytesOut of the peering.
 * 
 * @member {number} [stats.secondarybytesIn] Gets BytesIn of the peering.
 * 
 * @member {number} [stats.secondarybytesOut] Gets BytesOut of the peering.
 * 
 * @member {string} [provisioningState] Gets or sets Provisioning state of the
 * PublicIP resource Updating/Deleting/Failed
 * 
 * @member {string} [name] Gets name of the resource that is unique within a
 * resource group. This name can be used to access the resource
 * 
 * @member {string} [etag] A unique read-only string that changes whenever the
 * resource is updated
 * 
 */
export interface ExpressRouteCircuitPeering extends SubResource {
    peeringType?: string;
    state?: string;
    azureASN?: number;
    peerASN?: number;
    primaryPeerAddressPrefix?: string;
    secondaryPeerAddressPrefix?: string;
    primaryAzurePort?: string;
    secondaryAzurePort?: string;
    sharedKey?: string;
    vlanId?: number;
    microsoftPeeringConfig?: ExpressRouteCircuitPeeringConfig;
    stats?: ExpressRouteCircuitStats;
    provisioningState?: string;
    name?: string;
    etag?: string;
}

/**
 * @class
 * Initializes a new instance of the ExpressRouteCircuitSku class.
 * @constructor
 * Contains sku in an ExpressRouteCircuit
 * @member {string} [name] Gets or sets name of the sku.
 * 
 * @member {string} [tier] Gets or sets tier of the sku. Possible values
 * include: 'Standard', 'Premium'
 * 
 * @member {string} [family] Gets or sets family of the sku. Possible values
 * include: 'UnlimitedData', 'MeteredData'
 * 
 */
export interface ExpressRouteCircuitSku {
    name?: string;
    tier?: string;
    family?: string;
}

/**
 * @class
 * Initializes a new instance of the ExpressRouteCircuitServiceProviderProperties class.
 * @constructor
 * Contains ServiceProviderProperties in an ExpressRouteCircuit
 * @member {string} [serviceProviderName] Gets or sets serviceProviderName.
 * 
 * @member {string} [peeringLocation] Gets or sets peering location.
 * 
 * @member {number} [bandwidthInMbps] Gets or sets BandwidthInMbps.
 * 
 */
export interface ExpressRouteCircuitServiceProviderProperties {
    serviceProviderName?: string;
    peeringLocation?: string;
    bandwidthInMbps?: number;
}

/**
 * @class
 * Initializes a new instance of the ExpressRouteCircuit class.
 * @constructor
 * ExpressRouteCircuit resource
 * @member {object} [sku] Gets or sets sku
 * 
 * @member {string} [sku.name] Gets or sets name of the sku.
 * 
 * @member {string} [sku.tier] Gets or sets tier of the sku. Possible values
 * include: 'Standard', 'Premium'
 * 
 * @member {string} [sku.family] Gets or sets family of the sku. Possible
 * values include: 'UnlimitedData', 'MeteredData'
 * 
 * @member {boolean} [allowClassicOperations] allow classic operations
 * 
 * @member {string} [circuitProvisioningState] Gets or sets
 * CircuitProvisioningState state of the resource
 * 
 * @member {string} [serviceProviderProvisioningState] Gets or sets
 * ServiceProviderProvisioningState state of the resource . Possible values
 * include: 'NotProvisioned', 'Provisioning', 'Provisioned', 'Deprovisioning'
 * 
 * @member {array} [authorizations] Gets or sets list of authorizations
 * 
 * @member {array} [peerings] Gets or sets list of peerings
 * 
 * @member {string} [serviceKey] Gets or sets ServiceKey
 * 
 * @member {string} [serviceProviderNotes] Gets or sets ServiceProviderNotes
 * 
 * @member {object} [serviceProviderProperties] Gets or sets
 * ServiceProviderProperties
 * 
 * @member {string} [serviceProviderProperties.serviceProviderName] Gets or
 * sets serviceProviderName.
 * 
 * @member {string} [serviceProviderProperties.peeringLocation] Gets or sets
 * peering location.
 * 
 * @member {number} [serviceProviderProperties.bandwidthInMbps] Gets or sets
 * BandwidthInMbps.
 * 
 * @member {string} [provisioningState] Gets or sets Provisioning state of the
 * PublicIP resource Updating/Deleting/Failed
 * 
 * @member {string} [etag] Gets a unique read-only string that changes
 * whenever the resource is updated
 * 
 */
export interface ExpressRouteCircuit extends Resource {
    sku?: ExpressRouteCircuitSku;
    allowClassicOperations?: boolean;
    circuitProvisioningState?: string;
    serviceProviderProvisioningState?: string;
    authorizations?: ExpressRouteCircuitAuthorization[];
    peerings?: ExpressRouteCircuitPeering[];
    serviceKey?: string;
    serviceProviderNotes?: string;
    serviceProviderProperties?: ExpressRouteCircuitServiceProviderProperties;
    provisioningState?: string;
    etag?: string;
}

/**
 * @class
 * Initializes a new instance of the ExpressRouteCircuitArpTable class.
 * @constructor
 * The arp table associated with the ExpressRouteCircuit
 * @member {number} [age] Age.
 * 
 * @member {string} [interface] Interface.
 * 
 * @member {string} [ipAddress] Gets ipAddress.
 * 
 * @member {string} [macAddress] Gets macAddress.
 * 
 */
export interface ExpressRouteCircuitArpTable {
    age?: number;
    interface?: string;
    ipAddress?: string;
    macAddress?: string;
}

/**
 * @class
 * Initializes a new instance of the ExpressRouteCircuitsArpTableListResult class.
 * @constructor
 * Response for ListArpTable associated with the Express Route Circuits Api
 * @member {array} [value] Gets List of ArpTable
 * 
 * @member {string} [nextLink] Gets the URL to get the next set of results.
 * 
 */
export interface ExpressRouteCircuitsArpTableListResult {
    value?: ExpressRouteCircuitArpTable[];
    nextLink?: string;
}

/**
 * @class
 * Initializes a new instance of the ExpressRouteCircuitRoutesTable class.
 * @constructor
 * The routes table associated with the ExpressRouteCircuit
 * @member {string} [network] network.
 * 
 * @member {string} [nextHop] nextHop
 * 
 * @member {string} [locPrf] locPrf.
 * 
 * @member {number} [weight] weight.
 * 
 * @member {string} [path] path .
 * 
 */
export interface ExpressRouteCircuitRoutesTable {
    network?: string;
    nextHop?: string;
    locPrf?: string;
    weight?: number;
    path?: string;
}

/**
 * @class
 * Initializes a new instance of the ExpressRouteCircuitsRoutesTableListResult class.
 * @constructor
 * Response for ListRoutesTable associated with the Express Route Circuits Api
 * @member {array} [value] Gets List of RoutesTable
 * 
 * @member {string} [nextLink] Gets the URL to get the next set of results.
 * 
 */
export interface ExpressRouteCircuitsRoutesTableListResult {
    value?: ExpressRouteCircuitRoutesTable[];
    nextLink?: string;
}

/**
 * @class
 * Initializes a new instance of the ExpressRouteCircuitRoutesTableSummary class.
 * @constructor
 * The routes table associated with the ExpressRouteCircuit
 * @member {string} [neighbor] Neighbor.
 * 
 * @member {number} [v] BGP version number spoken to the neighbor.
 * 
 * @member {number} [as] Autonomous system number.
 * 
 * @member {string} [upDown] The length of time that the BGP session has been
 * in the Established state, or the current status if not in the Established
 * state.
 * 
 * @member {string} [statePfxRcd] Current state of the BGP session, and the
 * number of prefixes that have been received from a neighbor or peer group.
 * 
 */
export interface ExpressRouteCircuitRoutesTableSummary {
    neighbor?: string;
    v?: number;
    as?: number;
    upDown?: string;
    statePfxRcd?: string;
}

/**
 * @class
 * Initializes a new instance of the ExpressRouteCircuitsRoutesTableSummaryListResult class.
 * @constructor
 * Response for ListRoutesTable associated with the Express Route Circuits Api
 * @member {array} [value] Gets List of RoutesTable
 * 
 * @member {string} [nextLink] Gets the URL to get the next set of results.
 * 
 */
export interface ExpressRouteCircuitsRoutesTableSummaryListResult {
    value?: ExpressRouteCircuitRoutesTableSummary[];
    nextLink?: string;
}

/**
 * @class
 * Initializes a new instance of the ExpressRouteServiceProviderBandwidthsOffered class.
 * @constructor
 * Contains Bandwidths offered in ExpressRouteServiceProviders
 * @member {string} [offerName] Gets the OfferName
 * 
 * @member {number} [valueInMbps] Gets the ValueInMbps.
 * 
 */
export interface ExpressRouteServiceProviderBandwidthsOffered {
    offerName?: string;
    valueInMbps?: number;
}

/**
 * @class
 * Initializes a new instance of the ExpressRouteServiceProvider class.
 * @constructor
 * ExpressRouteResourceProvider object
 * @member {array} [peeringLocations] Gets or list of peering locations
 * 
 * @member {array} [bandwidthsOffered] Gets or bandwidths offered
 * 
 * @member {string} [provisioningState] Gets or sets Provisioning state of the
 * resource
 * 
 */
export interface ExpressRouteServiceProvider extends Resource {
    peeringLocations?: string[];
    bandwidthsOffered?: ExpressRouteServiceProviderBandwidthsOffered[];
    provisioningState?: string;
}

/**
 * @class
 * Initializes a new instance of the FrontendIPConfiguration class.
 * @constructor
 * Frontend IP address of the load balancer
 * @member {array} [inboundNatRules] Read only.Inbound rules URIs that use
 * this frontend IP
 * 
 * @member {array} [inboundNatPools] Read only.Inbound pools URIs that use
 * this frontend IP
 * 
 * @member {array} [outboundNatRules] Read only.Outbound rules URIs that use
 * this frontend IP
 * 
 * @member {array} [loadBalancingRules] Gets Load Balancing rules URIs that
 * use this frontend IP
 * 
 * @member {string} [privateIPAddress] Gets or sets the privateIPAddress of
 * the IP Configuration
 * 
 * @member {string} [privateIPAllocationMethod] Gets or sets PrivateIP
 * allocation method (Static/Dynamic). Possible values include: 'Static',
 * 'Dynamic'
 * 
 * @member {object} [subnet] Gets or sets the reference of the subnet resource
 * 
 * @member {string} [subnet.addressPrefix] Gets or sets Address prefix for the
 * subnet.
 * 
 * @member {object} [subnet.networkSecurityGroup] Gets or sets the reference
 * of the NetworkSecurityGroup resource
 * 
 * @member {array} [subnet.networkSecurityGroup.securityRules] Gets or sets
 * Security rules of network security group
 * 
 * @member {array} [subnet.networkSecurityGroup.defaultSecurityRules] Gets or
 * sets Default security rules of network security group
 * 
 * @member {array} [subnet.networkSecurityGroup.networkInterfaces] Gets
 * collection of references to Network Interfaces
 * 
 * @member {array} [subnet.networkSecurityGroup.subnets] Gets collection of
 * references to subnets
 * 
 * @member {string} [subnet.networkSecurityGroup.resourceGuid] Gets or sets
 * resource guid property of the network security group resource
 * 
 * @member {string} [subnet.networkSecurityGroup.provisioningState] Gets or
 * sets Provisioning state of the PublicIP resource Updating/Deleting/Failed
 * 
 * @member {string} [subnet.networkSecurityGroup.etag] Gets a unique read-only
 * string that changes whenever the resource is updated
 * 
 * @member {object} [subnet.routeTable] Gets or sets the reference of the
 * RouteTable resource
 * 
 * @member {array} [subnet.routeTable.routes] Gets or sets Routes in a Route
 * Table
 * 
 * @member {array} [subnet.routeTable.subnets] Gets collection of references
 * to subnets
 * 
 * @member {string} [subnet.routeTable.provisioningState] Gets or sets
 * Provisioning state of the resource Updating/Deleting/Failed
 * 
 * @member {string} [subnet.routeTable.etag] Gets a unique read-only string
 * that changes whenever the resource is updated
 * 
 * @member {array} [subnet.ipConfigurations] Gets array of references to the
 * network interface IP configurations using subnet
 * 
 * @member {string} [subnet.provisioningState] Gets or sets Provisioning state
 * of the PublicIP resource Updating/Deleting/Failed
 * 
 * @member {string} [subnet.name] Gets name of the resource that is unique
 * within a resource group. This name can be used to access the resource
 * 
 * @member {string} [subnet.etag] A unique read-only string that changes
 * whenever the resource is updated
 * 
 * @member {object} [publicIPAddress] Gets or sets the reference of the
 * PublicIP resource
 * 
 * @member {string} [publicIPAddress.publicIPAllocationMethod] Gets or sets
 * PublicIP allocation method (Static/Dynamic). Possible values include:
 * 'Static', 'Dynamic'
 * 
 * @member {string} [publicIPAddress.publicIPAddressVersion] Gets or sets
 * PublicIP address version (IPv4/IPv6). Possible values include: 'IPv4',
 * 'IPv6'
 * 
 * @member {object} [publicIPAddress.ipConfiguration]
 * 
 * @member {string} [publicIPAddress.ipConfiguration.privateIPAddress] Gets or
 * sets the privateIPAddress of the IP Configuration
 * 
 * @member {string}
 * [publicIPAddress.ipConfiguration.privateIPAllocationMethod] Gets or sets
 * PrivateIP allocation method (Static/Dynamic). Possible values include:
 * 'Static', 'Dynamic'
 * 
 * @member {object} [publicIPAddress.ipConfiguration.subnet] Gets or sets the
 * reference of the subnet resource
 * 
 * @member {string} [publicIPAddress.ipConfiguration.subnet.addressPrefix]
 * Gets or sets Address prefix for the subnet.
 * 
 * @member {object}
 * [publicIPAddress.ipConfiguration.subnet.networkSecurityGroup] Gets or sets
 * the reference of the NetworkSecurityGroup resource
 * 
 * @member {array}
 * [publicIPAddress.ipConfiguration.subnet.networkSecurityGroup.securityRules]
 * Gets or sets Security rules of network security group
 * 
 * @member {array}
 * [publicIPAddress.ipConfiguration.subnet.networkSecurityGroup.defaultSecurityRules]
 * Gets or sets Default security rules of network security group
 * 
 * @member {array}
 * [publicIPAddress.ipConfiguration.subnet.networkSecurityGroup.networkInterfaces]
 * Gets collection of references to Network Interfaces
 * 
 * @member {array}
 * [publicIPAddress.ipConfiguration.subnet.networkSecurityGroup.subnets] Gets
 * collection of references to subnets
 * 
 * @member {string}
 * [publicIPAddress.ipConfiguration.subnet.networkSecurityGroup.resourceGuid]
 * Gets or sets resource guid property of the network security group resource
 * 
 * @member {string}
 * [publicIPAddress.ipConfiguration.subnet.networkSecurityGroup.provisioningState]
 * Gets or sets Provisioning state of the PublicIP resource
 * Updating/Deleting/Failed
 * 
 * @member {string}
 * [publicIPAddress.ipConfiguration.subnet.networkSecurityGroup.etag] Gets a
 * unique read-only string that changes whenever the resource is updated
 * 
 * @member {object} [publicIPAddress.ipConfiguration.subnet.routeTable] Gets
 * or sets the reference of the RouteTable resource
 * 
 * @member {array} [publicIPAddress.ipConfiguration.subnet.routeTable.routes]
 * Gets or sets Routes in a Route Table
 * 
 * @member {array} [publicIPAddress.ipConfiguration.subnet.routeTable.subnets]
 * Gets collection of references to subnets
 * 
 * @member {string}
 * [publicIPAddress.ipConfiguration.subnet.routeTable.provisioningState] Gets
 * or sets Provisioning state of the resource Updating/Deleting/Failed
 * 
 * @member {string} [publicIPAddress.ipConfiguration.subnet.routeTable.etag]
 * Gets a unique read-only string that changes whenever the resource is
 * updated
 * 
 * @member {array} [publicIPAddress.ipConfiguration.subnet.ipConfigurations]
 * Gets array of references to the network interface IP configurations using
 * subnet
 * 
 * @member {string} [publicIPAddress.ipConfiguration.subnet.provisioningState]
 * Gets or sets Provisioning state of the PublicIP resource
 * Updating/Deleting/Failed
 * 
 * @member {string} [publicIPAddress.ipConfiguration.subnet.name] Gets name of
 * the resource that is unique within a resource group. This name can be used
 * to access the resource
 * 
 * @member {string} [publicIPAddress.ipConfiguration.subnet.etag] A unique
 * read-only string that changes whenever the resource is updated
 * 
 * @member {object} [publicIPAddress.ipConfiguration.publicIPAddress] Gets or
 * sets the reference of the PublicIP resource
 * 
 * @member {string} [publicIPAddress.ipConfiguration.provisioningState] Gets
 * or sets Provisioning state of the PublicIP resource
 * Updating/Deleting/Failed
 * 
 * @member {string} [publicIPAddress.ipConfiguration.name] Gets name of the
 * resource that is unique within a resource group. This name can be used to
 * access the resource
 * 
 * @member {string} [publicIPAddress.ipConfiguration.etag] A unique read-only
 * string that changes whenever the resource is updated
 * 
 * @member {object} [publicIPAddress.dnsSettings] Gets or sets FQDN of the DNS
 * record associated with the public IP address
 * 
 * @member {string} [publicIPAddress.dnsSettings.domainNameLabel] Gets or sets
 * the Domain name label.The concatenation of the domain name label and the
 * regionalized DNS zone make up the fully qualified domain name associated
 * with the public IP address. If a domain name label is specified, an A DNS
 * record is created for the public IP in the Microsoft Azure DNS system.
 * 
 * @member {string} [publicIPAddress.dnsSettings.fqdn] Gets the FQDN, Fully
 * qualified domain name of the A DNS record associated with the public IP.
 * This is the concatenation of the domainNameLabel and the regionalized DNS
 * zone.
 * 
 * @member {string} [publicIPAddress.dnsSettings.reverseFqdn] Gets or Sests
 * the Reverse FQDN. A user-visible, fully qualified domain name that
 * resolves to this public IP address. If the reverseFqdn is specified, then
 * a PTR DNS record is created pointing from the IP address in the
 * in-addr.arpa domain to the reverse FQDN.
 * 
 * @member {string} [publicIPAddress.ipAddress]
 * 
 * @member {number} [publicIPAddress.idleTimeoutInMinutes] Gets or sets the
 * Idletimeout of the public IP address
 * 
 * @member {string} [publicIPAddress.resourceGuid] Gets or sets resource guid
 * property of the PublicIP resource
 * 
 * @member {string} [publicIPAddress.provisioningState] Gets or sets
 * Provisioning state of the PublicIP resource Updating/Deleting/Failed
 * 
 * @member {string} [publicIPAddress.etag] Gets a unique read-only string that
 * changes whenever the resource is updated
 * 
 * @member {string} [provisioningState] Gets or sets Provisioning state of the
 * PublicIP resource Updating/Deleting/Failed
 * 
 * @member {string} [name] Gets name of the resource that is unique within a
 * resource group. This name can be used to access the resource
 * 
 * @member {string} [etag] A unique read-only string that changes whenever the
 * resource is updated
 * 
 */
export interface FrontendIPConfiguration extends SubResource {
    inboundNatRules?: SubResource[];
    inboundNatPools?: SubResource[];
    outboundNatRules?: SubResource[];
    loadBalancingRules?: SubResource[];
    privateIPAddress?: string;
    privateIPAllocationMethod?: string;
    subnet?: Subnet;
    publicIPAddress?: PublicIPAddress;
    provisioningState?: string;
    name?: string;
    etag?: string;
}

/**
 * @class
 * Initializes a new instance of the LoadBalancingRule class.
 * @constructor
 * Rules of the load balancer
 * @member {object} [frontendIPConfiguration] Gets or sets a reference to
 * frontend IP Addresses
 * 
 * @member {string} [frontendIPConfiguration.id] Resource Id
 * 
 * @member {object} [backendAddressPool] Gets or sets  a reference to a pool
 * of DIPs. Inbound traffic is randomly load balanced across IPs in the
 * backend IPs
 * 
 * @member {string} [backendAddressPool.id] Resource Id
 * 
 * @member {object} [probe] Gets or sets the reference of the load balancer
 * probe used by the Load Balancing rule.
 * 
 * @member {string} [probe.id] Resource Id
 * 
 * @member {string} protocol Gets or sets the transport protocol for the
 * external endpoint. Possible values are Udp or Tcp. Possible values
 * include: 'Udp', 'Tcp'
 * 
 * @member {string} [loadDistribution] Gets or sets the load distribution
 * policy for this rule. Possible values include: 'Default', 'SourceIP',
 * 'SourceIPProtocol'
 * 
 * @member {number} frontendPort Gets or sets the port for the external
 * endpoint. You can specify any port number you choose, but the port numbers
 * specified for each role in the service must be unique. Possible values
 * range between 1 and 65535, inclusive
 * 
 * @member {number} [backendPort] Gets or sets a port used for internal
 * connections on the endpoint. The localPort attribute maps the eternal port
 * of the endpoint to an internal port on a role. This is useful in scenarios
 * where a role must communicate to an internal compotnent on a port that is
 * different from the one that is exposed externally. If not specified, the
 * value of localPort is the same as the port attribute. Set the value of
 * localPort to '*' to automatically assign an unallocated port that is
 * discoverable using the runtime API
 * 
 * @member {number} [idleTimeoutInMinutes] Gets or sets the timeout for the
 * Tcp idle connection. The value can be set between 4 and 30 minutes. The
 * default value is 4 minutes. This emlement is only used when the protocol
 * is set to Tcp
 * 
 * @member {boolean} [enableFloatingIP] Configures a virtual machine's
 * endpoint for the floating IP capability required to configure a SQL
 * AlwaysOn availability Group. This setting is required when using the SQL
 * Always ON availability Groups in SQL server. This setting can't be changed
 * after you create the endpoint
 * 
 * @member {string} [provisioningState] Gets or sets Provisioning state of the
 * PublicIP resource Updating/Deleting/Failed
 * 
 * @member {string} [name] Gets name of the resource that is unique within a
 * resource group. This name can be used to access the resource
 * 
 * @member {string} [etag] A unique read-only string that changes whenever the
 * resource is updated
 * 
 */
export interface LoadBalancingRule extends SubResource {
    frontendIPConfiguration?: SubResource;
    backendAddressPool?: SubResource;
    probe?: SubResource;
    protocol: string;
    loadDistribution?: string;
    frontendPort: number;
    backendPort?: number;
    idleTimeoutInMinutes?: number;
    enableFloatingIP?: boolean;
    provisioningState?: string;
    name?: string;
    etag?: string;
}

/**
 * @class
 * Initializes a new instance of the Probe class.
 * @constructor
 * Load balancer Probe
 * @member {array} [loadBalancingRules] Gets Load balancer rules that use this
 * probe
 * 
 * @member {string} protocol Gets or sets the protocol of the end point.
 * Possible values are http pr Tcp. If Tcp is specified, a received ACK is
 * required for the probe to be successful. If http is specified,a 200 OK
 * response from the specifies URI is required for the probe to be
 * successful. Possible values include: 'Http', 'Tcp'
 * 
 * @member {number} port Gets or sets Port for communicating the probe.
 * Possible values range from 1 to 65535, inclusive.
 * 
 * @member {number} [intervalInSeconds] Gets or sets the interval, in seconds,
 * for how frequently to probe the endpoint for health status. Typically, the
 * interval is slightly less than half the allocated timeout period (in
 * seconds) which allows two full probes before taking the instance out of
 * rotation. The default value is 15, the minimum value is 5
 * 
 * @member {number} [numberOfProbes] Gets or sets the number of probes where
 * if no response, will result in stopping further traffic from being
 * delivered to the endpoint. This values allows endponints to be taken out
 * of rotation faster or slower than the typical times used in Azure.
 * 
 * @member {string} [requestPath] Gets or sets the URI used for requesting
 * health status from the VM. Path is required if a protocol is set to http.
 * Otherwise, it is not allowed. There is no default value
 * 
 * @member {string} [provisioningState] Gets or sets Provisioning state of the
 * PublicIP resource Updating/Deleting/Failed
 * 
 * @member {string} [name] Gets name of the resource that is unique within a
 * resource group. This name can be used to access the resource
 * 
 * @member {string} [etag] A unique read-only string that changes whenever the
 * resource is updated
 * 
 */
export interface Probe extends SubResource {
    loadBalancingRules?: SubResource[];
    protocol: string;
    port: number;
    intervalInSeconds?: number;
    numberOfProbes?: number;
    requestPath?: string;
    provisioningState?: string;
    name?: string;
    etag?: string;
}

/**
 * @class
 * Initializes a new instance of the InboundNatPool class.
 * @constructor
 * Inbound NAT pool of the loadbalancer
 * @member {object} [frontendIPConfiguration] Gets or sets a reference to
 * frontend IP Addresses
 * 
 * @member {string} [frontendIPConfiguration.id] Resource Id
 * 
 * @member {string} protocol Gets or sets the transport potocol for the
 * external endpoint. Possible values are Udp or Tcp. Possible values
 * include: 'Udp', 'Tcp'
 * 
 * @member {number} frontendPortRangeStart Gets or sets the starting port
 * range for the NAT pool. You can spcify any port number you choose, but the
 * port numbers specified for each role in the service must be unique.
 * Possible values range between 1 and 65535, inclusive
 * 
 * @member {number} frontendPortRangeEnd Gets or sets the ending port range
 * for the NAT pool. You can spcify any port number you choose, but the port
 * numbers specified for each role in the service must be unique. Possible
 * values range between 1 and 65535, inclusive
 * 
 * @member {number} backendPort Gets or sets a port used for internal
 * connections on the endpoint. The localPort attribute maps the eternal port
 * of the endpoint to an internal port on a role. This is useful in scenarios
 * where a role must communicate to an internal compotnent on a port that is
 * different from the one that is exposed externally. If not specified, the
 * value of localPort is the same as the port attribute. Set the value of
 * localPort to '*' to automatically assign an unallocated port that is
 * discoverable using the runtime API
 * 
 * @member {string} [provisioningState] Gets or sets Provisioning state of the
 * PublicIP resource Updating/Deleting/Failed
 * 
 * @member {string} [name] Gets name of the resource that is unique within a
 * resource group. This name can be used to access the resource
 * 
 * @member {string} [etag] A unique read-only string that changes whenever the
 * resource is updated
 * 
 */
export interface InboundNatPool extends SubResource {
    frontendIPConfiguration?: SubResource;
    protocol: string;
    frontendPortRangeStart: number;
    frontendPortRangeEnd: number;
    backendPort: number;
    provisioningState?: string;
    name?: string;
    etag?: string;
}

/**
 * @class
 * Initializes a new instance of the OutboundNatRule class.
 * @constructor
 * Outbound NAT pool of the loadbalancer
 * @member {number} [allocatedOutboundPorts] Gets or sets the number of
 * outbound ports to be used for SNAT
 * 
 * @member {array} [frontendIPConfigurations] Gets or sets Frontend IP
 * addresses of the load balancer
 * 
 * @member {object} backendAddressPool Gets or sets a reference to a pool of
 * DIPs. Outbound traffic is randomly load balanced across IPs in the backend
 * IPs
 * 
 * @member {string} [backendAddressPool.id] Resource Id
 * 
 * @member {string} [provisioningState] Gets or sets Provisioning state of the
 * PublicIP resource Updating/Deleting/Failed
 * 
 * @member {string} [name] Gets name of the resource that is unique within a
 * resource group. This name can be used to access the resource
 * 
 * @member {string} [etag] A unique read-only string that changes whenever the
 * resource is updated
 * 
 */
export interface OutboundNatRule extends SubResource {
    allocatedOutboundPorts?: number;
    frontendIPConfigurations?: SubResource[];
    backendAddressPool: SubResource;
    provisioningState?: string;
    name?: string;
    etag?: string;
}

/**
 * @class
 * Initializes a new instance of the LoadBalancer class.
 * @constructor
 * LoadBalancer resource
 * @member {array} [frontendIPConfigurations] Gets or sets frontend IP
 * addresses of the load balancer
 * 
 * @member {array} [backendAddressPools] Gets or sets Pools of backend IP
 * addresseses
 * 
 * @member {array} [loadBalancingRules] Gets or sets loadbalancing rules
 * 
 * @member {array} [probes] Gets or sets list of Load balancer probes
 * 
 * @member {array} [inboundNatRules] Gets or sets list of inbound rules
 * 
 * @member {array} [inboundNatPools] Gets or sets inbound NAT pools
 * 
 * @member {array} [outboundNatRules] Gets or sets outbound NAT rules
 * 
 * @member {string} [resourceGuid] Gets or sets resource guid property of the
 * Load balancer resource
 * 
 * @member {string} [provisioningState] Gets or sets Provisioning state of the
 * PublicIP resource Updating/Deleting/Failed
 * 
 * @member {string} [etag] Gets a unique read-only string that changes
 * whenever the resource is updated
 * 
 */
export interface LoadBalancer extends Resource {
    frontendIPConfigurations?: FrontendIPConfiguration[];
    backendAddressPools?: BackendAddressPool[];
    loadBalancingRules?: LoadBalancingRule[];
    probes?: Probe[];
    inboundNatRules?: InboundNatRule[];
    inboundNatPools?: InboundNatPool[];
    outboundNatRules?: OutboundNatRule[];
    resourceGuid?: string;
    provisioningState?: string;
    etag?: string;
}

/**
 * @class
 * Initializes a new instance of the AddressSpace class.
 * @constructor
 * AddressSpace contains an array of IP address ranges that can be used by
 * subnets
 * @member {array} [addressPrefixes] Gets or sets List of address blocks
 * reserved for this virtual network in CIDR notation
 * 
 */
export interface AddressSpace {
    addressPrefixes?: string[];
}

/**
 * @class
 * Initializes a new instance of the BgpSettings class.
 * @constructor
 * @member {number} [asn] Gets or sets this BGP speaker's ASN
 * 
 * @member {string} [bgpPeeringAddress] Gets or sets the BGP peering address
 * and BGP identifier of this BGP speaker
 * 
 * @member {number} [peerWeight] Gets or sets the weight added to routes
 * learned from this BGP speaker
 * 
 */
export interface BgpSettings {
    asn?: number;
    bgpPeeringAddress?: string;
    peerWeight?: number;
}

/**
 * @class
 * Initializes a new instance of the LocalNetworkGateway class.
 * @constructor
 * A common class for general resource information
 * @member {object} [localNetworkAddressSpace] Local network site Address space
 * 
 * @member {array} [localNetworkAddressSpace.addressPrefixes] Gets or sets
 * List of address blocks reserved for this virtual network in CIDR notation
 * 
 * @member {string} [gatewayIpAddress] IP address of local network gateway.
 * 
 * @member {object} [bgpSettings] Local network gateway's BGP speaker settings
 * 
 * @member {number} [bgpSettings.asn] Gets or sets this BGP speaker's ASN
 * 
 * @member {string} [bgpSettings.bgpPeeringAddress] Gets or sets the BGP
 * peering address and BGP identifier of this BGP speaker
 * 
 * @member {number} [bgpSettings.peerWeight] Gets or sets the weight added to
 * routes learned from this BGP speaker
 * 
 * @member {string} [resourceGuid] Gets or sets resource guid property of the
 * LocalNetworkGateway resource
 * 
 * @member {string} [provisioningState] Gets or sets Provisioning state of the
 * LocalNetworkGateway resource Updating/Deleting/Failed
 * 
 * @member {string} [etag] Gets a unique read-only string that changes
 * whenever the resource is updated
 * 
 */
export interface LocalNetworkGateway extends Resource {
    localNetworkAddressSpace?: AddressSpace;
    gatewayIpAddress?: string;
    bgpSettings?: BgpSettings;
    resourceGuid?: string;
    provisioningState?: string;
    etag?: string;
}

/**
 * @class
 * Initializes a new instance of the UsageName class.
 * @constructor
 * The Usage Names.
 * @member {string} [value] Gets or sets a string describing the resource name.
 * 
 * @member {string} [localizedValue] Gets or sets a localized string
 * describing the resource name.
 * 
 */
export interface UsageName {
    value?: string;
    localizedValue?: string;
}

/**
 * @class
 * Initializes a new instance of the Usage class.
 * @constructor
 * Describes Network Resource Usage.
 * @member {number} currentValue Gets or sets the current value of the usage.
 * 
 * @member {number} limit Gets or sets the limit of usage.
 * 
 * @member {object} name Gets or sets the name of the type of usage.
 * 
 * @member {string} [name.value] Gets or sets a string describing the resource
 * name.
 * 
 * @member {string} [name.localizedValue] Gets or sets a localized string
 * describing the resource name.
 * 
 */
export interface Usage {
    currentValue: number;
    limit: number;
    name: UsageName;
}

/**
 * @class
 * Initializes a new instance of the VirtualNetworkGatewayIPConfiguration class.
 * @constructor
 * IpConfiguration for Virtual network gateway
 * @member {string} [privateIPAddress] Gets or sets the privateIPAddress of
 * the IP Configuration
 * 
 * @member {string} [privateIPAllocationMethod] Gets or sets PrivateIP
 * allocation method (Static/Dynamic). Possible values include: 'Static',
 * 'Dynamic'
 * 
 * @member {object} [subnet] Gets or sets the reference of the subnet resource
 * 
 * @member {string} [subnet.id] Resource Id
 * 
 * @member {object} [publicIPAddress] Gets or sets the reference of the
 * PublicIP resource
 * 
 * @member {string} [publicIPAddress.id] Resource Id
 * 
 * @member {string} [provisioningState] Gets or sets Provisioning state of the
 * PublicIP resource Updating/Deleting/Failed
 * 
 * @member {string} [name] Gets name of the resource that is unique within a
 * resource group. This name can be used to access the resource
 * 
 * @member {string} [etag] A unique read-only string that changes whenever the
 * resource is updated
 * 
 */
export interface VirtualNetworkGatewayIPConfiguration extends SubResource {
    privateIPAddress?: string;
    privateIPAllocationMethod?: string;
    subnet?: SubResource;
    publicIPAddress?: SubResource;
    provisioningState?: string;
    name?: string;
    etag?: string;
}

/**
 * @class
 * Initializes a new instance of the VirtualNetworkGatewaySku class.
 * @constructor
 * VirtualNetworkGatewaySku details
 * @member {string} [name] Gateway sku name -Basic/HighPerformance/Standard.
 * Possible values include: 'Basic', 'HighPerformance', 'Standard'
 * 
 * @member {string} [tier] Gateway sku tier -Basic/HighPerformance/Standard.
 * Possible values include: 'Basic', 'HighPerformance', 'Standard'
 * 
 * @member {number} [capacity] The capacity
 * 
 */
export interface VirtualNetworkGatewaySku {
    name?: string;
    tier?: string;
    capacity?: number;
}

/**
 * @class
 * Initializes a new instance of the VpnClientConfiguration class.
 * @constructor
 * VpnClientConfiguration for P2S client
 * @member {object} [vpnClientAddressPool] Gets or sets the reference of the
 * Address space resource which represents Address space for P2S VpnClient.
 * 
 * @member {array} [vpnClientAddressPool.addressPrefixes] Gets or sets List of
 * address blocks reserved for this virtual network in CIDR notation
 * 
 * @member {array} [vpnClientRootCertificates] VpnClientRootCertificate for
 * Virtual network gateway.
 * 
 * @member {array} [vpnClientRevokedCertificates] VpnClientRevokedCertificate
 * for Virtual network gateway.
 * 
 */
export interface VpnClientConfiguration {
    vpnClientAddressPool?: AddressSpace;
    vpnClientRootCertificates?: VpnClientRootCertificate[];
    vpnClientRevokedCertificates?: VpnClientRevokedCertificate[];
}

/**
 * @class
 * Initializes a new instance of the VpnClientRootCertificate class.
 * @constructor
 * VPN client root certificate of virtual network gateway
 * @member {string} [publicCertData] Gets or sets the certificate public data
 * 
 * @member {string} [provisioningState] Gets or sets Provisioning state of the
 * VPN client root certificate resource Updating/Deleting/Failed
 * 
 * @member {string} [name] Gets name of the resource that is unique within a
 * resource group. This name can be used to access the resource
 * 
 * @member {string} [etag] A unique read-only string that changes whenever the
 * resource is updated
 * 
 */
export interface VpnClientRootCertificate extends SubResource {
    publicCertData?: string;
    provisioningState?: string;
    name?: string;
    etag?: string;
}

/**
 * @class
 * Initializes a new instance of the VpnClientRevokedCertificate class.
 * @constructor
 * VPN client revoked certificate of virtual network gateway
 * @member {string} [thumbprint] Gets or sets the revoked Vpn client
 * certificate thumbprint
 * 
 * @member {string} [provisioningState] Gets or sets Provisioning state of the
 * VPN client revoked certificate resource Updating/Deleting/Failed
 * 
 * @member {string} [name] Gets name of the resource that is unique within a
 * resource group. This name can be used to access the resource
 * 
 * @member {string} [etag] A unique read-only string that changes whenever the
 * resource is updated
 * 
 */
export interface VpnClientRevokedCertificate extends SubResource {
    thumbprint?: string;
    provisioningState?: string;
    name?: string;
    etag?: string;
}

/**
 * @class
 * Initializes a new instance of the VirtualNetworkGateway class.
 * @constructor
 * A common class for general resource information
 * @member {array} [ipConfigurations] IpConfigurations for Virtual network
 * gateway.
 * 
 * @member {string} [gatewayType] The type of this virtual network gateway.
 * Possible values include: 'Vpn', 'ExpressRoute'
 * 
 * @member {string} [vpnType] The type of this virtual network gateway.
 * Possible values include: 'PolicyBased', 'RouteBased'
 * 
 * @member {boolean} [enableBgp] EnableBgp Flag
 * 
 * @member {object} [gatewayDefaultSite] Gets or sets the reference of the
 * LocalNetworkGateway resource which represents Local network site having
 * default routes. Assign Null value in case of removing existing default
 * site setting.
 * 
 * @member {string} [gatewayDefaultSite.id] Resource Id
 * 
 * @member {object} [sku] Gets or sets the reference of the
 * VirtualNetworkGatewaySku resource which represents the sku selected for
 * Virtual network gateway.
 * 
 * @member {string} [sku.name] Gateway sku name
 * -Basic/HighPerformance/Standard. Possible values include: 'Basic',
 * 'HighPerformance', 'Standard'
 * 
 * @member {string} [sku.tier] Gateway sku tier
 * -Basic/HighPerformance/Standard. Possible values include: 'Basic',
 * 'HighPerformance', 'Standard'
 * 
 * @member {number} [sku.capacity] The capacity
 * 
 * @member {object} [vpnClientConfiguration] Gets or sets the reference of the
 * VpnClientConfiguration resource which represents the P2S VpnClient
 * configurations.
 * 
 * @member {object} [vpnClientConfiguration.vpnClientAddressPool] Gets or sets
 * the reference of the Address space resource which represents Address space
 * for P2S VpnClient.
 * 
 * @member {array}
 * [vpnClientConfiguration.vpnClientAddressPool.addressPrefixes] Gets or sets
 * List of address blocks reserved for this virtual network in CIDR notation
 * 
 * @member {array} [vpnClientConfiguration.vpnClientRootCertificates]
 * VpnClientRootCertificate for Virtual network gateway.
 * 
 * @member {array} [vpnClientConfiguration.vpnClientRevokedCertificates]
 * VpnClientRevokedCertificate for Virtual network gateway.
 * 
 * @member {object} [bgpSettings] Virtual network gateway's BGP speaker
 * settings
 * 
 * @member {number} [bgpSettings.asn] Gets or sets this BGP speaker's ASN
 * 
 * @member {string} [bgpSettings.bgpPeeringAddress] Gets or sets the BGP
 * peering address and BGP identifier of this BGP speaker
 * 
 * @member {number} [bgpSettings.peerWeight] Gets or sets the weight added to
 * routes learned from this BGP speaker
 * 
 * @member {string} [resourceGuid] Gets or sets resource guid property of the
 * VirtualNetworkGateway resource
 * 
 * @member {string} [provisioningState] Gets or sets Provisioning state of the
 * VirtualNetworkGateway resource Updating/Deleting/Failed
 * 
 * @member {string} [etag] Gets a unique read-only string that changes
 * whenever the resource is updated
 * 
 */
export interface VirtualNetworkGateway extends Resource {
    ipConfigurations?: VirtualNetworkGatewayIPConfiguration[];
    gatewayType?: string;
    vpnType?: string;
    enableBgp?: boolean;
    gatewayDefaultSite?: SubResource;
    sku?: VirtualNetworkGatewaySku;
    vpnClientConfiguration?: VpnClientConfiguration;
    bgpSettings?: BgpSettings;
    resourceGuid?: string;
    provisioningState?: string;
    etag?: string;
}

/**
 * @class
 * Initializes a new instance of the VpnClientParameters class.
 * @constructor
 * VpnClientParameters
 * @member {string} [processorArchitecture] VPN client Processor Architecture
 * -Amd64/X86. Possible values include: 'Amd64', 'X86'
 * 
 */
export interface VpnClientParameters {
    processorArchitecture?: string;
}

/**
 * @class
 * Initializes a new instance of the VirtualNetworkGatewayConnection class.
 * @constructor
 * A common class for general resource information
 * @member {string} [authorizationKey] The authorizationKey.
 * 
 * @member {object} [virtualNetworkGateway1]
 * 
 * @member {array} [virtualNetworkGateway1.ipConfigurations] IpConfigurations
 * for Virtual network gateway.
 * 
 * @member {string} [virtualNetworkGateway1.gatewayType] The type of this
 * virtual network gateway. Possible values include: 'Vpn', 'ExpressRoute'
 * 
 * @member {string} [virtualNetworkGateway1.vpnType] The type of this virtual
 * network gateway. Possible values include: 'PolicyBased', 'RouteBased'
 * 
 * @member {boolean} [virtualNetworkGateway1.enableBgp] EnableBgp Flag
 * 
 * @member {object} [virtualNetworkGateway1.gatewayDefaultSite] Gets or sets
 * the reference of the LocalNetworkGateway resource which represents Local
 * network site having default routes. Assign Null value in case of removing
 * existing default site setting.
 * 
 * @member {string} [virtualNetworkGateway1.gatewayDefaultSite.id] Resource Id
 * 
 * @member {object} [virtualNetworkGateway1.sku] Gets or sets the reference of
 * the VirtualNetworkGatewaySku resource which represents the sku selected
 * for Virtual network gateway.
 * 
 * @member {string} [virtualNetworkGateway1.sku.name] Gateway sku name
 * -Basic/HighPerformance/Standard. Possible values include: 'Basic',
 * 'HighPerformance', 'Standard'
 * 
 * @member {string} [virtualNetworkGateway1.sku.tier] Gateway sku tier
 * -Basic/HighPerformance/Standard. Possible values include: 'Basic',
 * 'HighPerformance', 'Standard'
 * 
 * @member {number} [virtualNetworkGateway1.sku.capacity] The capacity
 * 
 * @member {object} [virtualNetworkGateway1.vpnClientConfiguration] Gets or
 * sets the reference of the VpnClientConfiguration resource which represents
 * the P2S VpnClient configurations.
 * 
 * @member {object}
 * [virtualNetworkGateway1.vpnClientConfiguration.vpnClientAddressPool] Gets
 * or sets the reference of the Address space resource which represents
 * Address space for P2S VpnClient.
 * 
 * @member {array}
 * [virtualNetworkGateway1.vpnClientConfiguration.vpnClientAddressPool.addressPrefixes]
 * Gets or sets List of address blocks reserved for this virtual network in
 * CIDR notation
 * 
 * @member {array}
 * [virtualNetworkGateway1.vpnClientConfiguration.vpnClientRootCertificates]
 * VpnClientRootCertificate for Virtual network gateway.
 * 
 * @member {array}
 * [virtualNetworkGateway1.vpnClientConfiguration.vpnClientRevokedCertificates]
 * VpnClientRevokedCertificate for Virtual network gateway.
 * 
 * @member {object} [virtualNetworkGateway1.bgpSettings] Virtual network
 * gateway's BGP speaker settings
 * 
 * @member {number} [virtualNetworkGateway1.bgpSettings.asn] Gets or sets this
 * BGP speaker's ASN
 * 
 * @member {string} [virtualNetworkGateway1.bgpSettings.bgpPeeringAddress]
 * Gets or sets the BGP peering address and BGP identifier of this BGP speaker
 * 
 * @member {number} [virtualNetworkGateway1.bgpSettings.peerWeight] Gets or
 * sets the weight added to routes learned from this BGP speaker
 * 
 * @member {string} [virtualNetworkGateway1.resourceGuid] Gets or sets
 * resource guid property of the VirtualNetworkGateway resource
 * 
 * @member {string} [virtualNetworkGateway1.provisioningState] Gets or sets
 * Provisioning state of the VirtualNetworkGateway resource
 * Updating/Deleting/Failed
 * 
 * @member {string} [virtualNetworkGateway1.etag] Gets a unique read-only
 * string that changes whenever the resource is updated
 * 
 * @member {object} [virtualNetworkGateway2]
 * 
 * @member {array} [virtualNetworkGateway2.ipConfigurations] IpConfigurations
 * for Virtual network gateway.
 * 
 * @member {string} [virtualNetworkGateway2.gatewayType] The type of this
 * virtual network gateway. Possible values include: 'Vpn', 'ExpressRoute'
 * 
 * @member {string} [virtualNetworkGateway2.vpnType] The type of this virtual
 * network gateway. Possible values include: 'PolicyBased', 'RouteBased'
 * 
 * @member {boolean} [virtualNetworkGateway2.enableBgp] EnableBgp Flag
 * 
 * @member {object} [virtualNetworkGateway2.gatewayDefaultSite] Gets or sets
 * the reference of the LocalNetworkGateway resource which represents Local
 * network site having default routes. Assign Null value in case of removing
 * existing default site setting.
 * 
 * @member {string} [virtualNetworkGateway2.gatewayDefaultSite.id] Resource Id
 * 
 * @member {object} [virtualNetworkGateway2.sku] Gets or sets the reference of
 * the VirtualNetworkGatewaySku resource which represents the sku selected
 * for Virtual network gateway.
 * 
 * @member {string} [virtualNetworkGateway2.sku.name] Gateway sku name
 * -Basic/HighPerformance/Standard. Possible values include: 'Basic',
 * 'HighPerformance', 'Standard'
 * 
 * @member {string} [virtualNetworkGateway2.sku.tier] Gateway sku tier
 * -Basic/HighPerformance/Standard. Possible values include: 'Basic',
 * 'HighPerformance', 'Standard'
 * 
 * @member {number} [virtualNetworkGateway2.sku.capacity] The capacity
 * 
 * @member {object} [virtualNetworkGateway2.vpnClientConfiguration] Gets or
 * sets the reference of the VpnClientConfiguration resource which represents
 * the P2S VpnClient configurations.
 * 
 * @member {object}
 * [virtualNetworkGateway2.vpnClientConfiguration.vpnClientAddressPool] Gets
 * or sets the reference of the Address space resource which represents
 * Address space for P2S VpnClient.
 * 
 * @member {array}
 * [virtualNetworkGateway2.vpnClientConfiguration.vpnClientAddressPool.addressPrefixes]
 * Gets or sets List of address blocks reserved for this virtual network in
 * CIDR notation
 * 
 * @member {array}
 * [virtualNetworkGateway2.vpnClientConfiguration.vpnClientRootCertificates]
 * VpnClientRootCertificate for Virtual network gateway.
 * 
 * @member {array}
 * [virtualNetworkGateway2.vpnClientConfiguration.vpnClientRevokedCertificates]
 * VpnClientRevokedCertificate for Virtual network gateway.
 * 
 * @member {object} [virtualNetworkGateway2.bgpSettings] Virtual network
 * gateway's BGP speaker settings
 * 
 * @member {number} [virtualNetworkGateway2.bgpSettings.asn] Gets or sets this
 * BGP speaker's ASN
 * 
 * @member {string} [virtualNetworkGateway2.bgpSettings.bgpPeeringAddress]
 * Gets or sets the BGP peering address and BGP identifier of this BGP speaker
 * 
 * @member {number} [virtualNetworkGateway2.bgpSettings.peerWeight] Gets or
 * sets the weight added to routes learned from this BGP speaker
 * 
 * @member {string} [virtualNetworkGateway2.resourceGuid] Gets or sets
 * resource guid property of the VirtualNetworkGateway resource
 * 
 * @member {string} [virtualNetworkGateway2.provisioningState] Gets or sets
 * Provisioning state of the VirtualNetworkGateway resource
 * Updating/Deleting/Failed
 * 
 * @member {string} [virtualNetworkGateway2.etag] Gets a unique read-only
 * string that changes whenever the resource is updated
 * 
 * @member {object} [localNetworkGateway2]
 * 
 * @member {object} [localNetworkGateway2.localNetworkAddressSpace] Local
 * network site Address space
 * 
 * @member {array}
 * [localNetworkGateway2.localNetworkAddressSpace.addressPrefixes] Gets or
 * sets List of address blocks reserved for this virtual network in CIDR
 * notation
 * 
 * @member {string} [localNetworkGateway2.gatewayIpAddress] IP address of
 * local network gateway.
 * 
 * @member {object} [localNetworkGateway2.bgpSettings] Local network gateway's
 * BGP speaker settings
 * 
 * @member {number} [localNetworkGateway2.bgpSettings.asn] Gets or sets this
 * BGP speaker's ASN
 * 
 * @member {string} [localNetworkGateway2.bgpSettings.bgpPeeringAddress] Gets
 * or sets the BGP peering address and BGP identifier of this BGP speaker
 * 
 * @member {number} [localNetworkGateway2.bgpSettings.peerWeight] Gets or sets
 * the weight added to routes learned from this BGP speaker
 * 
 * @member {string} [localNetworkGateway2.resourceGuid] Gets or sets resource
 * guid property of the LocalNetworkGateway resource
 * 
 * @member {string} [localNetworkGateway2.provisioningState] Gets or sets
 * Provisioning state of the LocalNetworkGateway resource
 * Updating/Deleting/Failed
 * 
 * @member {string} [localNetworkGateway2.etag] Gets a unique read-only string
 * that changes whenever the resource is updated
 * 
 * @member {string} [connectionType] Gateway connection type
 * -Ipsec/Dedicated/VpnClient/Vnet2Vnet. Possible values include: 'IPsec',
 * 'Vnet2Vnet', 'ExpressRoute', 'VPNClient'
 * 
 * @member {number} [routingWeight] The Routing weight.
 * 
 * @member {string} [sharedKey] The Ipsec share key.
 * 
 * @member {string} [connectionStatus] Virtual network Gateway connection
 * status. Possible values include: 'Unknown', 'Connecting', 'Connected',
 * 'NotConnected'
 * 
 * @member {number} [egressBytesTransferred] The Egress Bytes Transferred in
 * this connection
 * 
 * @member {number} [ingressBytesTransferred] The Ingress Bytes Transferred in
 * this connection
 * 
 * @member {object} [peer] The reference to peerings resource.
 * 
 * @member {string} [peer.id] Resource Id
 * 
 * @member {boolean} [enableBgp] EnableBgp Flag
 * 
 * @member {string} [resourceGuid] Gets or sets resource guid property of the
 * VirtualNetworkGatewayConnection resource
 * 
 * @member {string} [provisioningState] Gets or sets Provisioning state of the
 * VirtualNetworkGatewayConnection resource Updating/Deleting/Failed
 * 
 * @member {string} [etag] Gets a unique read-only string that changes
 * whenever the resource is updated
 * 
 */
export interface VirtualNetworkGatewayConnection extends Resource {
    authorizationKey?: string;
    virtualNetworkGateway1?: VirtualNetworkGateway;
    virtualNetworkGateway2?: VirtualNetworkGateway;
    localNetworkGateway2?: LocalNetworkGateway;
    connectionType?: string;
    routingWeight?: number;
    sharedKey?: string;
    connectionStatus?: string;
    egressBytesTransferred?: number;
    ingressBytesTransferred?: number;
    peer?: SubResource;
    enableBgp?: boolean;
    resourceGuid?: string;
    provisioningState?: string;
    etag?: string;
}

/**
 * @class
 * Initializes a new instance of the ConnectionSharedKeyResult class.
 * @constructor
 * Response for CheckConnectionSharedKey Api servive call
 * @member {string} [value] The virtual network connection shared key value
 * 
 */
export interface ConnectionSharedKeyResult {
    value?: string;
}

/**
 * @class
 * Initializes a new instance of the ConnectionResetSharedKey class.
 * @constructor
 * @member {number} [keyLength] The virtual network connection reset shared
 * key length
 * 
 */
export interface ConnectionResetSharedKey {
    keyLength?: number;
}

/**
 * @class
 * Initializes a new instance of the ConnectionSharedKey class.
 * @constructor
 * Response for GetConnectionSharedKey Api servive call
 * @member {string} [value] The virtual network connection shared key value
 * 
 */
export interface ConnectionSharedKey {
    value?: string;
}

/**
 * @class
 * Initializes a new instance of the DhcpOptions class.
 * @constructor
 * DHCPOptions contains an array of DNS servers available to VMs deployed in
 * the virtual networkStandard DHCP option for a subnet overrides VNET DHCP
 * options.
 * @member {array} [dnsServers] Gets or sets list of DNS servers IP addresses
 * 
 */
export interface DhcpOptions {
    dnsServers?: string[];
}

/**
 * @class
 * Initializes a new instance of the VirtualNetwork class.
 * @constructor
 * Virtual Network resource
 * @member {object} [addressSpace] Gets or sets AddressSpace that contains an
 * array of IP address ranges that can be used by subnets
 * 
 * @member {array} [addressSpace.addressPrefixes] Gets or sets List of address
 * blocks reserved for this virtual network in CIDR notation
 * 
 * @member {object} [dhcpOptions] Gets or sets DHCPOptions that contains an
 * array of DNS servers available to VMs deployed in the virtual network
 * 
 * @member {array} [dhcpOptions.dnsServers] Gets or sets list of DNS servers
 * IP addresses
 * 
 * @member {array} [subnets] Gets or sets List of subnets in a VirtualNetwork
 * 
 * @member {string} [resourceGuid] Gets or sets resource guid property of the
 * VirtualNetwork resource
 * 
 * @member {string} [provisioningState] Gets or sets Provisioning state of the
 * PublicIP resource Updating/Deleting/Failed
 * 
 * @member {string} [etag] Gets a unique read-only string that changes
 * whenever the resource is updated
 * 
 */
export interface VirtualNetwork extends Resource {
    addressSpace?: AddressSpace;
    dhcpOptions?: DhcpOptions;
    subnets?: Subnet[];
    resourceGuid?: string;
    provisioningState?: string;
    etag?: string;
}

/**
 * @class
 * Initializes a new instance of the DnsNameAvailabilityResult class.
 * @constructor
 * Response for CheckDnsNameAvailability Api servive call
 * @member {boolean} [available] Domain availability (True/False)
 * 
 */
export interface DnsNameAvailabilityResult {
    available?: boolean;
}

/**
 * @class
 * Initializes a new instance of the ErrorDetails class.
 * @constructor
 * @member {string} [code]
 * 
 * @member {string} [target]
 * 
 * @member {string} [message]
 * 
 */
export interface ErrorDetails {
    code?: string;
    target?: string;
    message?: string;
}

/**
 * @class
 * Initializes a new instance of the ErrorModel class.
 * @constructor
 * @member {string} [code]
 * 
 * @member {string} [message]
 * 
 * @member {string} [target]
 * 
 * @member {array} [details]
 * 
 * @member {string} [innerError]
 * 
 */
export interface ErrorModel {
    code?: string;
    message?: string;
    target?: string;
    details?: ErrorDetails[];
    innerError?: string;
}

/**
 * @class
 * Initializes a new instance of the AzureAsyncOperationResult class.
 * @constructor
 * The response body contains the status of the specified asynchronous
 * operation, indicating whether it has succeeded, is inprogress, or has
 * failed. Note that this status is distinct from the HTTP status code
 * returned for the Get Operation Status operation itself. If the
 * asynchronous operation succeeded, the response body includes the HTTP
 * status code for the successful request. If the asynchronous operation
 * failed, the response body includes the HTTP status code for the failed
 * request and error information regarding the failure.
 * @member {string} [status] Status of the AzureAsuncOperation. Possible
 * values include: 'InProgress', 'Succeeded', 'Failed'
 * 
 * @member {object} [error]
 * 
 * @member {string} [error.code]
 * 
 * @member {string} [error.message]
 * 
 * @member {string} [error.target]
 * 
 * @member {array} [error.details]
 * 
 * @member {string} [error.innerError]
 * 
 */
export interface AzureAsyncOperationResult {
    status?: string;
    error?: ErrorModel;
}
